1#version 300 es
2#define ON1
3#define ON2
4float sum = 0.0;
5
6void main()
7{
8#if defined(ON1) && (defined(OFF) || defined(ON2))
9//yes
10    sum += 1.0;
11#endif
12
13#if !defined(ON1) || (defined(OFF) || (!defined(OFF2) && defined(ON2)))
14//yes
15    sum += 20.0;
16#endif
17
18#if defined(ON1) && (defined(OFF) || !defined(ON2))
19//no
20    sum += 0.1;
21#endif
22
23#if !defined(ON1) || (defined(OFF) || !defined(OFF2) && !defined(ON2))
24//no
25    sum += 0.2;
26#endif
27
28#if !defined(ON1) || !defined(OFF) || defined(ON2) && defined(OFF2)
29//yes
30    sum += 300.0;
31#endif
32
33#if (!defined(ON1) || !defined(OFF) || defined(ON2)) && defined(OFF2)
34//no
35    sum += 0.4;
36#endif
37
38// sum should be 321.0
39    gl_Position = vec4(sum);
40}
41
42#define ADD(a, b) a + b + ((a) + ((b)));
43
44float foo()
45{
46    return ADD(gl_Position.xyxwx, 3.0)  // ERROR, should be this line number
47    return ADD(gl_Position.y, 3.0)
48}
49
50#define BIG aonetuhanoethuanoenaoethu snaoetuhs onethausoentuas hnoethaueohnatuoeh santuoehsantouhe snathoensuta hsnoethuasntoe hsnuathoesnuathoenstuh nsoethantseuh toae ua \
51    antoeh uantheount oentahoent uahnsoethasnutoehansteuo santhu sneoathu snoethasnut oesanthoesna thusenotha nsthasunoeth ausntehsunathoensuathoesnta uhnsoetha usntoeh uanhs unosethu \
52    antoehunatoehu natoehua oentha neotuhan toehu natoehu ntahoe nutah eu natoheunathoen uasoenuasoent asntoehsan tuosnthnu aohenuath eontha untoh eunth unth anth unth nth nth nt \
53    a ntoehanu tunth nsont uhansoethausn oehsanthnt heauo eanthuo sh nahnoethansu tohe sanuthoe snathuoesntha snuothe anthusonehtasuntoeh asnuthonsa teauhntoeha onetuha nth \
54    anoethuan toentauh noethauntohe anuthoe nathu noethaun oethanuthoe nathuoe ntahu enotha unetha ntuhenaothu enotahun eotha ntoehu aoehuntha enotuh aonethau noethu anoethuna toheua \
55    ontehanutoe hnuathoena aoteha aonetuha
56
57// identical
58#define BIG aonetuhanoethuanoenaoethu snaoetuhs onethausoentuas hnoethaueohnatuoeh santuoehsantouhe snathoensuta hsnoethuasntoe hsnuathoesnuathoenstuh nsoethantseuh toae ua \
59    antoeh uantheount oentahoent uahnsoethasnutoehansteuo santhu sneoathu snoethasnut oesanthoesna thusenotha nsthasunoeth ausntehsunathoensuathoesnta uhnsoetha usntoeh uanhs unosethu \
60    antoehunatoehu natoehua oentha neotuhan toehu natoehu ntahoe nutah eu natoheunathoen uasoenuasoent asntoehsan tuosnthnu aohenuath eontha untoh eunth unth anth unth nth nth nt \
61    a ntoehanu tunth nsont uhansoethausn oehsanthnt heauo eanthuo sh nahnoethansu tohe sanuthoe snathuoesntha snuothe anthusonehtasuntoeh asnuthonsa teauhntoeha onetuha nth \
62    anoethuan toentauh noethauntohe anuthoe nathu noethaun oethanuthoe nathuoe ntahu enotha unetha ntuhenaothu enotahun eotha ntoehu aoehuntha enotuh aonethau noethu anoethuna toheua \
63    ontehanutoe hnuathoena aoteha aonetuha
64
65// ERROR, one character different
66#define BIG aonetuhanoethuanoenaoethu snaoetuhs onethausoentuas hnoethaueohnatuoeh santuoehsantouhe snathoensuta hsnoethuasntoe hsnuathoesnuathoenstuh nsoethantseuh toae ua \
67    antoeh uantheount oentahoent uahnsoethasnutoehansteuo santhu sneoathu snoethasnut oesanthoesna thusenotha nsthasunoeth ausntehsunathoensuathoesnta uhnsoetha usntoeh uanhs unosethu \
68    antoehunatoehu natoehua oentha neotuhan toehu natoehu ntahoe nutah eu natoheunathoen uasoenuasoent asntoehsan tuosnthnu aohenuath eontha untoh eunth unth anth unth nth nth nt \
69    a ntoehanu tunth nsont uhansoethasn oehsanthnt heauo eanthuo sh nahnoethansu tohe sanuthoe snathuoesntha snuothe anthusonehtasuntoeh asnuthonsa teauhntoeha onetuha nth \
70    anoethuan toentauh noethauntohe anuthoe nathu noethaun oethanuthoe nathuoe ntahu enotha unetha ntuhenaothu enotahun eotha ntoehu aoehuntha enotuh aonethau noethu anoethuna toheua \
71    ontehanutoe hnuathoena aoteha aonetuha
72
73#define BIGARGS1(aonthanotehu, bonthanotehu, conthanotehu, donthanotehu, eonthanotehu, fonthanotehu, gonthanotehu, honthanotehu, ionthanotehu, jonthanotehu, konthanotehu) jonthanotehu
74#define BIGARGS2(aonthanotehu, bonthanotehu, conthanotehu, donthanotehu, eonthanotehu, fonthanotehu, gonthanotehu, honthanotehu, ionthanotehu, jonthanotehu, konthanotehu) jonthanotehu
75#define BIGARGS3(aonthanotehu, bonthanotehu, conthanotehu, donthanotehu, eonthanotehu, fonthanotehu, gonthanotehu, honthanotehu, ionthanotehu, jonthanotehu, konthanotehu) jonthanotehu
76#define BIGARGS4(aonthanotehu, bonthanotehu, conthanotehu, donthanotehu, eonthanotehu, fonthanotehu, gonthanotehu, honthanotehu, ionthanotehu, jonthanotehu, konthanotehu) jonthanotehu
77
78
79#define foobar(a, b) a + b
80
81#if foobar(1.1, 2.2)
82#error good macro
83#else
84#error bad macro
85#endif
86
87#if foobar(1
88;
89#
90#
91#endif
92#if foobar(1,
93;
94#
95#
96#endif
97float c = foobar(1.1, 2.2
98       );
99#if foobar(1.1, 2.2
100)
101#if foobar(1.1, 2.2
102#endif
103#endif
104
105#define VAL0 0
106#define VAL1 1
107
108#if UNDEF
109#error bad 0
110#else
111#error good 0
112#endif
113
114#if VAL1 || UNDEF
115#error good 1
116#else
117#error bad 1
118#endif
119
120#if VAL1 && UNDEF // UNDEF ERROR
121#endif
122
123#if VAL0 || UNDEF // UNDEF ERROR
124#endif
125
126#if VAL0 && UNDEF
127#error bad 2
128#else
129#error good 1
130#endif
131
132#if VAL1 || (VAL1 && UNDEF)
133#error good 3
134#else
135#error bad 3
136#endif
137
138#if VAL1 && (VAL1 || UNDEF)
139#error good 4
140#else
141#error bad 4
142#endif
143
144#if VAL1 < VAL1 || VAL1 > VAL1 || UNDEF // UNDEF ERROR
145#endif
146
147#if VAL1 < VAL1 || VAL1 > VAL1 && UNDEF
148#endif
149
150#if VAL1 || UNDEF && UNDEF2
151#endif
152
153#if VAL0 || UNDEF && UNDEF2  // UNDEF ERROR
154#endif
155
156#if (VAL1 || UNDEF) && UNDEF2 // UNDEF2 ERROR
157#endif
158
159#if (VAL0 && UNDEF) || UNDEF2 // UNDEF2 ERROR
160#endif
161
162#line 3000
163#error line of this error should be 3000
164
165#define __LINE__ 30
166#define __FILE__
167#define __VERSION__
168#define GL_SOME_EXTENSION
169#undef __LINE__
170#undef __FILE__
171#undef __VERSION__
172#undef GL_SOME_EXTENSION
173
174#line 4000
175#line 200 % 0     // ERROR, div by 0
176#if __LINE__ / 0  // ERROR, div by 0
177#endif
178
179#if 7%            // ERROR incomplete expression
180
181#line 10000
182#if 0
183// ERROR, EOF