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).
-
-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.
+passed through as is).
\ No newline at end of file
talloc_free (macro);
return;
}
- glcpp_warning (loc, parser, "Redefinition of macro %s\n",
- identifier);
+ glcpp_error (loc, parser, "Redefinition of macro %s\n",
+ identifier);
}
hash_table_insert (parser->defines, macro, identifier);
talloc_free (macro);
return;
}
- glcpp_warning (loc, parser, "Redefinition of macro %s\n",
- identifier);
+ glcpp_error (loc, parser, "Redefinition of macro %s\n",
+ identifier);
}
hash_table_insert (parser->defines, macro, identifier);
talloc_free (macro);
return;
}
- glcpp_warning (loc, parser, "Redefinition of macro %s\n",
- identifier);
+ glcpp_error (loc, parser, "Redefinition of macro %s\n",
+ identifier);
}
hash_table_insert (parser->defines, macro, identifier);
talloc_free (macro);
return;
}
- glcpp_warning (loc, parser, "Redefinition of macro %s\n",
- identifier);
+ glcpp_error (loc, parser, "Redefinition of macro %s\n",
+ identifier);
}
hash_table_insert (parser->defines, macro, identifier);
-0:2(9): preprocessor warning: Redefinition of macro x
+0:2(9): preprocessor error: Redefinition of macro x
-0:5(9): preprocessor warning: Redefinition of macro abc
+0:5(9): preprocessor error: Redefinition of macro abc
-0:8(9): preprocessor warning: Redefinition of macro foo
+0:8(9): preprocessor error: Redefinition of macro foo
-0:11(9): preprocessor warning: Redefinition of macro bar
+0:11(9): preprocessor error: Redefinition of macro bar
-0:14(9): preprocessor warning: Redefinition of macro biff
+0:14(9): preprocessor error: Redefinition of macro biff
-0:17(9): preprocessor warning: Redefinition of macro oper
+0:17(9): preprocessor error: Redefinition of macro oper