From: Ian Romanick Date: Mon, 10 Jan 2011 21:33:07 +0000 (-0800) Subject: glcpp: Generate an error for division by zero X-Git-Tag: mesa-7.11-rc1~2847 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9ca5300b6e781150cec903c73cf5fd8e1deee2f1;p=platform%2Fupstream%2Fmesa.git 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. --- diff --git a/src/glsl/glcpp/glcpp-parse.y b/src/glsl/glcpp/glcpp-parse.y index 148b0ff..e71c0e8 100644 --- a/src/glsl/glcpp/glcpp-parse.y +++ b/src/glsl/glcpp/glcpp-parse.y @@ -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;