From 5dbdc341e8e8502ab5d98784a24b54c6f3907472 Mon Sep 17 00:00:00 2001 From: Carl Worth Date: Fri, 20 Jun 2014 14:28:20 -0700 Subject: [PATCH] glsl/glcpp: Add testing for EOF sans newline (and fix for , ) The glcpp implementation has long had code to support a file that ends without a final newline. But we didn't have a "make check" test for this. Additionally, the action was restricted only to the state so it would fail to get invoked if the EOF was encountered in the or the case. Neither of these was a bug, per se, since EOF in either of these cases is an error anyway, (either "unterminated comment" or "missing macro name for #define"). But with the new explicit support for these cases, we not generate clean error messages in these cases, (rather than "unexpected $end" from before). Reviewed-by: Jordan Justen --- src/glsl/glcpp/glcpp-lex.l | 7 +++++-- src/glsl/glcpp/tests/131-eof-without-newline.c | 1 + src/glsl/glcpp/tests/131-eof-without-newline.c.expected | 1 + src/glsl/glcpp/tests/132-eof-without-newline-define.c | 1 + .../glcpp/tests/132-eof-without-newline-define.c.expected | 2 ++ src/glsl/glcpp/tests/133-eof-without-newline-comment.c | 1 + .../glcpp/tests/133-eof-without-newline-comment.c.expected | 2 ++ 7 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 src/glsl/glcpp/tests/131-eof-without-newline.c create mode 100644 src/glsl/glcpp/tests/131-eof-without-newline.c.expected create mode 100644 src/glsl/glcpp/tests/132-eof-without-newline-define.c create mode 100644 src/glsl/glcpp/tests/132-eof-without-newline-define.c.expected create mode 100644 src/glsl/glcpp/tests/133-eof-without-newline-comment.c create mode 100644 src/glsl/glcpp/tests/133-eof-without-newline-comment.c.expected diff --git a/src/glsl/glcpp/glcpp-lex.l b/src/glsl/glcpp/glcpp-lex.l index 5f0bb324990..44547fde0e9 100644 --- a/src/glsl/glcpp/glcpp-lex.l +++ b/src/glsl/glcpp/glcpp-lex.l @@ -398,8 +398,11 @@ HEXADECIMAL_INTEGER 0[xX][0-9a-fA-F]+[uU]? return NEWLINE; } - /* Handle missing newline at EOF. */ -<> { +<> { + if (YY_START == COMMENT) + glcpp_error(yylloc, yyextra, "Unterminated comment"); + if (YY_START == DEFINE) + glcpp_error(yylloc, yyextra, "#define without macro name"); BEGIN DONE; /* Don't keep matching this rule forever. */ yyextra->lexing_directive = 0; return NEWLINE; diff --git a/src/glsl/glcpp/tests/131-eof-without-newline.c b/src/glsl/glcpp/tests/131-eof-without-newline.c new file mode 100644 index 00000000000..240292dad01 --- /dev/null +++ b/src/glsl/glcpp/tests/131-eof-without-newline.c @@ -0,0 +1 @@ +this file ends with no newline \ No newline at end of file diff --git a/src/glsl/glcpp/tests/131-eof-without-newline.c.expected b/src/glsl/glcpp/tests/131-eof-without-newline.c.expected new file mode 100644 index 00000000000..57800306322 --- /dev/null +++ b/src/glsl/glcpp/tests/131-eof-without-newline.c.expected @@ -0,0 +1 @@ +this file ends with no newline diff --git a/src/glsl/glcpp/tests/132-eof-without-newline-define.c b/src/glsl/glcpp/tests/132-eof-without-newline-define.c new file mode 100644 index 00000000000..6795e35ea00 --- /dev/null +++ b/src/glsl/glcpp/tests/132-eof-without-newline-define.c @@ -0,0 +1 @@ +#define \ No newline at end of file diff --git a/src/glsl/glcpp/tests/132-eof-without-newline-define.c.expected b/src/glsl/glcpp/tests/132-eof-without-newline-define.c.expected new file mode 100644 index 00000000000..a3ace0f3966 --- /dev/null +++ b/src/glsl/glcpp/tests/132-eof-without-newline-define.c.expected @@ -0,0 +1,2 @@ +0:1(2): preprocessor error: #define without macro name +0:1(2): preprocessor error: syntax error, unexpected NEWLINE, expecting FUNC_IDENTIFIER or OBJ_IDENTIFIER diff --git a/src/glsl/glcpp/tests/133-eof-without-newline-comment.c b/src/glsl/glcpp/tests/133-eof-without-newline-comment.c new file mode 100644 index 00000000000..56ec5f722c0 --- /dev/null +++ b/src/glsl/glcpp/tests/133-eof-without-newline-comment.c @@ -0,0 +1 @@ +This file ends with no newline within a comment /* \ No newline at end of file diff --git a/src/glsl/glcpp/tests/133-eof-without-newline-comment.c.expected b/src/glsl/glcpp/tests/133-eof-without-newline-comment.c.expected new file mode 100644 index 00000000000..506eb561756 --- /dev/null +++ b/src/glsl/glcpp/tests/133-eof-without-newline-comment.c.expected @@ -0,0 +1,2 @@ +0:1(52): preprocessor error: Unterminated comment +This file ends with no newline within a comment -- 2.30.2