aboutsummaryrefslogtreecommitdiff
path: root/clang/test
diff options
context:
space:
mode:
authorChuanqi Xu <yedeng.yd@linux.alibaba.com>2024-01-29 14:32:29 +0800
committerTom Stellard <tstellar@redhat.com>2024-02-06 21:30:14 -0800
commit70195e0d67080c2d0d1f321db69ebb40042a1c7a (patch)
tree995b0df86f13902d8a43cde725abefc8a570e764 /clang/test
parenta0e1cc0aefbc879cb2861003e487576e9a6b3c93 (diff)
downloadllvm-70195e0d67080c2d0d1f321db69ebb40042a1c7a.zip
llvm-70195e0d67080c2d0d1f321db69ebb40042a1c7a.tar.gz
llvm-70195e0d67080c2d0d1f321db69ebb40042a1c7a.tar.bz2
[C++20] [Modules] Remove previous workaround for odr hashing enums
Previosly we land https://github.com/llvm/llvm-project/commit/085eae6b863881fb9fda323e5b672b04a00ed19e to workaround the false positive ODR violations in https://github.com/llvm/llvm-project/issues/76638. However, we decided to not perform ODR checks for decls from GMF in https://github.com/llvm/llvm-project/issues/79240 and we land the corresponding change. So we should be able to remove the workaround now. The original tests get remained.
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/Modules/cxx20-modules-enum-odr.cppm51
1 files changed, 51 insertions, 0 deletions
diff --git a/clang/test/Modules/cxx20-modules-enum-odr.cppm b/clang/test/Modules/cxx20-modules-enum-odr.cppm
new file mode 100644
index 0000000..831c011
--- /dev/null
+++ b/clang/test/Modules/cxx20-modules-enum-odr.cppm
@@ -0,0 +1,51 @@
+// RUN: rm -rf %t
+// RUN: mkdir -p %t
+// RUN: split-file %s %t
+//
+// RUN: %clang_cc1 -std=c++20 %t/mod1.cppm -emit-module-interface -o %t/mod1.pcm
+// RUN: %clang_cc1 -std=c++20 %t/mod2.cppm -emit-module-interface -o %t/mod2.pcm
+// RUN: %clang_cc1 -std=c++20 %t/test.cpp -fprebuilt-module-path=%t -verify -fsyntax-only
+
+//--- size_t.h
+
+extern "C" {
+ typedef unsigned int size_t;
+}
+
+//--- csize_t
+namespace std {
+ using :: size_t;
+}
+
+//--- align.h
+namespace std {
+ enum class align_val_t : size_t {};
+}
+
+//--- mod1.cppm
+module;
+#include "size_t.h"
+#include "align.h"
+export module mod1;
+namespace std {
+export using std::align_val_t;
+}
+
+//--- mod2.cppm
+module;
+#include "size_t.h"
+#include "csize_t"
+#include "align.h"
+export module mod2;
+namespace std {
+export using std::align_val_t;
+}
+
+//--- test.cpp
+// expected-no-diagnostics
+import mod1;
+import mod2;
+void test() {
+ std::align_val_t v;
+}
+