Adding missing AddressOfExpr::GetLValueType()
This commit is contained in:
13
expr.cpp
13
expr.cpp
@@ -7741,6 +7741,19 @@ AddressOfExpr::GetType() const {
|
||||
}
|
||||
|
||||
|
||||
const Type *
|
||||
AddressOfExpr::GetLValueType() const {
|
||||
if (!expr)
|
||||
return NULL;
|
||||
|
||||
const Type *type = expr->GetType();
|
||||
if (!type)
|
||||
return NULL;
|
||||
|
||||
return PointerType::GetUniform(type);
|
||||
}
|
||||
|
||||
|
||||
Symbol *
|
||||
AddressOfExpr::GetBaseSymbol() const {
|
||||
return expr ? expr->GetBaseSymbol() : NULL;
|
||||
|
||||
1
expr.h
1
expr.h
@@ -543,6 +543,7 @@ public:
|
||||
|
||||
llvm::Value *GetValue(FunctionEmitContext *ctx) const;
|
||||
const Type *GetType() const;
|
||||
const Type *GetLValueType() const;
|
||||
Symbol *GetBaseSymbol() const;
|
||||
void Print() const;
|
||||
Expr *TypeCheck();
|
||||
|
||||
24
tests/ref-10.ispc
Normal file
24
tests/ref-10.ispc
Normal file
@@ -0,0 +1,24 @@
|
||||
|
||||
export uniform int width() { return programCount; }
|
||||
|
||||
|
||||
struct Foo {
|
||||
float a, b, c;
|
||||
};
|
||||
|
||||
void foo(Foo &f, uniform int dim) {
|
||||
(&f.a)[dim] += (&f.a)[dim];
|
||||
}
|
||||
|
||||
export void f_fu(uniform float RET[], uniform float aFOO[], uniform float b) {
|
||||
Foo f = { b, aFOO[programIndex], 1 };
|
||||
if (programIndex < 2)
|
||||
foo(f, 0);
|
||||
RET[programIndex] = f.a + f.b + f.c;
|
||||
}
|
||||
|
||||
export void result(uniform float RET[]) {
|
||||
RET[programIndex] = 7+programIndex;
|
||||
RET[0] = 12;
|
||||
RET[1] = 13;
|
||||
}
|
||||
Reference in New Issue
Block a user