Don't try to treat an enum constant as an lvalue.

llvm-svn: 89705
This commit is contained in:
Anders Carlsson 2009-11-23 21:56:41 +00:00
parent 2e7bc11f11
commit f2e4f72f03
2 changed files with 16 additions and 1 deletions

View File

@ -167,7 +167,14 @@ public:
Value *VisitArraySubscriptExpr(ArraySubscriptExpr *E);
Value *VisitShuffleVectorExpr(ShuffleVectorExpr *E);
Value *VisitMemberExpr(Expr *E) { return EmitLoadOfLValue(E); }
Value *VisitMemberExpr(MemberExpr *E) {
if (const EnumConstantDecl *EC =
dyn_cast<EnumConstantDecl>(E->getMemberDecl()))
return llvm::ConstantInt::get(VMContext, EC->getInitVal());
return EmitLoadOfLValue(E);
}
Value *VisitExtVectorElementExpr(Expr *E) { return EmitLoadOfLValue(E); }
Value *VisitCompoundLiteralExpr(CompoundLiteralExpr *E) {
return EmitLoadOfLValue(E);

View File

@ -17,3 +17,11 @@ void f()
}
}
struct A {
enum E { Foo };
};
void f(A *a) {
A::E e = a->Foo;
}