[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