glsl: stop cascading errors if process_parameters() fails
authorTimothy Arceri <tarceri@itsqueeze.com>
Tue, 26 May 2020 02:14:13 +0000 (12:14 +1000)
committerMarge Bot <eric+marge@anholt.net>
Wed, 27 May 2020 00:31:05 +0000 (00:31 +0000)
Generally we do not completely stop compilation as soon as we see an error,
instead we continue on to attemp to find any futher errors.

This means we shouldn't be checking state->error to see if any error has
happened during the compilation process, doing so was causing
process_parameters() to fail on completely valid functions if there was
any error found in the shader previously. This then caused the valid
functions not to be found because the paramlist was considered empty,
resulting in the compiler spewing out misleading error messages.

Here we simply add the IR error value to the param list when we have
an issue with processing a parameter, this leads to much better error
messaging.

Fixes: 53e4159eaaf6 ("glsl: stop processing function parameters if error happened")
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5205>

src/compiler/glsl/ast_function.cpp

index 08a200347af947c7bed1cfeccae4431bffb0817a..b6b81bf1e142c3152d03f6c2f0d31f86143343db 100644 (file)
@@ -49,9 +49,12 @@ process_parameters(exec_list *instructions, exec_list *actual_parameters,
       ast->set_is_lhs(true);
       ir_rvalue *result = ast->hir(instructions, state);
 
-      /* Error happened, bail out. */
-      if (state->error)
-         return 0;
+      /* Error happened processing function parameter */
+      if (!result) {
+         actual_parameters->push_tail(ir_rvalue::error_value(mem_ctx));
+         count++;
+         continue;
+      }
 
       ir_constant *const constant =
          result->constant_expression_value(mem_ctx);