Shader can define #version as an integer, including 0. Initializes version to -1 to know later if shader has defined a #version or not.
It fixes 4 piglit tests: spec/glsl-1.10/compiler/version-0.frag: crash pass spec/glsl-1.10/compiler/version-0.vert: crash pass spec/glsl-es-3.00/compiler/version-0.frag: crash pass spec/glsl-es-3.00/compiler/version-0.vert: crash pass Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97420 --- src/compiler/glsl/glcpp/glcpp-parse.y | 8 ++++---- src/compiler/glsl/glcpp/glcpp.h | 2 +- src/compiler/glsl/glsl_lexer.ll | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/compiler/glsl/glcpp/glcpp-parse.y b/src/compiler/glsl/glcpp/glcpp-parse.y index b80ff04..6207a62 100644 --- a/src/compiler/glsl/glcpp/glcpp-parse.y +++ b/src/compiler/glsl/glcpp/glcpp-parse.y @@ -420,13 +420,13 @@ control_line_success: _glcpp_parser_skip_stack_pop (parser, & @1); } NEWLINE | HASH_TOKEN VERSION_TOKEN integer_constant NEWLINE { - if (parser->version != 0) { + if (parser->version != -1) { glcpp_error(& @1, parser, "#version must appear on the first line"); } _glcpp_parser_handle_version_declaration(parser, $3, NULL, true); } | HASH_TOKEN VERSION_TOKEN integer_constant IDENTIFIER NEWLINE { - if (parser->version != 0) { + if (parser->version != -1) { glcpp_error(& @1, parser, "#version must appear on the first line"); } _glcpp_parser_handle_version_declaration(parser, $3, $4, true); @@ -1360,7 +1360,7 @@ glcpp_parser_create(glcpp_extension_iterator extensions, void *state, gl_api api parser->extensions = extensions; parser->state = state; parser->api = api; - parser->version = 0; + parser->version = -1; parser->has_new_line_number = 0; parser->new_line_number = 1; @@ -2293,7 +2293,7 @@ _glcpp_parser_handle_version_declaration(glcpp_parser_t *parser, intmax_t versio const char *es_identifier, bool explicitly_set) { - if (parser->version != 0) + if (parser->version != -1) return; parser->version = version; diff --git a/src/compiler/glsl/glcpp/glcpp.h b/src/compiler/glsl/glcpp/glcpp.h index bb4ad67..2acac0c 100644 --- a/src/compiler/glsl/glcpp/glcpp.h +++ b/src/compiler/glsl/glcpp/glcpp.h @@ -207,7 +207,7 @@ struct glcpp_parser { glcpp_extension_iterator extensions; void *state; gl_api api; - unsigned version; + int version; bool has_new_line_number; int new_line_number; bool has_new_source_number; diff --git a/src/compiler/glsl/glsl_lexer.ll b/src/compiler/glsl/glsl_lexer.ll index b473af7..7d1d616 100644 --- a/src/compiler/glsl/glsl_lexer.ll +++ b/src/compiler/glsl/glsl_lexer.ll @@ -249,7 +249,7 @@ HASH ^{SPC}#{SPC} yylval->identifier = linear_strdup(mem_ctx, yytext); return IDENTIFIER; } -<PP>[1-9][0-9]* { +<PP>[0-9][0-9]* { yylval->n = strtol(yytext, NULL, 10); return INTCONSTANT; } -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev