glcpp: Fix "unterminated if" diagnostic.
authorCarl Worth <cworth@cworth.org>
Wed, 11 Aug 2010 21:09:11 +0000 (14:09 -0700)
committerCarl Worth <cworth@cworth.org>
Wed, 11 Aug 2010 21:38:04 +0000 (14:38 -0700)
This was previously being appended to the output string *after* a copy
of the supposedly final string was made and handed to the caller. So
the diagnostic was never actually visible to the user.

We fix this by moving the check for an unterminated #if from
glcpp_parser_destroy to the calling function, preprocess.

This fixes the test case 083-unterminated-if.c.

src/glsl/glcpp/glcpp-parse.c
src/glsl/glcpp/glcpp-parse.y
src/glsl/glcpp/pp.c
src/glsl/glcpp/tests/083-unterminated-if.c.expected [new file with mode: 0644]

index fe7549e5c5fcc097b395b88c293f30d10a2fb620..df26899a0f0181342ec88cd5d484e31cb0d95e38 100644 (file)
@@ -3333,8 +3333,6 @@ glcpp_parser_parse (glcpp_parser_t *parser)
 void
 glcpp_parser_destroy (glcpp_parser_t *parser)
 {
-       if (parser->skip_stack)
-               glcpp_error (&parser->skip_stack->loc, parser, "Unterminated #if\n");
        glcpp_lex_destroy (parser->scanner);
        hash_table_dtor (parser->defines);
        talloc_free (parser);
index 0e0d9d412b675aa3f41392d3f6ed6d2523e42acf..7b08cd5807c6bd7a6356805ccb9fffeee33adc20 100644 (file)
@@ -1016,8 +1016,6 @@ glcpp_parser_parse (glcpp_parser_t *parser)
 void
 glcpp_parser_destroy (glcpp_parser_t *parser)
 {
-       if (parser->skip_stack)
-               glcpp_error (&parser->skip_stack->loc, parser, "Unterminated #if\n");
        glcpp_lex_destroy (parser->scanner);
        hash_table_dtor (parser->defines);
        talloc_free (parser);
index 3adccf72aabcc85d009a5fe86d5ce6a60827b173..52b6e96a65f544cee04d7ec9d27bdeccfceb5e48 100644 (file)
@@ -151,6 +151,9 @@ preprocess(void *talloc_ctx, const char **shader, char **info_log,
 
        glcpp_parser_parse (parser);
 
+       if (parser->skip_stack)
+               glcpp_error (&parser->skip_stack->loc, parser, "Unterminated #if\n");
+
        *info_log = talloc_strdup_append(*info_log, parser->info_log);
 
        talloc_steal(talloc_ctx, parser->output);
diff --git a/src/glsl/glcpp/tests/083-unterminated-if.c.expected b/src/glsl/glcpp/tests/083-unterminated-if.c.expected
new file mode 100644 (file)
index 0000000..a69f8ba
--- /dev/null
@@ -0,0 +1,5 @@
+0:1(7): preprocessor error: Unterminated #if
+
+
+
+