summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-04-15 21:48:18 +0000
committerAnders Carlsson <andersca@mac.com>2009-04-15 21:48:18 +0000
commit332ef55cf27c8bba68729368b3c331c20f776df0 (patch)
tree1955ca3705f523ce364f96eda1d705c741066268 /clang
parentc7ba5333782fb9643c35f94effca96c5f7526824 (diff)
downloadbcm5719-llvm-332ef55cf27c8bba68729368b3c331c20f776df0.tar.gz
bcm5719-llvm-332ef55cf27c8bba68729368b3c331c20f776df0.zip
When declaring a variable that has a constructor and a direct initializer, for example:
struct X { X(int, int); }; X x(10, 10); we model that as X x = X(10, 10); inserting a temporary object expr. llvm-svn: 69227
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/Sema/SemaDeclCXX.cpp22
1 files changed, 13 insertions, 9 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index 6e7256c34d4..cc70dc4a5cd 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -1796,15 +1796,19 @@ void Sema::AddCXXDirectInitializerToDecl(DeclPtrTy Dcl,
IK_Direct);
if (!Constructor)
RealDecl->setInvalidDecl();
- else
- Exprs.release();
-
- // Let clients know that initialization was done with a direct
- // initializer.
- VDecl->setCXXDirectInitializer(true);
-
- // FIXME: Add ExprTys and Constructor to the RealDecl as part of
- // the initializer.
+ else {
+ // Let clients know that initialization was done with a direct
+ // initializer.
+ VDecl->setCXXDirectInitializer(true);
+
+ Expr *Temp =
+ new (Context) CXXTemporaryObjectExpr(Constructor, DeclInitType,
+ SourceLocation(),
+ (Expr**)Exprs.release(),
+ NumExprs,
+ SourceLocation());
+ AddInitializerToDecl(Dcl, ExprArg(*this, Temp), /*DirectInit=*/true);
+ }
return;
}
OpenPOWER on IntegriCloud