Skip to content

Commit a83a328

Browse files
committed
test(cpp,diag): add test cases for 2cbc103
1 parent 43c5ec8 commit a83a328

8 files changed

Lines changed: 298 additions & 0 deletions

tst/cpp/pp-mcr-variadic-17.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
/* -Wv -X */
2+
3+
#define foo(...) , ## __VA_ARGS__
4+
#define foo(...) ,##__VA_ARGS__
5+
#define foo(...) , ##__VA_ARGS__
6+
#define foo(...) ,## __VA_ARGS__

tst/cpp/pp-mcr-variadic-17.c.1.out

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# 1 "./pp-mcr-variadic-17.c"
2+
3+

tst/cpp/pp-mcr-variadic-17.c.2.out

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
./pp-mcr-variadic-17.c:4:9: ERROR - redefinition of macro `foo'
2+
#define foo(...) ,##__VA_ARGS__
3+
^~~
4+
./pp-mcr-variadic-17.c:3:9: note - previous definition was here
5+
#define foo(...) , ## __VA_ARGS__
6+
^~~
7+
./pp-mcr-variadic-17.c:5:9: ERROR - redefinition of macro `foo'
8+
#define foo(...) , ##__VA_ARGS__
9+
^~~
10+
./pp-mcr-variadic-17.c:3:9: note - previous definition was here
11+
#define foo(...) , ## __VA_ARGS__
12+
^~~
13+
./pp-mcr-variadic-17.c:6:9: ERROR - redefinition of macro `foo'
14+
#define foo(...) ,## __VA_ARGS__
15+
^~~
16+
./pp-mcr-variadic-17.c:3:9: note - previous definition was here
17+
#define foo(...) , ## __VA_ARGS__
18+
^~~
19+
./pp-mcr-variadic-17.c:3:9: warning - macro `foo' defined but not used
20+
#define foo(...) , ## __VA_ARGS__
21+
^~~

tst/cpp/pp-mcr-variadic-18.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/* -Wv -X */
2+
3+
#define foo1(x, ...) x ## , ## __VA_ARGS__ end
4+
#define foo2(...) , ## __VA_ARGS__ end
5+
#define foo3(...) , ## __VA_ARGS__ ## end
6+
7+
foo1(foo)
8+
foo1(foo,)
9+
foo1(foo, bar)
10+
foo1(foo, bar, fred)
11+
12+
foo2()
13+
foo2(foo)
14+
foo2(foo, bar)
15+
16+
foo3()
17+
foo3(foo)
18+
foo3(foo, bar)

tst/cpp/pp-mcr-variadic-18.c.1.out

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# 1 "./pp-mcr-variadic-18.c"
2+
3+
4+
# 7 "./pp-mcr-variadic-18.c"
5+
foo end
6+
foo , end
7+
foo ,bar end
8+
foo ,bar, fred end
9+
10+
end
11+
,foo end
12+
,foo, bar end
13+
14+
end
15+
,fooend
16+
,foo, barend

tst/cpp/pp-mcr-variadic-18.c.2.out

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
./pp-mcr-variadic-18.c:3:24: ERROR - `##' generated multiple tokens from `foo,'
2+
#define foo1(x, ...) x ## , ## __VA_ARGS__ end
3+
^~
4+
./pp-mcr-variadic-18.c:7:1: note - expanded from here
5+
foo1(foo)
6+
^~~~~~~~~
7+
./pp-mcr-variadic-18.c:3:24: ERROR - `##' generated multiple tokens from `foo,'
8+
#define foo1(x, ...) x ## , ## __VA_ARGS__ end
9+
^~
10+
./pp-mcr-variadic-18.c:8:1: note - expanded from here
11+
foo1(foo,)
12+
^~~~~~~~~~
13+
./pp-mcr-variadic-18.c:3:24: ERROR - `##' generated multiple tokens from `foo,'
14+
#define foo1(x, ...) x ## , ## __VA_ARGS__ end
15+
^~
16+
./pp-mcr-variadic-18.c:9:1: note - expanded from here
17+
foo1(foo, bar)
18+
^~~~~~~~~~~~~~
19+
./pp-mcr-variadic-18.c:3:24: ERROR - `##' generated multiple tokens from `foo,'
20+
#define foo1(x, ...) x ## , ## __VA_ARGS__ end
21+
^~
22+
./pp-mcr-variadic-18.c:10:1: note - expanded from here
23+
foo1(foo, bar, fred)
24+
^~~~~~~~~~~~~~~~~~~~

