Fix PR9941 again, this time for templates.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@131640 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Sebastian Redl 2011-05-19 16:25:27 +00:00
Родитель de5c048fed
Коммит 42bef03a0f
2 изменённых файлов: 33 добавлений и 2 удалений

Просмотреть файл

@ -8200,8 +8200,10 @@ void Sema::ActOnFields(Scope* S,
const CXXDestructorDecl *Dtor =
DelayedDestructorExceptionSpecChecks.back().first;
if (Dtor->getParent() == Record) {
CheckOverridingFunctionExceptionSpec(Dtor,
DelayedDestructorExceptionSpecChecks.back().second);
// Don't check if we're a template. The spec hasn't been adjusted.
if (!Dtor->getParent()->isDependentType())
CheckOverridingFunctionExceptionSpec(Dtor,
DelayedDestructorExceptionSpecChecks.back().second);
DelayedDestructorExceptionSpecChecks.pop_back();
}
}

Просмотреть файл

@ -132,6 +132,10 @@ struct VX
struct VY : VX
{ virtual ~VY() {} };
template<typename T>
struct TVY : VX
{ virtual ~TVY() {} };
struct VA {
B b;
@ -140,3 +144,28 @@ struct VA {
struct VB : VA
{ virtual ~VB() {} };
template<typename T>
struct TVB : VA
{ virtual ~TVB() {} };
void tinst2() {
TVY<int> tvy;
TVB<int> tvb;
}
template <typename T>
struct Sw {
T t;
~Sw() {}
};
void tsw() {
Sw<int> swi;
Sw<B> swb;
}
// CHECK-NOT: define linkonce_odr void @_ZN2SwI1BED1Ev({{.*}} nounwind
// CHECK: define linkonce_odr void @_ZN2SwI1BED1Ev({{.*}}
// CHECK: _ZTIi
// CHECK: __cxa_call_unexpected
// CHECK: define linkonce_odr void @_ZN2SwIiED1Ev({{.*}} nounwind