Make sure we instantiate the destructor for variables initialized by

assignment.

llvm-svn: 91798
This commit is contained in:
Eli Friedman 2009-12-20 22:29:11 +00:00
parent 4afe9a3518
commit 7dac3712a2
2 changed files with 20 additions and 0 deletions

View File

@ -3658,6 +3658,15 @@ void Sema::AddInitializerToDecl(DeclPtrTy dcl, ExprArg init, bool DirectInit) {
assert(Deleted && "Unrecorded tentative definition?"); Deleted=Deleted;
}
if (getLangOptions().CPlusPlus) {
// Make sure we mark the destructor as used if necessary.
QualType InitType = VDecl->getType();
if (const ArrayType *Array = Context.getAsArrayType(InitType))
InitType = Context.getBaseElementType(Array);
if (InitType->isRecordType())
FinalizeVarWithDestructor(VDecl, InitType);
}
return;
}

View File

@ -0,0 +1,11 @@
// RUN: %clang_cc1 %s -fsyntax-only -verify
template <typename T> struct A {
T x;
A(int y) { x = y; }
~A() { *x = 10; } // expected-error {{indirection requires pointer operand}}
};
void a() {
A<int> b = 10; // expected-note {{requested here}}
}