summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaInit.cpp
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-05-27 16:10:08 +0000
committerAnders Carlsson <andersca@mac.com>2009-05-27 16:10:08 +0000
commit98cee2fde03ced3ba1272463c4697102a04a529f (patch)
treecf28d2db054787842ebb7e7d5586f73f5b507d83 /clang/lib/Sema/SemaInit.cpp
parent10a71da05a5765ff15bb71a0dbd6d1986d6b0f12 (diff)
downloadbcm5719-llvm-98cee2fde03ced3ba1272463c4697102a04a529f.tar.gz
bcm5719-llvm-98cee2fde03ced3ba1272463c4697102a04a529f.zip
Create CXXConstructExprs when constructing via copy initialization.
llvm-svn: 72474
Diffstat (limited to 'clang/lib/Sema/SemaInit.cpp')
-rw-r--r--clang/lib/Sema/SemaInit.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp
index d880c236d2d..3fae86d19d2 100644
--- a/clang/lib/Sema/SemaInit.cpp
+++ b/clang/lib/Sema/SemaInit.cpp
@@ -18,6 +18,7 @@
#include "Sema.h"
#include "clang/Parse/Designator.h"
#include "clang/AST/ASTContext.h"
+#include "clang/AST/ExprCXX.h"
#include "clang/AST/ExprObjC.h"
#include <map>
using namespace clang;
@@ -116,7 +117,7 @@ static void CheckStringInit(Expr *Str, QualType &DeclT, Sema &S) {
bool Sema::CheckInitializerTypes(Expr *&Init, QualType &DeclType,
SourceLocation InitLoc,
DeclarationName InitEntity,
- bool DirectInit) {
+ bool DirectInit, VarDecl *VD) {
if (DeclType->isDependentType() ||
Init->isTypeDependent() || Init->isValueDependent())
return false;
@@ -160,7 +161,14 @@ bool Sema::CheckInitializerTypes(Expr *&Init, QualType &DeclType,
InitLoc, Init->getSourceRange(),
InitEntity,
DirectInit? IK_Direct : IK_Copy);
- return Constructor == 0;
+ if (!Constructor)
+ return true;
+
+ // FIXME: What do do if VD is null here?
+ assert(VD && "Must have a var decl to construct into!");
+ Init = CXXConstructExpr::Create(Context, VD, DeclType, Constructor,
+ false, &Init, 1);
+ return false;
}
// -- Otherwise (i.e., for the remaining copy-initialization
OpenPOWER on IntegriCloud