| #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 (b) |
| |
| // ERROR |
| #define m5 (b) |
| #define m5(b) |
| |
| // ERROR |
| #define m6(a) |
| #define m6 |
| |
| // 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 |
| |
| #line 10000 |
| #if 1 |
| #else |
| // ERROR, missing #endif |