kimgr added a comment.


>> Can you test what happens when you do clang-cl.exe /Yc stdafx.h /Tp 
>> stdafx.h, i.e. compile the header
>  > directly as C++ code and generate .pch from it? The normal MSVC modus 
> operandi is to have stdafx.h
>  > included in all source files (with /Yu) and stdafx.cpp to generate it 
> (with /Yc). That stdafx.cpp file serves
>  > no purpose, so I've played this trick to generate PCH from the header 
> directly. If it works, it might also
>  > be useful for your tests.
> 
> It isn't always the case that the .cpp file serves no purpose. It's true that 
> the MS project generators give you this setup but we've seen many projects 
> over the years that use a regular source file with code in it to generate the 
> PCH. The > object file generated during PCH create can have real code and the 
> compiler can take advantage of that fact by compiling less code in the 
> compilation units that use the PCH [...]

Cool, it's never occurred to me that the source file has any other purpose than 
including the pch header.

> I am not sure about your command: clang-cl.exe /Yc stdafx.h /Tp stdafx.h. The 
> space makes this a compile with just
>  /Yc (no through header). This patch doesn't address /Yc without the through 
> header. Something like clang-cl /Yc 
> /Tpstdafx.h would probably work if/when that is implemented.

I no longer have access to an MSVC environment, so I can't spell out the exact 
command, but I was trying to phrase a command that generates a PCH from the 
through-header *without a distinct source file*. It's proved to be a useful 
trick. I didn't mean to omit the through header, let's try again:

  cl.exe /Ycstdafx.h /TP stdafx.h

or if that doesn't work, a /FI switch may be required, I can't remember for 
sure what we did:

  cl.exe /Ycstdafx.h /TP /FI stdafx.h stdafx.h

>> I think the current skip-warning is over-specific -- what if I put an inline 
>> function before my PCH include?
>  >  A global variable? A #pragma? Or am I misunderstanding what skipping 
> does? It seems to me that any
>  > non-comment tokens before the PCH #include should raise a warning.
> 
> Not any tokens. The through header "feature" compiles all the code in the 
> file up to the through header.
>  So normally you are used to seeing just comments and #include <stdafx.h>. 
> That's one usage but your
>  PCH can be created from a source like this [...]

Thanks for the example, I must have misunderstood how MSVC PCHs work. With that 
background, the warning seems fine.

>> I find the "through header" terminology is a little hard to interpret, but I 
>> did find it on MSDN, so maybe it's well established.
> 
> Sorry about the terminology. I've been responsible for emulating this PCH 
> mechanism for many years so I may be one
>  of the few that understands it. I did try to keep that terminology out of 
> the diagnostics but I don't really have a better
>  name for through header.

:) Sounds like it's well-established!


https://reviews.llvm.org/D46652



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

Reply via email to