[C++20] [Modules] Introduce -fskip-odr-check-in-gmf (#79959)llvmorg-18.1.0-rc2
commitc6c86965d967886ca5a2ed8968c949cd42cdd49a
authorChuanqi Xu <yedeng.yd@linux.alibaba.com>
Thu, 1 Feb 2024 05:44:32 +0000 (1 13:44 +0800)
committerTom Stellard <tstellar@redhat.com>
Wed, 7 Feb 2024 05:30:14 +0000 (6 21:30 -0800)
tree20502630f3678fb1074e854cf1446f5e9c15cead
parent70195e0d67080c2d0d1f321db69ebb40042a1c7a
[C++20] [Modules] Introduce -fskip-odr-check-in-gmf (#79959)

Close https://github.com/llvm/llvm-project/issues/79240

Cite the comment from @mizvekov in
//github.com/llvm/llvm-project/issues/79240:

> There are two kinds of bugs / issues relevant here:
>
> Clang bugs that this change hides
> Here we can add a Frontend flag that disables the GMF ODR check, just
> so
> we can keep tracking, testing and fixing these issues.
> The Driver would just always pass that flag.
> We could add that flag in this current issue.
> Bugs in user code:
> I don't think it's worth adding a corresponding Driver flag for
> controlling the above Frontend flag, since we intend it's behavior to
> become default as we fix the problems, and users interested in testing
> the more strict behavior can just use the Frontend flag directly.

This patch follows the suggestion:
- Introduce the CC1 flag `-fskip-odr-check-in-gmf` which is by default
off, so that the every existing test will still be tested with checking
ODR violations.
- Passing `-fskip-odr-check-in-gmf` in the driver to keep the behavior
we intended.
- Edit the document to tell the users who are still interested in more
strict checks can use `-Xclang -fno-skip-odr-check-in-gmf` to get the
existing behavior.
15 files changed:
clang/docs/ReleaseNotes.rst
clang/docs/StandardCPlusPlusModules.rst
clang/include/clang/Basic/LangOptions.def
clang/include/clang/Driver/Options.td
clang/include/clang/Serialization/ASTReader.h
clang/lib/Driver/ToolChains/Clang.cpp
clang/lib/Serialization/ASTReader.cpp
clang/lib/Serialization/ASTReaderDecl.cpp
clang/lib/Serialization/ASTWriter.cpp
clang/lib/Serialization/ASTWriterDecl.cpp
clang/test/Driver/modules-skip-odr-check-in-gmf.cpp [new file with mode: 0644]
clang/test/Modules/concept.cppm
clang/test/Modules/polluted-operator.cppm
clang/test/Modules/pr76638.cppm
clang/test/Modules/skip-odr-check-in-gmf.cppm [new file with mode: 0644]