glcpp: Reject garbage after #else and #endif tokens
Previously we were accepting garbage after #else and #endif tokens when the previous preprocessor conditional evaluated to false (eg, #if 0). When the preprocessor hits a false conditional, it switches the lexer into the SKIP state, in which it ignores non-control tokens. The parser pops the SKIP state off the stack when it reaches the associated #elif, #else, or #endif. Unfortunately, that meant that it only left the SKIP state after the lexing the entire line containing the #token and thus would accept garbage after the #token. To fix this we use a mid-rule, which is executed immediately after the #token is parsed. NOTE: This is a candidate for the stable branch Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=56442 Fixes: preprocess17_frag.test from oglconform Reviewed-by: Carl Worth <cworth@cworth.org> (glcpp-parse.y) Acked-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
2
src/glsl/glcpp/tests/102-garbage-after-endif.c.expected
Normal file
2
src/glsl/glcpp/tests/102-garbage-after-endif.c.expected
Normal file
@@ -0,0 +1,2 @@
|
||||
0:2(8): preprocessor error: syntax error, unexpected IDENTIFIER, expecting NEWLINE
|
||||
|
Reference in New Issue
Block a user