1/* { dg-do compile } */ 2/* { dg-options "-Wall" } */ 3 4/* N1312 7.1.1: The FLOAT_CONST_DECIMAL64 pragma. 5 C99 6.4.4.2a (New). 6 7 Pragma STDC FLOAT_CONST_DECIMAL64 "shall occur either outside external 8 declarations or preceding all explicit declarations and statements 9 inside a compound statement." */ 10 11#pragma STDC FLOAT_CONST_DECIMAL64 OFF 12 13#define MAX 200 14 15#pragma STDC FLOAT_CONST_DECIMAL64 ON 16 17double a; 18 19#pragma STDC FLOAT_CONST_DECIMAL64 OFF 20 21struct S1 { 22#pragma STDC FLOAT_CONST_DECIMAL64 ON /* { dg-warning "invalid location" } */ 23 int i; 24 int j; 25}; 26 27struct S2 { 28 int i; 29#pragma STDC FLOAT_CONST_DECIMAL64 ON /* { dg-warning "invalid location" } */ 30 int j; 31}; 32 33struct S3 { 34 int i; 35 int j; 36#pragma STDC FLOAT_CONST_DECIMAL64 ON /* { dg-warning "invalid location" } */ 37}; 38 39enum E1 { 40#pragma STDC FLOAT_CONST_DECIMAL64 ON /* { dg-error "#pragma" } */ 41 one, 42 two 43}; 44 45enum E2 { 46 red, 47#pragma STDC FLOAT_CONST_DECIMAL64 ON /* { dg-error "#pragma" } */ 48 blue 49}; 50 51enum E3 { 52 cat, 53 dog 54#pragma STDC FLOAT_CONST_DECIMAL64 ON /* { dg-error "#pragma" } */ 55}; 56 57double 58#pragma STDC FLOAT_CONST_DECIMAL64 OFF /* { dg-error "#pragma" } */ 59b; 60 61double 62f1 (void) 63{ 64#pragma STDC FLOAT_CONST_DECIMAL64 ON 65 return a; 66} 67 68double 69f2 (void) 70{ 71 double b; 72#pragma STDC FLOAT_CONST_DECIMAL64 ON /* { dg-warning "invalid location" } */ 73 b = 0.5; 74 return a + b; 75} 76 77#pragma STDC FLOAT_CONST_DECIMAL64 OFF 78 79double 80f3 (void) 81{ 82 typedef double b32; 83#pragma STDC FLOAT_CONST_DECIMAL64 ON /* { dg-warning "invalid location" } */ 84 b32 b = 0.5; 85 return b; 86} 87 88double 89f4 (int i) 90{ 91top: 92#pragma STDC FLOAT_CONST_DECIMAL64 OFF /* { dg-warning "invalid location" } */ 93 if (i == 0) 94 return a; 95 a *= 2.; 96 i = 0; 97 goto top; 98} 99 100double 101f5 (int i) 102{ 103 a = a * i; 104#pragma STDC FLOAT_CONST_DECIMAL64 OFF /* { dg-warning "invalid location" } */ 105 return a * 2.; 106} 107 108double 109#pragma STDC FLOAT_CONST_DECIMAL64 ON /* { dg-error "#pragma" } */ 110f6 (void) 111{ 112 return a; 113} 114 115double 116f7 117#pragma STDC FLOAT_CONST_DECIMAL64 ON /* { dg-error "#pragma" } */ 118(void) /* { dg-error "before" } */ 119{ 120 return a; 121} 122 123double 124f8 (void) 125{ 126 { 127#pragma STDC FLOAT_CONST_DECIMAL64 OFF 128 } 129#pragma STDC FLOAT_CONST_DECIMAL64 ON /* { dg-warning "invalid location" } */ 130 return a; 131} 132 133extern void foo9 (void *); 134 135double 136f9 (void) 137{ 138 __label__ here; 139#pragma STDC FLOAT_CONST_DECIMAL64 ON /* { dg-warning "invalid location" } */ 140 foo9 (&&here); 141here: 142 return a; 143} 144 145double 146f10 (void) 147{ 148 void foo10 (void) 149 { 150 a = 1.0; 151 } 152#pragma STDC FLOAT_CONST_DECIMAL64 ON /* { dg-warning "invalid location" } */ 153 return a; 154} 155 156double 157f11 (void) 158{ 159 __extension__ 160 struct A { 161 struct { char a; }; 162 char b; 163 }; 164#pragma STDC FLOAT_CONST_DECIMAL64 ON /* { dg-warning "invalid location" } */ 165 return a; 166} 167 168double 169f12 (void) 170{ 171 __extension__ ({ a = 0.5; }); 172#pragma STDC FLOAT_CONST_DECIMAL64 ON /* { dg-warning "invalid location" } */ 173 return a; 174} 175