tst/diag/d-mcr-variadic.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/* -Wv -X */
2+
3+
#define foo1(x, ...) x ## , ## __VA_ARGS__ end
4+
#define foo2(...) , ## __VA_ARGS__ end
5+
#define foo3(...) , ## __VA_ARGS__ ## end
6+
7+
foo1(foo)
8+
foo1(foo,)
9+
foo1(foo, bar)
10+
foo1(foo, bar, fred)
11+
12+
foo2()
13+
foo2(foo)
14+
foo2(foo, bar)
15+
16+
foo3()
17+
foo3(foo)
18+
foo3(foo, bar)

tst/diag/d-mcr-variadic.c.2.out

Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
./d-mcr-variadic.c:3:24: ERROR - `##' generated multiple tokens from `foo,'
2+
#define foo1(x, ...) x ## , ## __VA_ARGS__ end
3+
^~
4+
./d-mcr-variadic.c:7:1: note - expanded from here
5+
foo1(foo)
6+
^~~~~~~~~
7+
./d-mcr-variadic.c:3:24: ERROR - `##' generated multiple tokens from `foo,'
8+
#define foo1(x, ...) x ## , ## __VA_ARGS__ end
9+
^~
10+
./d-mcr-variadic.c:8:1: note - expanded from here
11+
foo1(foo,)
12+
^~~~~~~~~~
13+
./d-mcr-variadic.c:3:24: ERROR - `##' generated multiple tokens from `foo,'
14+
#define foo1(x, ...) x ## , ## __VA_ARGS__ end
15+
^~
16+
./d-mcr-variadic.c:9:1: note - expanded from here
17+
foo1(foo, bar)
18+
^~~~~~~~~~~~~~
19+
./d-mcr-variadic.c:3:24: ERROR - `##' generated multiple tokens from `foo,'
20+
#define foo1(x, ...) x ## , ## __VA_ARGS__ end
21+
^~
22+
./d-mcr-variadic.c:10:1: note - expanded from here
23+
foo1(foo, bar, fred)
24+
^~~~~~~~~~~~~~~~~~~~
25+
./d-mcr-variadic.c:3:22: ERROR - unknown type `foo'
26+
#define foo1(x, ...) x ## , ## __VA_ARGS__ end
27+
^~~~~~
28+
./d-mcr-variadic.c:7:1: note - expanded from here
29+
foo1(foo)
30+
^~~~~~~~~
31+
./d-mcr-variadic.c:3:47: ERROR - syntax error; expected `;' before `identifier'
32+
#define foo1(x, ...) x ## , ## __VA_ARGS__ end
33+
^
34+
./d-mcr-variadic.c:7:1: note - expanded from here
35+
foo1(foo)
36+
^~~~~~~~~
37+
./d-mcr-variadic.c:3:28: ERROR - empty declaration
38+
#define foo1(x, ...) x ## , ## __VA_ARGS__ end
39+
^
40+
./d-mcr-variadic.c:8:1: note - expanded from here
41+
foo1(foo,)
42+
^~~~~~~~~~
43+
./d-mcr-variadic.c:3:28: ERROR - syntax error; expected `;' before `,'
44+
#define foo1(x, ...) x ## , ## __VA_ARGS__ end
45+
^
46+
./d-mcr-variadic.c:8:1: note - expanded from here
47+
foo1(foo,)
48+
^~~~~~~~~~
49+
./d-mcr-variadic.c:3:44: warning - missing declaration specifier
50+
#define foo1(x, ...) x ## , ## __VA_ARGS__ end
51+
^
52+
./d-mcr-variadic.c:8:1: note - expanded from here
53+
foo1(foo,)
54+
^~~~~~~~~~
55+
./d-mcr-variadic.c:3:44: warning - type defaults to `int'
56+
#define foo1(x, ...) x ## , ## __VA_ARGS__ end
57+
^
58+
./d-mcr-variadic.c:8:1: note - expanded from here
59+
foo1(foo,)
60+
^~~~~~~~~~
61+
./d-mcr-variadic.c:3:47: ERROR - syntax error; expected `;' before `identifier'
62+
#define foo1(x, ...) x ## , ## __VA_ARGS__ end
63+
^
64+
./d-mcr-variadic.c:8:1: note - expanded from here
65+
foo1(foo,)
66+
^~~~~~~~~~
67+
./d-mcr-variadic.c:3:28: ERROR - empty declaration
68+
#define foo1(x, ...) x ## , ## __VA_ARGS__ end
69+
^
70+
./d-mcr-variadic.c:9:1: note - expanded from here
71+
foo1(foo, bar)
72+
^~~~~~~~~~~~~~
73+
./d-mcr-variadic.c:3:28: ERROR - syntax error; expected `;' before `,'
74+
#define foo1(x, ...) x ## , ## __VA_ARGS__ end
75+
^
76+
./d-mcr-variadic.c:9:1: note - expanded from here
77+
foo1(foo, bar)
78+
^~~~~~~~~~~~~~
79+
./d-mcr-variadic.c:9:11: ERROR - unknown type `bar'
80+
foo1(foo, bar)
81+
^~~
82+
./d-mcr-variadic.c:3:44: ERROR - redeclaration of `end': `bar' vs `int'
83+
#define foo1(x, ...) x ## , ## __VA_ARGS__ end
84+
^~~
85+
./d-mcr-variadic.c:9:1: note - expanded from here
86+
foo1(foo, bar)
87+
^~~~~~~~~~~~~~
88+
./d-mcr-variadic.c:3:44: note - previous declaration was here
89+
#define foo1(x, ...) x ## , ## __VA_ARGS__ end
90+
^~~
91+
./d-mcr-variadic.c:8:1: note - expanded from here
92+
foo1(foo,)
93+
^~~~~~~~~~
94+
./d-mcr-variadic.c:3:47: ERROR - syntax error; expected `;' before `identifier'
95+
#define foo1(x, ...) x ## , ## __VA_ARGS__ end
96+
^
97+
./d-mcr-variadic.c:9:1: note - expanded from here
98+
foo1(foo, bar)
99+
^~~~~~~~~~~~~~
100+
./d-mcr-variadic.c:3:28: ERROR - empty declaration
101+
#define foo1(x, ...) x ## , ## __VA_ARGS__ end
102+
^
103+
./d-mcr-variadic.c:10:1: note - expanded from here
104+
foo1(foo, bar, fred)
105+
^~~~~~~~~~~~~~~~~~~~
106+
./d-mcr-variadic.c:3:28: ERROR - syntax error; expected `;' before `,'
107+
#define foo1(x, ...) x ## , ## __VA_ARGS__ end
108+
^
109+
./d-mcr-variadic.c:10:1: note - expanded from here
110+
foo1(foo, bar, fred)
111+
^~~~~~~~~~~~~~~~~~~~
112+
./d-mcr-variadic.c:10:14: ERROR - empty declaration
113+
foo1(foo, bar, fred)
114+
^
115+
./d-mcr-variadic.c:10:14: ERROR - syntax error; expected `;' before `,'
116+
foo1(foo, bar, fred)
117+
^
118+
./d-mcr-variadic.c:10:16: ERROR - unknown type `fred'
119+
foo1(foo, bar, fred)
120+
^~~~
121+
./d-mcr-variadic.c:3:47: ERROR - syntax error; expected `;' before `identifier'
122+
#define foo1(x, ...) x ## , ## __VA_ARGS__ end
123+
^
124+
./d-mcr-variadic.c:10:1: note - expanded from here
125+
foo1(foo, bar, fred)
126+
^~~~~~~~~~~~~~~~~~~~
127+
./d-mcr-variadic.c:4:39: warning - missing declaration specifier
128+
#define foo2(...) , ## __VA_ARGS__ end
129+
^
130+
./d-mcr-variadic.c:12:1: note - expanded from here
131+
foo2()
132+
^~~~~~
133+
./d-mcr-variadic.c:4:39: warning - type defaults to `int'
134+
#define foo2(...) , ## __VA_ARGS__ end
135+
^
136+
./d-mcr-variadic.c:12:1: note - expanded from here
137+
foo2()
138+
^~~~~~
139+
./d-mcr-variadic.c:13:9: ERROR - syntax error; expected `;' before `identifier'
140+
foo2(foo)
141+
^
142+
./d-mcr-variadic.c:4:39: warning - missing declaration specifier
143+
#define foo2(...) , ## __VA_ARGS__ end
144+
^
145+
./d-mcr-variadic.c:13:1: note - expanded from here
146+
foo2(foo)
147+
^~~~~~~~~
148+
./d-mcr-variadic.c:4:39: warning - type defaults to `int'
149+
#define foo2(...) , ## __VA_ARGS__ end
150+
^
151+
./d-mcr-variadic.c:13:1: note - expanded from here
152+
foo2(foo)
153+
^~~~~~~~~
154+
./d-mcr-variadic.c:14:14: ERROR - syntax error; expected `;' before `identifier'
155+
foo2(foo, bar)
156+
^
157+
./d-mcr-variadic.c:4:39: warning - missing declaration specifier
158+
#define foo2(...) , ## __VA_ARGS__ end
159+
^
160+
./d-mcr-variadic.c:14:1: note - expanded from here
161+
foo2(foo, bar)
162+
^~~~~~~~~~~~~~
163+
./d-mcr-variadic.c:4:39: warning - type defaults to `int'
164+
#define foo2(...) , ## __VA_ARGS__ end
165+
^
166+
./d-mcr-variadic.c:14:1: note - expanded from here
167+
foo2(foo, bar)
168+
^~~~~~~~~~~~~~
169+
./d-mcr-variadic.c:4:42: ERROR - syntax error; expected `;' before `identifier'
170+
#define foo2(...) , ## __VA_ARGS__ end
171+
^
172+
./d-mcr-variadic.c:14:1: note - expanded from here
173+
foo2(foo, bar)
174+
^~~~~~~~~~~~~~
175+
./d-mcr-variadic.c:5:27: warning - missing declaration specifier
176+
#define foo3(...) , ## __VA_ARGS__ ## end
177+
^
178+
./d-mcr-variadic.c:16:1: note - expanded from here
179+
foo3()
180+
^~~~~~
181+
./d-mcr-variadic.c:5:27: warning - type defaults to `int'
182+
#define foo3(...) , ## __VA_ARGS__ ## end
183+
^
184+
./d-mcr-variadic.c:16:1: note - expanded from here
185+
foo3()
186+
^~~~~~
187+
./d-mcr-variadic.c:5:45: ERROR - syntax error; expected `;' before `end of input'
188+
#define foo3(...) , ## __VA_ARGS__ ## end
189+
^
190+
./d-mcr-variadic.c:18:1: note - expanded from here
191+
foo3(foo, bar)
192+
^~~~~~~~~~~~~~

0 commit comments

Comments
 (0)