[PATCH] D80833: [CodeView] Add full repro to LF_BUILDINFO record

Alexandre Ganea via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sun Oct 10 12:37:34 PDT 2021


aganea added a subscriber: dexonsmith.
aganea added a comment.

In D80833#3052551 <https://reviews.llvm.org/D80833#3052551>, @dexonsmith wrote:

> In D80833#2069411 <https://reviews.llvm.org/D80833#2069411>, @aganea wrote:
>
>> In D80833#2069246 <https://reviews.llvm.org/D80833#2069246>, @amccarth wrote:
>>
>>> Does embedding full paths affect distributed builds or build reproducibility?
>>
>> It does affect reproducibility for distributed builds, the contents of `LF_BUILDINFO` for a remotely-compiled .OBJ will be different in the final .PDB.
>
> I don't think the path to the compiler is the only concern regarding reproducible builds. Including the full command-line means that artifacts change when options that have no (other) effect on the output are added. E.g., adding `-Wall` will create a different object file than `-Wmost`. I worry this is the wrong direction for default clang behaviour.

In my sense, the fact that an option doesn't change the output is orthogonal to producing a deterministic output. I think most caching systems treat the compiler as a black box, by simply hashing the command-line and assuming the same .OBJ will be generated from that command-line. The build system could filter out options that are known to have effect on the output, to address your concern. But I feel this outside of the scope of this patch?

> Should this new instability be restricted to when users explicitly request it?

The goal of this patch (and D43002 <https://reviews.llvm.org/D43002>) is simply to be on-par with what MSVC generates by default. It seems a bit counter-intuitive to provide `-grecord-command-line` to clang-cl only to match the MSVC behavior, but if that's the general consensus, I'm fine as long as `LF_BUILDINFO` is supported in LLVM.

In D80833#3052741 <https://reviews.llvm.org/D80833#3052741>, @dexonsmith wrote:

> If you do go with "off-by-default", the natural driver option to use would be the existing `-grecord-command-line`. You could use the same plumbing through `-cc1` that it does.

You mean using the `llvm.commandline` metadata? That's an interesting idea which should be explored.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D80833



More information about the cfe-commits mailing list