Don't try to treat an enum constant as an lvalue.
llvm-svn: 89705
This commit is contained in:
parent
2e7bc11f11
commit
f2e4f72f03
|
@ -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);
|
||||
|
|
|
@ -17,3 +17,11 @@ void f()
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
struct A {
|
||||
enum E { Foo };
|
||||
};
|
||||
|
||||
void f(A *a) {
|
||||
A::E e = a->Foo;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue