ChuanqiXu added a comment.

In D119409#3432281 <https://reviews.llvm.org/D119409#3432281>, @iains wrote:

> In D119409#3410893 <https://reviews.llvm.org/D119409#3410893>, @ChuanqiXu 
> wrote:
>
>> In D119409#3410868 <https://reviews.llvm.org/D119409#3410868>, @iains wrote:
>>
>>> In D119409#3410474 <https://reviews.llvm.org/D119409#3410474>, @ChuanqiXu 
>>> wrote:
>>>
>>>> In D119409#3409806 <https://reviews.llvm.org/D119409#3409806>, @iains 
>>>> wrote:
>>>>
>>>>> I think that this problem might well be a consequence of the bug which is 
>>>>> fixed by D122413 <https://reviews.llvm.org/D122413>.
>>>>>
>>>>> We have been generating code with module internal entities (always) given 
>>>>> the special ModuleInternalLinkage (which means that, although the linkage 
>>>>> is formally 'internal', the entities are made global when emitted.  We 
>>>>> should only be doing this for fmodules-ts, not for regular standard 
>>>>> modules.
>>>>>
>>>>> If you apply D122413 <https://reviews.llvm.org/D122413> (which I hope to 
>>>>> land soon), then I would expect that iostream should work as expected 
>>>>> (with one internal instance of std::__ioinit in each TU that includes 
>>>>> iostream).
>>>>>
>>>>> IFF (after applying D122413 <https://reviews.llvm.org/D122413> ) you add 
>>>>> to the command line -fmodules-ts, then the patch here (D119409 
>>>>> <https://reviews.llvm.org/D119409>) would, presumably, be needed to work 
>>>>> around multiple instances of the globalised std::__ioinit.
>>>>
>>>> Sadly it wouldn't work after D122413 <https://reviews.llvm.org/D122413> 
>>>> applied. Since the <iostream> is lived in GlobalModuleFragment, the 
>>>> calculated linkage wouldn't affect them. So I met the same segfault as 
>>>> before.
>>>
>>> Is this because we are not creating an initialiser for a static entity in 
>>> the GMF ?
>>>
>>> - I did a quick test and that seemed to be the case.
>>
>> I think we need this one finally, It would create the initialiser after the 
>> patch applied. And I think we couldn't do that without the patch. Since from 
>> the code we could see that the static variable wouldn't be generated in the 
>> current strategies.
>>
>>> (module initialisers need quite some work, it seems)
>>
>> The initialiser above I said is the initialiser in that TU. What you mean 
>> `module initializer` ? Do you mean the one module could have only module 
>> initializer?
>>
>>>>> addendum: note we still have work to do on the module initialisers - 
>>>>> those are not correct yet (so probably some nesting of modules might not 
>>>>> work).
>>>>
>>>> What does the nesting of modules mean?
>>>
>>> If we have an import of a module that imports another - then we should be 
>>> running the module initializers for the imported stack (in the correct 
>>> order) .. at present, we do not do this.
>>> As noted above, we have some work to do here.
>>
>> I am not familiar with the history here. But I found 
>> http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1874r1.html#solution.
>>  It says clang already has a simple fix. So I am wondering if this one is 
>> already fixed or we are not talking about the same thing?
>
> Sorry for slow response - was hoping to have a patch to show by now
> ... I am currently finishing off an implementation for 1874 + elision of 
> unused GMF decls.  The "simple fix" in clang actually pulls all the 
> initialisers into one list in the top-level module (which is slightly 
> different from the intent of the paper, as implemented in GCC) - that 
> implementation also does not fix the issue of a module interface where there 
> is no explicit "import" for the sub-modules.
>
> The patch in progress will build a per module initialiser (which will handle 
> sub-module initialisers and calling module initialisers for direct imports).  
> I think that will fix the iostreams problem (it is a motivating example from 
> the paper).

Cool. BTW, I want to be sure that it would solve the problem this patch shows. 
I mean the problem presented in this patch is about named module, while the 
motivating example from that paper is about header unit.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D119409/new/

https://reviews.llvm.org/D119409

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to