Make sure we instantiate the destructor for variables initialized by
assignment. llvm-svn: 91798
This commit is contained in:
parent
4afe9a3518
commit
7dac3712a2
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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}}
|
||||
}
|
Loading…
Reference in New Issue