diff options
author | Kenneth Graunke <[email protected]> | 2016-11-12 11:27:17 -0800 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2016-11-12 22:08:15 -0800 |
commit | 9c676a64273f32c7fb3f2b6973399af1d7f24d46 (patch) | |
tree | 45b0f1920e63551e2d4c1e6512b10943bc6b27f2 /src/compiler/spirv/vtn_alu.c | |
parent | 5debfeb86f524b06aa3b80f9855947a57b5f91e8 (diff) |
glsl: Fix assert fails when assignment expressions are in array sizes.
Karol Herbst's fuzzing efforts discovered that we would hit the
following assert:
assert(dummy_instructions.is_empty());
when processing an illegal array size expression of
float[(1=1)?1:1] t;
In do_assignment, we realized we needed an rvalue for (1 = 1), and
generated a temporary variable and assignment from the RHS. We've
already flagged an error (non-lvalue in assignment), and return a bogus
value as the rvalue. But process_array_size sees the bogus value, which
happened to be a constant expression, and rightly assumes that
processing a constant expression shouldn't have generated any code.
instructions.
To handle this, make do_assignment not generate any temps or assignments
when it's already raised an error - just return an error value directly.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=98694
Signed-off-by: Kenneth Graunke <[email protected]>
Reviewed-by: Timothy Arceri <[email protected]>
Diffstat (limited to 'src/compiler/spirv/vtn_alu.c')
0 files changed, 0 insertions, 0 deletions