353 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			GLSL
		
	
	
	
			
		
		
	
	
			353 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			GLSL
		
	
	
	
| #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 |