From c24975d3a5cebd5ba66ec09d922819930d9b8ea8 Mon Sep 17 00:00:00 2001 From: Boaz Brickner Date: Tue, 16 Sep 2025 16:25:31 +0200 Subject: [PATCH] Add a test for importing a C++ namespace indirectly (#6075) Part of #6060. --- .../check/testdata/interop/cpp/import.carbon | 72 +++++++++++++++++-- 1 file changed, 66 insertions(+), 6 deletions(-) diff --git a/toolchain/check/testdata/interop/cpp/import.carbon b/toolchain/check/testdata/interop/cpp/import.carbon index e8ef504bf8e1..edb274c862c6 100644 --- a/toolchain/check/testdata/interop/cpp/import.carbon +++ b/toolchain/check/testdata/interop/cpp/import.carbon @@ -10,25 +10,65 @@ // TIP: To dump output, run: // TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/interop/cpp/import.carbon -// --- header.h +// ============================================================================ +// Import C++ namespace indirectly +// ============================================================================ + +// --- namespace.h + +namespace MyNamespace { + +class MyClass {}; + +} // namespace MyNamespace + +// --- namespace_api.carbon + +library "[[@TEST_NAME]]"; + +import Cpp library "namespace.h"; + +alias MyNamespaceAlias = Cpp.MyNamespace; + +// --- fail_todo_import_namespace_api.carbon + +library "[[@TEST_NAME]]"; + +import library "namespace_api"; + +fn F() { + //@dump-sem-ir-begin + // CHECK:STDERR: fail_todo_import_namespace_api.carbon:[[@LINE+4]]:10: error: member name `MyClass` not found in `Cpp.MyNamespace` [MemberNameNotFoundInInstScope] + // CHECK:STDERR: var x: MyNamespaceAlias.MyClass; + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: + var x: MyNamespaceAlias.MyClass; + //@dump-sem-ir-end +} + +// ============================================================================ +// Import C++ function indirectly +// ============================================================================ + +// --- function.h auto foo_short(short x) -> void; auto foo_int(int x) -> void; -// --- api.carbon +// --- function_api.carbon library "[[@TEST_NAME]]"; -import Cpp library "header.h"; +import Cpp library "function.h"; alias FooShort = Cpp.foo_short; alias FooInt = Cpp.foo_int; -// --- import_api.carbon +// --- todo_import_function_api.carbon library "[[@TEST_NAME]]"; -import library "api"; +import library "function_api"; // TODO: Fix this test as a follow-up of https://github.com/carbon-language/carbon-lang/pull/5891. fn F() { @@ -38,7 +78,27 @@ fn F() { //@dump-sem-ir-end } -// CHECK:STDOUT: --- import_api.carbon +// CHECK:STDOUT: --- fail_todo_import_namespace_api.carbon +// CHECK:STDOUT: +// CHECK:STDOUT: constants { +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: imports { +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: fn @F() { +// CHECK:STDOUT: !entry: +// CHECK:STDOUT: name_binding_decl { +// CHECK:STDOUT: %x.patt: = binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: = var_pattern %x.patt [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: %x.var: ref = var %x.var_patt [concrete = ] +// CHECK:STDOUT: +// CHECK:STDOUT: %x: = bind_name x, [concrete = ] +// CHECK:STDOUT: +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: --- todo_import_function_api.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: }