diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2008-05-27 15:51:49 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2008-05-27 15:51:49 +0000 |
commit | 21911e89d55da3a47eb02fceb85dbd5c5294bc11 (patch) | |
tree | 93463007a02bae9304875776bc5b4d4d8a03af80 /clang/lib/CodeGen/CGExprAgg.cpp | |
parent | 5e2281ede8364dd7d2af7c9a0e4dd15ad6653fdd (diff) | |
download | bcm5719-llvm-21911e89d55da3a47eb02fceb85dbd5c5294bc11.tar.gz bcm5719-llvm-21911e89d55da3a47eb02fceb85dbd5c5294bc11.zip |
A few more cases for aggregate values.
llvm-svn: 51596
Diffstat (limited to 'clang/lib/CodeGen/CGExprAgg.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGExprAgg.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CGExprAgg.cpp b/clang/lib/CodeGen/CGExprAgg.cpp index 30ff9ecbaf3..80231ccb807 100644 --- a/clang/lib/CodeGen/CGExprAgg.cpp +++ b/clang/lib/CodeGen/CGExprAgg.cpp @@ -68,6 +68,8 @@ public: void VisitMemberExpr(MemberExpr *ME) { EmitAggLoadOfLValue(ME); } void VisitUnaryDeref(UnaryOperator *E) { EmitAggLoadOfLValue(E); } void VisitStringLiteral(StringLiteral *E) { EmitAggLoadOfLValue(E); } + void VisitCompoundLiteralExpr(CompoundLiteralExpr *E) + { EmitAggLoadOfLValue(E); } void VisitArraySubscriptExpr(ArraySubscriptExpr *E) { EmitAggLoadOfLValue(E); @@ -90,6 +92,7 @@ public: void VisitCXXDefaultArgExpr(CXXDefaultArgExpr *DAE) { Visit(DAE->getExpr()); } + void VisitVAArgExpr(VAArgExpr *E); void EmitInitializationToLValue(Expr *E, LValue Address); void EmitNullInitializationToLValue(LValue Address, QualType T); @@ -273,6 +276,13 @@ void AggExprEmitter::VisitConditionalOperator(const ConditionalOperator *E) { CGF.EmitBlock(ContBlock); } +void AggExprEmitter::VisitVAArgExpr(VAArgExpr *VE) { + llvm::Value *ArgValue = CGF.EmitLValue(VE->getSubExpr()).getAddress(); + llvm::Value *V = Builder.CreateVAArg(ArgValue, CGF.ConvertType(VE->getType())); + if (DestPtr) + Builder.CreateStore(V, DestPtr); +} + void AggExprEmitter::EmitNonConstInit(InitListExpr *E) { const llvm::PointerType *APType = |