mirror of
https://github.com/KhronosGroup/glslang
synced 2024-11-08 19:40:06 +00:00
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 |