iains added a comment.

In D121098#3384590 <https://reviews.llvm.org/D121098#3384590>, @ChuanqiXu wrote:

> In D121098#3383835 <https://reviews.llvm.org/D121098#3383835>, @iains wrote:
>
>>> I am a little bit confused for the intuition. Couldn't we just import the 
>>> pre-processed header? What's the problem? Could you elaborate on this?
>>
>> We cannot import a pre-processed file; the preprocessed file is still source 
>> code, not a CMI.
>
> But if I understand correctly, we are able to import a pre-processed file as 
> a header unit. Couldn't we?
>
> For example:
>
>   // cc -E foo.h > foo.preprocessed
>   import "foo.preprocessed"
>   ...
>
> Is this not acceptable?
>
>> In addition, the pre-processor output for a header unit requires further 
>> pre-processing on read.
>> This is because a header unit actually preserves some of the pre-processor 
>> information [macro definitions] (which would normally be discarded after 
>> phase 4).
>>
>> Header units are identifiable by a name (in common with GCC, we make the 
>> name == the path by which the header is specified) -- that name is 
>> intentionally not a  legal named module name (neither is it, in general, a 
>> legal identifier).
>
> So it doesn't eliminate my confusion. I guess there is some workflows that we 
> need to import a preprocessed header as header unit (and we need to find the 
> position of original file). Or in what circumstances, do we need to import a 
> pre-processed header as header unit?

A pre-processed header unit can only be used to build that header unit - just 
like a pre-processed c++ source is used to build an object for the original 
source file.

In this code, we are not considering importing the HU into another module - 
that can only be done once the HU is built as a CMI.

The pre-processed output has two immediate uses I could see:
 (1) traditionally, it can be helpful in debugging and problem reporting [since 
the included headers are flattened]
 (2) because we will have processed the directives, it might be useful for 
scanners that want to determine remaining dependencies.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D121098

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

Reply via email to