[modules][PATCH] Teach the ASTDeclReader to update the exception specs of the deserialized decl's redecl chain.
Richard Smith
richard at metafoo.co.uk
Mon Nov 24 15:52:39 PST 2014
+ } + else if (!isUnresolvedExceptionSpec(FPT->getExceptionSpecType()) &&
Per the LLVM coding style, put the close brace and the 'else' on the same
line.
+ isUnresolvedExceptionSpec(PrevFPT->getExceptionSpecType())) { + //
Happens in cases where module A contains only a fwd decl and module B + //
contains the definition.
There are other conditions here; I don't think this comment is particularly
helpful. Just remove it?
+ FunctionProtoType::ExtProtoInfo EPI = FPT->getExtProtoInfo(); + while
(PrevFD) { + Reader.Context.adjustExceptionSpec(PrevFD, EPI.ExceptionSpec);
+ PrevFD = PrevFD->getPreviousDecl();
Please use a separate variable for this loop rather than reusing PrevFD.
It's only by coincidence that this code is at the end of the function; it
shouldn't be changing function-scope state like this.
It seems like it should be possible to produce a testcase for this. You'd
need something like:
A.h:
struct A { A(); } b{}, c(b); // computed exception spec for copy ctor and
move ctor
B.h:
struct A { A(); } a{}; // EST_Unevaluated for copy ctor and move ctor
... then import A and B, and do something that assumes that every
declaration has an exception specification if any declaration does.
On Mon, Nov 24, 2014 at 11:09 AM, Vassil Vassilev <vvasilev at cern.ch> wrote:
> Sorry for the delay. Attaching the new version.
> Vassil
>
> On 14/11/14 02:47, Richard Smith wrote:
>
> + }
> + else { // FPT->getExceptionSpecType() is resolved and the other is not
>
> You're not checking for this condition; the code here is getting run
> even if both or neither are unresolved.
>
> The patch needs rebasing (we have a new helper function in ASTContext to
> update the exception specification of a declaration), but looks like the
> right direction.
>
> On Thu, Nov 6, 2014 at 4:23 AM, Vassil Vassilev <
> vasil.georgiev.vasilev at cern.ch> wrote:
>
>> Hi Richard,
>> I am attaching the patch we discussed at the dev meeting. Still haven't
>> found small reproducer...
>> The issue appears to stem from the fact that module A contains only a
>> forward declaration of a function and it exception spec cannot be computed.
>> In module B is the definition with computed exception spec, which gets
>> deserialized after the one in module A. This patch teaches the
>> ASTDeclReader to update all the exception specs of the previous decls to
>> the current one.
>>
>> Could you review, please?
>> Many thanks,
>> Vassil
>
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20141124/e8cf7bee/attachment.html>
More information about the cfe-commits
mailing list