blob: 2f7de30f7a3b30bb8abbac7e6279068657f52f3d [file] [log] [blame]
#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