glsl/glcpp: Fix #pragma to not over-increment the line-number count
authorCarl Worth <cworth@cworth.org>
Wed, 2 Jul 2014 17:27:50 +0000 (10:27 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Thu, 7 Aug 2014 23:08:29 +0000 (16:08 -0700)
Previously, the #pragma directive was swallowing an entire line, (including
the final newline). At that time it was appropriate for it to increment the
line count.

More recently, our handling of #pragma changed to not include the newline. But
the code to increment yylineno stuck around. This was causing __LINE__ to be
increased by one more than desired for every #pragma.

Remove the bogus, extra increment, and add a test for this case.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
src/glsl/glcpp/glcpp-lex.l
src/glsl/glcpp/tests/141-pragma-and-__LINE__.c [new file with mode: 0644]
src/glsl/glcpp/tests/141-pragma-and-__LINE__.c.expected [new file with mode: 0644]

index 2b92fd37e2b6df47d1a71adfc5ecc2d57c017323..430abd4bfa31a269e39c42e2ebf0f5eb85b41e85 100644 (file)
@@ -291,8 +291,6 @@ HEXADECIMAL_INTEGER 0[xX][0-9a-fA-F]+[uU]?
         * Simply pass them through to the main compiler's lexer/parser. */
 <HASH>(extension|pragma)[^\r\n]* {
        BEGIN INITIAL;
-       yylineno++;
-       yycolumn = 0;
        RETURN_STRING_TOKEN (PRAGMA);
 }
 
diff --git a/src/glsl/glcpp/tests/141-pragma-and-__LINE__.c b/src/glsl/glcpp/tests/141-pragma-and-__LINE__.c
new file mode 100644 (file)
index 0000000..a93f3ce
--- /dev/null
@@ -0,0 +1,6 @@
+Line 1 /* Test for a bug where #pragma was throwing off the __LINE__ count. */
+Line __LINE__ /* Line 2 */
+#pragma Line 3
+Line __LINE__ /* Line 4 */
+#pragma Line 5
+Line __LINE__ /* Line 6 */
diff --git a/src/glsl/glcpp/tests/141-pragma-and-__LINE__.c.expected b/src/glsl/glcpp/tests/141-pragma-and-__LINE__.c.expected
new file mode 100644 (file)
index 0000000..330731d
--- /dev/null
@@ -0,0 +1,6 @@
+Line 1
+Line 2
+#pragma Line 3
+Line 4
+#pragma Line 5
+Line 6