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:
@@ -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;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user