The commit message was supposed to say "...non-public referenced _defaulted_ dtors..." On Mar 5, 2015 10:04 PM, "Nico Weber" <[email protected]> wrote:
> Author: nico > Date: Fri Mar 6 00:01:06 2015 > New Revision: 231451 > > URL: http://llvm.org/viewvc/llvm-project?rev=231451&view=rev > Log: > Don't crash on non-public referenced dtors in toplevel classes. > > Fixes PR22793, a bug that caused self-hosting to fail after the innocuous > r231254. See the bug for details. > > Modified: > cfe/trunk/lib/Sema/SemaExpr.cpp > cfe/trunk/test/CodeGenCXX/trivial-constructor-init.cpp > > Modified: cfe/trunk/lib/Sema/SemaExpr.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=231451&r1=231450&r2=231451&view=diff > > ============================================================================== > --- cfe/trunk/lib/Sema/SemaExpr.cpp (original) > +++ cfe/trunk/lib/Sema/SemaExpr.cpp Fri Mar 6 00:01:06 2015 > @@ -117,7 +117,7 @@ static AvailabilityResult DiagnoseAvaila > case AR_Available: > case AR_NotYetIntroduced: > break; > - > + > case AR_Deprecated: > if (S.getCurContextAvailability() != AR_Deprecated) > S.EmitAvailabilityWarning(Sema::AD_Deprecation, > @@ -11859,8 +11859,11 @@ void Sema::MarkFunctionReferenced(Source > } else if (CXXDestructorDecl *Destructor = > dyn_cast<CXXDestructorDecl>(Func)) { > Destructor = cast<CXXDestructorDecl>(Destructor->getFirstDecl()); > - if (Destructor->isDefaulted() && !Destructor->isDeleted()) > + if (Destructor->isDefaulted() && !Destructor->isDeleted()) { > + if (Destructor->isTrivial() && > !Destructor->hasAttr<DLLExportAttr>()) > + return; > DefineImplicitDestructor(Loc, Destructor); > + } > if (Destructor->isVirtual() && getLangOpts().AppleKext) > MarkVTableUsed(Loc, Destructor->getParent()); > } else if (CXXMethodDecl *MethodDecl = dyn_cast<CXXMethodDecl>(Func)) { > > Modified: cfe/trunk/test/CodeGenCXX/trivial-constructor-init.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/trivial-constructor-init.cpp?rev=231451&r1=231450&r2=231451&view=diff > > ============================================================================== > --- cfe/trunk/test/CodeGenCXX/trivial-constructor-init.cpp (original) > +++ cfe/trunk/test/CodeGenCXX/trivial-constructor-init.cpp Fri Mar 6 > 00:01:06 2015 > @@ -32,3 +32,17 @@ static C c[4]; > > int main() { > } > + > +namespace PR22793 { > +template <typename> > +struct foo { > +protected: > +// CHECK-NOT: _ZN7PR227933fooIiED2Ev > + ~foo() = default; > + friend void func(); > +}; > + > +void func() { foo<int> f; } > + > +template struct foo<int>; > +} > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
