summaryrefslogtreecommitdiffstats
path: root/src/glsl/glcpp/README
diff options
context:
space:
mode:
authorCarl Worth <[email protected]>2010-08-23 11:38:45 -0700
committerCarl Worth <[email protected]>2011-01-28 15:16:36 +1000
commitd3df641f0aba99b0b65ecd4d9b06798bca090a29 (patch)
treed86a67214443202a65f0b986162b68c7a2cb09ff /src/glsl/glcpp/README
parent476db2bd3d72440f54ff57c23da05dc1d624fee9 (diff)
glcpp: Demote "macro redefined" from an error to a warning
The GLSL specification is vague here, (just says "as is standard for C++"), though the C specifications seem quite clear that this should be an error. However, an existing piglit test (CorrectPreprocess11.frag) expects this to be a warning, not an error, so we change this, and document in README the deviation from the specification.
Diffstat (limited to 'src/glsl/glcpp/README')
-rw-r--r--src/glsl/glcpp/README25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/glsl/glcpp/README b/src/glsl/glcpp/README
index 0b5ef508ce9..9cc00e92750 100644
--- a/src/glsl/glcpp/README
+++ b/src/glsl/glcpp/README
@@ -29,4 +29,27 @@ The __LINE__ and __FILE__ macros are not yet supported.
A file that ends with a function-like macro name as the last
non-whitespace token will result in a parse error, (where it should be
-passed through as is). \ No newline at end of file
+passed through as is).
+
+Known deviations from the specification
+---------------------------------------
+As mentoned above, the GLSL specification (as of 1.30.10) is fairly
+vague on some aspects of the preprocessor, and we've been using C99 to
+fill in details. Here is a list of cases where we have deviated from
+the behavior specified in C99 to obtain better compatibility with
+other GLSL implementations:
+
+ * Redefining a macro with a different value
+
+ C89 says that a macro "may be redefined ... provided that the
+ second definition [is equivalent]" (Section 3.8.3 Macro
+ Replacement/constraints)
+
+ C99 is even more explicit, saying tthat a macro "shall not be
+ redefined by another #define preprocessing directive unless the
+ second definition [is equivalent]" (Section 6.10.3 Macro
+ Replacement/Constraints)
+
+ In spite of this, glcpp emits a warning rather than an error for
+ non-equivalent redefinition of macros since this matches the
+ behavior of other, widely-used implementations.