mesa: add missing type check for function calls
authorBrian Paul <brian.paul@tungstengraphics.com>
Wed, 26 Nov 2008 16:35:26 +0000 (09:35 -0700)
committerBrian Paul <brianp@vmware.com>
Tue, 6 Jan 2009 16:03:23 +0000 (09:03 -0700)
(cherry picked from commit 001b1cbb0dacf76dd09cda56840c30226abd3534)

src/mesa/shader/slang/slang_codegen.c

index 958f9bd777a967a6d637517529ce01e07560037f..b821122663cca28252f0735c81da19d9eacb1772 100644 (file)
@@ -2025,6 +2025,21 @@ _slang_gen_function_call_name(slang_assemble_ctx *A, const char *name,
       return NULL;
    }
 
+   /* type checking to be sure function's return type matches 'dest' type */
+   if (dest) {
+      slang_typeinfo t0;
+
+      slang_typeinfo_construct(&t0);
+      _slang_typeof_operation(A, dest, &t0);
+
+      if (!slang_type_specifier_equal(&t0.spec, &fun->header.type.specifier)) {
+         slang_info_log_error(A->log,
+                              "Incompatible type returned by call to '%s'",
+                              name);
+         return NULL;
+      }
+   }
+
    n = _slang_gen_function_call(A, fun, oper, dest);
 
    if (n && !n->Store && !dest