From c7943343a0fc2463987f667658a257b74cec1782 Mon Sep 17 00:00:00 2001 From: Yevhenii Kolesnikov Date: Wed, 20 May 2020 19:16:28 +0300 Subject: [PATCH] glsl: subroutine signatures must match exactly MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit From GLSL 4.60.7 spec, section 6.1.2 "Subroutines": It is a compile-time error if arguments and return type don’t match between the function and each associated subroutine type. Before, if subroutine type and implementation function were declared with types, that could be implicitly converted, it led to a runtime crash. Signed-off-by: Yevhenii Kolesnikov Reviewed-by: Timothy Arceri Part-of: --- src/compiler/glsl/ir_function.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/compiler/glsl/ir_function.cpp b/src/compiler/glsl/ir_function.cpp index 97262f0..a38e528 100644 --- a/src/compiler/glsl/ir_function.cpp +++ b/src/compiler/glsl/ir_function.cpp @@ -329,6 +329,9 @@ ir_function::matching_signature(_mesa_glsl_parse_state *state, free(inexact_matches); return sig; case PARAMETER_LIST_INEXACT_MATCH: + /* Subroutine signatures must match exactly */ + if (this->is_subroutine) + continue; inexact_matches_temp = (ir_function_signature **) realloc(inexact_matches, sizeof(*inexact_matches) * -- 2.7.4