[Mesa-dev] [PATCH 2/2] glsl: Don't choke on an empty pragma

Carl Worth cworth at cworth.org
Fri Jun 13 16:04:44 PDT 2014

The lexer was insisting that there be at least one character after "#pragma"
and before the end of the line. This caused an error for a line consisting
only of "#pragma" which volates at least the following sentence from the GLSL
ES Specification 3.00.4:

	The scope as well as the effect of the optimize and debug pragmas is
	implementation-dependent except that their use must not generate an
	error. [Page 12 (Page 28 of PDF)]

and likely the following sentence from that specification and also in
GLSLangSpec 4.30.6:

	If an implementation does not recognize the tokens following #pragma,
	then it will ignore that pragma.

Add a "make check" test to ensure no future regressions.

This change fixes at least part of the following Khronos GLES3 CTS test:

 src/glsl/glcpp/glcpp-lex.l                       | 2 +-
 src/glsl/glcpp/tests/127-pragma-empty.c          | 3 +++
 src/glsl/glcpp/tests/127-pragma-empty.c.expected | 4 ++++
 3 files changed, 8 insertions(+), 1 deletion(-)
 create mode 100644 src/glsl/glcpp/tests/127-pragma-empty.c
 create mode 100644 src/glsl/glcpp/tests/127-pragma-empty.c.expected

diff --git a/src/glsl/glcpp/glcpp-lex.l b/src/glsl/glcpp/glcpp-lex.l
index 2b818dc..88e2818 100644
--- a/src/glsl/glcpp/glcpp-lex.l
+++ b/src/glsl/glcpp/glcpp-lex.l
@@ -180,7 +180,7 @@ HEXADECIMAL_INTEGER	0[xX][0-9a-fA-F]+[uU]?
 	/* glcpp doesn't handle #extension, #version, or #pragma directives.
 	 * Simply pass them through to the main compiler's lexer/parser. */
-{HASH}(extension|pragma)[^\n]+ {
+{HASH}(extension|pragma)[^\n]* {
 	if (parser->commented_newlines)
 	yylval->str = ralloc_strdup (yyextra, yytext);
diff --git a/src/glsl/glcpp/tests/127-pragma-empty.c b/src/glsl/glcpp/tests/127-pragma-empty.c
new file mode 100644
index 0000000..0f9b0b3
--- /dev/null
+++ b/src/glsl/glcpp/tests/127-pragma-empty.c
@@ -0,0 +1,3 @@
+/* It seems an odd (and particularly useless) thing to have an empty pragma,
+ * but we probably shouldn't trigger an error in this case. */
diff --git a/src/glsl/glcpp/tests/127-pragma-empty.c.expected b/src/glsl/glcpp/tests/127-pragma-empty.c.expected
new file mode 100644
index 0000000..957daff
--- /dev/null
+++ b/src/glsl/glcpp/tests/127-pragma-empty.c.expected
@@ -0,0 +1,4 @@

More information about the mesa-dev mailing list