Merge pull request #928 from dbabokin/master

Adding missing AddressOfExpr::GetLValueType()
This commit is contained in:
Dmitry Babokin
2014-12-30 18:15:47 +03:00
3 changed files with 38 additions and 0 deletions

View File

@@ -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 * Symbol *
AddressOfExpr::GetBaseSymbol() const { AddressOfExpr::GetBaseSymbol() const {
return expr ? expr->GetBaseSymbol() : NULL; return expr ? expr->GetBaseSymbol() : NULL;

1
expr.h
View File

@@ -543,6 +543,7 @@ public:
llvm::Value *GetValue(FunctionEmitContext *ctx) const; llvm::Value *GetValue(FunctionEmitContext *ctx) const;
const Type *GetType() const; const Type *GetType() const;
const Type *GetLValueType() const;
Symbol *GetBaseSymbol() const; Symbol *GetBaseSymbol() const;
void Print() const; void Print() const;
Expr *TypeCheck(); Expr *TypeCheck();

24
tests/ref-10.ispc Normal file
View 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;
}