diff --git a/toolchain/check/testdata/interop/cpp/bad_import.carbon b/toolchain/check/testdata/interop/cpp/bad_import.carbon index c75fdbe35148d..b955fad4c8b8e 100644 --- a/toolchain/check/testdata/interop/cpp/bad_import.carbon +++ b/toolchain/check/testdata/interop/cpp/bad_import.carbon @@ -2,8 +2,7 @@ // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// TODO: Add ranges and switch to "--dump-sem-ir-ranges=only". -// EXTRA-ARGS: --no-prelude-import --dump-sem-ir-ranges=if-present +// EXTRA-ARGS: --no-prelude-import --dump-sem-ir-ranges=only // // AUTOUPDATE // TIP: To test this file alone, run: @@ -42,34 +41,3 @@ library "[[@TEST_NAME]]"; // CHECK:STDERR: [CppInteropParseError] // CHECK:STDERR: import Cpp library "\"foo.h\""; - -// CHECK:STDOUT: --- fail_import_cpp.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: --- fail_import_cpp_library_empty.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: --- fail_import_cpp_library_file_with_quotes.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: has_error -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "\"foo.h\"" -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/class.carbon b/toolchain/check/testdata/interop/cpp/class.carbon index ee43961c0c75e..fdf4795c8c9d2 100644 --- a/toolchain/check/testdata/interop/cpp/class.carbon +++ b/toolchain/check/testdata/interop/cpp/class.carbon @@ -2,8 +2,7 @@ // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// TODO: Add ranges and switch to "--dump-sem-ir-ranges=only". -// EXTRA-ARGS: --no-prelude-import --dump-sem-ir-ranges=if-present +// EXTRA-ARGS: --no-prelude-import --dump-sem-ir-ranges=only // // AUTOUPDATE // TIP: To test this file alone, run: @@ -25,6 +24,7 @@ library "[[@TEST_NAME]]"; import Cpp library "declaration.h"; +//@dump-sem-ir-begin // CHECK:STDERR: fail_todo_import_declaration.carbon:[[@LINE+7]]:13: error: semantics TODO: `Unsupported: Record declarations without a definition` [SemanticsTodo] // CHECK:STDERR: fn MyF(bar: Cpp.Bar*); // CHECK:STDERR: ^~~~~~~ @@ -33,6 +33,7 @@ import Cpp library "declaration.h"; // CHECK:STDERR: ^~~~~~~ // CHECK:STDERR: fn MyF(bar: Cpp.Bar*); +//@dump-sem-ir-end // ============================================================================ // Definition @@ -48,7 +49,9 @@ library "[[@TEST_NAME]]"; import Cpp library "definition.h"; +//@dump-sem-ir-begin fn MyF(bar: Cpp.Bar*); +//@dump-sem-ir-end // ============================================================================ // Declaration and definition @@ -65,7 +68,9 @@ library "[[@TEST_NAME]]"; import Cpp library "declaration_and_definition.h"; +//@dump-sem-ir-begin fn MyF(bar: Cpp.Bar*); +//@dump-sem-ir-end // ============================================================================ // Public static member function @@ -85,7 +90,9 @@ library "[[@TEST_NAME]]"; import Cpp library "public_static_member_function.h"; fn MyF() { + //@dump-sem-ir-begin Cpp.Bar.foo(); + //@dump-sem-ir-end } // ============================================================================ @@ -126,6 +133,7 @@ library "[[@TEST_NAME]]"; import Cpp library "public_member_function.h"; +//@dump-sem-ir-begin fn MyF(bar : Cpp.Bar*) { // CHECK:STDERR: fail_todo_import_public_member_function.carbon:[[@LINE+7]]:3: error: semantics TODO: `Unsupported: Non-global function` [SemanticsTodo] // CHECK:STDERR: bar->foo(); @@ -136,6 +144,7 @@ fn MyF(bar : Cpp.Bar*) { // CHECK:STDERR: bar->foo(); } +//@dump-sem-ir-end // ============================================================================ // Public static data member @@ -155,6 +164,7 @@ library "[[@TEST_NAME]]"; import Cpp library "public_static_data_member.h"; fn MyF() { + //@dump-sem-ir-begin // CHECK:STDERR: fail_todo_import_public_static_data_member.carbon:[[@LINE+11]]:23: error: semantics TODO: `Unsupported: Declaration type Var` [SemanticsTodo] // CHECK:STDERR: let bar: Cpp.Bar* = Cpp.Bar.foo(); // CHECK:STDERR: ^~~~~~~~~~~ @@ -167,6 +177,7 @@ fn MyF() { // CHECK:STDERR: ^~~~~~~~~~~ // CHECK:STDERR: let bar: Cpp.Bar* = Cpp.Bar.foo(); + //@dump-sem-ir-end } // ============================================================================ @@ -186,6 +197,7 @@ library "[[@TEST_NAME]]"; import Cpp library "public_static_data_member.h"; +//@dump-sem-ir-begin fn MyF(bar : Cpp.Bar*) { // CHECK:STDERR: fail_todo_import_public_data_member.carbon:[[@LINE+11]]:27: error: semantics TODO: `Unsupported: Declaration type Var` [SemanticsTodo] // CHECK:STDERR: let foo_bar: Cpp.Bar* = bar->foo; @@ -200,6 +212,7 @@ fn MyF(bar : Cpp.Bar*) { // CHECK:STDERR: let foo_bar: Cpp.Bar* = bar->foo; } +//@dump-sem-ir-end // ============================================================================ // Inheritance static @@ -224,9 +237,11 @@ library "[[@TEST_NAME]]"; import Cpp library "inheritance_static.h"; fn MyF() { + //@dump-sem-ir-begin Cpp.Bar1.foo1(); Cpp.Bar2.foo1(); Cpp.Bar2.foo2(); + //@dump-sem-ir-end } // ============================================================================ @@ -244,6 +259,7 @@ library "[[@TEST_NAME]]"; import Cpp library "inheritance_pointers.h"; +//@dump-sem-ir-begin fn MyF1(bar : Cpp.Bar1*); // TODO: Support C++ inheritance. // CHECK:STDERR: fail_todo_import_inheritance_pointers.carbon:[[@LINE+7]]:33: error: `Core.ImplicitAs` implicitly referenced here, but package `Core` not found [CoreNotFound] @@ -254,6 +270,7 @@ fn MyF1(bar : Cpp.Bar1*); // CHECK:STDERR: ^~~~~~~~~~~~~~~ // CHECK:STDERR: fn MyF2(bar : Cpp.Bar2*) { MyF1(bar); } +//@dump-sem-ir-end // ============================================================================ // Dynamic @@ -272,6 +289,7 @@ library "[[@TEST_NAME]]"; import Cpp library "dynamic.h"; +//@dump-sem-ir-begin // CHECK:STDERR: fail_todo_import_dynamic.carbon:[[@LINE+7]]:14: error: semantics TODO: `Unsupported: Dynamic Class` [SemanticsTodo] // CHECK:STDERR: fn MyF(bar : Cpp.Bar*); // CHECK:STDERR: ^~~~~~~ @@ -280,6 +298,7 @@ import Cpp library "dynamic.h"; // CHECK:STDERR: ^~~~~~~ // CHECK:STDERR: fn MyF(bar : Cpp.Bar*); +//@dump-sem-ir-end // ============================================================================ // To inherit public @@ -298,6 +317,7 @@ library "[[@TEST_NAME]]"; import Cpp library "to_inherit_public.h"; +//@dump-sem-ir-begin class Derived { extend base: Cpp.Bar; } @@ -305,6 +325,7 @@ class Derived { fn MyF() { Derived.foo(); } +//@dump-sem-ir-end // ============================================================================ // To inherit private @@ -346,6 +367,7 @@ library "[[@TEST_NAME]]"; import Cpp library "template.h"; +//@dump-sem-ir-begin // CHECK:STDERR: fail_todo_import_template.carbon:[[@LINE+11]]:13: error: semantics TODO: `Unsupported: Declaration type ClassTemplate` [SemanticsTodo] // CHECK:STDERR: fn MyF(bar: Cpp.Bar*); // CHECK:STDERR: ^~~~~~~ @@ -358,6 +380,7 @@ import Cpp library "template.h"; // CHECK:STDERR: ^~~~~~~ // CHECK:STDERR: fn MyF(bar: Cpp.Bar*); +//@dump-sem-ir-end // CHECK:STDOUT: --- fail_todo_import_declaration.carbon // CHECK:STDOUT: @@ -374,19 +397,12 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "declaration.h" -// CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { // CHECK:STDOUT: %bar.patt: = binding_pattern bar [concrete] // CHECK:STDOUT: %bar.param_patt: = value_param_pattern %bar.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: = value_param call_param0 -// CHECK:STDOUT: %.loc13: type = splice_block %ptr [concrete = ] { +// CHECK:STDOUT: %.loc14: type = splice_block %ptr [concrete = ] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Bar.ref: = name_ref Bar, [concrete = ] // CHECK:STDOUT: %ptr: type = ptr_type [concrete = ] @@ -401,8 +417,6 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] @@ -418,22 +432,14 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "definition.h" -// CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { // CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar [concrete] // CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern %bar.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 -// CHECK:STDOUT: %.loc6: type = splice_block %ptr [concrete = constants.%ptr] { +// CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: // CHECK:STDOUT: %Bar.ref: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] // CHECK:STDOUT: %ptr: type = ptr_type %Bar.ref [concrete = constants.%ptr] // CHECK:STDOUT: } @@ -441,22 +447,12 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: class @Bar { -// CHECK:STDOUT: complete_type_witness = @MyF.%complete_type -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF(%bar.param: %ptr); // CHECK:STDOUT: // CHECK:STDOUT: --- import_declaration_and_definition.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] @@ -472,22 +468,14 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "declaration_and_definition.h" -// CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { // CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar [concrete] // CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern %bar.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 -// CHECK:STDOUT: %.loc6: type = splice_block %ptr [concrete = constants.%ptr] { +// CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: // CHECK:STDOUT: %Bar.ref: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] // CHECK:STDOUT: %ptr: type = ptr_type %Bar.ref [concrete = constants.%ptr] // CHECK:STDOUT: } @@ -495,80 +483,13 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: class @Bar { -// CHECK:STDOUT: complete_type_witness = @MyF.%complete_type -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF(%bar.param: %ptr); // CHECK:STDOUT: // CHECK:STDOUT: --- import_public_static_member_function.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] -// CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .Bar = %Bar.decl -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {} -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "public_static_member_function.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: class @Bar { -// CHECK:STDOUT: complete_type_witness = @MyF.%complete_type -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar -// CHECK:STDOUT: .foo = imports.%foo.decl -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @MyF() { -// CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] -// CHECK:STDOUT: %Bar.ref: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] -// CHECK:STDOUT: %foo.ref: %foo.type = name_ref foo, imports.%foo.decl [concrete = constants.%foo] -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call %foo.ref() -// CHECK:STDOUT: return -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @foo(); -// CHECK:STDOUT: -// CHECK:STDOUT: --- todo_fail_import_private_static_member_function.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: constants { -// CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] // CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -582,45 +503,20 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "private_static_member_function.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: class @Bar { -// CHECK:STDOUT: complete_type_witness = @MyF.%complete_type -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar -// CHECK:STDOUT: .foo = imports.%foo.decl -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: // CHECK:STDOUT: %Bar.ref: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] // CHECK:STDOUT: %foo.ref: %foo.type = name_ref foo, imports.%foo.decl [concrete = constants.%foo] // CHECK:STDOUT: %foo.call: init %empty_tuple.type = call %foo.ref() -// CHECK:STDOUT: return +// CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @foo(); -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_import_public_member_function.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr.f68: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.f68 [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] @@ -636,22 +532,14 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "public_member_function.h" -// CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { // CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar [concrete] // CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern %bar.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr.f68 = value_param call_param0 -// CHECK:STDOUT: %.loc6: type = splice_block %ptr [concrete = constants.%ptr.f68] { +// CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr.f68] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: // CHECK:STDOUT: %Bar.ref: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] // CHECK:STDOUT: %ptr: type = ptr_type %Bar.ref [concrete = constants.%ptr.f68] // CHECK:STDOUT: } @@ -659,19 +547,10 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: class @Bar { -// CHECK:STDOUT: complete_type_witness = @MyF.%complete_type -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar -// CHECK:STDOUT: .foo = -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF(%bar.param: %ptr.f68) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %bar.ref: %ptr.f68 = name_ref bar, %bar -// CHECK:STDOUT: %.loc14: ref %Bar = deref %bar.ref +// CHECK:STDOUT: %.loc15: ref %Bar = deref %bar.ref // CHECK:STDOUT: %foo.ref: = name_ref foo, [concrete = ] // CHECK:STDOUT: return // CHECK:STDOUT: } @@ -679,11 +558,7 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: --- fail_todo_import_public_static_data_member.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] -// CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr.f68: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.f68 [concrete] // CHECK:STDOUT: } @@ -696,51 +571,28 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "public_static_data_member.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: class @Bar { -// CHECK:STDOUT: complete_type_witness = @MyF.%complete_type -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar -// CHECK:STDOUT: .foo = -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar [concrete] // CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.ref.loc18_23: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Bar.ref.loc18_26: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] +// CHECK:STDOUT: %Cpp.ref.loc19_23: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %Bar.ref.loc19_26: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] // CHECK:STDOUT: %foo.ref: = name_ref foo, [concrete = ] -// CHECK:STDOUT: %.loc18: type = splice_block %ptr [concrete = constants.%ptr.f68] { -// CHECK:STDOUT: %Cpp.ref.loc18_12: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] -// CHECK:STDOUT: %Bar.ref.loc18_15: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] -// CHECK:STDOUT: %ptr: type = ptr_type %Bar.ref.loc18_15 [concrete = constants.%ptr.f68] +// CHECK:STDOUT: %.loc19: type = splice_block %ptr [concrete = constants.%ptr.f68] { +// CHECK:STDOUT: %Cpp.ref.loc19_12: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: +// CHECK:STDOUT: %Bar.ref.loc19_15: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] +// CHECK:STDOUT: %ptr: type = ptr_type %Bar.ref.loc19_15 [concrete = constants.%ptr.f68] // CHECK:STDOUT: } // CHECK:STDOUT: %bar: %ptr.f68 = bind_name bar, [concrete = ] -// CHECK:STDOUT: return +// CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_import_public_data_member.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr.f68: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.f68 [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] @@ -756,50 +608,33 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "public_static_data_member.h" -// CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { // CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar [concrete] // CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern %bar.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr.f68 = value_param call_param0 -// CHECK:STDOUT: %.loc6: type = splice_block %ptr.loc6 [concrete = constants.%ptr.f68] { -// CHECK:STDOUT: %Cpp.ref.loc6: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] -// CHECK:STDOUT: %Bar.ref.loc6: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] -// CHECK:STDOUT: %ptr.loc6: type = ptr_type %Bar.ref.loc6 [concrete = constants.%ptr.f68] +// CHECK:STDOUT: %.loc7: type = splice_block %ptr.loc7 [concrete = constants.%ptr.f68] { +// CHECK:STDOUT: %Cpp.ref.loc7: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: +// CHECK:STDOUT: %Bar.ref.loc7: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] +// CHECK:STDOUT: %ptr.loc7: type = ptr_type %Bar.ref.loc7 [concrete = constants.%ptr.f68] // CHECK:STDOUT: } // CHECK:STDOUT: %bar: %ptr.f68 = bind_name bar, %bar.param // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: class @Bar { -// CHECK:STDOUT: complete_type_witness = @MyF.%complete_type -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar -// CHECK:STDOUT: .foo = -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF(%bar.param: %ptr.f68) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %foo_bar.patt: %pattern_type = binding_pattern foo_bar [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %bar.ref: %ptr.f68 = name_ref bar, %bar -// CHECK:STDOUT: %.loc18_30: ref %Bar = deref %bar.ref +// CHECK:STDOUT: %.loc19_30: ref %Bar = deref %bar.ref // CHECK:STDOUT: %foo.ref: = name_ref foo, [concrete = ] -// CHECK:STDOUT: %.loc18_23: type = splice_block %ptr.loc18 [concrete = constants.%ptr.f68] { -// CHECK:STDOUT: %Cpp.ref.loc18: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Bar.ref.loc18: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] -// CHECK:STDOUT: %ptr.loc18: type = ptr_type %Bar.ref.loc18 [concrete = constants.%ptr.f68] +// CHECK:STDOUT: %.loc19_23: type = splice_block %ptr.loc19 [concrete = constants.%ptr.f68] { +// CHECK:STDOUT: %Cpp.ref.loc19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %Bar.ref.loc19: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] +// CHECK:STDOUT: %ptr.loc19: type = ptr_type %Bar.ref.loc19 [concrete = constants.%ptr.f68] // CHECK:STDOUT: } // CHECK:STDOUT: %foo_bar: %ptr.f68 = bind_name foo_bar, [concrete = ] // CHECK:STDOUT: return @@ -808,12 +643,8 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: --- import_inheritance_static.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: %Bar1: type = class_type @Bar1 [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %foo1.type.148: type = fn_type @foo1.1 [concrete] // CHECK:STDOUT: %foo1.8cd: %foo1.type.148 = struct_value () [concrete] // CHECK:STDOUT: %Bar2: type = class_type @Bar2 [concrete] @@ -836,69 +667,29 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %foo2.decl: %foo2.type = fn_decl @foo2 [concrete = constants.%foo2] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "inheritance_static.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: class @Bar1 { -// CHECK:STDOUT: complete_type_witness = @MyF.%complete_type.1 -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar1 -// CHECK:STDOUT: .foo1 = imports.%foo1.decl.c80 -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: class @Bar2 { -// CHECK:STDOUT: complete_type_witness = @MyF.%complete_type.2 -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar2 -// CHECK:STDOUT: .foo1 = imports.%foo1.decl.191 -// CHECK:STDOUT: .foo2 = imports.%foo2.decl -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Cpp.ref.loc7: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type.1: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type.1: = complete_type_witness %empty_struct_type.1 [concrete = constants.%complete_type] -// CHECK:STDOUT: %Bar1.ref: type = name_ref Bar1, imports.%Bar1.decl [concrete = constants.%Bar1] -// CHECK:STDOUT: %foo1.ref.loc7: %foo1.type.148 = name_ref foo1, imports.%foo1.decl.c80 [concrete = constants.%foo1.8cd] -// CHECK:STDOUT: %foo1.call.loc7: init %empty_tuple.type = call %foo1.ref.loc7() // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type.2: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type.2: = complete_type_witness %empty_struct_type.2 [concrete = constants.%complete_type] -// CHECK:STDOUT: %Bar2.ref.loc8: type = name_ref Bar2, imports.%Bar2.decl [concrete = constants.%Bar2] -// CHECK:STDOUT: %foo1.ref.loc8: %foo1.type.0b8 = name_ref foo1, imports.%foo1.decl.191 [concrete = constants.%foo1.ba2] +// CHECK:STDOUT: +// CHECK:STDOUT: %Bar1.ref: type = name_ref Bar1, imports.%Bar1.decl [concrete = constants.%Bar1] +// CHECK:STDOUT: %foo1.ref.loc8: %foo1.type.148 = name_ref foo1, imports.%foo1.decl.c80 [concrete = constants.%foo1.8cd] // CHECK:STDOUT: %foo1.call.loc8: init %empty_tuple.type = call %foo1.ref.loc8() // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: // CHECK:STDOUT: %Bar2.ref.loc9: type = name_ref Bar2, imports.%Bar2.decl [concrete = constants.%Bar2] +// CHECK:STDOUT: %foo1.ref.loc9: %foo1.type.0b8 = name_ref foo1, imports.%foo1.decl.191 [concrete = constants.%foo1.ba2] +// CHECK:STDOUT: %foo1.call.loc9: init %empty_tuple.type = call %foo1.ref.loc9() +// CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %Bar2.ref.loc10: type = name_ref Bar2, imports.%Bar2.decl [concrete = constants.%Bar2] // CHECK:STDOUT: %foo2.ref: %foo2.type = name_ref foo2, imports.%foo2.decl [concrete = constants.%foo2] // CHECK:STDOUT: %foo2.call: init %empty_tuple.type = call %foo2.ref() -// CHECK:STDOUT: return +// CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @foo1.1(); -// CHECK:STDOUT: -// CHECK:STDOUT: fn @foo1.2(); -// CHECK:STDOUT: -// CHECK:STDOUT: fn @foo2(); -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_import_inheritance_pointers.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Bar1: type = class_type @Bar1 [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr.f68: type = ptr_type %Bar1 [concrete] // CHECK:STDOUT: %pattern_type.3cc: type = pattern_type %ptr.f68 [concrete] // CHECK:STDOUT: %MyF1.type: type = fn_type @MyF1 [concrete] @@ -922,23 +713,14 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF1 = %MyF1.decl -// CHECK:STDOUT: .MyF2 = %MyF2.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "inheritance_pointers.h" -// CHECK:STDOUT: } // CHECK:STDOUT: %MyF1.decl: %MyF1.type = fn_decl @MyF1 [concrete = constants.%MyF1] { // CHECK:STDOUT: %bar.patt: %pattern_type.3cc = binding_pattern bar [concrete] // CHECK:STDOUT: %bar.param_patt: %pattern_type.3cc = value_param_pattern %bar.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr.f68 = value_param call_param0 -// CHECK:STDOUT: %.loc6: type = splice_block %ptr [concrete = constants.%ptr.f68] { +// CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr.f68] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: // CHECK:STDOUT: %Bar1.ref: type = name_ref Bar1, imports.%Bar1.decl [concrete = constants.%Bar1] // CHECK:STDOUT: %ptr: type = ptr_type %Bar1.ref [concrete = constants.%ptr.f68] // CHECK:STDOUT: } @@ -949,10 +731,9 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %bar.param_patt: %pattern_type.92a = value_param_pattern %bar.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr.eca = value_param call_param0 -// CHECK:STDOUT: %.loc15_23: type = splice_block %ptr [concrete = constants.%ptr.eca] { +// CHECK:STDOUT: %.loc16_23: type = splice_block %ptr [concrete = constants.%ptr.eca] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: // CHECK:STDOUT: %Bar2.ref: type = name_ref Bar2, imports.%Bar2.decl [concrete = constants.%Bar2] // CHECK:STDOUT: %ptr: type = ptr_type %Bar2.ref [concrete = constants.%ptr.eca] // CHECK:STDOUT: } @@ -960,29 +741,13 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: class @Bar1 { -// CHECK:STDOUT: complete_type_witness = @MyF1.%complete_type -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar1 -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: class @Bar2 { -// CHECK:STDOUT: complete_type_witness = @MyF2.%complete_type -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar2 -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF1(%bar.param: %ptr.f68); // CHECK:STDOUT: // CHECK:STDOUT: fn @MyF2(%bar.param: %ptr.eca) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %MyF1.ref: %MyF1.type = name_ref MyF1, file.%MyF1.decl [concrete = constants.%MyF1] // CHECK:STDOUT: %bar.ref: %ptr.eca = name_ref bar, %bar -// CHECK:STDOUT: %.loc15_33: %ptr.f68 = converted %bar.ref, [concrete = ] +// CHECK:STDOUT: %.loc16_33: %ptr.f68 = converted %bar.ref, [concrete = ] // CHECK:STDOUT: %MyF1.call: init %empty_tuple.type = call %MyF1.ref() // CHECK:STDOUT: return // CHECK:STDOUT: } @@ -1002,19 +767,12 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "dynamic.h" -// CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { // CHECK:STDOUT: %bar.patt: = binding_pattern bar [concrete] // CHECK:STDOUT: %bar.param_patt: = value_param_pattern %bar.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: = value_param call_param0 -// CHECK:STDOUT: %.loc13: type = splice_block %ptr [concrete = ] { +// CHECK:STDOUT: %.loc14: type = splice_block %ptr [concrete = ] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Bar.ref: = name_ref Bar, [concrete = ] // CHECK:STDOUT: %ptr: type = ptr_type [concrete = ] @@ -1030,84 +788,6 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: constants { // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %Derived.elem: type = unbound_element_type %Derived, %Bar [concrete] -// CHECK:STDOUT: %struct_type.base.36d: type = struct_type {.base: %Bar} [concrete] -// CHECK:STDOUT: %complete_type.fff: = complete_type_witness %struct_type.base.36d [concrete] -// CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] -// CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .Bar = %Bar.decl -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {} -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .Derived = %Derived.decl -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "to_inherit_public.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} -// CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: class @Derived { -// CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type.1: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type.357] -// CHECK:STDOUT: %Bar.ref: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] -// CHECK:STDOUT: %.loc7: %Derived.elem = base_decl %Bar.ref, element0 [concrete] -// CHECK:STDOUT: %struct_type.base: type = struct_type {.base: %Bar} [concrete = constants.%struct_type.base.36d] -// CHECK:STDOUT: %complete_type.loc8: = complete_type_witness %struct_type.base [concrete = constants.%complete_type.fff] -// CHECK:STDOUT: complete_type_witness = %complete_type.loc8 -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Derived -// CHECK:STDOUT: .Cpp = -// CHECK:STDOUT: .base = %.loc7 -// CHECK:STDOUT: .foo = -// CHECK:STDOUT: extend %Bar.ref -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: class @Bar { -// CHECK:STDOUT: complete_type_witness = @Derived.%complete_type.1 -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar -// CHECK:STDOUT: .foo = imports.%foo.decl -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @MyF() { -// CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Derived.ref: type = name_ref Derived, file.%Derived.decl [concrete = constants.%Derived] -// CHECK:STDOUT: %foo.ref: %foo.type = name_ref foo, imports.%foo.decl [concrete = constants.%foo] -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call %foo.ref() -// CHECK:STDOUT: return -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @foo(); -// CHECK:STDOUT: -// CHECK:STDOUT: --- todo_fail_to_inherit_private.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: constants { -// CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] -// CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Derived.elem: type = unbound_element_type %Derived, %Bar [concrete] // CHECK:STDOUT: %struct_type.base.36d: type = struct_type {.base: %Bar} [concrete] @@ -1128,45 +808,27 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .Derived = %Derived.decl -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "to_inherit_private.h" -// CHECK:STDOUT: } // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Derived { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type.1: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type.357] +// CHECK:STDOUT: // CHECK:STDOUT: %Bar.ref: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] -// CHECK:STDOUT: %.loc7: %Derived.elem = base_decl %Bar.ref, element0 [concrete] +// CHECK:STDOUT: %.loc8: %Derived.elem = base_decl %Bar.ref, element0 [concrete] // CHECK:STDOUT: %struct_type.base: type = struct_type {.base: %Bar} [concrete = constants.%struct_type.base.36d] -// CHECK:STDOUT: %complete_type.loc8: = complete_type_witness %struct_type.base [concrete = constants.%complete_type.fff] -// CHECK:STDOUT: complete_type_witness = %complete_type.loc8 +// CHECK:STDOUT: %complete_type.loc9: = complete_type_witness %struct_type.base [concrete = constants.%complete_type.fff] +// CHECK:STDOUT: complete_type_witness = %complete_type.loc9 // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Derived // CHECK:STDOUT: .Cpp = -// CHECK:STDOUT: .base = %.loc7 +// CHECK:STDOUT: .base = %.loc8 // CHECK:STDOUT: .foo = // CHECK:STDOUT: extend %Bar.ref // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: class @Bar { -// CHECK:STDOUT: complete_type_witness = @Derived.%complete_type.1 -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar -// CHECK:STDOUT: .foo = imports.%foo.decl -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Derived.ref: type = name_ref Derived, file.%Derived.decl [concrete = constants.%Derived] @@ -1175,8 +837,6 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @foo(); -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_import_template.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -1192,19 +852,12 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "template.h" -// CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { // CHECK:STDOUT: %bar.patt: = binding_pattern bar [concrete] // CHECK:STDOUT: %bar.param_patt: = value_param_pattern %bar.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: = value_param call_param0 -// CHECK:STDOUT: %.loc17: type = splice_block %ptr [concrete = ] { +// CHECK:STDOUT: %.loc18: type = splice_block %ptr [concrete = ] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Bar.ref: = name_ref Bar, [concrete = ] // CHECK:STDOUT: %ptr: type = ptr_type [concrete = ] diff --git a/toolchain/check/testdata/interop/cpp/cpp_diagnostics.carbon b/toolchain/check/testdata/interop/cpp/cpp_diagnostics.carbon index 4d2fdb771017d..f76fcb1f79bc4 100644 --- a/toolchain/check/testdata/interop/cpp/cpp_diagnostics.carbon +++ b/toolchain/check/testdata/interop/cpp/cpp_diagnostics.carbon @@ -2,8 +2,7 @@ // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// TODO: Add ranges and switch to "--dump-sem-ir-ranges=only". -// EXTRA-ARGS: --no-prelude-import --dump-sem-ir-ranges=if-present +// EXTRA-ARGS: --no-prelude-import --dump-sem-ir-ranges=only // // AUTOUPDATE // TIP: To test this file alone, run: @@ -73,6 +72,7 @@ import Cpp library "multiple_errors.h"; library "[[@TEST_NAME]]"; +//@dump-sem-ir-begin // CHECK:STDERR: import_cpp_file_with_one_warning.carbon:[[@LINE+7]]:1: in import [InImport] // CHECK:STDERR: ./one_warning.h:2: warning: In file included from import_cpp_file_with_one_warning.carbon.generated.cpp_imports.h:1: // CHECK:STDERR: ./one_warning.h:2:2: warning: "warning1" @@ -81,6 +81,7 @@ library "[[@TEST_NAME]]"; // CHECK:STDERR: [CppInteropParseWarning] // CHECK:STDERR: import Cpp library "one_warning.h"; +//@dump-sem-ir-end // ============================================================================ // Multiple warnings @@ -96,6 +97,7 @@ import Cpp library "one_warning.h"; library "[[@TEST_NAME]]"; +//@dump-sem-ir-begin // CHECK:STDERR: import_cpp_file_with_multiple_warnings.carbon:[[@LINE+21]]:1: in import [InImport] // CHECK:STDERR: ./multiple_warnings.h:2: warning: In file included from import_cpp_file_with_multiple_warnings.carbon.generated.cpp_imports.h:1: // CHECK:STDERR: ./multiple_warnings.h:2:2: warning: "warning1" @@ -118,6 +120,7 @@ library "[[@TEST_NAME]]"; // CHECK:STDERR: [CppInteropParseWarning] // CHECK:STDERR: import Cpp library "multiple_warnings.h"; +//@dump-sem-ir-end // ============================================================================ // One error and one warning @@ -209,6 +212,7 @@ import Cpp library "multiple_errors_and_multiple_warnings.h"; library "[[@TEST_NAME]]"; +//@dump-sem-ir-begin // CHECK:STDERR: import_multiple_cpp_files_with_warnings.carbon:[[@LINE+28]]:1: in import [InImport] // CHECK:STDERR: ./one_warning.h:2: warning: In file included from import_multiple_cpp_files_with_warnings.carbon.generated.cpp_imports.h:1: // CHECK:STDERR: ./one_warning.h:2:2: warning: "warning1" @@ -239,6 +243,7 @@ library "[[@TEST_NAME]]"; // CHECK:STDERR: import Cpp library "one_warning.h"; import Cpp library "multiple_warnings.h"; +//@dump-sem-ir-end // ============================================================================ // Multiple files with errors and warnings @@ -338,6 +343,7 @@ library "[[@TEST_NAME]]"; // TODO: The `In file included from` line should not be prefixed. See // https://github.com/carbon-language/carbon-lang/pull/5614#pullrequestreview-2900939411 +//@dump-sem-ir-begin // CHECK:STDERR: todo_import_indirect_warning.carbon:[[@LINE+8]]:1: in import [InImport] // CHECK:STDERR: ./one_warning.h:2: warning: In file included from todo_import_indirect_warning.carbon.generated.cpp_imports.h:1: // CHECK:STDERR: In file included from ./indirect_warning.h:2: @@ -347,6 +353,7 @@ library "[[@TEST_NAME]]"; // CHECK:STDERR: [CppInteropParseWarning] // CHECK:STDERR: import Cpp library "indirect_warning.h"; +//@dump-sem-ir-end // ============================================================================ // Lexer error before import @@ -396,55 +403,12 @@ fn F() { Cpp.foo(); } - -// CHECK:STDOUT: --- fail_import_cpp_file_with_one_error.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: has_error -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "one_error.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: --- fail_import_cpp_file_with_multiple_errors.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: has_error -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "multiple_errors.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- import_cpp_file_with_one_warning.carbon // CHECK:STDOUT: // CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.import_cpp = import_cpp { // CHECK:STDOUT: import Cpp "one_warning.h" // CHECK:STDOUT: } @@ -453,175 +417,34 @@ fn F() { // CHECK:STDOUT: --- import_cpp_file_with_multiple_warnings.carbon // CHECK:STDOUT: // CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.import_cpp = import_cpp { // CHECK:STDOUT: import Cpp "multiple_warnings.h" // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: --- fail_import_cpp_file_with_one_error_and_one_warning.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: has_error -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "one_error_and_one_warning.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: --- fail_import_cpp_file_with_multiple_errors_and_multiple_warnings.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: has_error -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "multiple_errors_and_multiple_warnings.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- import_multiple_cpp_files_with_warnings.carbon // CHECK:STDOUT: // CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.import_cpp = import_cpp { // CHECK:STDOUT: import Cpp "one_warning.h" // CHECK:STDOUT: import Cpp "multiple_warnings.h" // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: --- fail_import_multiple_cpp_files_with_errors_and_warnings.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: has_error -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "one_error_and_one_warning.h" -// CHECK:STDOUT: import Cpp "multiple_errors_and_multiple_warnings.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: --- fail_todo_import_indirect_error.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: has_error -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "indirect_error.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- todo_import_indirect_warning.carbon // CHECK:STDOUT: // CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.import_cpp = import_cpp { // CHECK:STDOUT: import Cpp "indirect_warning.h" // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: --- fail_import_cpp_library_lexer_error.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "one_warning.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: --- fail_import_fix_it_hints.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: constants { -// CHECK:STDOUT: %F.type: type = fn_type @F [concrete] -// CHECK:STDOUT: %F: %F.type = struct_value () [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .foo = -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: has_error -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .F = %F.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "fix_it_hints.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @F() { -// CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: = name_ref foo, [concrete = ] -// CHECK:STDOUT: return -// CHECK:STDOUT: } -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/cpp_namespace.carbon b/toolchain/check/testdata/interop/cpp/cpp_namespace.carbon index 9086544445ecf..af0e99130e89a 100644 --- a/toolchain/check/testdata/interop/cpp/cpp_namespace.carbon +++ b/toolchain/check/testdata/interop/cpp/cpp_namespace.carbon @@ -2,8 +2,7 @@ // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// TODO: Add ranges and switch to "--dump-sem-ir-ranges=only". -// EXTRA-ARGS: --no-prelude-import --dump-sem-ir-ranges=if-present +// EXTRA-ARGS: --no-prelude-import --dump-sem-ir-ranges=only // // AUTOUPDATE // TIP: To test this file alone, run: @@ -34,8 +33,10 @@ library "[[@TEST_NAME]]"; import Cpp library "header.h"; +//@dump-sem-ir-begin namespace N; namespace N.Cpp; +//@dump-sem-ir-end // --- alias.carbon @@ -43,7 +44,9 @@ library "[[@TEST_NAME]]"; import Cpp library "header.h"; +//@dump-sem-ir-begin alias MyCpp = Cpp; +//@dump-sem-ir-end // --- fail_add_name_to_cpp_namespace.carbon @@ -64,50 +67,24 @@ class Cpp.C {}; library "[[@TEST_NAME]]"; +//@dump-sem-ir-begin import Cpp library "header.h"; +//@dump-sem-ir-end // --- api_and_impl.impl.carbon impl library "[[@TEST_NAME]]"; +//@dump-sem-ir-begin import Cpp library "header.h"; +//@dump-sem-ir-end -// CHECK:STDOUT: --- fail_duplicate_cpp_name.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "header.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp: = namespace [concrete] { -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- cpp_in_inner_namespace.carbon // CHECK:STDOUT: // CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .N = %N -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "header.h" -// CHECK:STDOUT: } // CHECK:STDOUT: %N: = namespace [concrete] { // CHECK:STDOUT: .Cpp = %Cpp // CHECK:STDOUT: } @@ -123,63 +100,16 @@ import Cpp library "header.h"; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyCpp = %MyCpp -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "header.h" -// CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %MyCpp: = bind_alias MyCpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: --- fail_add_name_to_cpp_namespace.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: constants { -// CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .C = file.%C.decl -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "header.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: class @C { -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] -// CHECK:STDOUT: complete_type_witness = %complete_type -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%C -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: --- api_and_impl.carbon // CHECK:STDOUT: // CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.import_cpp = import_cpp { // CHECK:STDOUT: import Cpp "header.h" // CHECK:STDOUT: } @@ -188,17 +118,5 @@ import Cpp library "header.h"; // CHECK:STDOUT: --- api_and_impl.impl.carbon // CHECK:STDOUT: // CHECK:STDOUT: imports { -// CHECK:STDOUT: %Main.Cpp: = import_ref Main//api_and_impl, Cpp, loaded -// CHECK:STDOUT: %Cpp: = namespace %Main.Cpp, [concrete] { -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: } -// CHECK:STDOUT: %default.import.loc2_28.1 = import -// CHECK:STDOUT: %default.import.loc2_28.2 = import // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/fail_fuzzing.carbon b/toolchain/check/testdata/interop/cpp/fail_fuzzing.carbon index 7e7652d4b255d..203cf5d9ca078 100644 --- a/toolchain/check/testdata/interop/cpp/fail_fuzzing.carbon +++ b/toolchain/check/testdata/interop/cpp/fail_fuzzing.carbon @@ -2,7 +2,7 @@ // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// ARGS: --include-diagnostic-kind --fuzzing compile --no-prelude-import --phase=check %s +// ARGS: --include-diagnostic-kind --fuzzing compile --no-prelude-import --dump-sem-ir-ranges=only --phase=check %s // // AUTOUPDATE // TIP: To test this file alone, run: diff --git a/toolchain/check/testdata/interop/cpp/file_not_found.carbon b/toolchain/check/testdata/interop/cpp/file_not_found.carbon index 526ec543a17ae..56a95853d02a8 100644 --- a/toolchain/check/testdata/interop/cpp/file_not_found.carbon +++ b/toolchain/check/testdata/interop/cpp/file_not_found.carbon @@ -2,8 +2,7 @@ // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// TODO: Add ranges and switch to "--dump-sem-ir-ranges=only". -// EXTRA-ARGS: --no-prelude-import --dump-sem-ir-ranges=if-present +// EXTRA-ARGS: --no-prelude-import --dump-sem-ir-ranges=only // // AUTOUPDATE // TIP: To test this file alone, run: @@ -22,22 +21,3 @@ library "[[@TEST_NAME]]"; // CHECK:STDERR: [CppInteropParseError] // CHECK:STDERR: import Cpp library "not_found.h"; - -// CHECK:STDOUT: --- fail_cpp_file_not_found.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: has_error -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "not_found.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/function/function.carbon b/toolchain/check/testdata/interop/cpp/function/function.carbon index 93b26f1d5ed78..4154c2b486fda 100644 --- a/toolchain/check/testdata/interop/cpp/function/function.carbon +++ b/toolchain/check/testdata/interop/cpp/function/function.carbon @@ -2,8 +2,7 @@ // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// TODO: Add ranges and switch to "--dump-sem-ir-ranges=only". -// EXTRA-ARGS: --no-prelude-import --dump-sem-ir-ranges=if-present +// EXTRA-ARGS: --no-prelude-import --dump-sem-ir-ranges=only // // AUTOUPDATE // TIP: To test this file alone, run: @@ -26,7 +25,9 @@ library "[[@TEST_NAME]]"; import Cpp library "global.h"; fn MyF() { + //@dump-sem-ir-begin Cpp.foo(); + //@dump-sem-ir-end } // --- fail_import_global_use_different_name.carbon @@ -72,7 +73,9 @@ library "[[@TEST_NAME]]"; import Cpp library "special_name.h"; fn MyF() { + //@dump-sem-ir-begin Cpp.r#base(); + //@dump-sem-ir-end } // ============================================================================ @@ -91,6 +94,7 @@ library "[[@TEST_NAME]]"; import Cpp library "overloaded.h"; fn F() { + //@dump-sem-ir-begin // CHECK:STDERR: fail_todo_import_overloaded.carbon:[[@LINE+7]]:3: error: semantics TODO: `Unsupported: Lookup succeeded but couldn't find a single result; LookupResultKind: 3` [SemanticsTodo] // CHECK:STDERR: Cpp.foo(); // CHECK:STDERR: ^~~~~~~ @@ -99,6 +103,7 @@ fn F() { // CHECK:STDERR: ^~~~~~~ // CHECK:STDERR: Cpp.foo(); + //@dump-sem-ir-end } // ============================================================================ @@ -116,6 +121,7 @@ library "[[@TEST_NAME]]"; import Cpp library "variadic.h"; fn F() { + //@dump-sem-ir-begin // CHECK:STDERR: fail_todo_import_variadic.carbon:[[@LINE+7]]:3: error: semantics TODO: `Unsupported: Variadic function` [SemanticsTodo] // CHECK:STDERR: Cpp.foo(); // CHECK:STDERR: ^~~~~~~ @@ -124,6 +130,7 @@ fn F() { // CHECK:STDERR: ^~~~~~~ // CHECK:STDERR: Cpp.foo(); + //@dump-sem-ir-end } // ============================================================================ @@ -141,6 +148,7 @@ library "[[@TEST_NAME]]"; import Cpp library "static.h"; fn F() { + //@dump-sem-ir-begin // CHECK:STDERR: fail_todo_import_static.carbon:[[@LINE+7]]:3: error: semantics TODO: `Unsupported: Non-global function` [SemanticsTodo] // CHECK:STDERR: Cpp.foo(); // CHECK:STDERR: ^~~~~~~ @@ -149,6 +157,7 @@ fn F() { // CHECK:STDERR: ^~~~~~~ // CHECK:STDERR: Cpp.foo(); + //@dump-sem-ir-end } // TODO: Test that template functions are unsupported. @@ -161,9 +170,7 @@ fn F() { // CHECK:STDOUT: --- import_global.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] // CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -176,96 +183,18 @@ fn F() { // CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "global.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %foo.ref: %foo.type = name_ref foo, imports.%foo.decl [concrete = constants.%foo] // CHECK:STDOUT: %foo.call: init %empty_tuple.type = call %foo.ref() -// CHECK:STDOUT: return -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @foo(); -// CHECK:STDOUT: -// CHECK:STDOUT: --- fail_import_global_use_different_name.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: constants { -// CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] -// CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .bar = -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "global.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @MyF() { -// CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %bar.ref: = name_ref bar, [concrete = ] -// CHECK:STDOUT: return -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: --- fail_import_special_name_call_unescaped.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: constants { -// CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] -// CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "special_name.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @MyF() { -// CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %base.ref: = name_ref base, [concrete = ] -// CHECK:STDOUT: return +// CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_special_name_call_escaped.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: %base.type: type = fn_type @base [concrete] // CHECK:STDOUT: %base: %base.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -278,32 +207,17 @@ fn F() { // CHECK:STDOUT: %base.decl: %base.type = fn_decl @base [concrete = constants.%base] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "special_name.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %base.ref: %base.type = name_ref r#base, imports.%base.decl [concrete = constants.%base] // CHECK:STDOUT: %base.call: init %empty_tuple.type = call %base.ref() -// CHECK:STDOUT: return +// CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @base(); -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_import_overloaded.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %F.type: type = fn_type @F [concrete] -// CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -313,29 +227,16 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .F = %F.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "overloaded.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %foo.ref: = name_ref foo, [concrete = ] -// CHECK:STDOUT: return +// CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_import_variadic.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %F.type: type = fn_type @F [concrete] -// CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -345,29 +246,16 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .F = %F.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "variadic.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %foo.ref: = name_ref foo, [concrete = ] -// CHECK:STDOUT: return +// CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_import_static.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %F.type: type = fn_type @F [concrete] -// CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -377,21 +265,10 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .F = %F.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "static.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %foo.ref: = name_ref foo, [concrete = ] -// CHECK:STDOUT: return +// CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/function/inline.carbon b/toolchain/check/testdata/interop/cpp/function/inline.carbon index 0025c56a97cf0..075ea06a298c3 100644 --- a/toolchain/check/testdata/interop/cpp/function/inline.carbon +++ b/toolchain/check/testdata/interop/cpp/function/inline.carbon @@ -2,8 +2,7 @@ // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// TODO: Add ranges and switch to "--dump-sem-ir-ranges=only". -// EXTRA-ARGS: --no-prelude-import --dump-sem-ir-ranges=if-present +// EXTRA-ARGS: --no-prelude-import --dump-sem-ir-ranges=only // // AUTOUPDATE // TIP: To test this file alone, run: @@ -26,7 +25,9 @@ library "[[@TEST_NAME]]"; import Cpp library "with_definition.h"; fn MyF() { + //@dump-sem-ir-begin Cpp.foo(); + //@dump-sem-ir-end } // ============================================================================ @@ -44,19 +45,19 @@ library "[[@TEST_NAME]]"; import Cpp library "without_definition.h"; fn MyF() { + //@dump-sem-ir-begin // TODO: Error on using an inline function without definition. Cpp.foo(); // Don't error on repeated calls. Cpp.foo(); + //@dump-sem-ir-end } // CHECK:STDOUT: --- import_with_definition.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] // CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -69,33 +70,18 @@ fn MyF() { // CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "with_definition.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %foo.ref: %foo.type = name_ref foo, imports.%foo.decl [concrete = constants.%foo] // CHECK:STDOUT: %foo.call: init %empty_tuple.type = call %foo.ref() -// CHECK:STDOUT: return +// CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @foo(); -// CHECK:STDOUT: // CHECK:STDOUT: --- todo_fail_import_without_definition.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] // CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -108,27 +94,14 @@ fn MyF() { // CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "without_definition.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref.loc8: %foo.type = name_ref foo, imports.%foo.decl [concrete = constants.%foo] -// CHECK:STDOUT: %foo.call.loc8: init %empty_tuple.type = call %foo.ref.loc8() -// CHECK:STDOUT: %Cpp.ref.loc11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref.loc11: %foo.type = name_ref foo, imports.%foo.decl [concrete = constants.%foo] -// CHECK:STDOUT: %foo.call.loc11: init %empty_tuple.type = call %foo.ref.loc11() -// CHECK:STDOUT: return +// CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %foo.ref.loc9: %foo.type = name_ref foo, imports.%foo.decl [concrete = constants.%foo] +// CHECK:STDOUT: %foo.call.loc9: init %empty_tuple.type = call %foo.ref.loc9() +// CHECK:STDOUT: %Cpp.ref.loc12: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %foo.ref.loc12: %foo.type = name_ref foo, imports.%foo.decl [concrete = constants.%foo] +// CHECK:STDOUT: %foo.call.loc12: init %empty_tuple.type = call %foo.ref.loc12() +// CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @foo(); -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/function/struct.carbon b/toolchain/check/testdata/interop/cpp/function/struct.carbon index ac2febadf12d4..5cb5863856187 100644 --- a/toolchain/check/testdata/interop/cpp/function/struct.carbon +++ b/toolchain/check/testdata/interop/cpp/function/struct.carbon @@ -2,7 +2,7 @@ // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// EXTRA-ARGS: --no-prelude-import +// EXTRA-ARGS: --no-prelude-import --dump-sem-ir-ranges=only // // AUTOUPDATE // TIP: To test this file alone, run: diff --git a/toolchain/check/testdata/interop/cpp/function_param_unsupported.carbon b/toolchain/check/testdata/interop/cpp/function_param_unsupported.carbon index 78092829c5cf6..8c0ba63b4d6ee 100644 --- a/toolchain/check/testdata/interop/cpp/function_param_unsupported.carbon +++ b/toolchain/check/testdata/interop/cpp/function_param_unsupported.carbon @@ -2,8 +2,7 @@ // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// TODO: Add ranges and switch to "--dump-sem-ir-ranges=only". -// EXTRA-ARGS: --dump-sem-ir-ranges=if-present +// EXTRA-ARGS: --dump-sem-ir-ranges=only // // AUTOUPDATE // TIP: To test this file alone, run: @@ -26,6 +25,7 @@ library "[[@TEST_NAME]]"; import Cpp library "unsupported_primitive_type.h"; fn F() { + //@dump-sem-ir-begin // CHECK:STDERR: fail_todo_import_unsupported_primitive_type.carbon:[[@LINE+7]]:3: error: semantics TODO: `Unsupported: parameter type: float` [SemanticsTodo] // CHECK:STDERR: Cpp.foo(1.1); // CHECK:STDERR: ^~~~~~~ @@ -34,6 +34,7 @@ fn F() { // CHECK:STDERR: ^~~~~~~ // CHECK:STDERR: Cpp.foo(1.1); + //@dump-sem-ir-end } // ============================================================================ @@ -44,98 +45,58 @@ fn F() { auto foo(int a, float b) -> void; -// --- fail_import_unsupported_primitive_type_among_params.carbon +// --- fail_todo_import_unsupported_primitive_type_among_params.carbon library "[[@TEST_NAME]]"; import Cpp library "unsupported_primitive_type_among_params.h"; fn F() { - // CHECK:STDERR: fail_import_unsupported_primitive_type_among_params.carbon:[[@LINE+7]]:3: error: semantics TODO: `Unsupported: parameter type: float` [SemanticsTodo] + //@dump-sem-ir-begin + // CHECK:STDERR: fail_todo_import_unsupported_primitive_type_among_params.carbon:[[@LINE+7]]:3: error: semantics TODO: `Unsupported: parameter type: float` [SemanticsTodo] // CHECK:STDERR: Cpp.foo(1, 2.0); // CHECK:STDERR: ^~~~~~~ - // CHECK:STDERR: fail_import_unsupported_primitive_type_among_params.carbon:[[@LINE+4]]:3: note: in `Cpp` name lookup for `foo` [InCppNameLookup] + // CHECK:STDERR: fail_todo_import_unsupported_primitive_type_among_params.carbon:[[@LINE+4]]:3: note: in `Cpp` name lookup for `foo` [InCppNameLookup] // CHECK:STDERR: Cpp.foo(1, 2.0); // CHECK:STDERR: ^~~~~~~ // CHECK:STDERR: Cpp.foo(1, 2.0); + //@dump-sem-ir-end } // CHECK:STDOUT: --- fail_todo_import_unsupported_primitive_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %F.type: type = fn_type @F [concrete] -// CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %float: f64 = float_literal 1.1000000000000001 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { -// CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: import Core//prelude -// CHECK:STDOUT: import Core//prelude/... -// CHECK:STDOUT: } // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { // CHECK:STDOUT: .foo = // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Core = imports.%Core -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .F = %F.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Core.import = import Core -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "unsupported_primitive_type.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %foo.ref: = name_ref foo, [concrete = ] // CHECK:STDOUT: %float: f64 = float_literal 1.1000000000000001 [concrete = constants.%float] -// CHECK:STDOUT: return +// CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: --- fail_import_unsupported_primitive_type_among_params.carbon +// CHECK:STDOUT: --- fail_todo_import_unsupported_primitive_type_among_params.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %F.type: type = fn_type @F [concrete] -// CHECK:STDOUT: %F: %F.type = struct_value () [concrete] -// CHECK:STDOUT: %Int.type: type = generic_class_type @Int [concrete] -// CHECK:STDOUT: %Int.generic: %Int.type = struct_value () [concrete] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %float: f64 = float_literal 2 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { -// CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { -// CHECK:STDOUT: .Int = %Core.Int -// CHECK:STDOUT: import Core//prelude -// CHECK:STDOUT: import Core//prelude/... -// CHECK:STDOUT: } // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { // CHECK:STDOUT: .foo = // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %Core.Int: %Int.type = import_ref Core//prelude/types/int, Int, loaded [concrete = constants.%Int.generic] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Core = imports.%Core -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .F = %F.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Core.import = import Core -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "unsupported_primitive_type_among_params.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { @@ -144,6 +105,6 @@ fn F() { // CHECK:STDOUT: %foo.ref: = name_ref foo, [concrete = ] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1] // CHECK:STDOUT: %float: f64 = float_literal 2 [concrete = constants.%float] -// CHECK:STDOUT: return +// CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/include.carbon b/toolchain/check/testdata/interop/cpp/include.carbon index ef14a2319dd73..4263b7f68aec4 100644 --- a/toolchain/check/testdata/interop/cpp/include.carbon +++ b/toolchain/check/testdata/interop/cpp/include.carbon @@ -2,8 +2,7 @@ // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// TODO: Add ranges and switch to "--dump-sem-ir-ranges=only". -// EXTRA-ARGS: --no-prelude-import --dump-sem-ir-ranges=if-present +// EXTRA-ARGS: --no-prelude-import --dump-sem-ir-ranges=only // // AUTOUPDATE // TIP: To test this file alone, run: @@ -23,20 +22,16 @@ void foo(); library "[[@TEST_NAME]]"; +//@dump-sem-ir-begin import Cpp library "including_file.h"; +//@dump-sem-ir-end // CHECK:STDOUT: --- import_function_decl.carbon // CHECK:STDOUT: // CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.import_cpp = import_cpp { // CHECK:STDOUT: import Cpp "including_file.h" // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/interop/cpp/multiple_imports.carbon b/toolchain/check/testdata/interop/cpp/multiple_imports.carbon index 1bc22a17bb496..71c2cd897dff0 100644 --- a/toolchain/check/testdata/interop/cpp/multiple_imports.carbon +++ b/toolchain/check/testdata/interop/cpp/multiple_imports.carbon @@ -2,8 +2,7 @@ // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// TODO: Add ranges and switch to "--dump-sem-ir-ranges=only". -// EXTRA-ARGS: --no-prelude-import --dump-sem-ir-ranges=if-present +// EXTRA-ARGS: --no-prelude-import --dump-sem-ir-ranges=only // // AUTOUPDATE // TIP: To test this file alone, run: @@ -23,21 +22,17 @@ void foo1(); library "[[@TEST_NAME]]"; +//@dump-sem-ir-begin import Cpp library "file1.h"; import Cpp library "file2.h"; +//@dump-sem-ir-end // CHECK:STDOUT: --- multiple_imports.carbon // CHECK:STDOUT: // CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.import_cpp = import_cpp { // CHECK:STDOUT: import Cpp "file1.h" // CHECK:STDOUT: import Cpp "file2.h" diff --git a/toolchain/check/testdata/interop/cpp/namespace.carbon b/toolchain/check/testdata/interop/cpp/namespace.carbon index 754f59ee336d2..b8bd58cfccfd8 100644 --- a/toolchain/check/testdata/interop/cpp/namespace.carbon +++ b/toolchain/check/testdata/interop/cpp/namespace.carbon @@ -2,8 +2,7 @@ // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// TODO: Add ranges and switch to "--dump-sem-ir-ranges=only". -// EXTRA-ARGS: --no-prelude-import --dump-sem-ir-ranges=if-present +// EXTRA-ARGS: --no-prelude-import --dump-sem-ir-ranges=only // // AUTOUPDATE // TIP: To test this file alone, run: @@ -26,7 +25,9 @@ library "[[@TEST_NAME]]"; import Cpp library "single.h"; fn MyF() { + //@dump-sem-ir-begin Cpp.my_namespace.foo(); + //@dump-sem-ir-end } // --- fail_import_namespace_wrong_member_name.carbon @@ -80,9 +81,11 @@ library "[[@TEST_NAME]]"; import Cpp library "multiple.h"; fn MyF() { + //@dump-sem-ir-begin Cpp.my_namespace1.foo1(); Cpp.my_namespace1.my_namespace2.foo2(); Cpp.my_namespace1.my_namespace2.my_namespace3.foo3(); + //@dump-sem-ir-end } // ============================================================================ @@ -114,15 +117,15 @@ library "[[@TEST_NAME]]"; import Cpp library "special_name.h"; fn MyF() { + //@dump-sem-ir-begin Cpp.r#base.foo(); + //@dump-sem-ir-end } // CHECK:STDOUT: --- import_single.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] // CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -139,104 +142,19 @@ fn MyF() { // CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "single.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %my_namespace.ref: = name_ref my_namespace, imports.%my_namespace [concrete = imports.%my_namespace] // CHECK:STDOUT: %foo.ref: %foo.type = name_ref foo, imports.%foo.decl [concrete = constants.%foo] // CHECK:STDOUT: %foo.call: init %empty_tuple.type = call %foo.ref() -// CHECK:STDOUT: return -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @foo(); -// CHECK:STDOUT: -// CHECK:STDOUT: --- fail_import_namespace_wrong_member_name.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: constants { -// CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] -// CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .my_namespace = %my_namespace -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: %my_namespace: = namespace [concrete] { -// CHECK:STDOUT: .not_foo = -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "single.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @MyF() { -// CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %my_namespace.ref: = name_ref my_namespace, imports.%my_namespace [concrete = imports.%my_namespace] -// CHECK:STDOUT: %not_foo.ref: = name_ref not_foo, [concrete = ] -// CHECK:STDOUT: return -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: --- fail_import_namespace_wrong_name.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: constants { -// CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] -// CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .not_my_namespace = -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "single.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @MyF() { -// CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %not_my_namespace.ref: = name_ref not_my_namespace, [concrete = ] -// CHECK:STDOUT: %foo.ref: = name_ref foo, [concrete = ] -// CHECK:STDOUT: return +// CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_multiple.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: %foo1.type: type = fn_type @foo1 [concrete] // CHECK:STDOUT: %foo1: %foo1.type = struct_value () [concrete] // CHECK:STDOUT: %foo2.type: type = fn_type @foo2 [concrete] @@ -269,81 +187,30 @@ fn MyF() { // CHECK:STDOUT: %foo3.decl: %foo3.type = fn_decl @foo3 [concrete = constants.%foo3] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "multiple.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Cpp.ref.loc7: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %my_namespace1.ref.loc7: = name_ref my_namespace1, imports.%my_namespace1 [concrete = imports.%my_namespace1] -// CHECK:STDOUT: %foo1.ref: %foo1.type = name_ref foo1, imports.%foo1.decl [concrete = constants.%foo1] -// CHECK:STDOUT: %foo1.call: init %empty_tuple.type = call %foo1.ref() // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %my_namespace1.ref.loc8: = name_ref my_namespace1, imports.%my_namespace1 [concrete = imports.%my_namespace1] -// CHECK:STDOUT: %my_namespace2.ref.loc8: = name_ref my_namespace2, imports.%my_namespace2 [concrete = imports.%my_namespace2] -// CHECK:STDOUT: %foo2.ref: %foo2.type = name_ref foo2, imports.%foo2.decl [concrete = constants.%foo2] -// CHECK:STDOUT: %foo2.call: init %empty_tuple.type = call %foo2.ref() +// CHECK:STDOUT: %foo1.ref: %foo1.type = name_ref foo1, imports.%foo1.decl [concrete = constants.%foo1] +// CHECK:STDOUT: %foo1.call: init %empty_tuple.type = call %foo1.ref() // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %my_namespace1.ref.loc9: = name_ref my_namespace1, imports.%my_namespace1 [concrete = imports.%my_namespace1] // CHECK:STDOUT: %my_namespace2.ref.loc9: = name_ref my_namespace2, imports.%my_namespace2 [concrete = imports.%my_namespace2] +// CHECK:STDOUT: %foo2.ref: %foo2.type = name_ref foo2, imports.%foo2.decl [concrete = constants.%foo2] +// CHECK:STDOUT: %foo2.call: init %empty_tuple.type = call %foo2.ref() +// CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %my_namespace1.ref.loc10: = name_ref my_namespace1, imports.%my_namespace1 [concrete = imports.%my_namespace1] +// CHECK:STDOUT: %my_namespace2.ref.loc10: = name_ref my_namespace2, imports.%my_namespace2 [concrete = imports.%my_namespace2] // CHECK:STDOUT: %my_namespace3.ref: = name_ref my_namespace3, imports.%my_namespace3 [concrete = imports.%my_namespace3] // CHECK:STDOUT: %foo3.ref: %foo3.type = name_ref foo3, imports.%foo3.decl [concrete = constants.%foo3] // CHECK:STDOUT: %foo3.call: init %empty_tuple.type = call %foo3.ref() -// CHECK:STDOUT: return -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @foo1(); -// CHECK:STDOUT: -// CHECK:STDOUT: fn @foo2(); -// CHECK:STDOUT: -// CHECK:STDOUT: fn @foo3(); -// CHECK:STDOUT: -// CHECK:STDOUT: --- fail_import_special_name_call_unescpaed.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: constants { -// CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] -// CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "special_name.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @MyF() { -// CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %base.ref: = name_ref base, [concrete = ] -// CHECK:STDOUT: %foo.ref: = name_ref foo, [concrete = ] -// CHECK:STDOUT: return +// CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_special_name_call_escpaed.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] // CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -360,25 +227,12 @@ fn MyF() { // CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "special_name.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %base.ref: = name_ref r#base, imports.%base [concrete = imports.%base] // CHECK:STDOUT: %foo.ref: %foo.type = name_ref foo, imports.%foo.decl [concrete = constants.%foo] // CHECK:STDOUT: %foo.call: init %empty_tuple.type = call %foo.ref() -// CHECK:STDOUT: return +// CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @foo(); -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/struct.carbon b/toolchain/check/testdata/interop/cpp/struct.carbon index 13f708a684ee2..26062960ff7ba 100644 --- a/toolchain/check/testdata/interop/cpp/struct.carbon +++ b/toolchain/check/testdata/interop/cpp/struct.carbon @@ -2,8 +2,7 @@ // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// TODO: Add ranges and switch to "--dump-sem-ir-ranges=only". -// EXTRA-ARGS: --no-prelude-import --dump-sem-ir-ranges=if-present +// EXTRA-ARGS: --no-prelude-import --dump-sem-ir-ranges=only // // AUTOUPDATE // TIP: To test this file alone, run: @@ -25,6 +24,7 @@ library "[[@TEST_NAME]]"; import Cpp library "declaration.h"; +//@dump-sem-ir-begin // CHECK:STDERR: fail_todo_import_declaration.carbon:[[@LINE+7]]:13: error: semantics TODO: `Unsupported: Record declarations without a definition` [SemanticsTodo] // CHECK:STDERR: fn MyF(bar: Cpp.Bar*); // CHECK:STDERR: ^~~~~~~ @@ -33,6 +33,7 @@ import Cpp library "declaration.h"; // CHECK:STDERR: ^~~~~~~ // CHECK:STDERR: fn MyF(bar: Cpp.Bar*); +//@dump-sem-ir-end // ============================================================================ // Definition @@ -48,7 +49,9 @@ library "[[@TEST_NAME]]"; import Cpp library "definition.h"; +//@dump-sem-ir-begin fn MyF(bar: Cpp.Bar*); +//@dump-sem-ir-end // ============================================================================ // Declaration and definition @@ -65,7 +68,9 @@ library "[[@TEST_NAME]]"; import Cpp library "declaration_and_definition.h"; +//@dump-sem-ir-begin fn MyF(bar: Cpp.Bar*); +//@dump-sem-ir-end // ============================================================================ // Public static member function @@ -84,7 +89,9 @@ library "[[@TEST_NAME]]"; import Cpp library "public_static_member_function.h"; fn MyF() { + //@dump-sem-ir-begin Cpp.Bar.foo(); + //@dump-sem-ir-end } // ============================================================================ @@ -124,6 +131,7 @@ library "[[@TEST_NAME]]"; import Cpp library "public_member_function.h"; +//@dump-sem-ir-begin fn MyF(bar : Cpp.Bar*) { // CHECK:STDERR: fail_todo_import_public_member_function.carbon:[[@LINE+7]]:3: error: semantics TODO: `Unsupported: Non-global function` [SemanticsTodo] // CHECK:STDERR: bar->foo(); @@ -134,6 +142,7 @@ fn MyF(bar : Cpp.Bar*) { // CHECK:STDERR: bar->foo(); } +//@dump-sem-ir-end // ============================================================================ // Public static data member @@ -152,6 +161,7 @@ library "[[@TEST_NAME]]"; import Cpp library "public_static_data_member.h"; fn MyF() { + //@dump-sem-ir-begin // CHECK:STDERR: fail_todo_import_public_static_data_member.carbon:[[@LINE+11]]:23: error: semantics TODO: `Unsupported: Declaration type Var` [SemanticsTodo] // CHECK:STDERR: let bar: Cpp.Bar* = Cpp.Bar.foo(); // CHECK:STDERR: ^~~~~~~~~~~ @@ -164,6 +174,7 @@ fn MyF() { // CHECK:STDERR: ^~~~~~~~~~~ // CHECK:STDERR: let bar: Cpp.Bar* = Cpp.Bar.foo(); + //@dump-sem-ir-end } // ============================================================================ @@ -182,6 +193,7 @@ library "[[@TEST_NAME]]"; import Cpp library "public_data_member.h"; +//@dump-sem-ir-begin fn MyF(bar : Cpp.Bar*) { // CHECK:STDERR: fail_todo_import_public_data_member.carbon:[[@LINE+11]]:27: error: semantics TODO: `Unsupported: Declaration type Field` [SemanticsTodo] // CHECK:STDERR: let foo_bar: Cpp.Bar* = bar->foo; @@ -196,6 +208,7 @@ fn MyF(bar : Cpp.Bar*) { // CHECK:STDERR: let foo_bar: Cpp.Bar* = bar->foo; } +//@dump-sem-ir-end // ============================================================================ // Inheritance static @@ -218,9 +231,11 @@ library "[[@TEST_NAME]]"; import Cpp library "inheritance_static.h"; fn MyF() { + //@dump-sem-ir-begin Cpp.Bar1.foo1(); Cpp.Bar2.foo1(); Cpp.Bar2.foo2(); + //@dump-sem-ir-end } // ============================================================================ @@ -238,6 +253,7 @@ library "[[@TEST_NAME]]"; import Cpp library "inheritance_pointers.h"; +//@dump-sem-ir-begin fn MyF1(bar : Cpp.Bar1*); // TODO: Support C++ inheritance. // CHECK:STDERR: fail_todo_import_inheritance_pointers.carbon:[[@LINE+7]]:33: error: `Core.ImplicitAs` implicitly referenced here, but package `Core` not found [CoreNotFound] @@ -248,6 +264,7 @@ fn MyF1(bar : Cpp.Bar1*); // CHECK:STDERR: ^~~~~~~~~~~~~~~ // CHECK:STDERR: fn MyF2(bar : Cpp.Bar2*) { MyF1(bar); } +//@dump-sem-ir-end // ============================================================================ // Dynamic @@ -265,6 +282,7 @@ library "[[@TEST_NAME]]"; import Cpp library "dynamic.h"; +//@dump-sem-ir-begin // CHECK:STDERR: fail_todo_import_dynamic.carbon:[[@LINE+7]]:14: error: semantics TODO: `Unsupported: Dynamic Class` [SemanticsTodo] // CHECK:STDERR: fn MyF(bar : Cpp.Bar*); // CHECK:STDERR: ^~~~~~~ @@ -273,6 +291,7 @@ import Cpp library "dynamic.h"; // CHECK:STDERR: ^~~~~~~ // CHECK:STDERR: fn MyF(bar : Cpp.Bar*); +//@dump-sem-ir-end // ============================================================================ // To inherit public @@ -288,6 +307,7 @@ library "[[@TEST_NAME]]"; import Cpp library "to_inherit_public.h"; +//@dump-sem-ir-begin class Derived { extend base: Cpp.Bar; } @@ -295,6 +315,7 @@ class Derived { fn MyF() { Derived.foo(); } +//@dump-sem-ir-end // ============================================================================ // To inherit private @@ -336,6 +357,7 @@ library "[[@TEST_NAME]]"; import Cpp library "template.h"; +//@dump-sem-ir-begin // CHECK:STDERR: fail_todo_import_template.carbon:[[@LINE+11]]:13: error: semantics TODO: `Unsupported: Declaration type ClassTemplate` [SemanticsTodo] // CHECK:STDERR: fn MyF(bar: Cpp.Bar*); // CHECK:STDERR: ^~~~~~~ @@ -348,6 +370,7 @@ import Cpp library "template.h"; // CHECK:STDERR: ^~~~~~~ // CHECK:STDERR: fn MyF(bar: Cpp.Bar*); +//@dump-sem-ir-end // CHECK:STDOUT: --- fail_todo_import_declaration.carbon // CHECK:STDOUT: @@ -364,19 +387,12 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "declaration.h" -// CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { // CHECK:STDOUT: %bar.patt: = binding_pattern bar [concrete] // CHECK:STDOUT: %bar.param_patt: = value_param_pattern %bar.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: = value_param call_param0 -// CHECK:STDOUT: %.loc13: type = splice_block %ptr [concrete = ] { +// CHECK:STDOUT: %.loc14: type = splice_block %ptr [concrete = ] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Bar.ref: = name_ref Bar, [concrete = ] // CHECK:STDOUT: %ptr: type = ptr_type [concrete = ] @@ -391,8 +407,6 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] @@ -408,22 +422,14 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "definition.h" -// CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { // CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar [concrete] // CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern %bar.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 -// CHECK:STDOUT: %.loc6: type = splice_block %ptr [concrete = constants.%ptr] { +// CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: // CHECK:STDOUT: %Bar.ref: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] // CHECK:STDOUT: %ptr: type = ptr_type %Bar.ref [concrete = constants.%ptr] // CHECK:STDOUT: } @@ -431,22 +437,12 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: class @Bar { -// CHECK:STDOUT: complete_type_witness = @MyF.%complete_type -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF(%bar.param: %ptr); // CHECK:STDOUT: // CHECK:STDOUT: --- import_declaration_and_definition.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] @@ -462,22 +458,14 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "declaration_and_definition.h" -// CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { // CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar [concrete] // CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern %bar.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 -// CHECK:STDOUT: %.loc6: type = splice_block %ptr [concrete = constants.%ptr] { +// CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: // CHECK:STDOUT: %Bar.ref: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] // CHECK:STDOUT: %ptr: type = ptr_type %Bar.ref [concrete = constants.%ptr] // CHECK:STDOUT: } @@ -485,80 +473,13 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: class @Bar { -// CHECK:STDOUT: complete_type_witness = @MyF.%complete_type -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF(%bar.param: %ptr); // CHECK:STDOUT: // CHECK:STDOUT: --- import_public_static_member_function.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] -// CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .Bar = %Bar.decl -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {} -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "public_static_member_function.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: class @Bar { -// CHECK:STDOUT: complete_type_witness = @MyF.%complete_type -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar -// CHECK:STDOUT: .foo = imports.%foo.decl -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @MyF() { -// CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] -// CHECK:STDOUT: %Bar.ref: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] -// CHECK:STDOUT: %foo.ref: %foo.type = name_ref foo, imports.%foo.decl [concrete = constants.%foo] -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call %foo.ref() -// CHECK:STDOUT: return -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @foo(); -// CHECK:STDOUT: -// CHECK:STDOUT: --- todo_fail_import_private_static_member_function.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: constants { -// CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] // CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -572,45 +493,20 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "private_static_member_function.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: class @Bar { -// CHECK:STDOUT: complete_type_witness = @MyF.%complete_type -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar -// CHECK:STDOUT: .foo = imports.%foo.decl -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: // CHECK:STDOUT: %Bar.ref: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] // CHECK:STDOUT: %foo.ref: %foo.type = name_ref foo, imports.%foo.decl [concrete = constants.%foo] // CHECK:STDOUT: %foo.call: init %empty_tuple.type = call %foo.ref() -// CHECK:STDOUT: return +// CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @foo(); -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_import_public_member_function.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr.f68: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.f68 [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] @@ -626,22 +522,14 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "public_member_function.h" -// CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { // CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar [concrete] // CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern %bar.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr.f68 = value_param call_param0 -// CHECK:STDOUT: %.loc6: type = splice_block %ptr [concrete = constants.%ptr.f68] { +// CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr.f68] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: // CHECK:STDOUT: %Bar.ref: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] // CHECK:STDOUT: %ptr: type = ptr_type %Bar.ref [concrete = constants.%ptr.f68] // CHECK:STDOUT: } @@ -649,19 +537,10 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: class @Bar { -// CHECK:STDOUT: complete_type_witness = @MyF.%complete_type -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar -// CHECK:STDOUT: .foo = -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF(%bar.param: %ptr.f68) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %bar.ref: %ptr.f68 = name_ref bar, %bar -// CHECK:STDOUT: %.loc14: ref %Bar = deref %bar.ref +// CHECK:STDOUT: %.loc15: ref %Bar = deref %bar.ref // CHECK:STDOUT: %foo.ref: = name_ref foo, [concrete = ] // CHECK:STDOUT: return // CHECK:STDOUT: } @@ -669,11 +548,7 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: --- fail_todo_import_public_static_data_member.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] -// CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr.f68: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.f68 [concrete] // CHECK:STDOUT: } @@ -686,51 +561,28 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "public_static_data_member.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: class @Bar { -// CHECK:STDOUT: complete_type_witness = @MyF.%complete_type -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar -// CHECK:STDOUT: .foo = -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar [concrete] // CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.ref.loc18_23: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Bar.ref.loc18_26: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] +// CHECK:STDOUT: %Cpp.ref.loc19_23: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %Bar.ref.loc19_26: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] // CHECK:STDOUT: %foo.ref: = name_ref foo, [concrete = ] -// CHECK:STDOUT: %.loc18: type = splice_block %ptr [concrete = constants.%ptr.f68] { -// CHECK:STDOUT: %Cpp.ref.loc18_12: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] -// CHECK:STDOUT: %Bar.ref.loc18_15: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] -// CHECK:STDOUT: %ptr: type = ptr_type %Bar.ref.loc18_15 [concrete = constants.%ptr.f68] +// CHECK:STDOUT: %.loc19: type = splice_block %ptr [concrete = constants.%ptr.f68] { +// CHECK:STDOUT: %Cpp.ref.loc19_12: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: +// CHECK:STDOUT: %Bar.ref.loc19_15: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] +// CHECK:STDOUT: %ptr: type = ptr_type %Bar.ref.loc19_15 [concrete = constants.%ptr.f68] // CHECK:STDOUT: } // CHECK:STDOUT: %bar: %ptr.f68 = bind_name bar, [concrete = ] -// CHECK:STDOUT: return +// CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_import_public_data_member.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr.f68: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.f68 [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] @@ -746,50 +598,33 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "public_data_member.h" -// CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { // CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar [concrete] // CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern %bar.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr.f68 = value_param call_param0 -// CHECK:STDOUT: %.loc6: type = splice_block %ptr.loc6 [concrete = constants.%ptr.f68] { -// CHECK:STDOUT: %Cpp.ref.loc6: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] -// CHECK:STDOUT: %Bar.ref.loc6: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] -// CHECK:STDOUT: %ptr.loc6: type = ptr_type %Bar.ref.loc6 [concrete = constants.%ptr.f68] +// CHECK:STDOUT: %.loc7: type = splice_block %ptr.loc7 [concrete = constants.%ptr.f68] { +// CHECK:STDOUT: %Cpp.ref.loc7: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: +// CHECK:STDOUT: %Bar.ref.loc7: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] +// CHECK:STDOUT: %ptr.loc7: type = ptr_type %Bar.ref.loc7 [concrete = constants.%ptr.f68] // CHECK:STDOUT: } // CHECK:STDOUT: %bar: %ptr.f68 = bind_name bar, %bar.param // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: class @Bar { -// CHECK:STDOUT: complete_type_witness = @MyF.%complete_type -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar -// CHECK:STDOUT: .foo = -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF(%bar.param: %ptr.f68) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %foo_bar.patt: %pattern_type = binding_pattern foo_bar [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %bar.ref: %ptr.f68 = name_ref bar, %bar -// CHECK:STDOUT: %.loc18_30: ref %Bar = deref %bar.ref +// CHECK:STDOUT: %.loc19_30: ref %Bar = deref %bar.ref // CHECK:STDOUT: %foo.ref: = name_ref foo, [concrete = ] -// CHECK:STDOUT: %.loc18_23: type = splice_block %ptr.loc18 [concrete = constants.%ptr.f68] { -// CHECK:STDOUT: %Cpp.ref.loc18: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Bar.ref.loc18: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] -// CHECK:STDOUT: %ptr.loc18: type = ptr_type %Bar.ref.loc18 [concrete = constants.%ptr.f68] +// CHECK:STDOUT: %.loc19_23: type = splice_block %ptr.loc19 [concrete = constants.%ptr.f68] { +// CHECK:STDOUT: %Cpp.ref.loc19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %Bar.ref.loc19: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] +// CHECK:STDOUT: %ptr.loc19: type = ptr_type %Bar.ref.loc19 [concrete = constants.%ptr.f68] // CHECK:STDOUT: } // CHECK:STDOUT: %foo_bar: %ptr.f68 = bind_name foo_bar, [concrete = ] // CHECK:STDOUT: return @@ -798,12 +633,8 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: --- import_inheritance_static.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: %Bar1: type = class_type @Bar1 [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %foo1.type.148: type = fn_type @foo1.1 [concrete] // CHECK:STDOUT: %foo1.8cd: %foo1.type.148 = struct_value () [concrete] // CHECK:STDOUT: %Bar2: type = class_type @Bar2 [concrete] @@ -826,69 +657,29 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %foo2.decl: %foo2.type = fn_decl @foo2 [concrete = constants.%foo2] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "inheritance_static.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: class @Bar1 { -// CHECK:STDOUT: complete_type_witness = @MyF.%complete_type.1 -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar1 -// CHECK:STDOUT: .foo1 = imports.%foo1.decl.c80 -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: class @Bar2 { -// CHECK:STDOUT: complete_type_witness = @MyF.%complete_type.2 -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar2 -// CHECK:STDOUT: .foo1 = imports.%foo1.decl.191 -// CHECK:STDOUT: .foo2 = imports.%foo2.decl -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Cpp.ref.loc7: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type.1: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type.1: = complete_type_witness %empty_struct_type.1 [concrete = constants.%complete_type] -// CHECK:STDOUT: %Bar1.ref: type = name_ref Bar1, imports.%Bar1.decl [concrete = constants.%Bar1] -// CHECK:STDOUT: %foo1.ref.loc7: %foo1.type.148 = name_ref foo1, imports.%foo1.decl.c80 [concrete = constants.%foo1.8cd] -// CHECK:STDOUT: %foo1.call.loc7: init %empty_tuple.type = call %foo1.ref.loc7() // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type.2: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type.2: = complete_type_witness %empty_struct_type.2 [concrete = constants.%complete_type] -// CHECK:STDOUT: %Bar2.ref.loc8: type = name_ref Bar2, imports.%Bar2.decl [concrete = constants.%Bar2] -// CHECK:STDOUT: %foo1.ref.loc8: %foo1.type.0b8 = name_ref foo1, imports.%foo1.decl.191 [concrete = constants.%foo1.ba2] +// CHECK:STDOUT: +// CHECK:STDOUT: %Bar1.ref: type = name_ref Bar1, imports.%Bar1.decl [concrete = constants.%Bar1] +// CHECK:STDOUT: %foo1.ref.loc8: %foo1.type.148 = name_ref foo1, imports.%foo1.decl.c80 [concrete = constants.%foo1.8cd] // CHECK:STDOUT: %foo1.call.loc8: init %empty_tuple.type = call %foo1.ref.loc8() // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: // CHECK:STDOUT: %Bar2.ref.loc9: type = name_ref Bar2, imports.%Bar2.decl [concrete = constants.%Bar2] +// CHECK:STDOUT: %foo1.ref.loc9: %foo1.type.0b8 = name_ref foo1, imports.%foo1.decl.191 [concrete = constants.%foo1.ba2] +// CHECK:STDOUT: %foo1.call.loc9: init %empty_tuple.type = call %foo1.ref.loc9() +// CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %Bar2.ref.loc10: type = name_ref Bar2, imports.%Bar2.decl [concrete = constants.%Bar2] // CHECK:STDOUT: %foo2.ref: %foo2.type = name_ref foo2, imports.%foo2.decl [concrete = constants.%foo2] // CHECK:STDOUT: %foo2.call: init %empty_tuple.type = call %foo2.ref() -// CHECK:STDOUT: return +// CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @foo1.1(); -// CHECK:STDOUT: -// CHECK:STDOUT: fn @foo1.2(); -// CHECK:STDOUT: -// CHECK:STDOUT: fn @foo2(); -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_import_inheritance_pointers.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Bar1: type = class_type @Bar1 [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr.f68: type = ptr_type %Bar1 [concrete] // CHECK:STDOUT: %pattern_type.3cc: type = pattern_type %ptr.f68 [concrete] // CHECK:STDOUT: %MyF1.type: type = fn_type @MyF1 [concrete] @@ -912,23 +703,14 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF1 = %MyF1.decl -// CHECK:STDOUT: .MyF2 = %MyF2.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "inheritance_pointers.h" -// CHECK:STDOUT: } // CHECK:STDOUT: %MyF1.decl: %MyF1.type = fn_decl @MyF1 [concrete = constants.%MyF1] { // CHECK:STDOUT: %bar.patt: %pattern_type.3cc = binding_pattern bar [concrete] // CHECK:STDOUT: %bar.param_patt: %pattern_type.3cc = value_param_pattern %bar.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr.f68 = value_param call_param0 -// CHECK:STDOUT: %.loc6: type = splice_block %ptr [concrete = constants.%ptr.f68] { +// CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr.f68] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: // CHECK:STDOUT: %Bar1.ref: type = name_ref Bar1, imports.%Bar1.decl [concrete = constants.%Bar1] // CHECK:STDOUT: %ptr: type = ptr_type %Bar1.ref [concrete = constants.%ptr.f68] // CHECK:STDOUT: } @@ -939,10 +721,9 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %bar.param_patt: %pattern_type.92a = value_param_pattern %bar.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr.eca = value_param call_param0 -// CHECK:STDOUT: %.loc15_23: type = splice_block %ptr [concrete = constants.%ptr.eca] { +// CHECK:STDOUT: %.loc16_23: type = splice_block %ptr [concrete = constants.%ptr.eca] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: // CHECK:STDOUT: %Bar2.ref: type = name_ref Bar2, imports.%Bar2.decl [concrete = constants.%Bar2] // CHECK:STDOUT: %ptr: type = ptr_type %Bar2.ref [concrete = constants.%ptr.eca] // CHECK:STDOUT: } @@ -950,29 +731,13 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: class @Bar1 { -// CHECK:STDOUT: complete_type_witness = @MyF1.%complete_type -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar1 -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: class @Bar2 { -// CHECK:STDOUT: complete_type_witness = @MyF2.%complete_type -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar2 -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF1(%bar.param: %ptr.f68); // CHECK:STDOUT: // CHECK:STDOUT: fn @MyF2(%bar.param: %ptr.eca) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %MyF1.ref: %MyF1.type = name_ref MyF1, file.%MyF1.decl [concrete = constants.%MyF1] // CHECK:STDOUT: %bar.ref: %ptr.eca = name_ref bar, %bar -// CHECK:STDOUT: %.loc15_33: %ptr.f68 = converted %bar.ref, [concrete = ] +// CHECK:STDOUT: %.loc16_33: %ptr.f68 = converted %bar.ref, [concrete = ] // CHECK:STDOUT: %MyF1.call: init %empty_tuple.type = call %MyF1.ref() // CHECK:STDOUT: return // CHECK:STDOUT: } @@ -992,19 +757,12 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "dynamic.h" -// CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { // CHECK:STDOUT: %bar.patt: = binding_pattern bar [concrete] // CHECK:STDOUT: %bar.param_patt: = value_param_pattern %bar.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: = value_param call_param0 -// CHECK:STDOUT: %.loc13: type = splice_block %ptr [concrete = ] { +// CHECK:STDOUT: %.loc14: type = splice_block %ptr [concrete = ] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Bar.ref: = name_ref Bar, [concrete = ] // CHECK:STDOUT: %ptr: type = ptr_type [concrete = ] @@ -1020,84 +778,6 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: constants { // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %Derived.elem: type = unbound_element_type %Derived, %Bar [concrete] -// CHECK:STDOUT: %struct_type.base.36d: type = struct_type {.base: %Bar} [concrete] -// CHECK:STDOUT: %complete_type.fff: = complete_type_witness %struct_type.base.36d [concrete] -// CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] -// CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .Bar = %Bar.decl -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {} -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .Derived = %Derived.decl -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "to_inherit_public.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} -// CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: class @Derived { -// CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type.1: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type.357] -// CHECK:STDOUT: %Bar.ref: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] -// CHECK:STDOUT: %.loc7: %Derived.elem = base_decl %Bar.ref, element0 [concrete] -// CHECK:STDOUT: %struct_type.base: type = struct_type {.base: %Bar} [concrete = constants.%struct_type.base.36d] -// CHECK:STDOUT: %complete_type.loc8: = complete_type_witness %struct_type.base [concrete = constants.%complete_type.fff] -// CHECK:STDOUT: complete_type_witness = %complete_type.loc8 -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Derived -// CHECK:STDOUT: .Cpp = -// CHECK:STDOUT: .base = %.loc7 -// CHECK:STDOUT: .foo = -// CHECK:STDOUT: extend %Bar.ref -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: class @Bar { -// CHECK:STDOUT: complete_type_witness = @Derived.%complete_type.1 -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar -// CHECK:STDOUT: .foo = imports.%foo.decl -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @MyF() { -// CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Derived.ref: type = name_ref Derived, file.%Derived.decl [concrete = constants.%Derived] -// CHECK:STDOUT: %foo.ref: %foo.type = name_ref foo, imports.%foo.decl [concrete = constants.%foo] -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call %foo.ref() -// CHECK:STDOUT: return -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @foo(); -// CHECK:STDOUT: -// CHECK:STDOUT: --- todo_fail_to_inherit_private.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: constants { -// CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] -// CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %Derived.elem: type = unbound_element_type %Derived, %Bar [concrete] // CHECK:STDOUT: %struct_type.base.36d: type = struct_type {.base: %Bar} [concrete] @@ -1118,45 +798,27 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .Derived = %Derived.decl -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "to_inherit_private.h" -// CHECK:STDOUT: } // CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Derived { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type.1: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type.357] +// CHECK:STDOUT: // CHECK:STDOUT: %Bar.ref: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] -// CHECK:STDOUT: %.loc7: %Derived.elem = base_decl %Bar.ref, element0 [concrete] +// CHECK:STDOUT: %.loc8: %Derived.elem = base_decl %Bar.ref, element0 [concrete] // CHECK:STDOUT: %struct_type.base: type = struct_type {.base: %Bar} [concrete = constants.%struct_type.base.36d] -// CHECK:STDOUT: %complete_type.loc8: = complete_type_witness %struct_type.base [concrete = constants.%complete_type.fff] -// CHECK:STDOUT: complete_type_witness = %complete_type.loc8 +// CHECK:STDOUT: %complete_type.loc9: = complete_type_witness %struct_type.base [concrete = constants.%complete_type.fff] +// CHECK:STDOUT: complete_type_witness = %complete_type.loc9 // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Derived // CHECK:STDOUT: .Cpp = -// CHECK:STDOUT: .base = %.loc7 +// CHECK:STDOUT: .base = %.loc8 // CHECK:STDOUT: .foo = // CHECK:STDOUT: extend %Bar.ref // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: class @Bar { -// CHECK:STDOUT: complete_type_witness = @Derived.%complete_type.1 -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar -// CHECK:STDOUT: .foo = imports.%foo.decl -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Derived.ref: type = name_ref Derived, file.%Derived.decl [concrete = constants.%Derived] @@ -1165,8 +827,6 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @foo(); -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_import_template.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -1182,19 +842,12 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "template.h" -// CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { // CHECK:STDOUT: %bar.patt: = binding_pattern bar [concrete] // CHECK:STDOUT: %bar.param_patt: = value_param_pattern %bar.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: = value_param call_param0 -// CHECK:STDOUT: %.loc17: type = splice_block %ptr [concrete = ] { +// CHECK:STDOUT: %.loc18: type = splice_block %ptr [concrete = ] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Bar.ref: = name_ref Bar, [concrete = ] // CHECK:STDOUT: %ptr: type = ptr_type [concrete = ] diff --git a/toolchain/check/testdata/interop/cpp/union.carbon b/toolchain/check/testdata/interop/cpp/union.carbon index 265297dee4a19..0722ce76340e6 100644 --- a/toolchain/check/testdata/interop/cpp/union.carbon +++ b/toolchain/check/testdata/interop/cpp/union.carbon @@ -2,8 +2,7 @@ // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// TODO: Add ranges and switch to "--dump-sem-ir-ranges=only". -// EXTRA-ARGS: --no-prelude-import --dump-sem-ir-ranges=if-present +// EXTRA-ARGS: --no-prelude-import --dump-sem-ir-ranges=only // // AUTOUPDATE // TIP: To test this file alone, run: @@ -25,6 +24,7 @@ library "[[@TEST_NAME]]"; import Cpp library "declaration.h"; +//@dump-sem-ir-begin // CHECK:STDERR: fail_todo_import_declaration.carbon:[[@LINE+7]]:13: error: semantics TODO: `Unsupported: Record declarations without a definition` [SemanticsTodo] // CHECK:STDERR: fn MyF(bar: Cpp.Bar*); // CHECK:STDERR: ^~~~~~~ @@ -33,6 +33,7 @@ import Cpp library "declaration.h"; // CHECK:STDERR: ^~~~~~~ // CHECK:STDERR: fn MyF(bar: Cpp.Bar*); +//@dump-sem-ir-end // ============================================================================ // Definition @@ -48,7 +49,9 @@ library "[[@TEST_NAME]]"; import Cpp library "definition.h"; +//@dump-sem-ir-begin fn MyF(bar: Cpp.Bar*); +//@dump-sem-ir-end // ============================================================================ // Declaration and definition @@ -65,7 +68,9 @@ library "[[@TEST_NAME]]"; import Cpp library "declaration_and_definition.h"; +//@dump-sem-ir-begin fn MyF(bar: Cpp.Bar*); +//@dump-sem-ir-end // ============================================================================ // Public static member function @@ -85,7 +90,9 @@ library "[[@TEST_NAME]]"; import Cpp library "public_static_member_function.h"; fn MyF() { + //@dump-sem-ir-begin Cpp.Bar.foo(); + //@dump-sem-ir-end } // ============================================================================ @@ -126,6 +133,7 @@ library "[[@TEST_NAME]]"; import Cpp library "public_member_function.h"; +//@dump-sem-ir-begin fn MyF(bar : Cpp.Bar*) { // CHECK:STDERR: fail_todo_import_public_member_function.carbon:[[@LINE+7]]:3: error: semantics TODO: `Unsupported: Non-global function` [SemanticsTodo] // CHECK:STDERR: bar->foo(); @@ -136,6 +144,7 @@ fn MyF(bar : Cpp.Bar*) { // CHECK:STDERR: bar->foo(); } +//@dump-sem-ir-end // ============================================================================ // Public static data member @@ -155,6 +164,7 @@ library "[[@TEST_NAME]]"; import Cpp library "public_static_data_member.h"; fn MyF() { + //@dump-sem-ir-begin // CHECK:STDERR: fail_todo_import_public_static_data_member.carbon:[[@LINE+11]]:23: error: semantics TODO: `Unsupported: Declaration type Var` [SemanticsTodo] // CHECK:STDERR: let bar: Cpp.Bar* = Cpp.Bar.foo(); // CHECK:STDERR: ^~~~~~~~~~~ @@ -167,6 +177,7 @@ fn MyF() { // CHECK:STDERR: ^~~~~~~~~~~ // CHECK:STDERR: let bar: Cpp.Bar* = Cpp.Bar.foo(); + //@dump-sem-ir-end } // ============================================================================ @@ -186,6 +197,7 @@ library "[[@TEST_NAME]]"; import Cpp library "public_static_data_member.h"; +//@dump-sem-ir-begin fn MyF(bar : Cpp.Bar*) { // CHECK:STDERR: fail_todo_import_public_data_member.carbon:[[@LINE+11]]:27: error: semantics TODO: `Unsupported: Declaration type Var` [SemanticsTodo] // CHECK:STDERR: let foo_bar: Cpp.Bar* = bar->foo; @@ -200,6 +212,7 @@ fn MyF(bar : Cpp.Bar*) { // CHECK:STDERR: let foo_bar: Cpp.Bar* = bar->foo; } +//@dump-sem-ir-end // ============================================================================ // To inherit public @@ -241,6 +254,7 @@ library "[[@TEST_NAME]]"; import Cpp library "template.h"; +//@dump-sem-ir-begin // CHECK:STDERR: fail_todo_import_template.carbon:[[@LINE+11]]:13: error: semantics TODO: `Unsupported: Declaration type ClassTemplate` [SemanticsTodo] // CHECK:STDERR: fn MyF(bar: Cpp.Bar*); // CHECK:STDERR: ^~~~~~~ @@ -253,6 +267,7 @@ import Cpp library "template.h"; // CHECK:STDERR: ^~~~~~~ // CHECK:STDERR: fn MyF(bar: Cpp.Bar*); +//@dump-sem-ir-end // CHECK:STDOUT: --- fail_todo_import_declaration.carbon // CHECK:STDOUT: @@ -269,19 +284,12 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "declaration.h" -// CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { // CHECK:STDOUT: %bar.patt: = binding_pattern bar [concrete] // CHECK:STDOUT: %bar.param_patt: = value_param_pattern %bar.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: = value_param call_param0 -// CHECK:STDOUT: %.loc13: type = splice_block %ptr [concrete = ] { +// CHECK:STDOUT: %.loc14: type = splice_block %ptr [concrete = ] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Bar.ref: = name_ref Bar, [concrete = ] // CHECK:STDOUT: %ptr: type = ptr_type [concrete = ] @@ -296,8 +304,6 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] @@ -313,22 +319,14 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "definition.h" -// CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { // CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar [concrete] // CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern %bar.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 -// CHECK:STDOUT: %.loc6: type = splice_block %ptr [concrete = constants.%ptr] { +// CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: // CHECK:STDOUT: %Bar.ref: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] // CHECK:STDOUT: %ptr: type = ptr_type %Bar.ref [concrete = constants.%ptr] // CHECK:STDOUT: } @@ -336,22 +334,12 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: class @Bar { -// CHECK:STDOUT: complete_type_witness = @MyF.%complete_type -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF(%bar.param: %ptr); // CHECK:STDOUT: // CHECK:STDOUT: --- import_declaration_and_definition.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] @@ -367,22 +355,14 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "declaration_and_definition.h" -// CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { // CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar [concrete] // CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern %bar.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 -// CHECK:STDOUT: %.loc6: type = splice_block %ptr [concrete = constants.%ptr] { +// CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: // CHECK:STDOUT: %Bar.ref: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] // CHECK:STDOUT: %ptr: type = ptr_type %Bar.ref [concrete = constants.%ptr] // CHECK:STDOUT: } @@ -390,80 +370,13 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: class @Bar { -// CHECK:STDOUT: complete_type_witness = @MyF.%complete_type -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF(%bar.param: %ptr); // CHECK:STDOUT: // CHECK:STDOUT: --- import_public_static_member_function.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] -// CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .Bar = %Bar.decl -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {} -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "public_static_member_function.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: class @Bar { -// CHECK:STDOUT: complete_type_witness = @MyF.%complete_type -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar -// CHECK:STDOUT: .foo = imports.%foo.decl -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @MyF() { -// CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] -// CHECK:STDOUT: %Bar.ref: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] -// CHECK:STDOUT: %foo.ref: %foo.type = name_ref foo, imports.%foo.decl [concrete = constants.%foo] -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call %foo.ref() -// CHECK:STDOUT: return -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @foo(); -// CHECK:STDOUT: -// CHECK:STDOUT: --- todo_fail_import_private_static_member_function.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: constants { -// CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] // CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -477,45 +390,20 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "private_static_member_function.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: class @Bar { -// CHECK:STDOUT: complete_type_witness = @MyF.%complete_type -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar -// CHECK:STDOUT: .foo = imports.%foo.decl -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: // CHECK:STDOUT: %Bar.ref: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] // CHECK:STDOUT: %foo.ref: %foo.type = name_ref foo, imports.%foo.decl [concrete = constants.%foo] // CHECK:STDOUT: %foo.call: init %empty_tuple.type = call %foo.ref() -// CHECK:STDOUT: return +// CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @foo(); -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_import_public_member_function.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr.f68: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.f68 [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] @@ -531,22 +419,14 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "public_member_function.h" -// CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { // CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar [concrete] // CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern %bar.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr.f68 = value_param call_param0 -// CHECK:STDOUT: %.loc6: type = splice_block %ptr [concrete = constants.%ptr.f68] { +// CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr.f68] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] +// CHECK:STDOUT: // CHECK:STDOUT: %Bar.ref: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] // CHECK:STDOUT: %ptr: type = ptr_type %Bar.ref [concrete = constants.%ptr.f68] // CHECK:STDOUT: } @@ -554,19 +434,10 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: class @Bar { -// CHECK:STDOUT: complete_type_witness = @MyF.%complete_type -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar -// CHECK:STDOUT: .foo = -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF(%bar.param: %ptr.f68) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %bar.ref: %ptr.f68 = name_ref bar, %bar -// CHECK:STDOUT: %.loc14: ref %Bar = deref %bar.ref +// CHECK:STDOUT: %.loc15: ref %Bar = deref %bar.ref // CHECK:STDOUT: %foo.ref: = name_ref foo, [concrete = ] // CHECK:STDOUT: return // CHECK:STDOUT: } @@ -574,11 +445,7 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: --- fail_todo_import_public_static_data_member.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] -// CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr.f68: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.f68 [concrete] // CHECK:STDOUT: } @@ -591,51 +458,28 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "public_static_data_member.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: class @Bar { -// CHECK:STDOUT: complete_type_witness = @MyF.%complete_type -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar -// CHECK:STDOUT: .foo = -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar [concrete] // CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.ref.loc18_23: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Bar.ref.loc18_26: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] +// CHECK:STDOUT: %Cpp.ref.loc19_23: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %Bar.ref.loc19_26: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] // CHECK:STDOUT: %foo.ref: = name_ref foo, [concrete = ] -// CHECK:STDOUT: %.loc18: type = splice_block %ptr [concrete = constants.%ptr.f68] { -// CHECK:STDOUT: %Cpp.ref.loc18_12: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] -// CHECK:STDOUT: %Bar.ref.loc18_15: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] -// CHECK:STDOUT: %ptr: type = ptr_type %Bar.ref.loc18_15 [concrete = constants.%ptr.f68] +// CHECK:STDOUT: %.loc19: type = splice_block %ptr [concrete = constants.%ptr.f68] { +// CHECK:STDOUT: %Cpp.ref.loc19_12: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: +// CHECK:STDOUT: %Bar.ref.loc19_15: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] +// CHECK:STDOUT: %ptr: type = ptr_type %Bar.ref.loc19_15 [concrete = constants.%ptr.f68] // CHECK:STDOUT: } // CHECK:STDOUT: %bar: %ptr.f68 = bind_name bar, [concrete = ] -// CHECK:STDOUT: return +// CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_import_public_data_member.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %ptr.f68: type = ptr_type %Bar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.f68 [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] @@ -651,131 +495,38 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "public_static_data_member.h" -// CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { // CHECK:STDOUT: %bar.patt: %pattern_type = binding_pattern bar [concrete] // CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern %bar.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: %ptr.f68 = value_param call_param0 -// CHECK:STDOUT: %.loc6: type = splice_block %ptr.loc6 [concrete = constants.%ptr.f68] { -// CHECK:STDOUT: %Cpp.ref.loc6: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type] -// CHECK:STDOUT: %Bar.ref.loc6: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] -// CHECK:STDOUT: %ptr.loc6: type = ptr_type %Bar.ref.loc6 [concrete = constants.%ptr.f68] +// CHECK:STDOUT: %.loc7: type = splice_block %ptr.loc7 [concrete = constants.%ptr.f68] { +// CHECK:STDOUT: %Cpp.ref.loc7: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: +// CHECK:STDOUT: %Bar.ref.loc7: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] +// CHECK:STDOUT: %ptr.loc7: type = ptr_type %Bar.ref.loc7 [concrete = constants.%ptr.f68] // CHECK:STDOUT: } // CHECK:STDOUT: %bar: %ptr.f68 = bind_name bar, %bar.param // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: class @Bar { -// CHECK:STDOUT: complete_type_witness = @MyF.%complete_type -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar -// CHECK:STDOUT: .foo = -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @MyF(%bar.param: %ptr.f68) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %foo_bar.patt: %pattern_type = binding_pattern foo_bar [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %bar.ref: %ptr.f68 = name_ref bar, %bar -// CHECK:STDOUT: %.loc18_30: ref %Bar = deref %bar.ref +// CHECK:STDOUT: %.loc19_30: ref %Bar = deref %bar.ref // CHECK:STDOUT: %foo.ref: = name_ref foo, [concrete = ] -// CHECK:STDOUT: %.loc18_23: type = splice_block %ptr.loc18 [concrete = constants.%ptr.f68] { -// CHECK:STDOUT: %Cpp.ref.loc18: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Bar.ref.loc18: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] -// CHECK:STDOUT: %ptr.loc18: type = ptr_type %Bar.ref.loc18 [concrete = constants.%ptr.f68] +// CHECK:STDOUT: %.loc19_23: type = splice_block %ptr.loc19 [concrete = constants.%ptr.f68] { +// CHECK:STDOUT: %Cpp.ref.loc19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %Bar.ref.loc19: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] +// CHECK:STDOUT: %ptr.loc19: type = ptr_type %Bar.ref.loc19 [concrete = constants.%ptr.f68] // CHECK:STDOUT: } // CHECK:STDOUT: %foo_bar: %ptr.f68 = bind_name foo_bar, [concrete = ] // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: --- todo_fail_import_to_inherit_public.carbon -// CHECK:STDOUT: -// CHECK:STDOUT: constants { -// CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] -// CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %Derived.elem: type = unbound_element_type %Derived, %Bar [concrete] -// CHECK:STDOUT: %struct_type.base.36d: type = struct_type {.base: %Bar} [concrete] -// CHECK:STDOUT: %complete_type.fff: = complete_type_witness %struct_type.base.36d [concrete] -// CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] -// CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: imports { -// CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .Bar = %Bar.decl -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {} -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .Derived = %Derived.decl -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "to_inherit_public.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} -// CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: class @Derived { -// CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type] -// CHECK:STDOUT: %complete_type.1: = complete_type_witness %empty_struct_type [concrete = constants.%complete_type.357] -// CHECK:STDOUT: %Bar.ref: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] -// CHECK:STDOUT: %.loc7: %Derived.elem = base_decl %Bar.ref, element0 [concrete] -// CHECK:STDOUT: %struct_type.base: type = struct_type {.base: %Bar} [concrete = constants.%struct_type.base.36d] -// CHECK:STDOUT: %complete_type.loc8: = complete_type_witness %struct_type.base [concrete = constants.%complete_type.fff] -// CHECK:STDOUT: complete_type_witness = %complete_type.loc8 -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Derived -// CHECK:STDOUT: .Cpp = -// CHECK:STDOUT: .base = %.loc7 -// CHECK:STDOUT: .foo = -// CHECK:STDOUT: extend %Bar.ref -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: class @Bar { -// CHECK:STDOUT: complete_type_witness = @Derived.%complete_type.1 -// CHECK:STDOUT: -// CHECK:STDOUT: !members: -// CHECK:STDOUT: .Self = constants.%Bar -// CHECK:STDOUT: .foo = imports.%foo.decl -// CHECK:STDOUT: import Cpp//... -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @MyF() { -// CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Derived.ref: type = name_ref Derived, file.%Derived.decl [concrete = constants.%Derived] -// CHECK:STDOUT: %foo.ref: %foo.type = name_ref foo, imports.%foo.decl [concrete = constants.%foo] -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call %foo.ref() -// CHECK:STDOUT: return -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: fn @foo(); -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_import_template.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -791,19 +542,12 @@ fn MyF(bar: Cpp.Bar*); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .MyF = %MyF.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "template.h" -// CHECK:STDOUT: } // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { // CHECK:STDOUT: %bar.patt: = binding_pattern bar [concrete] // CHECK:STDOUT: %bar.param_patt: = value_param_pattern %bar.patt, call_param0 [concrete] // CHECK:STDOUT: } { // CHECK:STDOUT: %bar.param: = value_param call_param0 -// CHECK:STDOUT: %.loc17: type = splice_block %ptr [concrete = ] { +// CHECK:STDOUT: %.loc18: type = splice_block %ptr [concrete = ] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Bar.ref: = name_ref Bar, [concrete = ] // CHECK:STDOUT: %ptr: type = ptr_type [concrete = ] diff --git a/toolchain/check/testdata/interop/cpp/unsupported_decl_type.carbon b/toolchain/check/testdata/interop/cpp/unsupported_decl_type.carbon index 219890367e169..db7d21a06f8fa 100644 --- a/toolchain/check/testdata/interop/cpp/unsupported_decl_type.carbon +++ b/toolchain/check/testdata/interop/cpp/unsupported_decl_type.carbon @@ -2,8 +2,7 @@ // Exceptions. See /LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // -// TODO: Add ranges and switch to "--dump-sem-ir-ranges=only". -// EXTRA-ARGS: --no-prelude-import --dump-sem-ir-ranges=if-present +// EXTRA-ARGS: --no-prelude-import --dump-sem-ir-ranges=only // // AUTOUPDATE // TIP: To test this file alone, run: @@ -15,32 +14,32 @@ typedef int foo; -// --- fail_import_unsupported_decl.carbon +// --- fail_todo_import_unsupported_decl.carbon library "[[@TEST_NAME]]"; import Cpp library "unsupported_decl.h"; fn F() { - // CHECK:STDERR: fail_import_unsupported_decl.carbon:[[@LINE+11]]:3: error: semantics TODO: `Unsupported: Declaration type Typedef` [SemanticsTodo] + //@dump-sem-ir-begin + // CHECK:STDERR: fail_todo_import_unsupported_decl.carbon:[[@LINE+11]]:3: error: semantics TODO: `Unsupported: Declaration type Typedef` [SemanticsTodo] // CHECK:STDERR: Cpp.foo(); // CHECK:STDERR: ^~~~~~~ - // CHECK:STDERR: fail_import_unsupported_decl.carbon:[[@LINE+8]]:3: note: in `Cpp` name lookup for `foo` [InCppNameLookup] + // CHECK:STDERR: fail_todo_import_unsupported_decl.carbon:[[@LINE+8]]:3: note: in `Cpp` name lookup for `foo` [InCppNameLookup] // CHECK:STDERR: Cpp.foo(); // CHECK:STDERR: ^~~~~~~ // CHECK:STDERR: - // CHECK:STDERR: fail_import_unsupported_decl.carbon:[[@LINE+4]]:3: error: member name `foo` not found in `Cpp` [MemberNameNotFoundInInstScope] + // CHECK:STDERR: fail_todo_import_unsupported_decl.carbon:[[@LINE+4]]:3: error: member name `foo` not found in `Cpp` [MemberNameNotFoundInInstScope] // CHECK:STDERR: Cpp.foo(); // CHECK:STDERR: ^~~~~~~ // CHECK:STDERR: Cpp.foo(); + //@dump-sem-ir-end } -// CHECK:STDOUT: --- fail_import_unsupported_decl.carbon +// CHECK:STDOUT: --- fail_todo_import_unsupported_decl.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %F.type: type = fn_type @F [concrete] -// CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -50,21 +49,10 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .Cpp = imports.%Cpp -// CHECK:STDOUT: .F = %F.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "unsupported_decl.h" -// CHECK:STDOUT: } -// CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} -// CHECK:STDOUT: } -// CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %foo.ref: = name_ref foo, [concrete = ] -// CHECK:STDOUT: return +// CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: