[PATCH] D20867: [PCH] Fix timestamp check on windows hosts.

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Mon Jun 6 13:53:44 PDT 2016


On Wed, Jun 1, 2016 at 8:33 AM, pierre gousseau via cfe-commits <
cfe-commits at lists.llvm.org> wrote:

> pgousseau created this revision.
> pgousseau added reviewers: rsmith, thakis.
> pgousseau added subscribers: cfe-commits, wristow, probinson, gbedwell,
> bruno, cameron314.
>
> On Linux, if the timestamp of a header file, included in the pch, is
> modified, then including the pch without regenerating it causes a fatal
> error, which is reasonable.
> On Windows the check is ifdefed out, allowing the compilation to continue
> in a broken state.
> The root of the broken state is that, if timestamps dont match, the
> preprocessor will reparse a header without discarding the pch data.
> This leads to "#pragma once" header to be included twice.
> The reason behind the ifdefing of the check lacks documentation, and was
> done 6 years ago.
>

It's documented in the comment you deleted:

       // In our regression testing, the Windows file system seems to
       // have inconsistent modification times that sometimes
       // erroneously trigger this error-handling path.

We should confirm whether this is in fact still the case. Maybe this is
caused by building on a networked file system, where a locally-changed file
might have a different mtime locally and remotely (the local mtime may be
precise where the remote one has been rounded to a multiple of 2 seconds by
an underlying FAT filesystem)? If it's something like that, we could
perhaps work around this by rounding the mtime to a multiple of 2 seconds
ourselves.


> This change tentatively removes the ifdefing and adds a cc1 option to
> disable the inclusion of timestamps in pch files, giving some flexibility
> to build systems such as distributed builds.
>
> This change is a follow up to the discussion started in
> http://reviews.llvm.org/D20243
>
> http://reviews.llvm.org/D20867
>
> Files:
>   include/clang/Driver/CC1Options.td
>   include/clang/Frontend/FrontendOptions.h
>   lib/Frontend/CompilerInvocation.cpp
>   lib/Frontend/FrontendActions.cpp
>   lib/Serialization/ASTReader.cpp
>   test/PCH/Inputs/include-timestamp-pch.h
>   test/PCH/Inputs/include-timestamp.h
>   test/PCH/include-timestamp.cpp
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160606/6c3b0546/attachment.html>


More information about the cfe-commits mailing list