Skip to content
Snippets Groups Projects
Commit d2762564 authored by John Kessenich's avatar John Kessenich
Browse files

Preprocessor: Prevent (and give an error on) expression division by 0.

parent e9022e1f
No related branches found
No related tags found
No related merge requests found
......@@ -42,8 +42,12 @@ ERROR: 0:3006: '#undef' : predefined names can't be (un)defined: __LINE__
ERROR: 0:3007: '#undef' : predefined names can't be (un)defined: __FILE__
ERROR: 0:3008: '#undef' : predefined names can't be (un)defined: __VERSION__
ERROR: 0:3009: '#undef' : names beginning with "GL_" can't be (un)defined: GL_SOME_EXTENSION
ERROR: 0:4000: 'preprocessor evaluation' : division by 0
ERROR: 0:0: 'preprocessor evaluation' : division by 0
ERROR: 0:3: 'preprocessor evaluation' : bad expression
ERROR: 0:3: 'preprocessor evaluation' : division by 0
ERROR: 0:10001: '' : missing #endif
ERROR: 44 compilation errors. No code generated.
ERROR: 48 compilation errors. No code generated.
Shader version: 300
......
......@@ -171,6 +171,13 @@ float c = foobar(1.1, 2.2
#undef __VERSION__
#undef GL_SOME_EXTENSION
#line 4000
#line 200 % 0 // ERROR, div by 0
#if __LINE__ / 0 // ERROR, div by 0
#endif
#if 7% // ERROR incomplete expression
#line 10000
#if 0
// ERROR, EOF
\ No newline at end of file
......@@ -505,6 +505,13 @@ int TPpContext::eval(int token, int precedence, bool shortCircuit, int& res, boo
token = scanToken(ppToken);
token = eval(token, binop[op].precedence, shortCircuit, res, err, ppToken);
if (binop[op].op == op_div || binop[op].op == op_mod) {
if (res == 0) {
parseContext.ppError(loc, "division by 0", "preprocessor evaluation", "");
res = 1;
}
}
res = binop[op].op(leftSide, res);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment