glcpp: Generate an error for division by zero
authorIan Romanick <ian.d.romanick@intel.com>
Mon, 10 Jan 2011 21:33:07 +0000 (13:33 -0800)
committerIan Romanick <ian.d.romanick@intel.com>
Tue, 11 Jan 2011 01:37:51 +0000 (17:37 -0800)
When GCC encounters a division by zero in a preprocessor directive, it
generates an error.  Since the GLSL spec says that the GLSL
preprocessor behaves like the C preprocessor, we should generate that
same error.

It's worth noting that I cannot find any text in the C99 spec that
says this should be an error.  The only text that I can find is line 5
on page 82 (section 6.5.5 Multiplicative Opertors), which says,

    "The result of the / operator is the quotient from the division of
    the first operand by the second; the result of the % operator is
    the remainder. In both operations, if the value of the second
    operand is zero, the behavior is undefined."

Fixes 093-divide-by-zero.c test and bugzilla #32831.

NOTE: This is a candidate for the 7.9 and 7.10 branches.

src/glsl/glcpp/glcpp-parse.y

index 148b0ffc7b45e0049f1e067cca2ae372416f2ace..e71c0e8b38217bba1379dd04d97b358516cbfe8d 100644 (file)
@@ -398,7 +398,12 @@ expression:
                $$ = $1 % $3;
        }
 |      expression '/' expression {
-               $$ = $1 / $3;
+               if ($3 == 0) {
+                       yyerror (& @1, parser,
+                                "division by 0 in preprocessor directive");
+               } else {
+                       $$ = $1 / $3;
+               }
        }
 |      expression '*' expression {
                $$ = $1 * $3;