r231451 - Don't crash on non-public referenced dtors in toplevel classes.

Tom Stellard tom at stellard.net
Fri Mar 6 18:00:00 PST 2015


On Fri, Mar 06, 2015 at 11:50:51AM -0800, Hans Wennborg wrote:
> Tom, is this OK for 3.6.1?
> 

This is fine with me as long as Richard approves.

-Tom

> On Thu, Mar 5, 2015 at 10:01 PM, Nico Weber <nicolasweber at gmx.de> 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
> > cfe-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits



More information about the cfe-commits mailing list