glsl: fixer lexer for unreachable defines
authorTimothy Arceri <tarceri@itsqueeze.com>
Sat, 1 Sep 2018 13:57:38 +0000 (23:57 +1000)
committerTimothy Arceri <tarceri@itsqueeze.com>
Thu, 6 Sep 2018 00:13:21 +0000 (10:13 +1000)
commitb9fe8ff23dcfe4956be1eac4de0838d4a3720315
tree6b67cbebef5bc34151ff374e76f89a8093dbbbd1
parent2454742a8447ef021bfbb17f1e87e59bc8cbfcb6
glsl: fixer lexer for unreachable defines

If we have something like:

   #ifdef NOT_DEFINED
   #define A_MACRO(x) \
if (x)
   #endif

The # on the #define is not skipped but the define itself is so
this then gets recognised as #if.

Until 28a3731e3f this didn't happen because we ended up in
<HASH>{NONSPACE} where BEGIN INITIAL was called stopping the
problem from happening.

This change makes sure we never call RETURN_TOKEN_NEVER_SKIP for
if/else/endif when processing a define.

Cc: Ian Romanick <idr@freedesktop.org>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107772
Tested-By: Eero Tamminen <eero.t.tamminen@intel.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/compiler/glsl/glcpp/glcpp-lex.l
src/compiler/glsl/glcpp/glcpp.h