diff --git a/Test/baseResults/cppBad.vert.out b/Test/baseResults/cppBad.vert.out index 205c29b5b4a12924e01fb03655ff989a8a2bbe9a..1a2286aa917701a06eefa6c1b68c23d72fc684e4 100755 --- a/Test/baseResults/cppBad.vert.out +++ b/Test/baseResults/cppBad.vert.out @@ -2,10 +2,9 @@ cppBad.vert ERROR: 0:2: 'preprocessor evaluation' : bad expression ERROR: 0:2: '#if' : unexpected tokens following directive ERROR: 0:5: 'string' : End of line in string -ERROR: 0:5: 'macro expansion' : expected '(' following n ERROR: 0:5: '""' : string literals not supported ERROR: 0:5: '' : syntax error, unexpected INT, expecting COMMA or SEMICOLON -ERROR: 6 compilation errors. No code generated. +ERROR: 5 compilation errors. No code generated. Shader version: 100 diff --git a/Test/baseResults/cppPassMacroName.frag.out b/Test/baseResults/cppPassMacroName.frag.out new file mode 100755 index 0000000000000000000000000000000000000000..d8459b3bc032873b7fe628d62ff09a61189ae9c5 --- /dev/null +++ b/Test/baseResults/cppPassMacroName.frag.out @@ -0,0 +1,67 @@ +cppPassMacroName.frag +Shader version: 100 +0:? Sequence +0:5 Function Definition: main( ( global void) +0:5 Function Parameters: +0:7 Sequence +0:7 Sequence +0:7 move second child to first child ( temp mediump int) +0:7 'f1' ( temp mediump int) +0:7 Constant: +0:7 4 (const int) +0:8 Sequence +0:8 move second child to first child ( temp mediump int) +0:8 'f2' ( temp mediump int) +0:8 'f1' ( temp mediump int) +0:9 Sequence +0:9 move second child to first child ( temp mediump int) +0:9 'f3' ( temp mediump int) +0:9 Constant: +0:9 9 (const int) +0:10 Sequence +0:10 move second child to first child ( temp mediump int) +0:10 'f4' ( temp mediump int) +0:10 Constant: +0:10 1 (const int) +0:11 Sequence +0:11 move second child to first child ( temp mediump int) +0:11 'f5' ( temp mediump int) +0:11 Constant: +0:11 5 (const int) +0:? Linker Objects + + +Linked fragment stage: + + +Shader version: 100 +0:? Sequence +0:5 Function Definition: main( ( global void) +0:5 Function Parameters: +0:7 Sequence +0:7 Sequence +0:7 move second child to first child ( temp mediump int) +0:7 'f1' ( temp mediump int) +0:7 Constant: +0:7 4 (const int) +0:8 Sequence +0:8 move second child to first child ( temp mediump int) +0:8 'f2' ( temp mediump int) +0:8 'f1' ( temp mediump int) +0:9 Sequence +0:9 move second child to first child ( temp mediump int) +0:9 'f3' ( temp mediump int) +0:9 Constant: +0:9 9 (const int) +0:10 Sequence +0:10 move second child to first child ( temp mediump int) +0:10 'f4' ( temp mediump int) +0:10 Constant: +0:10 1 (const int) +0:11 Sequence +0:11 move second child to first child ( temp mediump int) +0:11 'f5' ( temp mediump int) +0:11 Constant: +0:11 5 (const int) +0:? Linker Objects + diff --git a/Test/baseResults/cppSimple.vert.out b/Test/baseResults/cppSimple.vert.out index 1b6e6b50d824270a5eba9f429986c38f6ea174b1..edb0c3378a06fe72a714e2ca786c262c57d6f2d7 100644 --- a/Test/baseResults/cppSimple.vert.out +++ b/Test/baseResults/cppSimple.vert.out @@ -75,10 +75,8 @@ ERROR: 12:20051: '#error' : good evaluation 1 ERROR: 12:20055: '#error' : good evaluation 2 ERROR: 12:9000: 'preprocessor evaluation' : expected ')' ERROR: 12:9002: '#if' : unexpected tokens following directive -ERROR: 12:9014: 'macro expansion' : expected '(' following FOOOM ERROR: 12:9014: 'FOOOM' : undeclared identifier ERROR: 12:9014: '=' : cannot convert from ' temp float' to ' global int' -ERROR: 12:9015: 'macro expansion' : expected '(' following FOOOM ERROR: 12:9016: 'preprocessor evaluation' : can't evaluate expression ERROR: 12:9016: 'preprocessor evaluation' : bad expression ERROR: 12:9500: 'preprocessor evaluation' : bad expression @@ -93,7 +91,7 @@ ERROR: 12:9508: '#error' : \ 377 ERROR: 12:9602: 'defined' : cannot use in preprocessor expression when expanded from macros ERROR: 12:9603: '#error' : DEF_DEFINED then ERROR: 12:10002: '' : missing #endif -ERROR: 90 compilation errors. No code generated. +ERROR: 88 compilation errors. No code generated. Shader version: 400 diff --git a/Test/cppPassMacroName.frag b/Test/cppPassMacroName.frag new file mode 100644 index 0000000000000000000000000000000000000000..f42d9de6d5b968f830df563b3bfe325bb83a2263 --- /dev/null +++ b/Test/cppPassMacroName.frag @@ -0,0 +1,12 @@ +#define f1(i) ((i)*(i)) +#define I2(f, n) f(n) + f(n+1) +#define I3(f, n) I2(f, n) + f(n+2) + +void main() +{ + int f1 = 4; + int f2 = f1; + int f3 = f1(3); + int f4 = I2(f1, 0); + int f5 = I3(f1, 0); +} diff --git a/glslang/MachineIndependent/preprocessor/Pp.cpp b/glslang/MachineIndependent/preprocessor/Pp.cpp index aeb42a09a6fed888d5589da4374e6339a579a2d7..3ae711c86c1087c196007bcd0cf17570a03ac87e 100644 --- a/glslang/MachineIndependent/preprocessor/Pp.cpp +++ b/glslang/MachineIndependent/preprocessor/Pp.cpp @@ -1157,7 +1157,6 @@ int TPpContext::MacroExpand(TPpToken* ppToken, bool expandUndef, bool newLineOka } MacroSymbol* macro = macroAtom == 0 ? nullptr : lookupMacroDef(macroAtom); - int token; int depth = 0; // no recursive expansions @@ -1179,13 +1178,12 @@ int TPpContext::MacroExpand(TPpToken* ppToken, bool expandUndef, bool newLineOka TSourceLoc loc = ppToken->loc; // in case we go to the next line before discovering the error in->mac = macro; if (macro->args.size() > 0 || macro->emptyArgs) { - token = scanToken(ppToken); + int token = scanToken(ppToken); if (newLineOkay) { while (token == '\n') token = scanToken(ppToken); } if (token != '(') { - parseContext.ppError(loc, "expected '(' following", "macro expansion", atomStrings.getString(macroAtom)); UngetToken(token, ppToken); delete in; return 0; diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp index 7d77825e036b409882a3aa63e947b588b850019f..5f6de4f6d509a55979401d2064ba758ff3ea0af0 100644 --- a/gtests/AST.FromFile.cpp +++ b/gtests/AST.FromFile.cpp @@ -84,6 +84,7 @@ INSTANTIATE_TEST_CASE_P( "cppBad2.vert", "cppComplexExpr.vert", "cppDeepNest.frag", + "cppPassMacroName.frag", "badChars.frag", "pointCoord.frag", "array.frag",