From 3aba09376c5f49c4c8d176109ea4835bc2c528ee Mon Sep 17 00:00:00 2001 From: Anders Carlsson Date: Sun, 31 Jan 2010 18:34:51 +0000 Subject: Start creating CXXBindReferenceExpr nodes when binding complex types to references. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@94964 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGExpr.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'lib/CodeGen/CGExpr.cpp') diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp index 605f77975f..c0dd68bc70 100644 --- a/lib/CodeGen/CGExpr.cpp +++ b/lib/CodeGen/CGExpr.cpp @@ -92,9 +92,31 @@ RValue CodeGenFunction::EmitAnyExprToTemp(const Expr *E, IsInitializer); } +llvm::Value * +CodeGenFunction::EmitCXXBindReferenceExpr(const CXXBindReferenceExpr *E) { + QualType T = E->getType(); + assert(T->isAnyComplexType() && "FIXME: Unhandled bind expression!"); + + const Expr *SubExpr = E->getSubExpr(); + + if (!E->requiresTemporaryCopy()) + return EmitLValue(SubExpr).getAddress(); + + llvm::Value *Value = CreateTempAlloca(ConvertTypeForMem(T), "reftmp"); + + if (T->isAnyComplexType()) + EmitComplexExprIntoAddr(SubExpr, Value, /*DestIsVolatile=*/false); + else + assert(false && "Unhandled bind expression"); + + return Value; +} + RValue CodeGenFunction::EmitReferenceBindingToExpr(const Expr* E, QualType DestType, bool IsInitializer) { + assert(!E->getType()->isAnyComplexType() && + "Should not use this function for complex types!"); bool ShouldDestroyTemporaries = false; unsigned OldNumLiveTemporaries = 0; -- cgit v1.2.3-70-g09d2