annotate gcc/testsuite/g++.dg/plugin/diagnostic-test-expressions-1.C @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* { dg-do compile } */
kono
parents:
diff changeset
2 /* { dg-options "-O -fdiagnostics-show-caret -fpermissive" } */
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 /* This is a collection of unittests to verify that we're correctly
kono
parents:
diff changeset
5 capturing the source code ranges of various kinds of expression.
kono
parents:
diff changeset
6
kono
parents:
diff changeset
7 It uses the various "diagnostic_test_*_expression_range_plugin"
kono
parents:
diff changeset
8 plugins which handles "__emit_expression_range" by generating a warning
kono
parents:
diff changeset
9 at the given source range of the input argument. Each of the
kono
parents:
diff changeset
10 different plugins do this at a different phase of the internal
kono
parents:
diff changeset
11 representation (tree, gimple, etc), so we can verify that the
kono
parents:
diff changeset
12 source code range information is valid at each phase.
kono
parents:
diff changeset
13
kono
parents:
diff changeset
14 We want to accept an expression of any type. We use variadic arguments.
kono
parents:
diff changeset
15 For compatibility with the C tests we have a dummy argument, since
kono
parents:
diff changeset
16 C requires at least one argument before the ellipsis. */
kono
parents:
diff changeset
17
kono
parents:
diff changeset
18 extern void __emit_expression_range (int dummy, ...);
kono
parents:
diff changeset
19
kono
parents:
diff changeset
20 int global;
kono
parents:
diff changeset
21
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
22 void test_global (void)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
23 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
24 __emit_expression_range (0, global); /* { dg-warning "range" } */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
25 /* { dg-begin-multiline-output "" }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
26 __emit_expression_range (0, global);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
27 ^~~~~~
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
28 { dg-end-multiline-output "" } */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
29 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
30
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
31 void test_param (int param)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
32 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
33 __emit_expression_range (0, param); /* { dg-warning "range" } */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
34 /* { dg-begin-multiline-output "" }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
35 __emit_expression_range (0, param);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
36 ^~~~~
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
37 { dg-end-multiline-output "" } */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
38 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
39
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
40 void test_local (void)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
41 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
42 int local = 5;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
43
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
44 __emit_expression_range (0, local); /* { dg-warning "range" } */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
45 /* { dg-begin-multiline-output "" }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
46 __emit_expression_range (0, local);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
47 ^~~~~
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
48 { dg-end-multiline-output "" } */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
49 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
50
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
51 void test_integer_constants (void)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
52 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
53 __emit_expression_range (0, 1234); /* { dg-warning "range" } */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
54 /* { dg-begin-multiline-output "" }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
55 __emit_expression_range (0, 1234);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
56 ^~~~
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
57 { dg-end-multiline-output "" } */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
58
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
59 /* Ensure that zero works. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
60
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
61 __emit_expression_range (0, 0); /* { dg-warning "range" } */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
62 /* { dg-begin-multiline-output "" }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
63 __emit_expression_range (0, 0);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
64 ^
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
65 { dg-end-multiline-output "" } */
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
66
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
67 __emit_expression_range (0, -273); /* { dg-warning "range" } */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
68 /* { dg-begin-multiline-output "" }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
69 __emit_expression_range (0, -273);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
70 ^~~~
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
71 { dg-end-multiline-output "" } */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
72
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
73 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
74
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
75 void test_character_constants (void)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
76 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
77 __emit_expression_range (0, 'a'); /* { dg-warning "range" } */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
78 /* { dg-begin-multiline-output "" }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
79 __emit_expression_range (0, 'a');
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
80 ^~~
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
81 { dg-end-multiline-output "" } */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
82 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
83
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
84 void test_floating_constants (void)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
85 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
86 __emit_expression_range (0, 98.6); /* { dg-warning "range" } */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
87 /* { dg-begin-multiline-output "" }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
88 __emit_expression_range (0, 98.6);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
89 ^~~~
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
90 { dg-end-multiline-output "" } */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
91
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
92 __emit_expression_range (0, .6); /* { dg-warning "range" } */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
93 /* { dg-begin-multiline-output "" }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
94 __emit_expression_range (0, .6);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
95 ^~
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
96 { dg-end-multiline-output "" } */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
97
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
98 __emit_expression_range (0, 98.); /* { dg-warning "range" } */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
99 /* { dg-begin-multiline-output "" }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
100 __emit_expression_range (0, 98.);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
101 ^~~
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
102 { dg-end-multiline-output "" } */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
103
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
104 __emit_expression_range (0, 6.022140857e23 ); /* { dg-warning "range" } */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
105 /* { dg-begin-multiline-output "" }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
106 __emit_expression_range (0, 6.022140857e23 );
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
107 ^~~~~~~~~~~~~~
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
108 { dg-end-multiline-output "" } */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
109
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
110 __emit_expression_range (0, 98.6f ); /* { dg-warning "range" } */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
111 /* { dg-begin-multiline-output "" }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
112 __emit_expression_range (0, 98.6f );
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
113 ^~~~~
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
114 { dg-end-multiline-output "" } */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
115
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
116 __emit_expression_range (0, 6.022140857e23l ); /* { dg-warning "range" } */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
117 /* { dg-begin-multiline-output "" }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
118 __emit_expression_range (0, 6.022140857e23l );
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
119 ^~~~~~~~~~~~~~~
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
120 { dg-end-multiline-output "" } */
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
121
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
122 __emit_expression_range (0, -273.15f); /* { dg-warning "range" } */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
123 /* { dg-begin-multiline-output "" }
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
124 __emit_expression_range (0, -273.15f);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
125 ^~~~~~~~
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
126 { dg-end-multiline-output "" } */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
127
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
128 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
129
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
130 enum test_enum {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
131 TEST_ENUM_VALUE
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
132 };
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
133
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
134 void test_enumeration_constant (void)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
135 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
136 __emit_expression_range (0, TEST_ENUM_VALUE ); /* { dg-warning "range" } */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
137 /* { dg-begin-multiline-output "" }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
138 __emit_expression_range (0, TEST_ENUM_VALUE );
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
139 ^~~~~~~~~~~~~~~
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
140 { dg-end-multiline-output "" } */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
141 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
142
111
kono
parents:
diff changeset
143 void test_parentheses (int a, int b)
kono
parents:
diff changeset
144 {
kono
parents:
diff changeset
145 __emit_expression_range (0, (a + b) ); /* { dg-warning "range" } */
kono
parents:
diff changeset
146 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
147 __emit_expression_range (0, (a + b) );
kono
parents:
diff changeset
148 ~~~^~~~
kono
parents:
diff changeset
149 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
150
kono
parents:
diff changeset
151 __emit_expression_range (0, (a + b) * (a - b) ); /* { dg-warning "range" } */
kono
parents:
diff changeset
152 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
153 __emit_expression_range (0, (a + b) * (a - b) );
kono
parents:
diff changeset
154 ~~~~~~~~^~~~~~~~~
kono
parents:
diff changeset
155 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
156
kono
parents:
diff changeset
157 __emit_expression_range (0, !(a && b) ); /* { dg-warning "range" } */
kono
parents:
diff changeset
158 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
159 __emit_expression_range (0, !(a && b) );
kono
parents:
diff changeset
160 ^~~~~~~~~
kono
parents:
diff changeset
161 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
162 }
kono
parents:
diff changeset
163
kono
parents:
diff changeset
164 /* Postfix expressions. ************************************************/
kono
parents:
diff changeset
165
kono
parents:
diff changeset
166 void test_array_reference (int *arr)
kono
parents:
diff changeset
167 {
kono
parents:
diff changeset
168 __emit_expression_range (0, arr[100] ); /* { dg-warning "range" } */
kono
parents:
diff changeset
169 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
170 __emit_expression_range (0, arr[100] );
kono
parents:
diff changeset
171 ~~~~~~~^
kono
parents:
diff changeset
172 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
173 }
kono
parents:
diff changeset
174
kono
parents:
diff changeset
175 int test_function_call (int p, int q, int r)
kono
parents:
diff changeset
176 {
kono
parents:
diff changeset
177 __emit_expression_range (0, test_function_call (p, q, r) ); /* { dg-warning "range" } */
kono
parents:
diff changeset
178 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
179 __emit_expression_range (0, test_function_call (p, q, r) );
kono
parents:
diff changeset
180 ~~~~~~~~~~~~~~~~~~~^~~~~~~~~
kono
parents:
diff changeset
181 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
182 return 0;
kono
parents:
diff changeset
183 }
kono
parents:
diff changeset
184
kono
parents:
diff changeset
185 struct test_struct
kono
parents:
diff changeset
186 {
kono
parents:
diff changeset
187 int field;
kono
parents:
diff changeset
188 };
kono
parents:
diff changeset
189
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
190 void test_structure_references (struct test_struct *ptr)
111
kono
parents:
diff changeset
191 {
kono
parents:
diff changeset
192 struct test_struct local;
kono
parents:
diff changeset
193 local.field = 42;
kono
parents:
diff changeset
194
kono
parents:
diff changeset
195 __emit_expression_range (0, local.field ); /* { dg-warning "range" } */
kono
parents:
diff changeset
196 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
197 __emit_expression_range (0, local.field );
kono
parents:
diff changeset
198 ~~~~~~^~~~~
kono
parents:
diff changeset
199 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
200
kono
parents:
diff changeset
201 __emit_expression_range (0, ptr->field ); /* { dg-warning "range" } */
kono
parents:
diff changeset
202 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
203 __emit_expression_range (0, ptr->field );
kono
parents:
diff changeset
204 ~~~~~^~~~~
kono
parents:
diff changeset
205 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
206 }
kono
parents:
diff changeset
207
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
208 void test_postfix_incdec (int i)
111
kono
parents:
diff changeset
209 {
kono
parents:
diff changeset
210 __emit_expression_range (0, i++ ); /* { dg-warning "range" } */
kono
parents:
diff changeset
211 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
212 __emit_expression_range (0, i++ );
kono
parents:
diff changeset
213 ~^~
kono
parents:
diff changeset
214 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
215
kono
parents:
diff changeset
216 __emit_expression_range (0, i-- ); /* { dg-warning "range" } */
kono
parents:
diff changeset
217 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
218 __emit_expression_range (0, i-- );
kono
parents:
diff changeset
219 ~^~
kono
parents:
diff changeset
220 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
221 }
kono
parents:
diff changeset
222
kono
parents:
diff changeset
223 /* Unary operators. ****************************************************/
kono
parents:
diff changeset
224
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
225 void test_sizeof (int i)
111
kono
parents:
diff changeset
226 {
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
227 __emit_expression_range (0, sizeof i ); /* { dg-warning "range" } */
111
kono
parents:
diff changeset
228 /* { dg-begin-multiline-output "" }
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
229 __emit_expression_range (0, sizeof i );
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
230 ^~~~~~~~
111
kono
parents:
diff changeset
231 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
232
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
233 __emit_expression_range (0, sizeof (char) ); /* { dg-warning "range" } */
111
kono
parents:
diff changeset
234 /* { dg-begin-multiline-output "" }
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
235 __emit_expression_range (0, sizeof (char) );
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
236 ^~~~~~~~~~~~~
111
kono
parents:
diff changeset
237 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
238 }
kono
parents:
diff changeset
239
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
240 void test_alignof (int i)
111
kono
parents:
diff changeset
241 {
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
242 __emit_expression_range (0, alignof(int)); /* { dg-warning "range" } */
111
kono
parents:
diff changeset
243 /* { dg-begin-multiline-output "" }
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
244 __emit_expression_range (0, alignof(int));
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
245 ^~~~~~~~~~~~
111
kono
parents:
diff changeset
246 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
247
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
248 __emit_expression_range (0, __alignof__(int)); /* { dg-warning "range" } */
111
kono
parents:
diff changeset
249 /* { dg-begin-multiline-output "" }
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
250 __emit_expression_range (0, __alignof__(int));
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
251 ^~~~~~~~~~~~~~~~
111
kono
parents:
diff changeset
252 { dg-end-multiline-output "" } */
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
253 __emit_expression_range (0, __alignof__ i); /* { dg-warning "range" } */
111
kono
parents:
diff changeset
254 /* { dg-begin-multiline-output "" }
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
255 __emit_expression_range (0, __alignof__ i);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
256 ^~~~~~~~~~~~~
111
kono
parents:
diff changeset
257 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
258 }
kono
parents:
diff changeset
259
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
260 void test_prefix_incdec (int i)
111
kono
parents:
diff changeset
261 {
kono
parents:
diff changeset
262 __emit_expression_range (0, ++i ); /* { dg-warning "range" } */
kono
parents:
diff changeset
263 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
264 __emit_expression_range (0, ++i );
kono
parents:
diff changeset
265 ^~~
kono
parents:
diff changeset
266 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
267
kono
parents:
diff changeset
268 __emit_expression_range (0, --i ); /* { dg-warning "range" } */
kono
parents:
diff changeset
269 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
270 __emit_expression_range (0, --i );
kono
parents:
diff changeset
271 ^~~
kono
parents:
diff changeset
272 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
273 }
kono
parents:
diff changeset
274
kono
parents:
diff changeset
275 void test_address_operator (void)
kono
parents:
diff changeset
276 {
kono
parents:
diff changeset
277 __emit_expression_range (0, &global ); /* { dg-warning "range" } */
kono
parents:
diff changeset
278 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
279 __emit_expression_range (0, &global );
kono
parents:
diff changeset
280 ^~~~~~~
kono
parents:
diff changeset
281 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
282 }
kono
parents:
diff changeset
283
kono
parents:
diff changeset
284 void test_indirection (int *ptr)
kono
parents:
diff changeset
285 {
kono
parents:
diff changeset
286 __emit_expression_range (0, *ptr ); /* { dg-warning "range" } */
kono
parents:
diff changeset
287 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
288 __emit_expression_range (0, *ptr );
kono
parents:
diff changeset
289 ^~~~
kono
parents:
diff changeset
290 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
291 }
kono
parents:
diff changeset
292
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
293 void test_unary_plus (int i)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
294 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
295 __emit_expression_range (0, +i ); /* { dg-warning "range" } */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
296 /* { dg-begin-multiline-output "" }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
297 __emit_expression_range (0, +i );
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
298 ^~
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
299 { dg-end-multiline-output "" } */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
300 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
301
111
kono
parents:
diff changeset
302 void test_unary_minus (int i)
kono
parents:
diff changeset
303 {
kono
parents:
diff changeset
304 __emit_expression_range (0, -i ); /* { dg-warning "range" } */
kono
parents:
diff changeset
305 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
306 __emit_expression_range (0, -i );
kono
parents:
diff changeset
307 ^~
kono
parents:
diff changeset
308 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
309 }
kono
parents:
diff changeset
310
kono
parents:
diff changeset
311 void test_ones_complement (int i)
kono
parents:
diff changeset
312 {
kono
parents:
diff changeset
313 __emit_expression_range (0, ~i ); /* { dg-warning "range" } */
kono
parents:
diff changeset
314 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
315 __emit_expression_range (0, ~i );
kono
parents:
diff changeset
316 ^~
kono
parents:
diff changeset
317 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
318 }
kono
parents:
diff changeset
319
kono
parents:
diff changeset
320 void test_logical_negation (int flag)
kono
parents:
diff changeset
321 {
kono
parents:
diff changeset
322 __emit_expression_range (0, !flag ); /* { dg-warning "range" } */
kono
parents:
diff changeset
323 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
324 __emit_expression_range (0, !flag );
kono
parents:
diff changeset
325 ^~~~~
kono
parents:
diff changeset
326 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
327 }
kono
parents:
diff changeset
328
kono
parents:
diff changeset
329 /* Casts. ****************************************************/
kono
parents:
diff changeset
330
kono
parents:
diff changeset
331 void test_cast (void *ptr)
kono
parents:
diff changeset
332 {
kono
parents:
diff changeset
333 __emit_expression_range (0, (int *)ptr ); /* { dg-warning "range" } */
kono
parents:
diff changeset
334 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
335 __emit_expression_range (0, (int *)ptr );
kono
parents:
diff changeset
336 ^~~~~~~~~~
kono
parents:
diff changeset
337 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
338
kono
parents:
diff changeset
339 __emit_expression_range (0, *(int *)0xdeadbeef ); /* { dg-warning "range" } */
kono
parents:
diff changeset
340 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
341 __emit_expression_range (0, *(int *)0xdeadbeef );
kono
parents:
diff changeset
342 ^~~~~~~~~~~~~~~~~~
kono
parents:
diff changeset
343 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
344
kono
parents:
diff changeset
345 }
kono
parents:
diff changeset
346
kono
parents:
diff changeset
347 /* Binary operators. *******************************************/
kono
parents:
diff changeset
348
kono
parents:
diff changeset
349 void test_multiplicative_operators (int lhs, int rhs)
kono
parents:
diff changeset
350 {
kono
parents:
diff changeset
351 __emit_expression_range (0, lhs * rhs ); /* { dg-warning "range" } */
kono
parents:
diff changeset
352 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
353 __emit_expression_range (0, lhs * rhs );
kono
parents:
diff changeset
354 ~~~~^~~~~
kono
parents:
diff changeset
355 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
356
kono
parents:
diff changeset
357 __emit_expression_range (0, lhs / rhs ); /* { dg-warning "range" } */
kono
parents:
diff changeset
358 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
359 __emit_expression_range (0, lhs / rhs );
kono
parents:
diff changeset
360 ~~~~^~~~~
kono
parents:
diff changeset
361 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
362
kono
parents:
diff changeset
363 __emit_expression_range (0, lhs % rhs ); /* { dg-warning "range" } */
kono
parents:
diff changeset
364 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
365 __emit_expression_range (0, lhs % rhs );
kono
parents:
diff changeset
366 ~~~~^~~~~
kono
parents:
diff changeset
367 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
368 }
kono
parents:
diff changeset
369
kono
parents:
diff changeset
370 void test_additive_operators (int lhs, int rhs)
kono
parents:
diff changeset
371 {
kono
parents:
diff changeset
372 __emit_expression_range (0, lhs + rhs ); /* { dg-warning "range" } */
kono
parents:
diff changeset
373 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
374 __emit_expression_range (0, lhs + rhs );
kono
parents:
diff changeset
375 ~~~~^~~~~
kono
parents:
diff changeset
376 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
377
kono
parents:
diff changeset
378 __emit_expression_range (0, lhs - rhs ); /* { dg-warning "range" } */
kono
parents:
diff changeset
379 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
380 __emit_expression_range (0, lhs - rhs );
kono
parents:
diff changeset
381 ~~~~^~~~~
kono
parents:
diff changeset
382 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
383 }
kono
parents:
diff changeset
384
kono
parents:
diff changeset
385 void test_shift_operators (int lhs, int rhs)
kono
parents:
diff changeset
386 {
kono
parents:
diff changeset
387 __emit_expression_range (0, lhs << rhs ); /* { dg-warning "range" } */
kono
parents:
diff changeset
388 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
389 __emit_expression_range (0, lhs << rhs );
kono
parents:
diff changeset
390 ~~~~^~~~~~
kono
parents:
diff changeset
391 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
392
kono
parents:
diff changeset
393 __emit_expression_range (0, lhs >> rhs ); /* { dg-warning "range" } */
kono
parents:
diff changeset
394 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
395 __emit_expression_range (0, lhs >> rhs );
kono
parents:
diff changeset
396 ~~~~^~~~~~
kono
parents:
diff changeset
397 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
398 }
kono
parents:
diff changeset
399
kono
parents:
diff changeset
400 void test_relational_operators (int lhs, int rhs)
kono
parents:
diff changeset
401 {
kono
parents:
diff changeset
402 __emit_expression_range (0, lhs < rhs ); /* { dg-warning "range" } */
kono
parents:
diff changeset
403 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
404 __emit_expression_range (0, lhs < rhs );
kono
parents:
diff changeset
405 ~~~~^~~~~
kono
parents:
diff changeset
406 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
407
kono
parents:
diff changeset
408 __emit_expression_range (0, lhs > rhs ); /* { dg-warning "range" } */
kono
parents:
diff changeset
409 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
410 __emit_expression_range (0, lhs > rhs );
kono
parents:
diff changeset
411 ~~~~^~~~~
kono
parents:
diff changeset
412 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
413
kono
parents:
diff changeset
414 __emit_expression_range (0, lhs <= rhs ); /* { dg-warning "range" } */
kono
parents:
diff changeset
415 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
416 __emit_expression_range (0, lhs <= rhs );
kono
parents:
diff changeset
417 ~~~~^~~~~~
kono
parents:
diff changeset
418 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
419
kono
parents:
diff changeset
420 __emit_expression_range (0, lhs >= rhs ); /* { dg-warning "range" } */
kono
parents:
diff changeset
421 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
422 __emit_expression_range (0, lhs >= rhs );
kono
parents:
diff changeset
423 ~~~~^~~~~~
kono
parents:
diff changeset
424 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
425 }
kono
parents:
diff changeset
426
kono
parents:
diff changeset
427 void test_equality_operators (int lhs, int rhs)
kono
parents:
diff changeset
428 {
kono
parents:
diff changeset
429 __emit_expression_range (0, lhs == rhs ); /* { dg-warning "range" } */
kono
parents:
diff changeset
430 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
431 __emit_expression_range (0, lhs == rhs );
kono
parents:
diff changeset
432 ~~~~^~~~~~
kono
parents:
diff changeset
433 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
434
kono
parents:
diff changeset
435 __emit_expression_range (0, lhs != rhs ); /* { dg-warning "range" } */
kono
parents:
diff changeset
436 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
437 __emit_expression_range (0, lhs != rhs );
kono
parents:
diff changeset
438 ~~~~^~~~~~
kono
parents:
diff changeset
439 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
440 }
kono
parents:
diff changeset
441
kono
parents:
diff changeset
442 void test_bitwise_binary_operators (int lhs, int rhs)
kono
parents:
diff changeset
443 {
kono
parents:
diff changeset
444 __emit_expression_range (0, lhs & rhs ); /* { dg-warning "range" } */
kono
parents:
diff changeset
445 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
446 __emit_expression_range (0, lhs & rhs );
kono
parents:
diff changeset
447 ~~~~^~~~~
kono
parents:
diff changeset
448 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
449
kono
parents:
diff changeset
450 __emit_expression_range (0, lhs ^ rhs ); /* { dg-warning "range" } */
kono
parents:
diff changeset
451 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
452 __emit_expression_range (0, lhs ^ rhs );
kono
parents:
diff changeset
453 ~~~~^~~~~
kono
parents:
diff changeset
454 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
455
kono
parents:
diff changeset
456 __emit_expression_range (0, lhs | rhs ); /* { dg-warning "range" } */
kono
parents:
diff changeset
457 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
458 __emit_expression_range (0, lhs | rhs );
kono
parents:
diff changeset
459 ~~~~^~~~~
kono
parents:
diff changeset
460 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
461 }
kono
parents:
diff changeset
462
kono
parents:
diff changeset
463 void test_logical_operators (int lhs, int rhs)
kono
parents:
diff changeset
464 {
kono
parents:
diff changeset
465 __emit_expression_range (0, lhs && rhs ); /* { dg-warning "range" } */
kono
parents:
diff changeset
466 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
467 __emit_expression_range (0, lhs && rhs );
kono
parents:
diff changeset
468 ~~~~^~~~~~
kono
parents:
diff changeset
469 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
470
kono
parents:
diff changeset
471 __emit_expression_range (0, lhs || rhs ); /* { dg-warning "range" } */
kono
parents:
diff changeset
472 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
473 __emit_expression_range (0, lhs || rhs );
kono
parents:
diff changeset
474 ~~~~^~~~~~
kono
parents:
diff changeset
475 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
476 }
kono
parents:
diff changeset
477
kono
parents:
diff changeset
478 /* Conditional operator. *******************************************/
kono
parents:
diff changeset
479
kono
parents:
diff changeset
480 void test_conditional_operators (int flag, int on_true, int on_false)
kono
parents:
diff changeset
481 {
kono
parents:
diff changeset
482 __emit_expression_range (0, flag ? on_true : on_false ); /* { dg-warning "range" } */
kono
parents:
diff changeset
483 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
484 __emit_expression_range (0, flag ? on_true : on_false );
kono
parents:
diff changeset
485 ~~~~~^~~~~~~~~~~~~~~~~~~~
kono
parents:
diff changeset
486 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
487 }
kono
parents:
diff changeset
488
kono
parents:
diff changeset
489 /* Assignment expressions. *******************************************/
kono
parents:
diff changeset
490
kono
parents:
diff changeset
491 void test_assignment_expressions (int dest, int other)
kono
parents:
diff changeset
492 {
kono
parents:
diff changeset
493 __emit_expression_range (0, dest = other ); /* { dg-warning "range" } */
kono
parents:
diff changeset
494 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
495 __emit_expression_range (0, dest = other );
kono
parents:
diff changeset
496 ~~~~~^~~~~~~
kono
parents:
diff changeset
497 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
498
kono
parents:
diff changeset
499 __emit_expression_range (0, dest *= other ); /* { dg-warning "range" } */
kono
parents:
diff changeset
500 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
501 __emit_expression_range (0, dest *= other );
kono
parents:
diff changeset
502 ~~~~~^~~~~~~~
kono
parents:
diff changeset
503 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
504
kono
parents:
diff changeset
505 __emit_expression_range (0, dest /= other ); /* { dg-warning "range" } */
kono
parents:
diff changeset
506 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
507 __emit_expression_range (0, dest /= other );
kono
parents:
diff changeset
508 ~~~~~^~~~~~~~
kono
parents:
diff changeset
509 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
510
kono
parents:
diff changeset
511 __emit_expression_range (0, dest %= other ); /* { dg-warning "range" } */
kono
parents:
diff changeset
512 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
513 __emit_expression_range (0, dest %= other );
kono
parents:
diff changeset
514 ~~~~~^~~~~~~~
kono
parents:
diff changeset
515 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
516
kono
parents:
diff changeset
517 __emit_expression_range (0, dest += other ); /* { dg-warning "range" } */
kono
parents:
diff changeset
518 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
519 __emit_expression_range (0, dest += other );
kono
parents:
diff changeset
520 ~~~~~^~~~~~~~
kono
parents:
diff changeset
521 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
522
kono
parents:
diff changeset
523 __emit_expression_range (0, dest -= other ); /* { dg-warning "range" } */
kono
parents:
diff changeset
524 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
525 __emit_expression_range (0, dest -= other );
kono
parents:
diff changeset
526 ~~~~~^~~~~~~~
kono
parents:
diff changeset
527 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
528
kono
parents:
diff changeset
529 __emit_expression_range (0, dest <<= other ); /* { dg-warning "range" } */
kono
parents:
diff changeset
530 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
531 __emit_expression_range (0, dest <<= other );
kono
parents:
diff changeset
532 ~~~~~^~~~~~~~~
kono
parents:
diff changeset
533 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
534
kono
parents:
diff changeset
535 __emit_expression_range (0, dest >>= other ); /* { dg-warning "range" } */
kono
parents:
diff changeset
536 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
537 __emit_expression_range (0, dest >>= other );
kono
parents:
diff changeset
538 ~~~~~^~~~~~~~~
kono
parents:
diff changeset
539 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
540
kono
parents:
diff changeset
541 __emit_expression_range (0, dest &= other ); /* { dg-warning "range" } */
kono
parents:
diff changeset
542 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
543 __emit_expression_range (0, dest &= other );
kono
parents:
diff changeset
544 ~~~~~^~~~~~~~
kono
parents:
diff changeset
545 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
546
kono
parents:
diff changeset
547 __emit_expression_range (0, dest ^= other ); /* { dg-warning "range" } */
kono
parents:
diff changeset
548 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
549 __emit_expression_range (0, dest ^= other );
kono
parents:
diff changeset
550 ~~~~~^~~~~~~~
kono
parents:
diff changeset
551 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
552
kono
parents:
diff changeset
553 __emit_expression_range (0, dest |= other ); /* { dg-warning "range" } */
kono
parents:
diff changeset
554 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
555 __emit_expression_range (0, dest |= other );
kono
parents:
diff changeset
556 ~~~~~^~~~~~~~
kono
parents:
diff changeset
557 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
558 }
kono
parents:
diff changeset
559
kono
parents:
diff changeset
560 /* Comma operator. *******************************************/
kono
parents:
diff changeset
561
kono
parents:
diff changeset
562 void test_comma_operator (int a, int b)
kono
parents:
diff changeset
563 {
kono
parents:
diff changeset
564 __emit_expression_range (0, (a++, a + b) ); /* { dg-warning "range" } */
kono
parents:
diff changeset
565 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
566 __emit_expression_range (0, (a++, a + b) );
kono
parents:
diff changeset
567 ~~~~^~~~~~~~
kono
parents:
diff changeset
568 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
569 }
kono
parents:
diff changeset
570
kono
parents:
diff changeset
571 /* Literals. **************************************************/
kono
parents:
diff changeset
572
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
573 void test_string_literals ()
111
kono
parents:
diff changeset
574 {
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
575 __emit_expression_range (0, "0123456789"); /* { dg-warning "range" } */
111
kono
parents:
diff changeset
576 /* { dg-begin-multiline-output "" }
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
577 __emit_expression_range (0, "0123456789");
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
578 ^~~~~~~~~~~~
111
kono
parents:
diff changeset
579 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
580
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
581 __emit_expression_range (0, "foo" "bar" ); /* { dg-warning "range" } */
111
kono
parents:
diff changeset
582 /* { dg-begin-multiline-output "" }
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
583 __emit_expression_range (0, "foo" "bar" );
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
584 ^~~~~~~~~~~
111
kono
parents:
diff changeset
585 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
586 }
kono
parents:
diff changeset
587
kono
parents:
diff changeset
588 void test_numeric_literals (int i)
kono
parents:
diff changeset
589 {
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
590 __emit_expression_range (0, 42 ); /* { dg-warning "range" } */
111
kono
parents:
diff changeset
591 /* { dg-begin-multiline-output "" }
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
592 __emit_expression_range (0, 42 );
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
593 ^~
111
kono
parents:
diff changeset
594 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
595
kono
parents:
diff changeset
596 /* Verify locations of negative literals (via folding of
kono
parents:
diff changeset
597 unary negation). */
kono
parents:
diff changeset
598
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
599 __emit_expression_range (0, -42 ); /* { dg-warning "range" } */
111
kono
parents:
diff changeset
600 /* { dg-begin-multiline-output "" }
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
601 __emit_expression_range (0, -42 );
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
602 ^~~
111
kono
parents:
diff changeset
603 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
604
kono
parents:
diff changeset
605 __emit_expression_range (0, i ? 0 : -1 ); /* { dg-warning "range" } */
kono
parents:
diff changeset
606 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
607 __emit_expression_range (0, i ? 0 : -1 );
kono
parents:
diff changeset
608 ~~^~~~~~~~
kono
parents:
diff changeset
609 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
610 }
kono
parents:
diff changeset
611
kono
parents:
diff changeset
612 /* Braced initializers. ***************************************/
kono
parents:
diff changeset
613
kono
parents:
diff changeset
614 /* We can't test the ranges of these directly, since the underlying
kono
parents:
diff changeset
615 tree nodes don't retain a location. However, we can test that they
kono
parents:
diff changeset
616 have ranges during parsing by building compound expressions using
kono
parents:
diff changeset
617 them, and verifying the ranges of the compound expressions. */
kono
parents:
diff changeset
618
kono
parents:
diff changeset
619 #define vector(elcount, type) \
kono
parents:
diff changeset
620 __attribute__((vector_size((elcount)*sizeof(type)))) type
kono
parents:
diff changeset
621
kono
parents:
diff changeset
622 void test_braced_init (void)
kono
parents:
diff changeset
623 {
kono
parents:
diff changeset
624 /* Verify start of range. */
kono
parents:
diff changeset
625 __emit_expression_range (0, (vector(4, float)){2., 2., 2., 2.} + 1); /* { dg-warning "range" } */
kono
parents:
diff changeset
626 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
627 __emit_expression_range (0, (vector(4, float)){2., 2., 2., 2.} + 1);
kono
parents:
diff changeset
628 ~~~~~~~~~~~~~~~~~^~~
kono
parents:
diff changeset
629 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
630
kono
parents:
diff changeset
631 /* Verify end of range. */
kono
parents:
diff changeset
632 __emit_expression_range (0, 1 + (vector(4, float)){2., 2., 2., 2.}); /* { dg-warning "range" } */
kono
parents:
diff changeset
633 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
634 __emit_expression_range (0, 1 + (vector(4, float)){2., 2., 2., 2.});
kono
parents:
diff changeset
635 ~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kono
parents:
diff changeset
636 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
637 }
kono
parents:
diff changeset
638
kono
parents:
diff changeset
639 /* Statement expressions. ***************************************/
kono
parents:
diff changeset
640
kono
parents:
diff changeset
641 void test_statement_expression (void)
kono
parents:
diff changeset
642 {
kono
parents:
diff changeset
643 __emit_expression_range (0, ({ static int a; a; }) + 1); /* { dg-warning "range" } */
kono
parents:
diff changeset
644 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
645 __emit_expression_range (0, ({ static int a; a; }) + 1);
kono
parents:
diff changeset
646 ~~~~~~~~~~~~~~~~~~~~~~~^~~
kono
parents:
diff changeset
647 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
648
kono
parents:
diff changeset
649 __emit_expression_range (0, 1 + ({ static int a; a; }) ); /* { dg-warning "range" } */
kono
parents:
diff changeset
650 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
651 __emit_expression_range (0, 1 + ({ static int a; a; }) );
kono
parents:
diff changeset
652 ~~^~~~~~~~~~~~~~~~~~~~~~~~
kono
parents:
diff changeset
653 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
654 }
kono
parents:
diff changeset
655
kono
parents:
diff changeset
656 /* Other expressions. */
kono
parents:
diff changeset
657
kono
parents:
diff changeset
658 void test_address_of_label (void)
kono
parents:
diff changeset
659 {
kono
parents:
diff changeset
660 label:
kono
parents:
diff changeset
661 __emit_expression_range (0, &&label ); /* { dg-warning "range" } */
kono
parents:
diff changeset
662 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
663 __emit_expression_range (0, &&label );
kono
parents:
diff changeset
664 ^~~~~~~
kono
parents:
diff changeset
665 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
666 }
kono
parents:
diff changeset
667
kono
parents:
diff changeset
668 void test_transaction_expressions (void)
kono
parents:
diff changeset
669 {
kono
parents:
diff changeset
670 int i;
kono
parents:
diff changeset
671 i = __transaction_atomic (42); /* { dg-error "without transactional memory support enabled" } */
kono
parents:
diff changeset
672 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
673 i = __transaction_atomic (42);
kono
parents:
diff changeset
674 ^~~~~~~~~~~~~~~~~~~~
kono
parents:
diff changeset
675 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
676 i = __transaction_relaxed (42); /* { dg-error "without transactional memory support enabled" } */
kono
parents:
diff changeset
677 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
678 i = __transaction_relaxed (42);
kono
parents:
diff changeset
679 ^~~~~~~~~~~~~~~~~~~~~
kono
parents:
diff changeset
680 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
681 }
kono
parents:
diff changeset
682
kono
parents:
diff changeset
683 void test_keywords (int i)
kono
parents:
diff changeset
684 {
kono
parents:
diff changeset
685 __emit_expression_range (0, __FUNCTION__[i] ); /* { dg-warning "range" } */
kono
parents:
diff changeset
686 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
687 __emit_expression_range (0, __FUNCTION__[i] );
kono
parents:
diff changeset
688 ~~~~~~~~~~~~~~^
kono
parents:
diff changeset
689 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
690
kono
parents:
diff changeset
691 __emit_expression_range (0, __PRETTY_FUNCTION__[i] ); /* { dg-warning "range" } */
kono
parents:
diff changeset
692 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
693 __emit_expression_range (0, __PRETTY_FUNCTION__[i] );
kono
parents:
diff changeset
694 ~~~~~~~~~~~~~~~~~~~~~^
kono
parents:
diff changeset
695 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
696
kono
parents:
diff changeset
697 __emit_expression_range (0, __func__[i] ); /* { dg-warning "range" } */
kono
parents:
diff changeset
698 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
699 __emit_expression_range (0, __func__[i] );
kono
parents:
diff changeset
700 ~~~~~~~~~~^
kono
parents:
diff changeset
701 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
702 }
kono
parents:
diff changeset
703
kono
parents:
diff changeset
704 void test_builtin_va_arg (__builtin_va_list v)
kono
parents:
diff changeset
705 {
kono
parents:
diff changeset
706 __emit_expression_range (0, __builtin_va_arg (v, int) ); /* { dg-warning "range" } */
kono
parents:
diff changeset
707 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
708 __emit_expression_range (0, __builtin_va_arg (v, int) );
kono
parents:
diff changeset
709 ~~~~~~~~~~~~~~~~~~~~~^~~~
kono
parents:
diff changeset
710 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
711
kono
parents:
diff changeset
712 __emit_expression_range (0, __builtin_va_arg (v, int) + 1 ); /* { dg-warning "range" } */
kono
parents:
diff changeset
713 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
714 __emit_expression_range (0, __builtin_va_arg (v, int) + 1 );
kono
parents:
diff changeset
715 ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
kono
parents:
diff changeset
716 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
717 }
kono
parents:
diff changeset
718
kono
parents:
diff changeset
719 struct s { int i; float f; };
kono
parents:
diff changeset
720
kono
parents:
diff changeset
721 void test_builtin_offsetof (int i)
kono
parents:
diff changeset
722 {
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
723 __emit_expression_range (0, __builtin_offsetof (struct s, f) ); /* { dg-warning "range" } */
111
kono
parents:
diff changeset
724 /* { dg-begin-multiline-output "" }
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
725 __emit_expression_range (0, __builtin_offsetof (struct s, f) );
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
726 ~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
111
kono
parents:
diff changeset
727 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
728 }
kono
parents:
diff changeset
729
kono
parents:
diff changeset
730 /* Examples of non-trivial expressions. ****************************/
kono
parents:
diff changeset
731
kono
parents:
diff changeset
732 extern double sqrt (double x);
kono
parents:
diff changeset
733
kono
parents:
diff changeset
734 void test_quadratic (double a, double b, double c)
kono
parents:
diff changeset
735 {
kono
parents:
diff changeset
736 __emit_expression_range (0, b * b - 4 * a * c ); /* { dg-warning "range" } */
kono
parents:
diff changeset
737 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
738 __emit_expression_range (0, b * b - 4 * a * c );
kono
parents:
diff changeset
739 ~~~~~~^~~~~~~~~~~
kono
parents:
diff changeset
740 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
741
kono
parents:
diff changeset
742 __emit_expression_range (0,
kono
parents:
diff changeset
743 (-b + sqrt (b * b - 4 * a * c))
kono
parents:
diff changeset
744 / (2 * a)); /* { dg-warning "range" } */
kono
parents:
diff changeset
745 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
746 (-b + sqrt (b * b - 4 * a * c))
kono
parents:
diff changeset
747 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kono
parents:
diff changeset
748 / (2 * a));
kono
parents:
diff changeset
749 ^~~~~~~~~
kono
parents:
diff changeset
750 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
751
kono
parents:
diff changeset
752 }
kono
parents:
diff changeset
753
kono
parents:
diff changeset
754 int bar (int);
kono
parents:
diff changeset
755 void test_combinations (int a)
kono
parents:
diff changeset
756 {
kono
parents:
diff changeset
757 __emit_expression_range (0, bar (a) > a ); /* { dg-warning "range" } */
kono
parents:
diff changeset
758 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
759 __emit_expression_range (0, bar (a) > a );
kono
parents:
diff changeset
760 ~~~~~~~~^~~
kono
parents:
diff changeset
761 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
762 }
kono
parents:
diff changeset
763
kono
parents:
diff changeset
764 /* C++-specific expresssions. ****************************************/
kono
parents:
diff changeset
765
kono
parents:
diff changeset
766 void test_cp_literal_keywords (int a, int b)
kono
parents:
diff changeset
767 {
kono
parents:
diff changeset
768 this; /* { dg-error "invalid use of 'this' in non-member function" } */
kono
parents:
diff changeset
769 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
770 this;
kono
parents:
diff changeset
771 ^~~~
kono
parents:
diff changeset
772 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
773
kono
parents:
diff changeset
774 }
kono
parents:
diff changeset
775
kono
parents:
diff changeset
776 class base {
kono
parents:
diff changeset
777 public:
kono
parents:
diff changeset
778 base ();
kono
parents:
diff changeset
779 base (int i);
kono
parents:
diff changeset
780 virtual ~base ();
kono
parents:
diff changeset
781 int pub ();
kono
parents:
diff changeset
782 private:
kono
parents:
diff changeset
783 int priv ();
kono
parents:
diff changeset
784 };
kono
parents:
diff changeset
785 class derived : public base { ~derived (); };
kono
parents:
diff changeset
786
kono
parents:
diff changeset
787 void test_cp_casts (base *ptr)
kono
parents:
diff changeset
788 {
kono
parents:
diff changeset
789 __emit_expression_range (0, dynamic_cast <derived *> (ptr)); /* { dg-warning "range" } */
kono
parents:
diff changeset
790 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
791 __emit_expression_range (0, dynamic_cast <derived *> (ptr));
kono
parents:
diff changeset
792 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kono
parents:
diff changeset
793 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
794
kono
parents:
diff changeset
795 __emit_expression_range (0, static_cast <derived *> (ptr)); /* { dg-warning "range" } */
kono
parents:
diff changeset
796 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
797 __emit_expression_range (0, static_cast <derived *> (ptr));
kono
parents:
diff changeset
798 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kono
parents:
diff changeset
799 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
800
kono
parents:
diff changeset
801 __emit_expression_range (0, reinterpret_cast <int *> (ptr)); /* { dg-warning "range" } */
kono
parents:
diff changeset
802 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
803 __emit_expression_range (0, reinterpret_cast <int *> (ptr));
kono
parents:
diff changeset
804 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kono
parents:
diff changeset
805 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
806
kono
parents:
diff changeset
807 __emit_expression_range (0, const_cast <base *> (ptr)); /* { dg-warning "range" } */
kono
parents:
diff changeset
808 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
809 __emit_expression_range (0, const_cast <base *> (ptr));
kono
parents:
diff changeset
810 ^~~~~~~~~~~~~~~~~~~~~~~~~
kono
parents:
diff changeset
811 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
812 }
kono
parents:
diff changeset
813
kono
parents:
diff changeset
814 void test_functional_casts (int i, float f)
kono
parents:
diff changeset
815 {
kono
parents:
diff changeset
816 __emit_expression_range (0, float(i)); /* { dg-warning "range" } */
kono
parents:
diff changeset
817 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
818 __emit_expression_range (0, float(i));
kono
parents:
diff changeset
819 ^~~~~~~~
kono
parents:
diff changeset
820 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
821
kono
parents:
diff changeset
822 __emit_expression_range (0, int(f)); /* { dg-warning "range" } */
kono
parents:
diff changeset
823 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
824 __emit_expression_range (0, int(f));
kono
parents:
diff changeset
825 ^~~~~~
kono
parents:
diff changeset
826 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
827
kono
parents:
diff changeset
828 __emit_expression_range (0, s{i, f}); /* { dg-warning "range" } */
kono
parents:
diff changeset
829 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
830 __emit_expression_range (0, s{i, f});
kono
parents:
diff changeset
831 ^~~~~~~
kono
parents:
diff changeset
832 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
833 }
kono
parents:
diff changeset
834
kono
parents:
diff changeset
835 template <typename TYPENAME>
kono
parents:
diff changeset
836 class example_template
kono
parents:
diff changeset
837 {
kono
parents:
diff changeset
838 public:
kono
parents:
diff changeset
839 example_template (TYPENAME v);
kono
parents:
diff changeset
840 };
kono
parents:
diff changeset
841
kono
parents:
diff changeset
842 void test_template_id (void)
kono
parents:
diff changeset
843 {
kono
parents:
diff changeset
844 example_template <int>; /* { dg-warning "declaration does not declare anything" } */
kono
parents:
diff changeset
845 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
846 example_template <int>;
kono
parents:
diff changeset
847 ^~~~~~~~~~~~~~~~~~~~~~
kono
parents:
diff changeset
848 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
849 }
kono
parents:
diff changeset
850
kono
parents:
diff changeset
851 void test_new (void)
kono
parents:
diff changeset
852 {
kono
parents:
diff changeset
853 __emit_expression_range (0, ::new base); /* { dg-warning "range" } */
kono
parents:
diff changeset
854 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
855 __emit_expression_range (0, ::new base);
kono
parents:
diff changeset
856 ^~~~~~~~~~
kono
parents:
diff changeset
857 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
858
kono
parents:
diff changeset
859 __emit_expression_range (0, new base); /* { dg-warning "range" } */
kono
parents:
diff changeset
860 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
861 __emit_expression_range (0, new base);
kono
parents:
diff changeset
862 ^~~~~~~~
kono
parents:
diff changeset
863 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
864
kono
parents:
diff changeset
865 __emit_expression_range (0, new (base)); /* { dg-warning "range" } */
kono
parents:
diff changeset
866 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
867 __emit_expression_range (0, new (base));
kono
parents:
diff changeset
868 ^~~~~~~~~~
kono
parents:
diff changeset
869 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
870
kono
parents:
diff changeset
871 __emit_expression_range (0, new base (42)); /* { dg-warning "range" } */
kono
parents:
diff changeset
872 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
873 __emit_expression_range (0, new base (42));
kono
parents:
diff changeset
874 ^~~~~~~~~~~~~
kono
parents:
diff changeset
875 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
876
kono
parents:
diff changeset
877 __emit_expression_range (0, new (base) (42)); /* { dg-warning "range" } */
kono
parents:
diff changeset
878 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
879 __emit_expression_range (0, new (base) (42));
kono
parents:
diff changeset
880 ^~~~~~~~~~~~~~~
kono
parents:
diff changeset
881 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
882
kono
parents:
diff changeset
883 /* TODO: placement new. */
kono
parents:
diff changeset
884
kono
parents:
diff changeset
885 __emit_expression_range (0, new example_template<int> (42)); /* { dg-warning "range" } */
kono
parents:
diff changeset
886 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
887 __emit_expression_range (0, new example_template<int> (42));
kono
parents:
diff changeset
888 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
kono
parents:
diff changeset
889 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
890 }
kono
parents:
diff changeset
891
kono
parents:
diff changeset
892 void test_methods ()
kono
parents:
diff changeset
893 {
kono
parents:
diff changeset
894 __emit_expression_range (0, ((base *)1)->pub () ); /* { dg-warning "range" } */
kono
parents:
diff changeset
895 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
896 __emit_expression_range (0, ((base *)1)->pub () );
kono
parents:
diff changeset
897 ~~~~~~~~~~~~~~~~~^~
kono
parents:
diff changeset
898 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
899
kono
parents:
diff changeset
900 ((base *)1)->priv (); // { dg-error " is private " }
kono
parents:
diff changeset
901 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
902 ((base *)1)->priv ();
kono
parents:
diff changeset
903 ^
kono
parents:
diff changeset
904 { dg-end-multiline-output "" }
kono
parents:
diff changeset
905 { dg-begin-multiline-output "" }
kono
parents:
diff changeset
906 int priv ();
kono
parents:
diff changeset
907 ^~~~
kono
parents:
diff changeset
908 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
909 }
kono
parents:
diff changeset
910
kono
parents:
diff changeset
911 class tests
kono
parents:
diff changeset
912 {
kono
parents:
diff changeset
913 public:
kono
parents:
diff changeset
914 void test_method_calls ();
kono
parents:
diff changeset
915 int some_method () const;
kono
parents:
diff changeset
916 };
kono
parents:
diff changeset
917
kono
parents:
diff changeset
918 void
kono
parents:
diff changeset
919 tests::test_method_calls ()
kono
parents:
diff changeset
920 {
kono
parents:
diff changeset
921 __emit_expression_range (0, this->some_method () ); /* { dg-warning "range" } */
kono
parents:
diff changeset
922 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
923 __emit_expression_range (0, this->some_method () );
kono
parents:
diff changeset
924 ~~~~~~~~~~~~~~~~~~^~
kono
parents:
diff changeset
925 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
926 }
kono
parents:
diff changeset
927
kono
parents:
diff changeset
928 namespace std
kono
parents:
diff changeset
929 {
kono
parents:
diff changeset
930 class type_info { public: int foo; };
kono
parents:
diff changeset
931 }
kono
parents:
diff changeset
932
kono
parents:
diff changeset
933 void test_typeid (int i)
kono
parents:
diff changeset
934 {
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
935 __emit_expression_range (0, typeid(i)); /* { dg-warning "range" } */
111
kono
parents:
diff changeset
936 /* { dg-begin-multiline-output "" }
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
937 __emit_expression_range (0, typeid(i));
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
938 ^~~~~~~~~
111
kono
parents:
diff changeset
939 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
940
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
941 __emit_expression_range (0, typeid(int)); /* { dg-warning "range" } */
111
kono
parents:
diff changeset
942 /* { dg-begin-multiline-output "" }
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
943 __emit_expression_range (0, typeid(int));
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
944 ^~~~~~~~~~~
111
kono
parents:
diff changeset
945 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
946
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
947 __emit_expression_range (0, typeid(i * 2)); /* { dg-warning "range" } */
111
kono
parents:
diff changeset
948 /* { dg-begin-multiline-output "" }
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
949 __emit_expression_range (0, typeid(i * 2));
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
950 ^~~~~~~~~~~~~
111
kono
parents:
diff changeset
951 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
952 }
kono
parents:
diff changeset
953
kono
parents:
diff changeset
954 /* Various tests of locations involving macros. */
kono
parents:
diff changeset
955
kono
parents:
diff changeset
956 void test_within_macro_1 (int lhs, int rhs)
kono
parents:
diff changeset
957 {
kono
parents:
diff changeset
958 #define MACRO_1(EXPR) EXPR
kono
parents:
diff changeset
959
kono
parents:
diff changeset
960 __emit_expression_range (0, MACRO_1 (lhs == rhs));
kono
parents:
diff changeset
961
kono
parents:
diff changeset
962 /* { dg-warning "range" "" { target *-*-* } .-2 } */
kono
parents:
diff changeset
963 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
964 __emit_expression_range (0, MACRO_1 (lhs == rhs));
kono
parents:
diff changeset
965 ~~~~^~~~~~
kono
parents:
diff changeset
966 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
967 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
968 #define MACRO_1(EXPR) EXPR
kono
parents:
diff changeset
969 ^~~~
kono
parents:
diff changeset
970 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
971
kono
parents:
diff changeset
972 #undef MACRO_1
kono
parents:
diff changeset
973 }
kono
parents:
diff changeset
974
kono
parents:
diff changeset
975 void test_within_macro_2 (int lhs, int rhs)
kono
parents:
diff changeset
976 {
kono
parents:
diff changeset
977 #define MACRO_2(EXPR) EXPR
kono
parents:
diff changeset
978
kono
parents:
diff changeset
979 __emit_expression_range (0, MACRO_2 (MACRO_2 (lhs == rhs)));
kono
parents:
diff changeset
980
kono
parents:
diff changeset
981 /* { dg-warning "range" "" { target *-*-* } .-2 } */
kono
parents:
diff changeset
982 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
983 __emit_expression_range (0, MACRO_2 (MACRO_2 (lhs == rhs)));
kono
parents:
diff changeset
984 ~~~~^~~~~~
kono
parents:
diff changeset
985 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
986 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
987 __emit_expression_range (0, MACRO_2 (MACRO_2 (lhs == rhs)));
kono
parents:
diff changeset
988 ^~~~~~~
kono
parents:
diff changeset
989 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
990 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
991 #define MACRO_2(EXPR) EXPR
kono
parents:
diff changeset
992 ^~~~
kono
parents:
diff changeset
993 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
994
kono
parents:
diff changeset
995 #undef MACRO_2
kono
parents:
diff changeset
996 }
kono
parents:
diff changeset
997
kono
parents:
diff changeset
998 void test_within_macro_3 (int lhs, int rhs)
kono
parents:
diff changeset
999 {
kono
parents:
diff changeset
1000 #define MACRO_3(EXPR) EXPR
kono
parents:
diff changeset
1001
kono
parents:
diff changeset
1002 __emit_expression_range (0, MACRO_3 (lhs) == MACRO_3 (rhs));
kono
parents:
diff changeset
1003
kono
parents:
diff changeset
1004 /* { dg-warning "range" "" { target *-*-* } .-2 } */
kono
parents:
diff changeset
1005 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
1006 __emit_expression_range (0, MACRO_3 (lhs) == MACRO_3 (rhs));
kono
parents:
diff changeset
1007 ^
kono
parents:
diff changeset
1008 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
1009
kono
parents:
diff changeset
1010 #undef MACRO_3
kono
parents:
diff changeset
1011 }
kono
parents:
diff changeset
1012
kono
parents:
diff changeset
1013 void test_within_macro_4 (int lhs, int rhs)
kono
parents:
diff changeset
1014 {
kono
parents:
diff changeset
1015 #define MACRO_4(EXPR) EXPR
kono
parents:
diff changeset
1016
kono
parents:
diff changeset
1017 __emit_expression_range (0, MACRO_4 (MACRO_4 (lhs) == MACRO_4 (rhs)));
kono
parents:
diff changeset
1018
kono
parents:
diff changeset
1019 /* { dg-warning "range" "" { target *-*-* } .-2 } */
kono
parents:
diff changeset
1020 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
1021 __emit_expression_range (0, MACRO_4 (MACRO_4 (lhs) == MACRO_4 (rhs)));
kono
parents:
diff changeset
1022 ^
kono
parents:
diff changeset
1023 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
1024 /* { dg-begin-multiline-output "" }
kono
parents:
diff changeset
1025 #define MACRO_4(EXPR) EXPR
kono
parents:
diff changeset
1026 ^~~~
kono
parents:
diff changeset
1027 { dg-end-multiline-output "" } */
kono
parents:
diff changeset
1028
kono
parents:
diff changeset
1029 #undef MACRO_4
kono
parents:
diff changeset
1030 }