Author: Chuanqi Xu Date: 2023-03-06T14:39:32+08:00 New Revision: 5b769ff3e6a47eb2ffe8aa9e86f701ef046cf0a9
URL: https://github.com/llvm/llvm-project/commit/5b769ff3e6a47eb2ffe8aa9e86f701ef046cf0a9 DIFF: https://github.com/llvm/llvm-project/commit/5b769ff3e6a47eb2ffe8aa9e86f701ef046cf0a9.diff LOG: [NFC] Add an invalid test case for C++20 Modules Address https://github.com/llvm/llvm-project/issues/61150. The test is intended to show the polluted operator&& will affect the ODR checking and the ODR checking here is correct. Added: clang/test/Modules/polluted-operator.cppm Modified: Removed: ################################################################################ diff --git a/clang/test/Modules/polluted-operator.cppm b/clang/test/Modules/polluted-operator.cppm new file mode 100644 index 0000000000000..b24464aa6ad21 --- /dev/null +++ b/clang/test/Modules/polluted-operator.cppm @@ -0,0 +1,57 @@ +// RUN: rm -rf %t +// RUN: mkdir -p %t +// RUN: split-file %s %t +// +// RUN: %clang_cc1 -std=c++20 -emit-module-interface %t/a.cppm -o %t/a.pcm +// RUN: %clang_cc1 -std=c++20 %t/b.cppm -fprebuilt-module-path=%t -emit-module-interface -o %t/b.pcm -verify + +//--- foo.h + +namespace std +{ + template<class _Dom1> + void operator &&(_Dom1 __v, _Dom1 __w) + { + return; + } +} + +//--- bar.h +namespace std +{ + template<typename... _Types> + struct _Traits + { + static constexpr bool _S_copy_ctor = + (__is_trivial(_Types) && ...); + }; + + template<typename... _Types> + struct variant + { + void + swap(variant& __rhs) + noexcept((__is_trivial(_Types) && ...)) + { + } + }; +} + +//--- a.cppm +module; +// The operator&& defined in 'foo.h' will pollute the +// expression '__is_trivial(_Types) && ...' in bar.h +#include "foo.h" +#include "bar.h" +export module a; + +//--- b.cppm +module; +#include "bar.h" +export module b; +import a; + +// expected-error@* {{has diff erent definitions in diff erent modules; first diff erence is defined here found data member '_S_copy_ctor' with an initializer}} +// expected-note@* {{but in 'a.<global>' found data member '_S_copy_ctor' with a diff erent initializer}} +// expected-error@* {{from module 'a.<global>' is not present in definition of 'variant<_Types...>' provided earlier}} +// expected-note@* {{declaration of 'swap' does not match}} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits