diff options
author | Anders Carlsson <andersca@mac.com> | 2009-04-16 23:50:50 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-04-16 23:50:50 +0000 |
commit | 930e8d0c2f0b30da3a6a9c440503976d8250e7cf (patch) | |
tree | fdc2c8cee5c4f852dd5641ef9dcedb8f34eca070 /lib/Sema/SemaDecl.cpp | |
parent | b00ac07d2582b8bd32b61478970e10a1524b0298 (diff) |
If a class has a non-trivial constructor that doesn't take any arguments, we will now make an implicit CXXTemporaryObjectExpr. So
struct S {
S();
};
void f() {
S s;
}
's' here will implicitly be declared as.
S s = S();
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69326 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaDecl.cpp')
-rw-r--r-- | lib/Sema/SemaDecl.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 94b3b76a3b..a2b565beb6 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -2552,7 +2552,9 @@ void Sema::ActOnUninitializedDecl(DeclPtrTy dcl) { if (const ArrayType *Array = Context.getAsArrayType(Type)) InitType = Array->getElementType(); if (!Var->hasExternalStorage() && InitType->isRecordType()) { - const CXXConstructorDecl *Constructor = 0; + CXXRecordDecl *RD = + cast<CXXRecordDecl>(InitType->getAsRecordType()->getDecl()); + CXXConstructorDecl *Constructor = 0; if (!RequireCompleteType(Var->getLocation(), InitType, diag::err_invalid_incomplete_type_use)) Constructor @@ -2564,6 +2566,8 @@ void Sema::ActOnUninitializedDecl(DeclPtrTy dcl) { IK_Default); if (!Constructor) Var->setInvalidDecl(); + else if (!RD->hasTrivialConstructor()) + InitializeVarWithConstructor(Var, Constructor, InitType, 0, 0); } } |