[PATCH] D51608: [modules] when deserializing method, ensure it has correct exception spec

Richard Smith - zygoloid via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Sep 4 18:00:54 PDT 2018


rsmith added a comment.

I think this is addressing a symptom rather than the cause. The bug appears to be that when parsing a.h, we end up with inconsistent exception specifications along the redeclaration chain. It looks like `Sema::AdjustDestructorExceptionSpec` doesn't do the right thing when befriending a destructor. Here's a non-modules testcase based on yours that demonstrates either the same problem or at least a closely-related one:

  struct B {
    virtual ~B();
    struct C { friend B::~B() noexcept; }; 
  };

We produce a bogus error here ("exception specification in declaration does not match previous declaration"). But we think the exception specifications match if class `C` is moved outside class `B`.

Generally, we skip checking the exception specification for a destructor until we get to the end of the class. But when the destructor declaration is a friend declaration for a destructor of an enclosing class, we need to instead delay until that enclosing class is complete. I expect the logic to do that is what's missing here.


Repository:
  rC Clang

https://reviews.llvm.org/D51608





More information about the cfe-commits mailing list