[PATCH] D97462: [clang][cli] Round-trip cc1 arguments in assert builds

Jan Svoboda via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Apr 9 02:15:48 PDT 2021


jansvoboda11 added a comment.

In D97462#2677130 <https://reviews.llvm.org/D97462#2677130>, @arichardson wrote:

> I just merged this commit into our CHERI fork and noticed some failing tests due to round tripping:
> We add some additional CodeGenOptions and LangOptions, but are not including those in the generated command line.
>
> For example, I added an additional `std::string CHERIStatsFile;` to `CodeGenOptions`. This is set inside `bool CompilerInvocation::ParseCodeGenArgs` using `Opts.CHERIStatsFile = Args.getLastArgValue(OPT_cheri_stats_file).str();`.
> I haven't added logic to round trip this flag (yet). If CC1 argument round tripping is enabled, the flag is stripped and the output goes to stderr instead of the defined file, causing some tests to fail.
>
> Unfortunately this is not caught by any assertions, so I worry that there are other arguments that might be silently removed after this commit. Are there any open reviews/plans to check CodeGenOptions/etc, for equality after round-tripping?

We currently don't have the infrastructure to compare `CompilerInvocation` instances directly. Instead we rely on good test coverage of command line options: if the round-tripped `CompilerInvocation` doesn't contain the option, tests will fail. You can then check the generated command lines by passing `-Rround-trip-cc1-args` to the failing CC1 invocation.

There was an attempt to generate `operator==` for `CompilerInvocation` and assert when the round-tripped instance isn't equal to the original, as you suggest. This is the patch that started by moving members to definition databases, but it got reverted: D86290 <https://reviews.llvm.org/D86290>.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D97462



More information about the cfe-commits mailing list