diff options
author | Matheus Izvekov <mizvekov@gmail.com> | 2024-09-24 22:57:07 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-24 22:57:07 -0300 |
commit | 0a42c7c6679bcc6f7be4b3d103670197acac96a9 (patch) | |
tree | f5eb449a2ba543a3513f4d19c4be6cb346a9a415 /clang/test | |
parent | 3da5e82e31712792411945b655929a1680fb476c (diff) | |
download | llvm-0a42c7c6679bcc6f7be4b3d103670197acac96a9.zip llvm-0a42c7c6679bcc6f7be4b3d103670197acac96a9.tar.gz llvm-0a42c7c6679bcc6f7be4b3d103670197acac96a9.tar.bz2 |
[clang] fix assert in ADL finding entity in the implicit global module (#109882)
This adds to the assert the implicit global module case as in module
purview.
Fixes #109879
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/Modules/GH109879-1.cpp | 25 | ||||
-rw-r--r-- | clang/test/Modules/GH109879-2.cpp | 29 |
2 files changed, 54 insertions, 0 deletions
diff --git a/clang/test/Modules/GH109879-1.cpp b/clang/test/Modules/GH109879-1.cpp new file mode 100644 index 0000000..72cfb11 --- /dev/null +++ b/clang/test/Modules/GH109879-1.cpp @@ -0,0 +1,25 @@ +// RUN: rm -rf %t +// RUN: mkdir -p %t +// RUN: split-file %s %t +// +// RUN: %clang_cc1 -std=c++20 %t/A.cppm -emit-module-interface -o %t/A.pcm +// RUN: %clang_cc1 -std=c++20 %t/B.cppm -fprebuilt-module-path=%t -emit-module-interface -o %t/B.pcm +// RUN: %clang_cc1 -fsyntax-only -std=c++20 -fprebuilt-module-path=%t -verify %t/C.cpp + +//--- A.cppm +export module A; +export extern "C" void foo(struct Bar); + +//--- B.cppm +module; +import A; +export module B; + +//--- C.cpp +import B; +struct Bar {}; +void test() { + foo(Bar()); + // expected-error@-1 {{declaration of 'foo' must be imported}} + // expected-note@A.cppm:2 {{declaration here is not visible}} +} diff --git a/clang/test/Modules/GH109879-2.cpp b/clang/test/Modules/GH109879-2.cpp new file mode 100644 index 0000000..ccec578 --- /dev/null +++ b/clang/test/Modules/GH109879-2.cpp @@ -0,0 +1,29 @@ +// RUN: rm -rf %t +// RUN: mkdir -p %t +// RUN: split-file %s %t +// +// RUN: %clang_cc1 -std=c++20 %t/A.cppm -emit-module-interface -o %t/A.pcm +// RUN: %clang_cc1 -std=c++20 %t/B.cppm -fprebuilt-module-path=%t -emit-module-interface -o %t/B.pcm +// RUN: %clang_cc1 -fsyntax-only -std=c++20 -fprebuilt-module-path=%t -verify %t/C.cpp + +//--- foo.h +struct Bar {}; +extern "C" void foo(struct Bar); + +//--- A.cppm +module; +#include "foo.h" +export module A; +export extern "C" using ::foo; +//--- B.cppm +module; +import A; +export module B; + +//--- C.cpp +// expected-no-diagnostics +import B; +#include "foo.h" +void test() { + foo(Bar()); +} |