diff --git a/expr.cpp b/expr.cpp index c1e6092f..fb363c58 100644 --- a/expr.cpp +++ b/expr.cpp @@ -3409,7 +3409,9 @@ FunctionCallExpr::TypeCheck() { if (t == NULL) return NULL; argTypes.push_back(t); - argCouldBeNULL.push_back(lIsAllIntZeros(args->exprs[i])); + + argCouldBeNULL.push_back(lIsAllIntZeros(args->exprs[i]) || + dynamic_cast(args->exprs[i]) != NULL); } FunctionSymbolExpr *fse = dynamic_cast(func); diff --git a/tests/ptr-null-func-arg.ispc b/tests/ptr-null-func-arg.ispc new file mode 100644 index 00000000..fdd0cbab --- /dev/null +++ b/tests/ptr-null-func-arg.ispc @@ -0,0 +1,14 @@ + +export uniform int width() { return programCount; } + +bool bar(float * x) { + return (x != 0); +} + +export void f_f(uniform float RET[], uniform float aFOO[]) { + RET[programIndex] = bar(NULL); +} + +export void result(uniform float RET[]) { + RET[programIndex] = 0; +}