#version 400 #define ON float sum = 0.0; void main() { #ifdef ON //yes sum += 1.0; #endif #ifdef OFF //no sum += 20.0; #endif #if defined(ON) //yes sum += 300.0; #endif #if defined(OFF) //no sum += 4000.0; #endif #if !defined(ON) //no sum += 50000.0; #endif #ifndef OFF //yes sum += 600000.0; #else //no sum += 0.6; #endif #if defined(ON) && defined(OFF) //no sum += 0.7; #elif !defined(OFF) //yes sum += 7000000.0; #endif #if defined(ON) && !defined(OFF) //yes sum += 80000000.0; #endif #if defined(OFF) || defined(ON) //yes sum += 900000000.0; #endif #if NEVER_DEFINED //no sum += 0.04; #else sum += 0.05; #endif // sum should be 987600301.7 gl_Position = vec4(sum); } #define A 0 # define B 0 # define C 0 #if (A == B) || (A == C) #error good1 #endif #if A == B || (A == C) #error good2 #endif #if (A == B || (A == C)) #error good3 #endif #if (AA == BB) || (AA == CC) #error good4 #endif #if AA == BB || (AA == CC) #error good5 #endif #if ((AA == BB || (AA == CC))) #error good6 #endif #if (A == B || (A == C) #error bad1 #endif #if A == B || A == C) #error bad2 #endif #if (A == B || (A == C) #error bad3 #endif #if AA == BB) || (AA == CC) #error bad4 #endif #if AA == BB || (AA == CC #error bad5 #endif #if ((AA == BB || (AA == CC)))) #error bad6 #endif extra tokens int linenumber = __LINE__; int filenumber = __FILE__; int version = __VERSION__; #define PI (3.14) #define TWOPI (2.0 * PI) float twoPi = TWOPI; //#define PASTE(a,b) a ## b //float PASTE(tod, ay) = 17; "boo" // ERROR int a = length("aoenatuh"); // ERROR #define QUOTE "abcd" // okay 'int'; // ERROR #define SINGLE 'a' // okay // ERROR: all the following are reserved #define GL_ #define GL_Macro 1 #define __M #define M__ #define ABC__DE abc #if 4 #else extra #elif // ERROR elif after else #endif #if blah #if 0 #else extra #ifdef M #else #else // ERROR else after else #endif extra #endif #endif #define m1(a,a) // ERROR #define m2(a,b) // okay #define m3 (a) #define m3 (a) // ERROR #define m4(b) #define m4 // ERROR #define m5 (b) #define m5(b) // ERROR #define m6(a) #define m6(a,b) // ERROR (whitespace) #define m7 (a) #define m7 ( a) #define m80(a,b) is + exactly m3 the same #define m80(a,b) is + exactly m3 the same // ERROR #define m8(a,b) almost + exactly m3 the same #define m8(a,b) almost + exactly m3 thee same // ERROR #define m9(a,b,c) aoe #define m9(a,d,c) aoe #define n1 0xf int n = n1; #define f1 .08e-2Lf double f = f1; #undef __VERSION__ #undef GL_ARB_texture_rectangle # # # ## # # # 0x25 #### ####ff #########ff fg 0x25 #pragma #pragma(aoent) # pragma #pragma STDGL #pragma optimize( on) #pragma optimize(off) #pragma debug( on) #pragma debug(off ) #pragma optimize( on) anoteun #pragma optimize(off #pragma debug( on) ( #pragma debug(off aoeua) #pragma optimize( on) #pragma optimize(off,) #pragma debug( on, aoeu) #pragma debugoff ) #pragma aontheu natoeh uantheo uasotea noeahuonea uonethau onethuanoeth aunotehau noeth anthoeua anoethuantoeh uantoehu natoehu naoteh unotaehu noethua onetuh aou # \ # \ error good continuation #flizbit #define directive error #directive directive was expanded #line 12000 #error line should be 12000 #line 13000 7 #error line should be 13000, string 7 #define L1 14000 #define L2 13 #define F1 5 #define F2 7 #line L1 + L2 #error line should be 14013, string 7 #line L1 + L2 F1 + F2 // antoeuh sat comment #error line should be 14013, string 12 #line L1 + L2 + F1 + F2 #error line should be 14025, string 12 #line 1234 F1 + F2 extra #define empty_extra #line 1235 F1 + F2 empty_extra #define moreEmpty empty_extra #line 1236 F1 + F2 moreEmpty empty_extra // okay, lots of nothin #line 1237 F1 + F2 moreEmpty empty_extra extra // ERROR, 'extra' #line 1238 F1 + F2 moreEmpty empty_extra #line 1239 empty_extra F1 empty_extra + empty_extra F2 empty_extra moreEmpty empty_extra #line (20000) #error line should be 20000 #line (20000+10) #error line should be 20010 #line +20020 #error line should be 20020 #define VAL1 1.0 #define VAL2 2.0 #define RES2 /* test a multiline comment in a macro definition */ (RES1 * VAL2) #define RES1 (VAL2 / VAL1) #define RES2 /* comment */(RES1 * VAL2) #define /* */SUM_VALUES (RES2 + RES1) void foo234() { gl_Position = vec4(SUM_VALUES); } // more whitespace recording tests #define SPACE_AT_END(a,b) spaceAtEndIsOkay #define SPACE_AT_END(a,b) spaceAtEndIsOkay // space at end #define SPACE_AT_BEGIN(a,b)spaceAtBeginIsOkay #define SPACE_AT_BEGIN(a,b) spaceAtBeginIsOkay // space in middle is an error #define SPACE_IN_MIDDLE(a,b) space +in middle #define SPACE_IN_MIDDLE(a,b) space + in middle #define FIRSTPART 17 #define SECONDPART + 5 #if FIRSTPART SECONDPART == 22 #error good evaluation 1 #endif #if moreEmpty FIRSTPART moreEmpty SECONDPART moreEmpty == moreEmpty 22 moreEmpty #error good evaluation 2 #endif // ERRORS... #line 9000 #if defined(OUNH #endif #if defined OUNH) #endif // recursion (okay) #define RECURSE RECURSE int RECURSE; #define R2 R1 #define R1 R2 #undef RECURSE int R1 = RECURSE; #define FOOOM(a,b) a + b int aoeua = FOOOM; #if FOOOM #endif #line 9500 #if\376 #endif #if \376 #endif #if \377 #endif #error\377 #error \ 376 #error \377 // ERROR for macro expansion to yield 'defined' #line 9600 #define DEF_MAC #define DEF_DEFINED defined #if DEF_DEFINED DEF_MAC #error DEF_DEFINED then #else #error DEF_DEFINED else #endif #line 10000 #if 1 #else // ERROR, missing #endif