diff options
author | Kenneth Graunke <kenneth@whitecape.org> | 2010-06-28 23:38:04 -0700 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2010-06-29 11:12:53 -0700 |
commit | 18707eba1cd6c07fa8b63d0ba5b26f6433f1ae91 (patch) | |
tree | a0d1aea37d1f515e1f385a513c24615c9e4b5a1c | |
parent | 153eca98064252be4daad9cc27746f37c245b627 (diff) |
glsl2: Check that returned expressions match the function return type.
From my reading of the specification, implicit conversions are not
allowed. ATI seems to agree, though nVidia allows it without warning.
-rw-r--r-- | src/glsl/ast_to_hir.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp index 33eb27533f..45228649ad 100644 --- a/src/glsl/ast_to_hir.cpp +++ b/src/glsl/ast_to_hir.cpp @@ -2151,9 +2151,17 @@ ast_jump_statement::hir(exec_list *instructions, opt_return_value->hir(instructions, state); assert(ret != NULL); - /* FINISHME: Make sure the type of the return value matches the return - * FINISHME: type of the enclosing function. - */ + /* Implicit conversions are not allowed for return values. */ + if (state->current_function->return_type != ret->type) { + YYLTYPE loc = this->get_location(); + + _mesa_glsl_error(& loc, state, + "`return' with wrong type %s, in function `%s' " + "returning %s", + ret->type->name, + state->current_function->function_name(), + state->current_function->return_type->name); + } inst = new(ctx) ir_return(ret); } else { |