[Mesa-stable] [Mesa-dev] [PATCH] glsl: ignore trailing whitespace when define redefined
Ian Romanick
idr at freedesktop.org
Wed Oct 10 02:46:36 UTC 2018
It took me a second to grok what was happening in the test case... it
looked like both definitions of EIGHT were identical. :)
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
On 10/09/2018 05:03 PM, Timothy Arceri wrote:
> The Nvidia/AMD binary drivers allow this, as does GCC.
>
> This fixes shader compilation issues in the latest update of
> No Mans Sky.
>
> Cc: mesa-stable at lists.freedesktop.org
> ---
> src/compiler/glsl/glcpp/glcpp-parse.y | 14 ++++++++++++++
> .../glsl/glcpp/tests/122-redefine-whitespace.c | 4 ++++
> .../glcpp/tests/122-redefine-whitespace.c.expected | 10 +++++++---
> 3 files changed, 25 insertions(+), 3 deletions(-)
>
> diff --git a/src/compiler/glsl/glcpp/glcpp-parse.y b/src/compiler/glsl/glcpp/glcpp-parse.y
> index 4be5cfa3d54..1c095cb66f9 100644
> --- a/src/compiler/glsl/glcpp/glcpp-parse.y
> +++ b/src/compiler/glsl/glcpp/glcpp-parse.y
> @@ -1074,6 +1074,20 @@ _token_list_equal_ignoring_space(token_list_t *a, token_list_t *b)
>
> while (1)
> {
> + if (node_a == NULL && node_b == NULL)
> + break;
> +
> + /* Ignore trailing whitespace */
> + if (node_a == NULL && node_b->token->type == SPACE) {
> + while (node_b && node_b->token->type == SPACE)
> + node_b = node_b->next;
> + }
> +
> + if (node_b == NULL && node_a->token->type == SPACE) {
> + while (node_a && node_a->token->type == SPACE)
> + node_a = node_a->next;
> + }
> +
> if (node_a == NULL && node_b == NULL)
> break;
>
> diff --git a/src/compiler/glsl/glcpp/tests/122-redefine-whitespace.c b/src/compiler/glsl/glcpp/tests/122-redefine-whitespace.c
> index ae7ea09f67e..2b084e0960a 100644
> --- a/src/compiler/glsl/glcpp/tests/122-redefine-whitespace.c
> +++ b/src/compiler/glsl/glcpp/tests/122-redefine-whitespace.c
> @@ -2,6 +2,7 @@
> #define TWO ( 1+1 )
> #define FOUR (2 + 2)
> #define SIX (3 + 3)
> +#define EIGHT (8 + 8)
>
> /* Redefinitions with whitespace in same places, but different amounts, (so no
> * error). */
> @@ -9,6 +10,9 @@
> #define FOUR (2 + 2)
> #define SIX (3/*comment is whitespace*/+ /* collapsed */ /* to */ /* one */ /* space */ 3)
>
> +/* Trailing whitespace (no error) */
> +#define EIGHT (8 + 8)
> +
> /* Redefinitions with whitespace in different places. Each of these should
> * trigger an error. */
> #define TWO (1 + 1)
> diff --git a/src/compiler/glsl/glcpp/tests/122-redefine-whitespace.c.expected b/src/compiler/glsl/glcpp/tests/122-redefine-whitespace.c.expected
> index 602bdef94c2..766849e34a9 100644
> --- a/src/compiler/glsl/glcpp/tests/122-redefine-whitespace.c.expected
> +++ b/src/compiler/glsl/glcpp/tests/122-redefine-whitespace.c.expected
> @@ -1,14 +1,15 @@
> -0:14(9): preprocessor error: Redefinition of macro TWO
> +0:18(9): preprocessor error: Redefinition of macro TWO
>
> -0:15(9): preprocessor error: Redefinition of macro FOUR
> +0:19(9): preprocessor error: Redefinition of macro FOUR
>
> -0:16(9): preprocessor error: Redefinition of macro SIX
> +0:20(9): preprocessor error: Redefinition of macro SIX
>
>
>
>
>
>
> +
>
>
>
> @@ -18,5 +19,8 @@
>
>
>
> +
> +
> +
>
>
>
More information about the mesa-stable
mailing list