Re: [Mesa-dev] [PATCH] glsl: ignore trailing whitespace when define redefined

2018-10-09 Thread Ian Romanick
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 

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-sta...@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 @@
>   
>  
>  
> + 
> +
> +
>  
>  
> 

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH] glsl: ignore trailing whitespace when define redefined

2018-10-09 Thread Timothy Arceri
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-sta...@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 @@
  
 
 
+ 
+
+
 
 
-- 
2.17.1

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev