glcpp: Generate an error for division by zero

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.
This commit is contained in:
Ian Romanick
2011-01-10 13:33:07 -08:00
parent 4e09a786d2
commit 9ca5300b6e

View File

@@ -398,8 +398,13 @@ expression:
$$ = $1 % $3; $$ = $1 % $3;
} }
| expression '/' expression { | expression '/' expression {
if ($3 == 0) {
yyerror (& @1, parser,
"division by 0 in preprocessor directive");
} else {
$$ = $1 / $3; $$ = $1 / $3;
} }
}
| expression '*' expression { | expression '*' expression {
$$ = $1 * $3; $$ = $1 * $3;
} }