Mesa (glsl2): glcpp: Fix "unterminated if" diagnostic.

Carl Worth cworth at kemper.freedesktop.org
Wed Aug 11 21:38:10 UTC 2010


Module: Mesa
Branch: glsl2
Commit: da6b10a7eb26c8a13056cbae9015d5b84f134142
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=da6b10a7eb26c8a13056cbae9015d5b84f134142

Author: Carl Worth <cworth at cworth.org>
Date:   Wed Aug 11 14:09:11 2010 -0700

glcpp: Fix "unterminated if" diagnostic.

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                       |    2 --
 src/glsl/glcpp/glcpp-parse.y                       |    2 --
 src/glsl/glcpp/pp.c                                |    3 +++
 .../glcpp/tests/083-unterminated-if.c.expected     |    5 +++++
 4 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/glsl/glcpp/glcpp-parse.c b/src/glsl/glcpp/glcpp-parse.c
index fe7549e..df26899 100644
--- a/src/glsl/glcpp/glcpp-parse.c
+++ b/src/glsl/glcpp/glcpp-parse.c
@@ -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);
diff --git a/src/glsl/glcpp/glcpp-parse.y b/src/glsl/glcpp/glcpp-parse.y
index 0e0d9d4..7b08cd5 100644
--- a/src/glsl/glcpp/glcpp-parse.y
+++ b/src/glsl/glcpp/glcpp-parse.y
@@ -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);
diff --git a/src/glsl/glcpp/pp.c b/src/glsl/glcpp/pp.c
index 3adccf7..52b6e96 100644
--- a/src/glsl/glcpp/pp.c
+++ b/src/glsl/glcpp/pp.c
@@ -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
index 0000000..a69f8ba
--- /dev/null
+++ b/src/glsl/glcpp/tests/083-unterminated-if.c.expected
@@ -0,0 +1,5 @@
+0:1(7): preprocessor error: Unterminated #if
+
+
+
+




More information about the mesa-commit mailing list