OSDN Git Service

2012-01-30 Richard Guenther <rguenther@suse.de>
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / dfp / pragma-float-const-decimal64-8.c
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
17 double a;
18
19 #pragma STDC FLOAT_CONST_DECIMAL64 OFF
20
21 struct S1 {
22 #pragma STDC FLOAT_CONST_DECIMAL64 ON   /* { dg-warning "invalid location" } */
23   int i;
24   int j;
25 };
26
27 struct S2 {
28   int i;
29 #pragma STDC FLOAT_CONST_DECIMAL64 ON   /* { dg-warning "invalid location" } */
30   int j;
31 };
32
33 struct S3 {
34   int i;
35   int j;
36 #pragma STDC FLOAT_CONST_DECIMAL64 ON   /* { dg-warning "invalid location" } */
37 };
38
39 enum E1 {
40 #pragma STDC FLOAT_CONST_DECIMAL64 ON   /* { dg-error "#pragma" } */
41   one,
42   two
43 };
44
45 enum E2 {
46   red,
47 #pragma STDC FLOAT_CONST_DECIMAL64 ON   /* { dg-error "#pragma" } */
48   blue
49 };
50
51 enum E3 {
52   cat,
53   dog
54 #pragma STDC FLOAT_CONST_DECIMAL64 ON   /* { dg-error "#pragma" } */
55 };
56
57 double
58 #pragma STDC FLOAT_CONST_DECIMAL64 OFF  /* { dg-error "#pragma" } */
59 b;
60
61 double
62 f1 (void)
63 {
64 #pragma STDC FLOAT_CONST_DECIMAL64 ON
65   return a;
66 }
67
68 double
69 f2 (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
79 double
80 f3 (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
88 double
89 f4 (int i)
90 {
91 top:
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
100 double
101 f5 (int i)
102 {
103   a = a * i;
104 #pragma STDC FLOAT_CONST_DECIMAL64 OFF  /* { dg-warning "invalid location" } */
105   return a * 2.;
106 }
107
108 double
109 #pragma STDC FLOAT_CONST_DECIMAL64 ON   /* { dg-error "#pragma" } */
110 f6 (void)
111 {
112   return a;
113 }
114
115 double
116 f7
117 #pragma STDC FLOAT_CONST_DECIMAL64 ON   /* { dg-error "#pragma" } */
118 (void)                                  /* { dg-error "before" } */
119 {
120   return a;
121 }
122
123 double
124 f8 (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
133 extern void foo9 (void *);
134
135 double
136 f9 (void)
137 {
138   __label__ here;
139 #pragma STDC FLOAT_CONST_DECIMAL64 ON   /* { dg-warning "invalid location" } */
140   foo9 (&&here);
141 here:
142   return a;
143 }
144
145 double
146 f10 (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
156 double
157 f11 (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
168 double
169 f12 (void)
170 {
171   __extension__ ({ a = 0.5; });
172 #pragma STDC FLOAT_CONST_DECIMAL64 ON   /* { dg-warning "invalid location" } */
173   return a;
174 }