Fix #1079: don't give error when macro() name used without open (.

This commit is contained in:
John Kessenich 2017-11-02 06:48:32 -06:00
parent e8d21388ed
commit 88e22a6090
6 changed files with 83 additions and 8 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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);
}

View File

@ -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;

View File

@ -84,6 +84,7 @@ INSTANTIATE_TEST_CASE_P(
"cppBad2.vert",
"cppComplexExpr.vert",
"cppDeepNest.frag",
"cppPassMacroName.frag",
"badChars.frag",
"pointCoord.frag",
"array.frag",