iains added a comment.

In D134267#3848974 <https://reviews.llvm.org/D134267#3848974>, @ChuanqiXu wrote:

> In D134267#3848958 <https://reviews.llvm.org/D134267#3848958>, @iains wrote:
>
>> In D134267#3848883 <https://reviews.llvm.org/D134267#3848883>, @ChuanqiXu 
>> wrote:
>>
>>> In D134267#3848876 <https://reviews.llvm.org/D134267#3848876>, @iains wrote:
>>>
>>>> If we are going to **//require//** the serialisation/deserialisation for 
>>>> correctness then IMO we should have an error for an incorrect compilation.
>>>
>>> Of course.
>>>
>>>> I still feel that deserialisation should do deserialisation, and Sema 
>>>> should be doing the diagnoses when it tries to use a decl (in fact, I 
>>>> would expect that to be required for correctness in the C++20 scheme, 
>>>> since the point of use is significant).  I will defer to folks who know 
>>>> the history better - but this seems like a layering bug to me still.
>>>
>>> Another reason I forgot to mention is that the deserialization need to do 
>>> merging. It is common in practice that a similar declarations lives in 
>>> multiple module files (e.g., by GMF). Then if the deserialization needs to 
>>> merge things, it is naturally that the deserilizer need to do ODR checks. 
>>> But if you feel like the merging job belongs to Sema too, I think it might 
>>> not be bad/wrong.
>>
>> I would be concerned that doing this work in the deserialisation could:
>>
>> - produce false positives (diagnostics) where there should be no error until 
>> an object is actually used.
>> - make it more difficult to track cases where what is merged at the point of 
>> use is semantically significant.
>>
>> It would seem to better that the consumer of the AST should not have to know 
>> whether it had been round-tripped through the serialisation/deserialization 
>> process.
>
> The reading process of modules are lazy. So the problem is relatively 
> mitigated. But I understand your concern in some level.

(IMO) We ought to be able to move the ODR work to Sema (but I did not yet look 
at how hard this would be) - it seems that deserialisation should supply 
(lazily) decls in response to requests and the query side should determine if 
they are legally mergeable.  However, let's move this discussion elsewhere now 
- I think we've covered the main points.

>> From the point of view of this diff - it is relevant to consider other 
>> implementations that achieve the same objective - we seem to have uncovered 
>> some additional questions to answer.
>
> I feel the main blocking issue for this diff is the concern about modules 
> cache throw from @dblaikie and @tschuett that we (at least me) don't know the 
> reason. I'm still waiting for more detailed reason to understand them.
>
> And I feel like your opinion is mainly in the higher level. And I don't feel 
> it is blocking this patch. Because if we're going to refactor it actually 
> someday, this diff won't never be a blocker.

I think that is correct - the implementations are independent (my, so far 
unpublished, driver patches probably would require modification, but that's not 
a big deal).

> And under the current frame, I think this implementation is the simplest way 
> to achieve the same goal. So what we talked about is mainly about some higher 
> level things.

Sure, but having a high-level plan is important too :)

One specific comment about this patch; one of the key things that GCC does is 
to remove the need for the user to write a specific extension to use modular 
C++.  So from that point of view, at least, this patch does not provide a 
solution to match the command line interfaces of GCC.


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

https://reviews.llvm.org/D134267

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

Reply via email to