On Fri, Apr 22, 2016 at 12:29 PM, Richard Smith <rich...@metafoo.co.uk>
wrote:

> On Fri, Apr 22, 2016 at 11:46 AM, Reid Kleckner via cfe-commits <
> cfe-commits@lists.llvm.org> wrote:
>
>> Author: rnk
>> Date: Fri Apr 22 13:46:33 2016
>> New Revision: 267186
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=267186&view=rev
>> Log:
>> Fix a bug involving deferred decl emission and PCH
>>
>> For various reasons, involving dllexport and class linkage compuations,
>> we have to wait until after the semicolon after a class declaration to
>> emit inline methods. These are "deferred" decls. Before this change,
>> finishing the tag decl would trigger us to deserialize some PCH so that
>> we could make a "pretty" IR-level type. Deserializing the PCH triggered
>> calls to HandleTopLevelDecl, which, when done, checked the deferred decl
>> list, and emitted some dllexported decls that weren't ready.
>>
>> Avoid this re-entrancy. Deferred decls should not get emitted when a tag
>> is finished, they should only be emitted after a real top level decl in
>> the main file.
>>
>
> What if there is no subsequent top-level decl after such a call? It seems
> like the deferred decls won't be emitted at all in that case. Is that
> acceptable?
>

I think what happens is that we finish the tag declaration, and then call
HandleTopLevelDecl on it directly, and that is supposed to flush the
deferred methods.

I can't think of any ways to create a C++ tag definition in a way that
doesn't create a top level decl.
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to