1#version 110
2
3#define ON
4
5float sum = 0.0;
6
7void main()
8{
9
10#ifdef ON
11//yes
12sum += 1.0;
13
14    #ifdef OFF
15    //no
16    sum += 20.0;
17    #endif
18
19    #if defined(ON)
20    //yes
21    sum += 300.0;
22    #endif
23
24#endif
25
26
27#if defined(OFF)
28//no
29sum += 4000.0;
30
31#if !defined(ON)
32//no
33sum += 50000.0;
34#endif
35
36    //no
37    sum += 0.1;
38    #ifdef ON
39        //no
40        sum += 0.2;
41    #endif
42
43    //no
44    sum += 0.01;
45    #ifdef ON
46        //no
47        sum += 0.02;
48    #else
49        //no
50        sum += 0.03;
51    #endif
52
53//no
54    sum + 0.3;
55
56#endif
57
58
59#if !defined(OFF)
60//yes
61sum += 600000.0;
62
63    #if defined(ON) && !defined(OFF)
64    //yes
65    sum += 80000000.0;
66
67        #if defined(OFF) || defined(ON)
68        //yes
69        sum += 900000000.0;
70
71            #if defined(ON) && defined(OFF)
72                //no
73                sum += 0.7;
74            #elif !defined(OFF)
75                //yes
76                sum += 7000000.0;
77            #endif
78
79        #endif
80
81    #endif
82
83#endif
84
85// sum should be 987600301.0
86    gl_Position = vec4(sum);
87}
88
89#define  A 1
90#define  C 0
91#define  E 0
92#define  F 1
93#if A
94    #if C
95        #if E
96            int selected4 = 1;
97        #elif F
98            int selected4 = 2;
99        #else
100            int selected4 = 3;
101        #endif
102    #endif
103    int selected4 = 4;
104#endif
105
106#define  ZA 1
107#define  ZC 1
108#define  ZE 0
109#define  ZF 1
110#if ZA
111    #if ZC
112        #if ZE
113            int selected2 = 1;
114        #elif ZF
115            int selected2 = 2;
116        #else
117            int selected2 = 3;
118        #endif
119    #endif
120#endif
121
122#define  AZA 1
123#define  AZC 1
124#define  AZE 0
125#define  AZF 0
126#if AZA
127    #if AZC
128        #if AZE
129            int selected3 = 1;
130        #elif AZF
131            int selected3 = 2;
132        #else
133            int selected3 = 3;
134        #endif
135    #endif
136#endif
137
138// ERROR cases...
139
140#if 0
141int;
142#else
143int;
144#elif 1
145int;
146#endif
147
148#if 0
149int;
150#else
151int;
152#else
153int;
154#endif
155
156#if 0
157    #if 0
158    int;
159    #else
160    int;
161    #elif 1
162    int;
163    #endif
164
165    #if 0
166    int;
167    #else
168    int;
169    #else
170    int;
171    #endif
172#endif
173
174#define FUNC(a,b)		a+b
175void foo985(){	FUNC( (((2))), ((3),4)); }
176// needs to be last test in file
177void foo987(){	FUNC(((); }  // ERROR, EOF in argument
178