diff --git a/toolchain/check/testdata/interop/cpp/basics/cpp_diagnostics.carbon b/toolchain/check/testdata/interop/cpp/basics/cpp_diagnostics.carbon index ccaa70fce8a5..fea344e8cbaf 100644 --- a/toolchain/check/testdata/interop/cpp/basics/cpp_diagnostics.carbon +++ b/toolchain/check/testdata/interop/cpp/basics/cpp_diagnostics.carbon @@ -180,88 +180,115 @@ import Cpp library "multiple_errors_and_multiple_warnings.h"; // Multiple files with warnings // ============================================================================ +// --- multi_one_warning.h + +#warning "warning1" + +// --- multi_multiple_warnings.h + +#warning "warning1" +#warning "warning2" +#warning "warning3" + // --- import_multiple_cpp_files_with_warnings.carbon library "[[@TEST_NAME]]"; //@dump-sem-ir-begin // CHECK:STDERR: import_multiple_cpp_files_with_warnings.carbon:[[@LINE+5]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./one_warning.h:2:2: warning: "warning1" [CppInteropParseWarning] +// CHECK:STDERR: ./multi_one_warning.h:2:2: warning: "warning1" [CppInteropParseWarning] // CHECK:STDERR: 2 | #warning "warning1" // CHECK:STDERR: | ^ // CHECK:STDERR: -import Cpp library "one_warning.h"; +import Cpp library "multi_one_warning.h"; // CHECK:STDERR: import_multiple_cpp_files_with_warnings.carbon:[[@LINE+15]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./multiple_warnings.h:2:2: warning: "warning1" [CppInteropParseWarning] +// CHECK:STDERR: ./multi_multiple_warnings.h:2:2: warning: "warning1" [CppInteropParseWarning] // CHECK:STDERR: 2 | #warning "warning1" // CHECK:STDERR: | ^ // CHECK:STDERR: // CHECK:STDERR: import_multiple_cpp_files_with_warnings.carbon:[[@LINE+10]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./multiple_warnings.h:3:2: warning: "warning2" [CppInteropParseWarning] +// CHECK:STDERR: ./multi_multiple_warnings.h:3:2: warning: "warning2" [CppInteropParseWarning] // CHECK:STDERR: 3 | #warning "warning2" // CHECK:STDERR: | ^ // CHECK:STDERR: // CHECK:STDERR: import_multiple_cpp_files_with_warnings.carbon:[[@LINE+5]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./multiple_warnings.h:4:2: warning: "warning3" [CppInteropParseWarning] +// CHECK:STDERR: ./multi_multiple_warnings.h:4:2: warning: "warning3" [CppInteropParseWarning] // CHECK:STDERR: 4 | #warning "warning3" // CHECK:STDERR: | ^ // CHECK:STDERR: -import Cpp library "multiple_warnings.h"; +import Cpp library "multi_multiple_warnings.h"; //@dump-sem-ir-end // ============================================================================ // Multiple files with errors and warnings // ============================================================================ +// --- multi_one_error_and_one_warning.h + +#error "error1" +#warning "warning1" + +// --- multi_multiple_errors_and_multiple_warnings.h + +#error "error1" +#error "error2" +#warning "warning1" +#warning "warning2" +#warning "warning3" + // --- fail_import_multiple_cpp_files_with_errors_and_warnings.carbon library "[[@TEST_NAME]]"; // CHECK:STDERR: fail_import_multiple_cpp_files_with_errors_and_warnings.carbon:[[@LINE+10]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./one_error_and_one_warning.h:2:2: error: "error1" [CppInteropParseError] +// CHECK:STDERR: ./multi_one_error_and_one_warning.h:2:2: error: "error1" [CppInteropParseError] // CHECK:STDERR: 2 | #error "error1" // CHECK:STDERR: | ^ // CHECK:STDERR: // CHECK:STDERR: fail_import_multiple_cpp_files_with_errors_and_warnings.carbon:[[@LINE+5]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./one_error_and_one_warning.h:3:2: warning: "warning1" [CppInteropParseWarning] +// CHECK:STDERR: ./multi_one_error_and_one_warning.h:3:2: warning: "warning1" [CppInteropParseWarning] // CHECK:STDERR: 3 | #warning "warning1" // CHECK:STDERR: | ^ // CHECK:STDERR: -import Cpp library "one_error_and_one_warning.h"; +import Cpp library "multi_one_error_and_one_warning.h"; // CHECK:STDERR: fail_import_multiple_cpp_files_with_errors_and_warnings.carbon:[[@LINE+25]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./multiple_errors_and_multiple_warnings.h:2:2: error: "error1" [CppInteropParseError] +// CHECK:STDERR: ./multi_multiple_errors_and_multiple_warnings.h:2:2: error: "error1" [CppInteropParseError] // CHECK:STDERR: 2 | #error "error1" // CHECK:STDERR: | ^ // CHECK:STDERR: // CHECK:STDERR: fail_import_multiple_cpp_files_with_errors_and_warnings.carbon:[[@LINE+20]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./multiple_errors_and_multiple_warnings.h:3:2: error: "error2" [CppInteropParseError] +// CHECK:STDERR: ./multi_multiple_errors_and_multiple_warnings.h:3:2: error: "error2" [CppInteropParseError] // CHECK:STDERR: 3 | #error "error2" // CHECK:STDERR: | ^ // CHECK:STDERR: // CHECK:STDERR: fail_import_multiple_cpp_files_with_errors_and_warnings.carbon:[[@LINE+15]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./multiple_errors_and_multiple_warnings.h:4:2: warning: "warning1" [CppInteropParseWarning] +// CHECK:STDERR: ./multi_multiple_errors_and_multiple_warnings.h:4:2: warning: "warning1" [CppInteropParseWarning] // CHECK:STDERR: 4 | #warning "warning1" // CHECK:STDERR: | ^ // CHECK:STDERR: // CHECK:STDERR: fail_import_multiple_cpp_files_with_errors_and_warnings.carbon:[[@LINE+10]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./multiple_errors_and_multiple_warnings.h:5:2: warning: "warning2" [CppInteropParseWarning] +// CHECK:STDERR: ./multi_multiple_errors_and_multiple_warnings.h:5:2: warning: "warning2" [CppInteropParseWarning] // CHECK:STDERR: 5 | #warning "warning2" // CHECK:STDERR: | ^ // CHECK:STDERR: // CHECK:STDERR: fail_import_multiple_cpp_files_with_errors_and_warnings.carbon:[[@LINE+5]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./multiple_errors_and_multiple_warnings.h:6:2: warning: "warning3" [CppInteropParseWarning] +// CHECK:STDERR: ./multi_multiple_errors_and_multiple_warnings.h:6:2: warning: "warning3" [CppInteropParseWarning] // CHECK:STDERR: 6 | #warning "warning3" // CHECK:STDERR: | ^ // CHECK:STDERR: -import Cpp library "multiple_errors_and_multiple_warnings.h"; +import Cpp library "multi_multiple_errors_and_multiple_warnings.h"; // ============================================================================ // Indirect error // ============================================================================ +// --- indirect_one_error.h + +#error "error1" + // --- indirect_error.h -#include "one_error.h" +#include "indirect_one_error.h" // --- fail_import_indirect_error.carbon @@ -269,7 +296,7 @@ library "[[@TEST_NAME]]"; // CHECK:STDERR: fail_import_indirect_error.carbon:[[@LINE+6]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./indirect_error.h:2:10: in file included here [InCppInclude] -// CHECK:STDERR: ./one_error.h:2:2: error: "error1" [CppInteropParseError] +// CHECK:STDERR: ./indirect_one_error.h:2:2: error: "error1" [CppInteropParseError] // CHECK:STDERR: 2 | #error "error1" // CHECK:STDERR: | ^ // CHECK:STDERR: @@ -279,9 +306,13 @@ import Cpp library "indirect_error.h"; // Indirect warning // ============================================================================ +// --- indirect_one_warning.h + +#warning "warning1" + // --- indirect_warning.h -#include "one_warning.h" +#include "indirect_one_warning.h" // --- import_indirect_warning.carbon @@ -290,7 +321,7 @@ library "[[@TEST_NAME]]"; //@dump-sem-ir-begin // CHECK:STDERR: import_indirect_warning.carbon:[[@LINE+6]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./indirect_warning.h:2:10: in file included here [InCppInclude] -// CHECK:STDERR: ./one_warning.h:2:2: warning: "warning1" [CppInteropParseWarning] +// CHECK:STDERR: ./indirect_one_warning.h:2:2: warning: "warning1" [CppInteropParseWarning] // CHECK:STDERR: 2 | #warning "warning1" // CHECK:STDERR: | ^ // CHECK:STDERR: @@ -301,6 +332,10 @@ import Cpp library "indirect_warning.h"; // Lexer error before import // ============================================================================ +// --- lexer_error_one_warning.h + +#warning "warning1" + // --- fail_import_cpp_library_lexer_error.carbon library "[[@TEST_NAME]]"; @@ -309,7 +344,7 @@ library "[[@TEST_NAME]]"; // TODO: Move this warning to be after the lexer error. // CHECK:STDERR: fail_import_cpp_library_lexer_error.carbon:[[@LINE+9]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./one_warning.h:2:2: warning: "warning1" [CppInteropParseWarning] +// CHECK:STDERR: ./lexer_error_one_warning.h:2:2: warning: "warning1" [CppInteropParseWarning] // CHECK:STDERR: 2 | #warning "warning1" // CHECK:STDERR: | ^ // CHECK:STDERR: @@ -317,7 +352,7 @@ library "[[@TEST_NAME]]"; // CHECK:STDERR: //!Lexer error: whitespace is required after the comment introducer. // CHECK:STDERR: ^ // CHECK:STDERR: -import Cpp library "one_warning.h"; +import Cpp library "lexer_error_one_warning.h"; // ============================================================================ // Diagnostic with fix-it hints @@ -465,8 +500,8 @@ void f(const int n) { // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %Cpp.import_cpp = import_cpp { -// CHECK:STDOUT: import Cpp "one_warning.h" -// CHECK:STDOUT: import Cpp "multiple_warnings.h" +// CHECK:STDOUT: import Cpp "multi_one_warning.h" +// CHECK:STDOUT: import Cpp "multi_multiple_warnings.h" // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/basics/inline/modules.carbon b/toolchain/check/testdata/interop/cpp/basics/inline/modules.carbon index 5620d4464558..985ee80821cc 100644 --- a/toolchain/check/testdata/interop/cpp/basics/inline/modules.carbon +++ b/toolchain/check/testdata/interop/cpp/basics/inline/modules.carbon @@ -38,21 +38,21 @@ library "[[@TEST_NAME]]"; // TODO: This diagnostic isn't very good. import Cpp inline ''' // CHECK:STDERR: fail_module_in_inline_cpp.carbon:[[@LINE+15]]:1: error: module declaration must not come from an #include directive [CppInteropParseError] -// CHECK:STDERR: 21 | module Foo; +// CHECK:STDERR: 21 | module Bar; // CHECK:STDERR: | ^~~~~~~~~~~ // CHECK:STDERR: // CHECK:STDERR: fail_module_in_inline_cpp.carbon:[[@LINE+11]]:1: error: module declaration must occur at the start of the translation unit [CppInteropParseError] -// CHECK:STDERR: 21 | module Foo; +// CHECK:STDERR: 21 | module Bar; // CHECK:STDERR: | ^ // CHECK:STDERR: :1:1: note: add 'module;' to the start of the file to introduce a global module fragment [CppInteropParseNote] // CHECK:STDERR: 1 | ; // CHECK:STDERR: | ^ // CHECK:STDERR: -// CHECK:STDERR: fail_module_in_inline_cpp.carbon:[[@LINE+4]]:8: error: module 'Foo' not found [CppInteropParseError] -// CHECK:STDERR: 21 | module Foo; -// CHECK:STDERR: | ^~~~ +// CHECK:STDERR: fail_module_in_inline_cpp.carbon:[[@LINE+4]]:8: error: module name 'Foo' specified on command line does not match name of module [CppInteropParseError] +// CHECK:STDERR: 21 | module Bar; +// CHECK:STDERR: | ^~~ // CHECK:STDERR: -module Foo; +module Bar; '''; // --- fail_global_module_in_inline_cpp.carbon @@ -74,21 +74,21 @@ module; int n; // CHECK:STDERR: fail_global_module_in_inline_cpp.carbon:[[@LINE+15]]:1: error: module declaration must not come from an #include directive [CppInteropParseError] -// CHECK:STDERR: 33 | module Foo; +// CHECK:STDERR: 33 | module Baz; // CHECK:STDERR: | ^~~~~~~~~~~ // CHECK:STDERR: // CHECK:STDERR: fail_global_module_in_inline_cpp.carbon:[[@LINE+11]]:1: error: module declaration must occur at the start of the translation unit [CppInteropParseError] -// CHECK:STDERR: 33 | module Foo; +// CHECK:STDERR: 33 | module Baz; // CHECK:STDERR: | ^ // CHECK:STDERR: :1:1: note: add 'module;' to the start of the file to introduce a global module fragment [CppInteropParseNote] // CHECK:STDERR: 1 | ; // CHECK:STDERR: | ^ // CHECK:STDERR: -// CHECK:STDERR: fail_global_module_in_inline_cpp.carbon:[[@LINE+4]]:8: error: module 'Foo' not found [CppInteropParseError] -// CHECK:STDERR: 33 | module Foo; -// CHECK:STDERR: | ^~~~ +// CHECK:STDERR: fail_global_module_in_inline_cpp.carbon:[[@LINE+4]]:8: error: module name 'Foo' specified on command line does not match name of module [CppInteropParseError] +// CHECK:STDERR: 33 | module Baz; +// CHECK:STDERR: | ^~~ // CHECK:STDERR: -module Foo; +module Baz; '''; // --- fail_import_in_inline_cpp.carbon diff --git a/toolchain/check/testdata/interop/cpp/class/export/base.carbon b/toolchain/check/testdata/interop/cpp/class/export/base.carbon index 191ae35cc954..ad56191aff07 100644 --- a/toolchain/check/testdata/interop/cpp/class/export/base.carbon +++ b/toolchain/check/testdata/interop/cpp/class/export/base.carbon @@ -32,23 +32,23 @@ library "[[@TEST_NAME]]"; import Cpp; -base class A { +base class LookupBase { fn F(); fn G(n: i32); } -class B { - extend base: A; +class LookupDerived { + extend base: LookupBase; fn G(); } inline Cpp ''' void Qualified() { - Carbon::B::F(); - Carbon::B::G(); + Carbon::LookupDerived::F(); + Carbon::LookupDerived::G(); } -void MemberAccess(Carbon::A *a, Carbon::B *b) { +void MemberAccess(Carbon::LookupBase *a, Carbon::LookupDerived *b) { b->F(); b->G(); } @@ -59,17 +59,17 @@ library "[[@TEST_NAME]]"; import Cpp; -class Final {} +class FinalClass {} inline Cpp ''' -// CHECK:STDERR: fail_derive_from_final.carbon:[[@LINE+7]]:12: error: base 'Final' is marked 'final' [CppInteropParseError] -// CHECK:STDERR: 15 | struct A : Carbon::Final {}; +// CHECK:STDERR: fail_derive_from_final.carbon:[[@LINE+7]]:12: error: base 'FinalClass' is marked 'final' [CppInteropParseError] +// CHECK:STDERR: 15 | struct A : Carbon::FinalClass {}; // CHECK:STDERR: | ^ -// CHECK:STDERR: fail_derive_from_final.carbon:[[@LINE-6]]:13: note: 'Final' declared here [CppInteropParseNote] -// CHECK:STDERR: 5 | class Final {} -// CHECK:STDERR: | ^ +// CHECK:STDERR: fail_derive_from_final.carbon:[[@LINE-6]]:18: note: 'FinalClass' declared here [CppInteropParseNote] +// CHECK:STDERR: 5 | class FinalClass {} +// CHECK:STDERR: | ^ // CHECK:STDERR: -struct A : Carbon::Final {}; +struct A : Carbon::FinalClass {}; '''; // --- fail_abstract.carbon @@ -84,23 +84,23 @@ struct VirtualDestructor { }; '''; -// CHECK:STDERR: fail_abstract.carbon:[[@LINE+4]]:1: error: cannot access member of interface `Core.Destroy` in type `Abstract` that does not implement that interface [MissingImplInMemberAccess] -// CHECK:STDERR: abstract class Abstract { -// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~ +// CHECK:STDERR: fail_abstract.carbon:[[@LINE+4]]:1: error: cannot access member of interface `Core.Destroy` in type `AbstractWithVdtor` that does not implement that interface [MissingImplInMemberAccess] +// CHECK:STDERR: abstract class AbstractWithVdtor { +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: -abstract class Abstract { +abstract class AbstractWithVdtor { extend base: Cpp.VirtualDestructor; } inline Cpp ''' -// CHECK:STDERR: fail_abstract.carbon:[[@LINE+7]]:18: error: variable type 'Carbon::Abstract' is an abstract class [CppInteropParseError] -// CHECK:STDERR: 28 | Carbon::Abstract x; -// CHECK:STDERR: | ^ -// CHECK:STDERR: fail_abstract.carbon:[[@LINE-8]]:25: note: unimplemented pure virtual method '~Abstract' in 'Abstract' [CppInteropParseNote] -// CHECK:STDERR: 16 | abstract class Abstract { -// CHECK:STDERR: | ^ +// CHECK:STDERR: fail_abstract.carbon:[[@LINE+7]]:27: error: variable type 'Carbon::AbstractWithVdtor' is an abstract class [CppInteropParseError] +// CHECK:STDERR: 28 | Carbon::AbstractWithVdtor x; +// CHECK:STDERR: | ^ +// CHECK:STDERR: fail_abstract.carbon:[[@LINE-8]]:34: note: unimplemented pure virtual method '~AbstractWithVdtor' in 'AbstractWithVdtor' [CppInteropParseNote] +// CHECK:STDERR: 16 | abstract class AbstractWithVdtor { +// CHECK:STDERR: | ^ // CHECK:STDERR: -Carbon::Abstract x; +Carbon::AbstractWithVdtor x; '''; // --- fail_todo_abstract_nonvirtual_dtor.carbon @@ -111,17 +111,17 @@ import Cpp; // TODO: Find a way to export this to C++ as an abstract class, despite not // having a vptr. // CHECK:STDERR: fail_todo_abstract_nonvirtual_dtor.carbon:[[@LINE+8]]:1: error: semantics TODO: `exporting abstract class with no abstract methods and non-virtual destructor to C++` [SemanticsTodo] -// CHECK:STDERR: abstract class Abstract {} -// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~ +// CHECK:STDERR: abstract class AbstractNonvirtualDtor {} +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: -// CHECK:STDERR: fail_todo_abstract_nonvirtual_dtor.carbon:[[@LINE+4]]:1: error: cannot access member of interface `Core.Destroy` in type `Abstract` that does not implement that interface [MissingImplInMemberAccess] -// CHECK:STDERR: abstract class Abstract {} -// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~ +// CHECK:STDERR: fail_todo_abstract_nonvirtual_dtor.carbon:[[@LINE+4]]:1: error: cannot access member of interface `Core.Destroy` in type `AbstractNonvirtualDtor` that does not implement that interface [MissingImplInMemberAccess] +// CHECK:STDERR: abstract class AbstractNonvirtualDtor {} +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: -abstract class Abstract {} +abstract class AbstractNonvirtualDtor {} inline Cpp ''' -class Derived : public Carbon::Abstract {}; +class DerivedNonvirtualDtor : public Carbon::AbstractNonvirtualDtor {}; '''; // --- fail_todo_abstract_nonvirtual_dtor_but_virtual_fns.carbon @@ -132,16 +132,16 @@ import Cpp; // TODO: We should support generating a base subobject destructor for an // abstract class, even though we refuse to generate a complete object // destructor. -// CHECK:STDERR: fail_todo_abstract_nonvirtual_dtor_but_virtual_fns.carbon:[[@LINE+4]]:1: error: cannot access member of interface `Core.Destroy` in type `Abstract` that does not implement that interface [MissingImplInMemberAccess] -// CHECK:STDERR: abstract class Abstract { -// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~ +// CHECK:STDERR: fail_todo_abstract_nonvirtual_dtor_but_virtual_fns.carbon:[[@LINE+4]]:1: error: cannot access member of interface `Core.Destroy` in type `AbstractWithMethodNoVptr` that does not implement that interface [MissingImplInMemberAccess] +// CHECK:STDERR: abstract class AbstractWithMethodNoVptr { +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: -abstract class Abstract { +abstract class AbstractWithMethodNoVptr { abstract fn F(self); } inline Cpp ''' -class Derived : public Carbon::Abstract { +class DerivedWithMethodNoVptr : public Carbon::AbstractWithMethodNoVptr { }; '''; @@ -153,23 +153,23 @@ import Cpp; // TODO: We should support generating a base subobject destructor for an // abstract class, even though we refuse to generate a complete object // destructor. -// CHECK:STDERR: fail_variable_with_abstract_method.carbon:[[@LINE+4]]:1: error: cannot access member of interface `Core.Destroy` in type `Abstract` that does not implement that interface [MissingImplInMemberAccess] -// CHECK:STDERR: abstract class Abstract { -// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~ +// CHECK:STDERR: fail_variable_with_abstract_method.carbon:[[@LINE+4]]:1: error: cannot access member of interface `Core.Destroy` in type `AbstractWithMethod` that does not implement that interface [MissingImplInMemberAccess] +// CHECK:STDERR: abstract class AbstractWithMethod { +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: -abstract class Abstract { +abstract class AbstractWithMethod { abstract fn F(self); } inline Cpp ''' -// CHECK:STDERR: fail_variable_with_abstract_method.carbon:[[@LINE+7]]:18: error: variable type 'Carbon::Abstract' is an abstract class [CppInteropParseError] -// CHECK:STDERR: 24 | Carbon::Abstract x; -// CHECK:STDERR: | ^ -// CHECK:STDERR: fail_variable_with_abstract_method.carbon:[[@LINE-7]]:22: note: unimplemented pure virtual method 'F' in 'Abstract' [CppInteropParseNote] +// CHECK:STDERR: fail_variable_with_abstract_method.carbon:[[@LINE+7]]:28: error: variable type 'Carbon::AbstractWithMethod' is an abstract class [CppInteropParseError] +// CHECK:STDERR: 24 | Carbon::AbstractWithMethod x_abstract; +// CHECK:STDERR: | ^ +// CHECK:STDERR: fail_variable_with_abstract_method.carbon:[[@LINE-7]]:22: note: unimplemented pure virtual method 'F' in 'AbstractWithMethod' [CppInteropParseNote] // CHECK:STDERR: 13 | abstract fn F(self); // CHECK:STDERR: | ^ // CHECK:STDERR: -Carbon::Abstract x; +Carbon::AbstractWithMethod x_abstract; '''; // --- fail_todo_abstract_method_overridden_in_cpp.carbon @@ -180,20 +180,20 @@ import Cpp; // TODO: We should support generating a base subobject destructor for an // abstract class, even though we refuse to generate a complete object // destructor. -// CHECK:STDERR: fail_todo_abstract_method_overridden_in_cpp.carbon:[[@LINE+4]]:1: error: cannot access member of interface `Core.Destroy` in type `Abstract` that does not implement that interface [MissingImplInMemberAccess] -// CHECK:STDERR: abstract class Abstract { -// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~ +// CHECK:STDERR: fail_todo_abstract_method_overridden_in_cpp.carbon:[[@LINE+4]]:1: error: cannot access member of interface `Core.Destroy` in type `AbstractToOverride` that does not implement that interface [MissingImplInMemberAccess] +// CHECK:STDERR: abstract class AbstractToOverride { +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: -abstract class Abstract { +abstract class AbstractToOverride { abstract fn F(ref self); } // A C++ class that overrides the abstract method can be instantiated. inline Cpp ''' -struct Derived : Carbon::Abstract { +struct DerivedOverriding : Carbon::AbstractToOverride { void F() & override {} }; -Derived d; +DerivedOverriding d; '''; // --- override_virtual_dtor.carbon @@ -202,15 +202,15 @@ library "[[@TEST_NAME]]"; import Cpp; inline Cpp ''' -struct A { - virtual ~A() = 0; +struct BaseWithPureVdtor { + virtual ~BaseWithPureVdtor() = 0; }; '''; -class B { - extend base: Cpp.A; +class DerivedWithVdtor { + extend base: Cpp.BaseWithPureVdtor; } inline Cpp ''' -Carbon::B b; +Carbon::DerivedWithVdtor b; '''; diff --git a/toolchain/check/testdata/interop/cpp/class/export/class.carbon b/toolchain/check/testdata/interop/cpp/class/export/class.carbon index 40ca6857c3e1..fc3cf7a89d5c 100644 --- a/toolchain/check/testdata/interop/cpp/class/export/class.carbon +++ b/toolchain/check/testdata/interop/cpp/class/export/class.carbon @@ -15,13 +15,13 @@ library "[[@TEST_NAME]]"; import Cpp; -class A { +class StaticMembers { fn F() {} } inline Cpp ''' -void G() { - Carbon::A::F(); +void CallStaticMember() { + Carbon::StaticMembers::F(); } '''; @@ -30,16 +30,16 @@ library "[[@TEST_NAME]]"; import Cpp; -class A { - class B { - class C { +class OuterA { + class InnerB { + class NestedC { } } } inline Cpp ''' -void G() { - Carbon::A::B::C *p = nullptr; +void TestNested() { + Carbon::OuterA::InnerB::NestedC *nested_p = nullptr; } '''; @@ -48,10 +48,10 @@ library "[[@TEST_NAME]]"; import Cpp; -class A; +class IncompleteA; inline Cpp ''' -Carbon::A *p = nullptr; +Carbon::IncompleteA *incomplete_p = nullptr; '''; // --- fail_incomplete_concrete.carbon @@ -60,20 +60,20 @@ library "[[@TEST_NAME]]"; import Cpp; // CHECK:STDERR: fail_incomplete_concrete.carbon:[[@LINE+4]]:1: error: class was forward declared here [ClassForwardDeclaredHere] -// CHECK:STDERR: class A; -// CHECK:STDERR: ^~~~~~~~ +// CHECK:STDERR: class IncompleteConcreteA; +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: -class A; +class IncompleteConcreteA; inline Cpp ''' -// CHECK:STDERR: fail_incomplete_concrete.carbon:[[@LINE+7]]:11: error: variable has incomplete type 'Carbon::A' [CppInteropParseError] -// CHECK:STDERR: 19 | Carbon::A a; -// CHECK:STDERR: | ^ -// CHECK:STDERR: fail_incomplete_concrete.carbon:[[@LINE-6]]:8: note: forward declaration of 'Carbon::A' [CppInteropParseNote] -// CHECK:STDERR: 9 | class A; -// CHECK:STDERR: | ^ +// CHECK:STDERR: fail_incomplete_concrete.carbon:[[@LINE+7]]:29: error: variable has incomplete type 'Carbon::IncompleteConcreteA' [CppInteropParseError] +// CHECK:STDERR: 19 | Carbon::IncompleteConcreteA incomplete_concrete_a; +// CHECK:STDERR: | ^ +// CHECK:STDERR: fail_incomplete_concrete.carbon:[[@LINE-6]]:26: note: forward declaration of 'Carbon::IncompleteConcreteA' [CppInteropParseNote] +// CHECK:STDERR: 9 | class IncompleteConcreteA; +// CHECK:STDERR: | ^ // CHECK:STDERR: -Carbon::A a; +Carbon::IncompleteConcreteA incomplete_concrete_a; '''; // --- fail_todo_monomorphization_failure.carbon diff --git a/toolchain/check/testdata/interop/cpp/class/export/field.carbon b/toolchain/check/testdata/interop/cpp/class/export/field.carbon index c584567e1746..2e1aac84c7ad 100644 --- a/toolchain/check/testdata/interop/cpp/class/export/field.carbon +++ b/toolchain/check/testdata/interop/cpp/class/export/field.carbon @@ -14,14 +14,14 @@ library "[[@TEST_NAME]]"; import Cpp; -class A { +class TwoIntFields { var x: i32; var y: i32; } inline Cpp ''' -void F() { - Carbon::A a; +void AccessTwoFields() { + Carbon::TwoIntFields a; a.x = 12; a.y = 34; } @@ -31,18 +31,18 @@ void F() { library "[[@TEST_NAME]]"; import Cpp; -base class A { +base class BaseWithField { var x: i32; } -class B { - extend base: A; +class DerivedWithField { + extend base: BaseWithField; var y: i32; } inline Cpp ''' -void F() { - Carbon::B b; +void AccessInheritedField() { + Carbon::DerivedWithField b; b.x = 12; b.y = 34; } @@ -70,17 +70,17 @@ void g() { library "[[@TEST_NAME]]"; import Cpp; -class A {} +class EmptyClass {} inline Cpp ''' -void F() { - Carbon::A a; - // CHECK:STDERR: fail_nonexistent_field.carbon:[[@LINE+4]]:5: error: no member named 'x' in 'Carbon::A' [CppInteropParseError] +void AccessNonexistentField() { + Carbon::EmptyClass a; + // CHECK:STDERR: fail_nonexistent_field.carbon:[[@LINE+4]]:5: error: no member named 'x' in 'Carbon::EmptyClass' [CppInteropParseError] // CHECK:STDERR: 13 | a.x = 12; // CHECK:STDERR: | ~ ^ // CHECK:STDERR: a.x = 12; - // CHECK:STDERR: fail_nonexistent_field.carbon:[[@LINE+4]]:5: error: no member named 'y' in 'Carbon::A' [CppInteropParseError] + // CHECK:STDERR: fail_nonexistent_field.carbon:[[@LINE+4]]:5: error: no member named 'y' in 'Carbon::EmptyClass' [CppInteropParseError] // CHECK:STDERR: 18 | a.y = 34; // CHECK:STDERR: | ~ ^ // CHECK:STDERR: @@ -92,7 +92,7 @@ void F() { library "[[@TEST_NAME]]"; import Cpp; -class A { +class UnsupportedFieldType { // CHECK:STDERR: fail_unsupported_field_type.carbon:[[@LINE+4]]:7: error: semantics TODO: `failed to map Carbon type to C++` [SemanticsTodo] // CHECK:STDERR: var x: (); // CHECK:STDERR: ^~~~~ @@ -106,14 +106,14 @@ class A { } inline Cpp ''' -void F() { - Carbon::A a; - // CHECK:STDERR: fail_unsupported_field_type.carbon:[[@LINE+4]]:5: error: no member named 'x' in 'Carbon::A' [CppInteropParseError] +void AccessUnsupportedField() { + Carbon::UnsupportedFieldType a; + // CHECK:STDERR: fail_unsupported_field_type.carbon:[[@LINE+4]]:5: error: no member named 'x' in 'Carbon::UnsupportedFieldType' [CppInteropParseError] // CHECK:STDERR: 24 | a.x; // CHECK:STDERR: | ~ ^ // CHECK:STDERR: a.x; - // CHECK:STDERR: fail_unsupported_field_type.carbon:[[@LINE+4]]:5: error: no member named 'y' in 'Carbon::A' [CppInteropParseError] + // CHECK:STDERR: fail_unsupported_field_type.carbon:[[@LINE+4]]:5: error: no member named 'y' in 'Carbon::UnsupportedFieldType' [CppInteropParseError] // CHECK:STDERR: 29 | a.y; // CHECK:STDERR: | ~ ^ // CHECK:STDERR: @@ -125,14 +125,14 @@ void F() { library "[[@TEST_NAME]]"; import Cpp; -class A { +class AdaptedClass { adapt (); } inline Cpp ''' -void F() { - Carbon::A a; - // CHECK:STDERR: fail_adapter.carbon:[[@LINE+4]]:5: error: no member named 'x' in 'Carbon::A' [CppInteropParseError] +void AccessAdaptedField() { + Carbon::AdaptedClass a; + // CHECK:STDERR: fail_adapter.carbon:[[@LINE+4]]:5: error: no member named 'x' in 'Carbon::AdaptedClass' [CppInteropParseError] // CHECK:STDERR: 15 | a.x = 12; // CHECK:STDERR: | ~ ^ // CHECK:STDERR: @@ -145,7 +145,7 @@ library "[[@TEST_NAME]]"; import Cpp; // This should not cause a crash. -class A { +class InvalidBaseClass { // CHECK:STDERR: fail_invalid.carbon:[[@LINE+4]]:16: error: name `Whoops` not found [NameNotFound] // CHECK:STDERR: extend base: Whoops; // CHECK:STDERR: ^~~~~~ @@ -154,15 +154,15 @@ class A { } inline Cpp ''' -Carbon::A x; +Carbon::InvalidBaseClass invalid_x; '''; // --- fail_private_field.carbon library "[[@TEST_NAME]]"; import Cpp; -class C { - fn Make() -> C { +class ClassWithPrivateField { + fn Make() -> ClassWithPrivateField { return {.x = 123}; } @@ -170,9 +170,9 @@ class C { } inline Cpp ''' -int F() { - auto c = Carbon::C::Make(); - // CHECK:STDERR: fail_private_field.carbon:[[@LINE+7]]:12: error: 'x' is a private member of 'Carbon::C' [CppInteropParseError] +int AccessPrivateField() { + auto c = Carbon::ClassWithPrivateField::Make(); + // CHECK:STDERR: fail_private_field.carbon:[[@LINE+7]]:12: error: 'x' is a private member of 'Carbon::ClassWithPrivateField' [CppInteropParseError] // CHECK:STDERR: 22 | return c.x; // CHECK:STDERR: | ^ // CHECK:STDERR: fail_private_field.carbon:[[@LINE-9]]:16: note: implicitly declared private here [CppInteropParseNote] diff --git a/toolchain/check/testdata/interop/cpp/class/export/generic.carbon b/toolchain/check/testdata/interop/cpp/class/export/generic.carbon index 68dff369b704..a615597aa124 100644 --- a/toolchain/check/testdata/interop/cpp/class/export/generic.carbon +++ b/toolchain/check/testdata/interop/cpp/class/export/generic.carbon @@ -14,13 +14,13 @@ library "[[@TEST_NAME]]"; import Cpp; -class C(T: type) { +class GenericClass(T: type) { var t: T; } inline Cpp ''' -void F() { - Carbon::C c; +void FGeneric() { + Carbon::GenericClass c; c.t = 123; } '''; @@ -29,14 +29,14 @@ void F() { library "[[@TEST_NAME]]"; import Cpp; -class C(T: type) { +class SpecificClass(T: type) { var t: T; } -alias A = C(i32); +alias AliasInt = SpecificClass(i32); inline Cpp ''' -void F() { - Carbon::A a; +void FSpecific() { + Carbon::AliasInt a; a.t = 123; } '''; @@ -46,25 +46,25 @@ library "[[@TEST_NAME]]"; import Cpp; // CHECK:STDERR: fail_unsupported_specific_arg.carbon:[[@LINE+4]]:1: error: semantics TODO: `failed to map specific type arg to C++` [SemanticsTodo] -// CHECK:STDERR: class C(T: type) { -// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~ +// CHECK:STDERR: class UnsupportedClass(T: type) { +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: -class C(T: type) { +class UnsupportedClass(T: type) { var t: T; } -alias A = C(()); +alias AliasEmptyTuple = UnsupportedClass(()); inline Cpp ''' -void F() { +void FUnsupported() { // CHECK:STDERR: fail_unsupported_specific_arg.carbon:[[@LINE+8]]:11: error: semantics TODO: `interop with unsupported type` [SemanticsTodo] - // CHECK:STDERR: Carbon::A a; + // CHECK:STDERR: Carbon::AliasEmptyTuple a; // CHECK:STDERR: ^ // CHECK:STDERR: - // CHECK:STDERR: fail_unsupported_specific_arg.carbon:[[@LINE+4]]:11: error: no type named 'A' in namespace 'Carbon' [CppInteropParseError] - // CHECK:STDERR: 23 | Carbon::A a; + // CHECK:STDERR: fail_unsupported_specific_arg.carbon:[[@LINE+4]]:11: error: no type named 'AliasEmptyTuple' in namespace 'Carbon' [CppInteropParseError] + // CHECK:STDERR: 23 | Carbon::AliasEmptyTuple a; // CHECK:STDERR: | ~~~~~~~~^ // CHECK:STDERR: - Carbon::A a; + Carbon::AliasEmptyTuple a; a.t = 123; } '''; @@ -73,7 +73,7 @@ void F() { library "[[@TEST_NAME]]"; import Cpp; -class C(T: type) { +class ClassWithMethod(T: type) { // CHECK:STDERR: fail_todo_generic_class_method_call.carbon:[[@LINE+4]]:3: error: semantics TODO: `non-class non-namespace name scope` [SemanticsTodo] // CHECK:STDERR: fn M(unused ref self) {} // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~ @@ -82,9 +82,9 @@ class C(T: type) { } inline Cpp ''' -void F() { - Carbon::C c; - // CHECK:STDERR: fail_todo_generic_class_method_call.carbon:[[@LINE+4]]:5: error: no member named 'M' in 'Carbon::C' [CppInteropParseError] +void FMethodCall() { + Carbon::ClassWithMethod c; + // CHECK:STDERR: fail_todo_generic_class_method_call.carbon:[[@LINE+4]]:5: error: no member named 'M' in 'Carbon::ClassWithMethod' [CppInteropParseError] // CHECK:STDERR: 19 | c.M(); // CHECK:STDERR: | ~ ^ // CHECK:STDERR: diff --git a/toolchain/check/testdata/interop/cpp/class/export/layout.carbon b/toolchain/check/testdata/interop/cpp/class/export/layout.carbon index c9e46bbeff4b..efa2a668c292 100644 --- a/toolchain/check/testdata/interop/cpp/class/export/layout.carbon +++ b/toolchain/check/testdata/interop/cpp/class/export/layout.carbon @@ -15,15 +15,15 @@ library "[[@TEST_NAME]]"; import Cpp; -class C { +class ThreeInts { var a: i32; var b: i32; var c: i32; } inline Cpp '''c++ -static_assert(sizeof(Carbon::C) == 12); -static_assert(alignof(Carbon::C) == 4); +static_assert(sizeof(Carbon::ThreeInts) == 12); +static_assert(alignof(Carbon::ThreeInts) == 4); '''; // --- packed.carbon @@ -31,19 +31,19 @@ library "[[@TEST_NAME]]"; import Cpp; -class C { +class PointerInt { var a: i32*; var b: i32; } -class D { - var c: C; +class PointerIntInt { + var c: PointerInt; var d: i32; } inline Cpp '''c++ -static_assert(sizeof(Carbon::C) == 12); -static_assert(alignof(Carbon::C) == 8); -static_assert(sizeof(Carbon::D) == 16); -static_assert(alignof(Carbon::D) == 8); +static_assert(sizeof(Carbon::PointerInt) == 12); +static_assert(alignof(Carbon::PointerInt) == 8); +static_assert(sizeof(Carbon::PointerIntInt) == 16); +static_assert(alignof(Carbon::PointerIntInt) == 8); '''; diff --git a/toolchain/check/testdata/interop/cpp/class/export/method.carbon b/toolchain/check/testdata/interop/cpp/class/export/method.carbon index b07bb4f9282d..7cba98f648b4 100644 --- a/toolchain/check/testdata/interop/cpp/class/export/method.carbon +++ b/toolchain/check/testdata/interop/cpp/class/export/method.carbon @@ -14,13 +14,13 @@ library "[[@TEST_NAME]]"; import Cpp; -class C { +class StaticMethodClass { fn M(); } inline Cpp ''' -void F() { - Carbon::C::M(); +void StaticMethod() { + Carbon::StaticMethodClass::M(); } '''; @@ -28,13 +28,13 @@ void F() { library "[[@TEST_NAME]]"; import Cpp; -class C { +class MethodLValueClass { fn M(self); } inline Cpp ''' -void F() { - Carbon::C c; +void MethodLValue() { + Carbon::MethodLValueClass c; c.M(); } '''; @@ -43,13 +43,13 @@ void F() { library "[[@TEST_NAME]]"; import Cpp; -class C { +class MethodRValueClass { fn M(self); } inline Cpp ''' -void F() { - Carbon::C().M(); +void MethodRValue() { + Carbon::MethodRValueClass().M(); } '''; @@ -57,12 +57,12 @@ void F() { library "[[@TEST_NAME]]"; import Cpp; -class C { +class MethodConstLValueClass { fn M(self); } inline Cpp ''' -void F(const Carbon::C& c) { +void MethodConstLValue(const Carbon::MethodConstLValueClass& c) { c.M(); } '''; @@ -71,13 +71,13 @@ void F(const Carbon::C& c) { library "[[@TEST_NAME]]"; import Cpp; -class C { +class RefMethodLValueClass { fn M(ref self); } inline Cpp ''' -void F() { - Carbon::C c; +void RefMethodLValue() { + Carbon::RefMethodLValueClass c; c.M(); } '''; @@ -86,20 +86,20 @@ void F() { library "[[@TEST_NAME]]"; import Cpp; -class C { +class RefMethodRValueClass { fn M(ref self); } inline Cpp ''' -void F() { +void RefMethodRValue() { // CHECK:STDERR: fail_ref_method_rvalue.carbon:[[@LINE+7]]:3: error: 'this' argument to member function 'M' is an rvalue, but function has non-const lvalue ref-qualifier [CppInteropParseError] - // CHECK:STDERR: 17 | Carbon::C().M(); + // CHECK:STDERR: 17 | Carbon::RefMethodRValueClass().M(); // CHECK:STDERR: | ^ // CHECK:STDERR: fail_ref_method_rvalue.carbon:[[@LINE-8]]:17: note: 'M' declared here [CppInteropParseNote] // CHECK:STDERR: 5 | fn M(ref self); // CHECK:STDERR: | ^ // CHECK:STDERR: - Carbon::C().M(); + Carbon::RefMethodRValueClass().M(); } '''; @@ -107,13 +107,13 @@ void F() { library "[[@TEST_NAME]]"; import Cpp; -class C { +class RefMethodConstLValueClass { fn M(ref self); } inline Cpp ''' -void F(const Carbon::C& c) { - // CHECK:STDERR: fail_ref_method_const_lvalue.carbon:[[@LINE+7]]:3: error: 'this' argument to member function 'M' has type 'const Carbon::C', but function is not marked const [CppInteropParseError] +void RefMethodConstLValue(const Carbon::RefMethodConstLValueClass& c) { + // CHECK:STDERR: fail_ref_method_const_lvalue.carbon:[[@LINE+7]]:3: error: 'this' argument to member function 'M' has type 'const Carbon::RefMethodConstLValueClass', but function is not marked const [CppInteropParseError] // CHECK:STDERR: 17 | c.M(); // CHECK:STDERR: | ^ // CHECK:STDERR: fail_ref_method_const_lvalue.carbon:[[@LINE-8]]:17: note: 'M' declared here [CppInteropParseNote] diff --git a/toolchain/check/testdata/interop/cpp/class/export/static.carbon b/toolchain/check/testdata/interop/cpp/class/export/static.carbon index 8b65ef6eed88..6902b98f51ba 100644 --- a/toolchain/check/testdata/interop/cpp/class/export/static.carbon +++ b/toolchain/check/testdata/interop/cpp/class/export/static.carbon @@ -14,13 +14,13 @@ library "[[@TEST_NAME]]"; import Cpp; -class C { +class PublicClass { static var x: i32 = 123; } inline Cpp ''' -int F() { - return Carbon::C::x; +int PublicStatic() { + return Carbon::PublicClass::x; } '''; @@ -28,19 +28,19 @@ int F() { library "[[@TEST_NAME]]"; import Cpp; -class C { +class PrivateClass { private static var x: i32 = 123; } inline Cpp ''' -int F() { - // CHECK:STDERR: fail_static_private.carbon:[[@LINE+7]]:21: error: 'x' is a private member of 'Carbon::C' [CppInteropParseError] - // CHECK:STDERR: 17 | return Carbon::C::x; - // CHECK:STDERR: | ^ +int PrivateStatic() { + // CHECK:STDERR: fail_static_private.carbon:[[@LINE+7]]:32: error: 'x' is a private member of 'Carbon::PrivateClass' [CppInteropParseError] + // CHECK:STDERR: 17 | return Carbon::PrivateClass::x; + // CHECK:STDERR: | ^ // CHECK:STDERR: fail_static_private.carbon:[[@LINE-8]]:23: note: implicitly declared private here [CppInteropParseNote] // CHECK:STDERR: 5 | private static var x: i32 = 123; // CHECK:STDERR: | ^ // CHECK:STDERR: - return Carbon::C::x; + return Carbon::PrivateClass::x; } '''; diff --git a/toolchain/check/testdata/interop/cpp/class/import/access.carbon b/toolchain/check/testdata/interop/cpp/class/import/access.carbon index 817bef257296..36c925051d24 100644 --- a/toolchain/check/testdata/interop/cpp/class/import/access.carbon +++ b/toolchain/check/testdata/interop/cpp/class/import/access.carbon @@ -16,7 +16,7 @@ // --- non_function_member_public.h -struct S { +struct NonFunctionMemberPublic { int instance_data; static int static_data; }; @@ -27,10 +27,10 @@ library "[[@TEST_NAME]]"; import Cpp library "non_function_member_public.h"; -fn F(s: Cpp.S) { +fn F(s: Cpp.NonFunctionMemberPublic) { //@dump-sem-ir-begin let unused instance_data: i32 = s.instance_data; - let unused static_data: i32 = Cpp.S.static_data; + let unused static_data: i32 = Cpp.NonFunctionMemberPublic.static_data; //@dump-sem-ir-end } @@ -41,7 +41,7 @@ library "[[@TEST_NAME]]"; import Cpp library "non_function_member_public.h"; class Derived { - extend base: Cpp.S; + extend base: Cpp.NonFunctionMemberPublic; } fn F(d: Derived) { @@ -57,7 +57,7 @@ fn F(d: Derived) { // --- non_function_member_protected.h -class C { +class NonFunctionMemberProtected { protected: int instance_data; static int static_data; @@ -69,24 +69,24 @@ library "[[@TEST_NAME]]"; import Cpp library "non_function_member_protected.h"; -fn F(c: Cpp.C) { - // CHECK:STDERR: fail_import_non_function_member_protected.carbon:[[@LINE+8]]:35: error: cannot access protected member `instance_data` of type `Cpp.C` [ClassInvalidMemberAccess] +fn F(c: Cpp.NonFunctionMemberProtected) { + // CHECK:STDERR: fail_import_non_function_member_protected.carbon:[[@LINE+8]]:35: error: cannot access protected member `instance_data` of type `Cpp.NonFunctionMemberProtected` [ClassInvalidMemberAccess] // CHECK:STDERR: let unused instance_data: i32 = c.instance_data; // CHECK:STDERR: ^~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_non_function_member_protected.carbon:[[@LINE-6]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./non_function_member_protected.h:2:7: note: declared here [ClassMemberDeclaration] - // CHECK:STDERR: class C { + // CHECK:STDERR: class NonFunctionMemberProtected { // CHECK:STDERR: ^ // CHECK:STDERR: let unused instance_data: i32 = c.instance_data; - // CHECK:STDERR: fail_import_non_function_member_protected.carbon:[[@LINE+7]]:33: error: cannot access protected member `static_data` of type `Cpp.C` [ClassInvalidMemberAccess] - // CHECK:STDERR: let unused static_data: i32 = Cpp.C.static_data; - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_import_non_function_member_protected.carbon:[[@LINE+7]]:33: error: cannot access protected member `static_data` of type `Cpp.NonFunctionMemberProtected` [ClassInvalidMemberAccess] + // CHECK:STDERR: let unused static_data: i32 = Cpp.NonFunctionMemberProtected.static_data; + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_non_function_member_protected.carbon:[[@LINE+4]]:33: note: declared here [ClassMemberDeclaration] - // CHECK:STDERR: let unused static_data: i32 = Cpp.C.static_data; - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~ + // CHECK:STDERR: let unused static_data: i32 = Cpp.NonFunctionMemberProtected.static_data; + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - let unused static_data: i32 = Cpp.C.static_data; + let unused static_data: i32 = Cpp.NonFunctionMemberProtected.static_data; } // --- fail_import_non_function_member_protected_extend.carbon @@ -96,7 +96,7 @@ library "[[@TEST_NAME]]"; import Cpp library "non_function_member_protected.h"; class Derived { - extend base: Cpp.C; + extend base: Cpp.NonFunctionMemberProtected; } fn F(d: Derived) { @@ -105,7 +105,7 @@ fn F(d: Derived) { // CHECK:STDERR: ^~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_non_function_member_protected_extend.carbon:[[@LINE-10]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./non_function_member_protected.h:2:7: note: declared here [ClassMemberDeclaration] - // CHECK:STDERR: class C { + // CHECK:STDERR: class NonFunctionMemberProtected { // CHECK:STDERR: ^ // CHECK:STDERR: let unused instance_data: i32 = d.instance_data; @@ -126,13 +126,13 @@ library "[[@TEST_NAME]]"; import Cpp library "non_function_member_protected.h"; class Derived { - extend base: Cpp.C; + extend base: Cpp.NonFunctionMemberProtected; fn F(self) { //@dump-sem-ir-begin let unused instance_data: i32 = self.instance_data; let unused unqualified_static_data: i32 = static_data; let unused derived_static_data: i32 = Derived.static_data; - let unused base_static_data: i32 = Cpp.C.static_data; + let unused base_static_data: i32 = Cpp.NonFunctionMemberProtected.static_data; //@dump-sem-ir-end } } @@ -143,7 +143,7 @@ class Derived { // --- non_function_member_private.h -class C { +class NonFunctionMemberPrivate { int instance_data; static int static_data; }; @@ -154,24 +154,24 @@ library "[[@TEST_NAME]]"; import Cpp library "non_function_member_private.h"; -fn F(c: Cpp.C) { - // CHECK:STDERR: fail_import_non_function_member_private.carbon:[[@LINE+8]]:35: error: cannot access private member `instance_data` of type `Cpp.C` [ClassInvalidMemberAccess] +fn F(c: Cpp.NonFunctionMemberPrivate) { + // CHECK:STDERR: fail_import_non_function_member_private.carbon:[[@LINE+8]]:35: error: cannot access private member `instance_data` of type `Cpp.NonFunctionMemberPrivate` [ClassInvalidMemberAccess] // CHECK:STDERR: let unused instance_data: i32 = c.instance_data; // CHECK:STDERR: ^~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_non_function_member_private.carbon:[[@LINE-6]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./non_function_member_private.h:2:7: note: declared here [ClassMemberDeclaration] - // CHECK:STDERR: class C { + // CHECK:STDERR: class NonFunctionMemberPrivate { // CHECK:STDERR: ^ // CHECK:STDERR: let unused instance_data: i32 = c.instance_data; - // CHECK:STDERR: fail_import_non_function_member_private.carbon:[[@LINE+7]]:33: error: cannot access private member `static_data` of type `Cpp.C` [ClassInvalidMemberAccess] - // CHECK:STDERR: let unused static_data: i32 = Cpp.C.static_data; - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_import_non_function_member_private.carbon:[[@LINE+7]]:33: error: cannot access private member `static_data` of type `Cpp.NonFunctionMemberPrivate` [ClassInvalidMemberAccess] + // CHECK:STDERR: let unused static_data: i32 = Cpp.NonFunctionMemberPrivate.static_data; + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_non_function_member_private.carbon:[[@LINE+4]]:33: note: declared here [ClassMemberDeclaration] - // CHECK:STDERR: let unused static_data: i32 = Cpp.C.static_data; - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~ + // CHECK:STDERR: let unused static_data: i32 = Cpp.NonFunctionMemberPrivate.static_data; + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - let unused static_data: i32 = Cpp.C.static_data; + let unused static_data: i32 = Cpp.NonFunctionMemberPrivate.static_data; } // --- fail_import_non_function_member_private_extend.carbon @@ -181,14 +181,14 @@ library "[[@TEST_NAME]]"; import Cpp library "non_function_member_private.h"; class Derived { - extend base: Cpp.C; + extend base: Cpp.NonFunctionMemberPrivate; fn F(self) { - // CHECK:STDERR: fail_import_non_function_member_private_extend.carbon:[[@LINE+8]]:37: error: cannot access private member `instance_data` of type `Cpp.C` [ClassInvalidMemberAccess] + // CHECK:STDERR: fail_import_non_function_member_private_extend.carbon:[[@LINE+8]]:37: error: cannot access private member `instance_data` of type `Cpp.NonFunctionMemberPrivate` [ClassInvalidMemberAccess] // CHECK:STDERR: let unused instance_data: i32 = self.instance_data; // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_non_function_member_private_extend.carbon:[[@LINE-8]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./non_function_member_private.h:2:7: note: declared here [ClassMemberDeclaration] - // CHECK:STDERR: class C { + // CHECK:STDERR: class NonFunctionMemberPrivate { // CHECK:STDERR: ^ // CHECK:STDERR: let unused instance_data: i32 = self.instance_data; @@ -196,16 +196,16 @@ class Derived { } fn F(d: Derived) { - // CHECK:STDERR: fail_import_non_function_member_private_extend.carbon:[[@LINE+8]]:35: error: cannot access private member `instance_data` of type `Cpp.C` [ClassInvalidMemberAccess] + // CHECK:STDERR: fail_import_non_function_member_private_extend.carbon:[[@LINE+8]]:35: error: cannot access private member `instance_data` of type `Cpp.NonFunctionMemberPrivate` [ClassInvalidMemberAccess] // CHECK:STDERR: let unused instance_data: i32 = d.instance_data; // CHECK:STDERR: ^~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_non_function_member_private_extend.carbon:[[@LINE-21]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./non_function_member_private.h:2:7: note: declared here [ClassMemberDeclaration] - // CHECK:STDERR: class C { + // CHECK:STDERR: class NonFunctionMemberPrivate { // CHECK:STDERR: ^ // CHECK:STDERR: let unused instance_data: i32 = d.instance_data; - // CHECK:STDERR: fail_import_non_function_member_private_extend.carbon:[[@LINE+7]]:41: error: cannot access private member `static_data` of type `Cpp.C` [ClassInvalidMemberAccess] + // CHECK:STDERR: fail_import_non_function_member_private_extend.carbon:[[@LINE+7]]:41: error: cannot access private member `static_data` of type `Cpp.NonFunctionMemberPrivate` [ClassInvalidMemberAccess] // CHECK:STDERR: let unused derived_static_data: i32 = Derived.static_data; // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_non_function_member_private_extend.carbon:[[@LINE+4]]:41: note: declared here [ClassMemberDeclaration] @@ -213,14 +213,14 @@ fn F(d: Derived) { // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: let unused derived_static_data: i32 = Derived.static_data; - // CHECK:STDERR: fail_import_non_function_member_private_extend.carbon:[[@LINE+7]]:38: error: cannot access private member `static_data` of type `Cpp.C` [ClassInvalidMemberAccess] - // CHECK:STDERR: let unused base_static_data: i32 = Cpp.C.static_data; - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_import_non_function_member_private_extend.carbon:[[@LINE+7]]:38: error: cannot access private member `static_data` of type `Cpp.NonFunctionMemberPrivate` [ClassInvalidMemberAccess] + // CHECK:STDERR: let unused base_static_data: i32 = Cpp.NonFunctionMemberPrivate.static_data; + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_non_function_member_private_extend.carbon:[[@LINE-4]]:41: note: declared here [ClassMemberDeclaration] // CHECK:STDERR: let unused derived_static_data: i32 = Derived.static_data; // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - let unused base_static_data: i32 = Cpp.C.static_data; + let unused base_static_data: i32 = Cpp.NonFunctionMemberPrivate.static_data; } // --- fail_import_non_function_member_private_extend_static_within_member_function.carbon @@ -230,10 +230,11 @@ library "[[@TEST_NAME]]"; import Cpp library "non_function_member_private.h"; class Derived { - extend base: Cpp.C; + extend base: Cpp.NonFunctionMemberPrivate; fn F() { - // TODO: `C.static_data` is private, so this should fail. - // CHECK:STDERR: fail_import_non_function_member_private_extend_static_within_member_function.carbon:[[@LINE+7]]:47: error: cannot access private member `static_data` of type `Cpp.C` [ClassInvalidMemberAccess] + // TODO: `NonFunctionMemberPrivate.static_data` is private, so this + // should fail. + // CHECK:STDERR: fail_import_non_function_member_private_extend_static_within_member_function.carbon:[[@LINE+7]]:47: error: cannot access private member `static_data` of type `Cpp.NonFunctionMemberPrivate` [ClassInvalidMemberAccess] // CHECK:STDERR: let unused unqualified_static_data: i32 = static_data; // CHECK:STDERR: ^~~~~~~~~~~ // CHECK:STDERR: fail_import_non_function_member_private_extend_static_within_member_function.carbon:[[@LINE+4]]:47: note: declared here [ClassMemberDeclaration] @@ -250,7 +251,7 @@ class Derived { // --- function_member_public.h -struct S { +struct FunctionMemberPublic { auto instance_fn() -> void; static auto static_fn() -> void; }; @@ -261,10 +262,10 @@ library "[[@TEST_NAME]]"; import Cpp library "function_member_public.h"; -fn F(s: Cpp.S*) { +fn F(s: Cpp.FunctionMemberPublic*) { //@dump-sem-ir-begin s->instance_fn(); - Cpp.S.static_fn(); + Cpp.FunctionMemberPublic.static_fn(); //@dump-sem-ir-end } @@ -274,7 +275,7 @@ fn F(s: Cpp.S*) { // --- function_member_protected.h -class C { +class FunctionMemberProtected { protected: auto instance_fn() -> void; static auto static_fn() -> void; @@ -286,8 +287,8 @@ library "[[@TEST_NAME]]"; import Cpp library "function_member_protected.h"; -fn F(c: Cpp.C*) { - // CHECK:STDERR: fail_import_function_member_protected.carbon:[[@LINE+7]]:3: error: cannot access protected member `instance_fn` of type `Cpp.C` [ClassInvalidMemberAccess] +fn F(c: Cpp.FunctionMemberProtected*) { + // CHECK:STDERR: fail_import_function_member_protected.carbon:[[@LINE+7]]:3: error: cannot access protected member `instance_fn` of type `Cpp.FunctionMemberProtected` [ClassInvalidMemberAccess] // CHECK:STDERR: c->instance_fn(); // CHECK:STDERR: ^~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_function_member_protected.carbon:[[@LINE+4]]:3: note: declared here [ClassMemberDeclaration] @@ -295,14 +296,14 @@ fn F(c: Cpp.C*) { // CHECK:STDERR: ^~~~~~~~~~~~~~ // CHECK:STDERR: c->instance_fn(); - // CHECK:STDERR: fail_import_function_member_protected.carbon:[[@LINE+7]]:3: error: cannot access protected member `static_fn` of type `Cpp.C` [ClassInvalidMemberAccess] - // CHECK:STDERR: Cpp.C.static_fn(); - // CHECK:STDERR: ^~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_import_function_member_protected.carbon:[[@LINE+7]]:3: error: cannot access protected member `static_fn` of type `Cpp.FunctionMemberProtected` [ClassInvalidMemberAccess] + // CHECK:STDERR: Cpp.FunctionMemberProtected.static_fn(); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_function_member_protected.carbon:[[@LINE+4]]:3: note: declared here [ClassMemberDeclaration] - // CHECK:STDERR: Cpp.C.static_fn(); - // CHECK:STDERR: ^~~~~~~~~~~~~~~ + // CHECK:STDERR: Cpp.FunctionMemberProtected.static_fn(); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - Cpp.C.static_fn(); + Cpp.FunctionMemberProtected.static_fn(); } // --- fail_todo_import_function_member_protected_extend_call_instance_in_member.carbon @@ -312,7 +313,7 @@ library "[[@TEST_NAME]]"; import Cpp library "function_member_protected.h"; class Derived { - extend base: Cpp.C; + extend base: Cpp.FunctionMemberProtected; fn F(self) { //@dump-sem-ir-begin // TODO: It should be possible to call protected methods in the base class. @@ -320,7 +321,7 @@ class Derived { // CHECK:STDERR: 19 | self.instance_fn(); // CHECK:STDERR: | ^ // CHECK:STDERR: fail_todo_import_function_member_protected_extend_call_instance_in_member.carbon:[[@LINE-10]]:10: in file included here [InCppInclude] - // CHECK:STDERR: ./function_member_protected.h:4:8: note: candidate function not viable: cannot convert argument of incomplete type 'const Carbon::Derived' to 'C' for object argument [CppInteropParseNote] + // CHECK:STDERR: ./function_member_protected.h:4:8: note: candidate function not viable: cannot convert argument of incomplete type 'const Carbon::Derived' to 'FunctionMemberProtected' for object argument [CppInteropParseNote] // CHECK:STDERR: 4 | auto instance_fn() -> void; // CHECK:STDERR: | ^ // CHECK:STDERR: @@ -336,12 +337,12 @@ library "[[@TEST_NAME]]"; import Cpp library "function_member_protected.h"; class Derived { - extend base: Cpp.C; + extend base: Cpp.FunctionMemberProtected; fn F(unused self) { //@dump-sem-ir-begin static_fn(); Derived.static_fn(); - Cpp.C.static_fn(); + Cpp.FunctionMemberProtected.static_fn(); //@dump-sem-ir-end } } @@ -352,7 +353,7 @@ class Derived { // --- function_member_private.h -class C { +class FunctionMemberPrivate { private: auto instance_fn() -> void; static auto static_fn() -> void; @@ -365,9 +366,9 @@ library "[[@TEST_NAME]]"; import Cpp library "function_member_private.h"; class Derived { - extend base: Cpp.C; + extend base: Cpp.FunctionMemberPrivate; fn F(self) { - // CHECK:STDERR: fail_import_function_member_private.carbon:[[@LINE+7]]:5: error: cannot access private member `instance_fn` of type `Cpp.C` [ClassInvalidMemberAccess] + // CHECK:STDERR: fail_import_function_member_private.carbon:[[@LINE+7]]:5: error: cannot access private member `instance_fn` of type `Cpp.FunctionMemberPrivate` [ClassInvalidMemberAccess] // CHECK:STDERR: self.instance_fn(); // CHECK:STDERR: ^~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_function_member_private.carbon:[[@LINE+4]]:5: note: declared here [ClassMemberDeclaration] @@ -375,7 +376,7 @@ class Derived { // CHECK:STDERR: ^~~~~~~~~~~~~~~~ // CHECK:STDERR: self.instance_fn(); - // CHECK:STDERR: fail_import_function_member_private.carbon:[[@LINE+7]]:5: error: cannot access private member `static_fn` of type `Cpp.C` [ClassInvalidMemberAccess] + // CHECK:STDERR: fail_import_function_member_private.carbon:[[@LINE+7]]:5: error: cannot access private member `static_fn` of type `Cpp.FunctionMemberPrivate` [ClassInvalidMemberAccess] // CHECK:STDERR: static_fn(); // CHECK:STDERR: ^~~~~~~~~ // CHECK:STDERR: fail_import_function_member_private.carbon:[[@LINE+4]]:5: note: declared here [ClassMemberDeclaration] @@ -383,7 +384,7 @@ class Derived { // CHECK:STDERR: ^~~~~~~~~ // CHECK:STDERR: static_fn(); - // CHECK:STDERR: fail_import_function_member_private.carbon:[[@LINE+7]]:5: error: cannot access private member `static_fn` of type `Cpp.C` [ClassInvalidMemberAccess] + // CHECK:STDERR: fail_import_function_member_private.carbon:[[@LINE+7]]:5: error: cannot access private member `static_fn` of type `Cpp.FunctionMemberPrivate` [ClassInvalidMemberAccess] // CHECK:STDERR: Derived.static_fn(); // CHECK:STDERR: ^~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_function_member_private.carbon:[[@LINE-4]]:5: note: declared here [ClassMemberDeclaration] @@ -391,19 +392,19 @@ class Derived { // CHECK:STDERR: ^~~~~~~~~ // CHECK:STDERR: Derived.static_fn(); - // CHECK:STDERR: fail_import_function_member_private.carbon:[[@LINE+7]]:5: error: cannot access private member `static_fn` of type `Cpp.C` [ClassInvalidMemberAccess] - // CHECK:STDERR: Cpp.C.static_fn(); - // CHECK:STDERR: ^~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_import_function_member_private.carbon:[[@LINE+7]]:5: error: cannot access private member `static_fn` of type `Cpp.FunctionMemberPrivate` [ClassInvalidMemberAccess] + // CHECK:STDERR: Cpp.FunctionMemberPrivate.static_fn(); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_function_member_private.carbon:[[@LINE-12]]:5: note: declared here [ClassMemberDeclaration] // CHECK:STDERR: static_fn(); // CHECK:STDERR: ^~~~~~~~~ // CHECK:STDERR: - Cpp.C.static_fn(); + Cpp.FunctionMemberPrivate.static_fn(); } } -fn F(c: Cpp.C*) { - // CHECK:STDERR: fail_import_function_member_private.carbon:[[@LINE+7]]:3: error: cannot access private member `instance_fn` of type `Cpp.C` [ClassInvalidMemberAccess] +fn F(c: Cpp.FunctionMemberPrivate*) { + // CHECK:STDERR: fail_import_function_member_private.carbon:[[@LINE+7]]:3: error: cannot access private member `instance_fn` of type `Cpp.FunctionMemberPrivate` [ClassInvalidMemberAccess] // CHECK:STDERR: c->instance_fn(); // CHECK:STDERR: ^~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_function_member_private.carbon:[[@LINE-32]]:5: note: declared here [ClassMemberDeclaration] @@ -411,7 +412,7 @@ fn F(c: Cpp.C*) { // CHECK:STDERR: ^~~~~~~~~~~~~~~~ // CHECK:STDERR: c->instance_fn(); - // CHECK:STDERR: fail_import_function_member_private.carbon:[[@LINE+7]]:3: error: cannot access private member `static_fn` of type `Cpp.C` [ClassInvalidMemberAccess] + // CHECK:STDERR: fail_import_function_member_private.carbon:[[@LINE+7]]:3: error: cannot access private member `static_fn` of type `Cpp.FunctionMemberPrivate` [ClassInvalidMemberAccess] // CHECK:STDERR: Derived.static_fn(); // CHECK:STDERR: ^~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_function_member_private.carbon:[[@LINE-32]]:5: note: declared here [ClassMemberDeclaration] @@ -419,14 +420,14 @@ fn F(c: Cpp.C*) { // CHECK:STDERR: ^~~~~~~~~ // CHECK:STDERR: Derived.static_fn(); - // CHECK:STDERR: fail_import_function_member_private.carbon:[[@LINE+7]]:3: error: cannot access private member `static_fn` of type `Cpp.C` [ClassInvalidMemberAccess] - // CHECK:STDERR: Cpp.C.static_fn(); - // CHECK:STDERR: ^~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_import_function_member_private.carbon:[[@LINE+7]]:3: error: cannot access private member `static_fn` of type `Cpp.FunctionMemberPrivate` [ClassInvalidMemberAccess] + // CHECK:STDERR: Cpp.FunctionMemberPrivate.static_fn(); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_function_member_private.carbon:[[@LINE-40]]:5: note: declared here [ClassMemberDeclaration] // CHECK:STDERR: static_fn(); // CHECK:STDERR: ^~~~~~~~~ // CHECK:STDERR: - Cpp.C.static_fn(); + Cpp.FunctionMemberPrivate.static_fn(); } // ============================================================================ @@ -439,15 +440,15 @@ struct PublicCall {}; struct ProtectedCall {}; struct PrivateCall {}; -class C { +class OverloadSet { public: - C(PublicCall x); + OverloadSet(PublicCall x); static auto Overload(PublicCall x) -> void; protected: - C(ProtectedCall x); + OverloadSet(ProtectedCall x); static auto Overload(ProtectedCall x) -> void; private: - C(PrivateCall x); + OverloadSet(PrivateCall x); static auto Overload(PrivateCall x) -> void; }; @@ -459,8 +460,8 @@ import Cpp library "overload_set.h"; fn F() { //@dump-sem-ir-begin - Cpp.C.C(Cpp.PublicCall.PublicCall()); - Cpp.C.Overload(Cpp.PublicCall.PublicCall()); + Cpp.OverloadSet.OverloadSet(Cpp.PublicCall.PublicCall()); + Cpp.OverloadSet.Overload(Cpp.PublicCall.PublicCall()); //@dump-sem-ir-end } @@ -471,25 +472,24 @@ library "[[@TEST_NAME]]"; import Cpp library "overload_set.h"; fn F() { - // CHECK:STDERR: fail_import_overload_set_protected.carbon:[[@LINE+8]]:3: error: cannot access protected member `C` of type `Cpp.C` [ClassInvalidMemberAccess] - // CHECK:STDERR: Cpp.C.C(Cpp.ProtectedCall.ProtectedCall()); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_import_overload_set_protected.carbon:[[@LINE+8]]:3: error: cannot access protected member `OverloadSet` of type `Cpp.OverloadSet` [ClassInvalidMemberAccess] + // CHECK:STDERR: Cpp.OverloadSet.OverloadSet(Cpp.ProtectedCall.ProtectedCall()); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_overload_set_protected.carbon:[[@LINE-6]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./overload_set.h:11:3: note: declared here [ClassMemberDeclaration] - // CHECK:STDERR: C(ProtectedCall x); + // CHECK:STDERR: OverloadSet(ProtectedCall x); // CHECK:STDERR: ^ // CHECK:STDERR: - Cpp.C.C(Cpp.ProtectedCall.ProtectedCall()); - - // CHECK:STDERR: fail_import_overload_set_protected.carbon:[[@LINE+8]]:3: error: cannot access protected member `Overload` of type `Cpp.C` [ClassInvalidMemberAccess] - // CHECK:STDERR: Cpp.C.Overload(Cpp.ProtectedCall.ProtectedCall()); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // CHECK:STDERR: fail_import_overload_set_protected.carbon:[[@LINE-16]]:10: in file included here [InCppInclude] + Cpp.OverloadSet.OverloadSet(Cpp.ProtectedCall.ProtectedCall()); + // CHECK:STDERR: fail_import_overload_set_protected.carbon:[[@LINE+8]]:3: error: cannot access protected member `Overload` of type `Cpp.OverloadSet` [ClassInvalidMemberAccess] + // CHECK:STDERR: Cpp.OverloadSet.Overload(Cpp.ProtectedCall.ProtectedCall()); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_import_overload_set_protected.carbon:[[@LINE-15]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./overload_set.h:12:15: note: declared here [ClassMemberDeclaration] // CHECK:STDERR: static auto Overload(ProtectedCall x) -> void; // CHECK:STDERR: ^ // CHECK:STDERR: - Cpp.C.Overload(Cpp.ProtectedCall.ProtectedCall()); + Cpp.OverloadSet.Overload(Cpp.ProtectedCall.ProtectedCall()); } // --- import_overload_set_protected_base.carbon @@ -499,17 +499,17 @@ library "[[@TEST_NAME]]"; import Cpp library "overload_set.h"; class D { - extend base: Cpp.C; + extend base: Cpp.OverloadSet; fn MakePublic() -> D { //@dump-sem-ir-begin - return {.base = C(Cpp.PublicCall.PublicCall())}; + return {.base = OverloadSet(Cpp.PublicCall.PublicCall())}; //@dump-sem-ir-end } fn MakeProtected() -> D { //@dump-sem-ir-begin - return {.base = C(Cpp.ProtectedCall.ProtectedCall())}; + return {.base = OverloadSet(Cpp.ProtectedCall.ProtectedCall())}; //@dump-sem-ir-end } @@ -533,25 +533,24 @@ library "[[@TEST_NAME]]"; import Cpp library "overload_set.h"; fn F() { - // CHECK:STDERR: fail_import_overload_set_private.carbon:[[@LINE+8]]:3: error: cannot access private member `C` of type `Cpp.C` [ClassInvalidMemberAccess] - // CHECK:STDERR: Cpp.C.C(Cpp.PrivateCall.PrivateCall()); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_import_overload_set_private.carbon:[[@LINE+8]]:3: error: cannot access private member `OverloadSet` of type `Cpp.OverloadSet` [ClassInvalidMemberAccess] + // CHECK:STDERR: Cpp.OverloadSet.OverloadSet(Cpp.PrivateCall.PrivateCall()); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_overload_set_private.carbon:[[@LINE-6]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./overload_set.h:14:3: note: declared here [ClassMemberDeclaration] - // CHECK:STDERR: C(PrivateCall x); + // CHECK:STDERR: OverloadSet(PrivateCall x); // CHECK:STDERR: ^ // CHECK:STDERR: - Cpp.C.C(Cpp.PrivateCall.PrivateCall()); - - // CHECK:STDERR: fail_import_overload_set_private.carbon:[[@LINE+8]]:3: error: cannot access private member `Overload` of type `Cpp.C` [ClassInvalidMemberAccess] - // CHECK:STDERR: Cpp.C.Overload(Cpp.PrivateCall.PrivateCall()); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // CHECK:STDERR: fail_import_overload_set_private.carbon:[[@LINE-16]]:10: in file included here [InCppInclude] + Cpp.OverloadSet.OverloadSet(Cpp.PrivateCall.PrivateCall()); + // CHECK:STDERR: fail_import_overload_set_private.carbon:[[@LINE+8]]:3: error: cannot access private member `Overload` of type `Cpp.OverloadSet` [ClassInvalidMemberAccess] + // CHECK:STDERR: Cpp.OverloadSet.Overload(Cpp.PrivateCall.PrivateCall()); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_import_overload_set_private.carbon:[[@LINE-15]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./overload_set.h:15:15: note: declared here [ClassMemberDeclaration] // CHECK:STDERR: static auto Overload(PrivateCall x) -> void; // CHECK:STDERR: ^ // CHECK:STDERR: - Cpp.C.Overload(Cpp.PrivateCall.PrivateCall()); + Cpp.OverloadSet.Overload(Cpp.PrivateCall.PrivateCall()); } // --- fail_import_overload_set_private_base.carbon @@ -561,22 +560,22 @@ library "[[@TEST_NAME]]"; import Cpp library "overload_set.h"; class D { - extend base: Cpp.C; + extend base: Cpp.OverloadSet; fn MakePrivate() -> D { - // CHECK:STDERR: fail_import_overload_set_private_base.carbon:[[@LINE+8]]:21: error: cannot access private member `C` of type `Cpp.C` [ClassInvalidMemberAccess] - // CHECK:STDERR: return {.base = C(Cpp.PrivateCall.PrivateCall())}; - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_import_overload_set_private_base.carbon:[[@LINE+8]]:21: error: cannot access private member `OverloadSet` of type `Cpp.OverloadSet` [ClassInvalidMemberAccess] + // CHECK:STDERR: return {.base = OverloadSet(Cpp.PrivateCall.PrivateCall())}; + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_overload_set_private_base.carbon:[[@LINE-9]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./overload_set.h:14:3: note: declared here [ClassMemberDeclaration] - // CHECK:STDERR: C(PrivateCall x); + // CHECK:STDERR: OverloadSet(PrivateCall x); // CHECK:STDERR: ^ // CHECK:STDERR: - return {.base = C(Cpp.PrivateCall.PrivateCall())}; + return {.base = OverloadSet(Cpp.PrivateCall.PrivateCall())}; } fn CallPrivate() { - // CHECK:STDERR: fail_import_overload_set_private_base.carbon:[[@LINE+8]]:5: error: cannot access private member `Overload` of type `Cpp.C` [ClassInvalidMemberAccess] + // CHECK:STDERR: fail_import_overload_set_private_base.carbon:[[@LINE+8]]:5: error: cannot access private member `Overload` of type `Cpp.OverloadSet` [ClassInvalidMemberAccess] // CHECK:STDERR: Overload(Cpp.PrivateCall.PrivateCall()); // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_overload_set_private_base.carbon:[[@LINE-21]]:10: in file included here [InCppInclude] @@ -592,9 +591,9 @@ class D { #include "overload_set.h" -class Public : public C {}; -class Protected : protected C {}; -class Private : private C {}; +class OverloadPublic : public OverloadSet {}; +class OverloadProtected : protected OverloadSet {}; +class OverloadPrivate : private OverloadSet {}; // --- import_overload_set_public_base_class_call_public.carbon @@ -604,7 +603,7 @@ import Cpp library "overload_set_base_class.h"; fn F() { //@dump-sem-ir-begin - Cpp.Public.Overload(Cpp.PublicCall.PublicCall()); + Cpp.OverloadPublic.Overload(Cpp.PublicCall.PublicCall()); //@dump-sem-ir-end } @@ -615,26 +614,26 @@ library "[[@TEST_NAME]]"; import Cpp library "overload_set_base_class.h"; fn F() { - // CHECK:STDERR: fail_import_overload_set_public_base_class_call_non_public.carbon:[[@LINE+9]]:3: error: cannot access protected member `Overload` of type `Cpp.Public` [ClassInvalidMemberAccess] - // CHECK:STDERR: Cpp.Public.Overload(Cpp.ProtectedCall.ProtectedCall()); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_import_overload_set_public_base_class_call_non_public.carbon:[[@LINE+9]]:3: error: cannot access protected member `Overload` of type `Cpp.OverloadPublic` [ClassInvalidMemberAccess] + // CHECK:STDERR: Cpp.OverloadPublic.Overload(Cpp.ProtectedCall.ProtectedCall()); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_overload_set_public_base_class_call_non_public.carbon:[[@LINE-6]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./overload_set_base_class.h:2:10: in file included here [InCppInclude] // CHECK:STDERR: ./overload_set.h:12:15: note: declared here [ClassMemberDeclaration] // CHECK:STDERR: static auto Overload(ProtectedCall x) -> void; // CHECK:STDERR: ^ // CHECK:STDERR: - Cpp.Public.Overload(Cpp.ProtectedCall.ProtectedCall()); - // CHECK:STDERR: fail_import_overload_set_public_base_class_call_non_public.carbon:[[@LINE+9]]:3: error: cannot access private member `Overload` of type `Cpp.Public` [ClassInvalidMemberAccess] - // CHECK:STDERR: Cpp.Public.Overload(Cpp.PrivateCall.PrivateCall()); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Cpp.OverloadPublic.Overload(Cpp.ProtectedCall.ProtectedCall()); + // CHECK:STDERR: fail_import_overload_set_public_base_class_call_non_public.carbon:[[@LINE+9]]:3: error: cannot access private member `Overload` of type `Cpp.OverloadPublic` [ClassInvalidMemberAccess] + // CHECK:STDERR: Cpp.OverloadPublic.Overload(Cpp.PrivateCall.PrivateCall()); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_overload_set_public_base_class_call_non_public.carbon:[[@LINE-16]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./overload_set_base_class.h:2:10: in file included here [InCppInclude] // CHECK:STDERR: ./overload_set.h:15:15: note: declared here [ClassMemberDeclaration] // CHECK:STDERR: static auto Overload(PrivateCall x) -> void; // CHECK:STDERR: ^ // CHECK:STDERR: - Cpp.Public.Overload(Cpp.PrivateCall.PrivateCall()); + Cpp.OverloadPublic.Overload(Cpp.PrivateCall.PrivateCall()); } // --- import_overload_set_public_base_class_derived_call_non_private.carbon @@ -644,7 +643,7 @@ library "[[@TEST_NAME]]"; import Cpp library "overload_set_base_class.h"; class Derived { - extend base: Cpp.Public; + extend base: Cpp.OverloadPublic; fn F() { //@dump-sem-ir-begin @@ -661,10 +660,10 @@ library "[[@TEST_NAME]]"; import Cpp library "overload_set_base_class.h"; class Derived { - extend base: Cpp.Public; + extend base: Cpp.OverloadPublic; fn F() { - // CHECK:STDERR: fail_import_overload_set_public_base_class_derived_call_private.carbon:[[@LINE+9]]:5: error: cannot access private member `Overload` of type `Cpp.Public` [ClassInvalidMemberAccess] + // CHECK:STDERR: fail_import_overload_set_public_base_class_derived_call_private.carbon:[[@LINE+9]]:5: error: cannot access private member `Overload` of type `Cpp.OverloadPublic` [ClassInvalidMemberAccess] // CHECK:STDERR: Overload(Cpp.PrivateCall.PrivateCall()); // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_overload_set_public_base_class_derived_call_private.carbon:[[@LINE-9]]:10: in file included here [InCppInclude] @@ -684,30 +683,30 @@ library "[[@TEST_NAME]]"; import Cpp library "overload_set_base_class.h"; fn F() { - // CHECK:STDERR: fail_import_overload_set_protected_base_class.carbon:[[@LINE+7]]:3: error: cannot access protected member `Overload` of type `Cpp.Protected` [ClassInvalidMemberAccess] - // CHECK:STDERR: Cpp.Protected.Overload(Cpp.PublicCall.PublicCall()); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_import_overload_set_protected_base_class.carbon:[[@LINE+7]]:3: error: cannot access protected member `Overload` of type `Cpp.OverloadProtected` [ClassInvalidMemberAccess] + // CHECK:STDERR: Cpp.OverloadProtected.Overload(Cpp.PublicCall.PublicCall()); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_overload_set_protected_base_class.carbon:[[@LINE+4]]:3: note: declared here [ClassMemberDeclaration] - // CHECK:STDERR: Cpp.Protected.Overload(Cpp.PublicCall.PublicCall()); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: Cpp.OverloadProtected.Overload(Cpp.PublicCall.PublicCall()); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - Cpp.Protected.Overload(Cpp.PublicCall.PublicCall()); - // CHECK:STDERR: fail_import_overload_set_protected_base_class.carbon:[[@LINE+7]]:3: error: cannot access protected member `Overload` of type `Cpp.Protected` [ClassInvalidMemberAccess] - // CHECK:STDERR: Cpp.Protected.Overload(Cpp.ProtectedCall.ProtectedCall()); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~ + Cpp.OverloadProtected.Overload(Cpp.PublicCall.PublicCall()); + // CHECK:STDERR: fail_import_overload_set_protected_base_class.carbon:[[@LINE+7]]:3: error: cannot access protected member `Overload` of type `Cpp.OverloadProtected` [ClassInvalidMemberAccess] + // CHECK:STDERR: Cpp.OverloadProtected.Overload(Cpp.ProtectedCall.ProtectedCall()); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_overload_set_protected_base_class.carbon:[[@LINE-4]]:3: note: declared here [ClassMemberDeclaration] - // CHECK:STDERR: Cpp.Protected.Overload(Cpp.PublicCall.PublicCall()); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: Cpp.OverloadProtected.Overload(Cpp.PublicCall.PublicCall()); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - Cpp.Protected.Overload(Cpp.ProtectedCall.ProtectedCall()); - // CHECK:STDERR: fail_import_overload_set_protected_base_class.carbon:[[@LINE+7]]:3: error: cannot access protected member `Overload` of type `Cpp.Protected` [ClassInvalidMemberAccess] - // CHECK:STDERR: Cpp.Protected.Overload(Cpp.PrivateCall.PrivateCall()); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~ + Cpp.OverloadProtected.Overload(Cpp.ProtectedCall.ProtectedCall()); + // CHECK:STDERR: fail_import_overload_set_protected_base_class.carbon:[[@LINE+7]]:3: error: cannot access protected member `Overload` of type `Cpp.OverloadProtected` [ClassInvalidMemberAccess] + // CHECK:STDERR: Cpp.OverloadProtected.Overload(Cpp.PrivateCall.PrivateCall()); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_overload_set_protected_base_class.carbon:[[@LINE-12]]:3: note: declared here [ClassMemberDeclaration] - // CHECK:STDERR: Cpp.Protected.Overload(Cpp.PublicCall.PublicCall()); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: Cpp.OverloadProtected.Overload(Cpp.PublicCall.PublicCall()); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - Cpp.Protected.Overload(Cpp.PrivateCall.PrivateCall()); + Cpp.OverloadProtected.Overload(Cpp.PrivateCall.PrivateCall()); } // --- import_overload_set_protected_base_class_derived_call_non_private.carbon @@ -717,7 +716,7 @@ library "[[@TEST_NAME]]"; import Cpp library "overload_set_base_class.h"; class Derived { - extend base: Cpp.Protected; + extend base: Cpp.OverloadProtected; fn F() { //@dump-sem-ir-begin @@ -734,10 +733,10 @@ library "[[@TEST_NAME]]"; import Cpp library "overload_set_base_class.h"; class Derived { - extend base: Cpp.Protected; + extend base: Cpp.OverloadProtected; fn F() { - // CHECK:STDERR: fail_import_overload_set_protected_base_class_derived_call_private.carbon:[[@LINE+9]]:5: error: cannot access private member `Overload` of type `Cpp.Protected` [ClassInvalidMemberAccess] + // CHECK:STDERR: fail_import_overload_set_protected_base_class_derived_call_private.carbon:[[@LINE+9]]:5: error: cannot access private member `Overload` of type `Cpp.OverloadProtected` [ClassInvalidMemberAccess] // CHECK:STDERR: Overload(Cpp.PrivateCall.PrivateCall()); // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_overload_set_protected_base_class_derived_call_private.carbon:[[@LINE-9]]:10: in file included here [InCppInclude] @@ -757,30 +756,30 @@ library "[[@TEST_NAME]]"; import Cpp library "overload_set_base_class.h"; fn F() { - // CHECK:STDERR: fail_import_overload_set_private_base_class.carbon:[[@LINE+7]]:3: error: cannot access private member `Overload` of type `Cpp.Private` [ClassInvalidMemberAccess] - // CHECK:STDERR: Cpp.Private.Overload(Cpp.PublicCall.PublicCall()); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_import_overload_set_private_base_class.carbon:[[@LINE+7]]:3: error: cannot access private member `Overload` of type `Cpp.OverloadPrivate` [ClassInvalidMemberAccess] + // CHECK:STDERR: Cpp.OverloadPrivate.Overload(Cpp.PublicCall.PublicCall()); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_overload_set_private_base_class.carbon:[[@LINE+4]]:3: note: declared here [ClassMemberDeclaration] - // CHECK:STDERR: Cpp.Private.Overload(Cpp.PublicCall.PublicCall()); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: Cpp.OverloadPrivate.Overload(Cpp.PublicCall.PublicCall()); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - Cpp.Private.Overload(Cpp.PublicCall.PublicCall()); - // CHECK:STDERR: fail_import_overload_set_private_base_class.carbon:[[@LINE+7]]:3: error: cannot access private member `Overload` of type `Cpp.Private` [ClassInvalidMemberAccess] - // CHECK:STDERR: Cpp.Private.Overload(Cpp.ProtectedCall.ProtectedCall()); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~ + Cpp.OverloadPrivate.Overload(Cpp.PublicCall.PublicCall()); + // CHECK:STDERR: fail_import_overload_set_private_base_class.carbon:[[@LINE+7]]:3: error: cannot access private member `Overload` of type `Cpp.OverloadPrivate` [ClassInvalidMemberAccess] + // CHECK:STDERR: Cpp.OverloadPrivate.Overload(Cpp.ProtectedCall.ProtectedCall()); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_overload_set_private_base_class.carbon:[[@LINE-4]]:3: note: declared here [ClassMemberDeclaration] - // CHECK:STDERR: Cpp.Private.Overload(Cpp.PublicCall.PublicCall()); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: Cpp.OverloadPrivate.Overload(Cpp.PublicCall.PublicCall()); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - Cpp.Private.Overload(Cpp.ProtectedCall.ProtectedCall()); - // CHECK:STDERR: fail_import_overload_set_private_base_class.carbon:[[@LINE+7]]:3: error: cannot access private member `Overload` of type `Cpp.Private` [ClassInvalidMemberAccess] - // CHECK:STDERR: Cpp.Private.Overload(Cpp.PrivateCall.PrivateCall()); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~ + Cpp.OverloadPrivate.Overload(Cpp.ProtectedCall.ProtectedCall()); + // CHECK:STDERR: fail_import_overload_set_private_base_class.carbon:[[@LINE+7]]:3: error: cannot access private member `Overload` of type `Cpp.OverloadPrivate` [ClassInvalidMemberAccess] + // CHECK:STDERR: Cpp.OverloadPrivate.Overload(Cpp.PrivateCall.PrivateCall()); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_overload_set_private_base_class.carbon:[[@LINE-12]]:3: note: declared here [ClassMemberDeclaration] - // CHECK:STDERR: Cpp.Private.Overload(Cpp.PublicCall.PublicCall()); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: Cpp.OverloadPrivate.Overload(Cpp.PublicCall.PublicCall()); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - Cpp.Private.Overload(Cpp.PrivateCall.PrivateCall()); + Cpp.OverloadPrivate.Overload(Cpp.PrivateCall.PrivateCall()); } // --- fail_import_overload_set_private_base_class_derived.carbon @@ -790,10 +789,10 @@ library "[[@TEST_NAME]]"; import Cpp library "overload_set_base_class.h"; class Derived { - extend base: Cpp.Private; + extend base: Cpp.OverloadPrivate; fn F() { - // CHECK:STDERR: fail_import_overload_set_private_base_class_derived.carbon:[[@LINE+7]]:5: error: cannot access private member `Overload` of type `Cpp.Private` [ClassInvalidMemberAccess] + // CHECK:STDERR: fail_import_overload_set_private_base_class_derived.carbon:[[@LINE+7]]:5: error: cannot access private member `Overload` of type `Cpp.OverloadPrivate` [ClassInvalidMemberAccess] // CHECK:STDERR: Overload(Cpp.PublicCall.PublicCall()); // CHECK:STDERR: ^~~~~~~~ // CHECK:STDERR: fail_import_overload_set_private_base_class_derived.carbon:[[@LINE+4]]:5: note: declared here [ClassMemberDeclaration] @@ -801,7 +800,7 @@ class Derived { // CHECK:STDERR: ^~~~~~~~ // CHECK:STDERR: Overload(Cpp.PublicCall.PublicCall()); - // CHECK:STDERR: fail_import_overload_set_private_base_class_derived.carbon:[[@LINE+7]]:5: error: cannot access private member `Overload` of type `Cpp.Private` [ClassInvalidMemberAccess] + // CHECK:STDERR: fail_import_overload_set_private_base_class_derived.carbon:[[@LINE+7]]:5: error: cannot access private member `Overload` of type `Cpp.OverloadPrivate` [ClassInvalidMemberAccess] // CHECK:STDERR: Overload(Cpp.ProtectedCall.ProtectedCall()); // CHECK:STDERR: ^~~~~~~~ // CHECK:STDERR: fail_import_overload_set_private_base_class_derived.carbon:[[@LINE-4]]:5: note: declared here [ClassMemberDeclaration] @@ -809,7 +808,7 @@ class Derived { // CHECK:STDERR: ^~~~~~~~ // CHECK:STDERR: Overload(Cpp.ProtectedCall.ProtectedCall()); - // CHECK:STDERR: fail_import_overload_set_private_base_class_derived.carbon:[[@LINE+7]]:5: error: cannot access private member `Overload` of type `Cpp.Private` [ClassInvalidMemberAccess] + // CHECK:STDERR: fail_import_overload_set_private_base_class_derived.carbon:[[@LINE+7]]:5: error: cannot access private member `Overload` of type `Cpp.OverloadPrivate` [ClassInvalidMemberAccess] // CHECK:STDERR: Overload(Cpp.PrivateCall.PrivateCall()); // CHECK:STDERR: ^~~~~~~~ // CHECK:STDERR: fail_import_overload_set_private_base_class_derived.carbon:[[@LINE-12]]:5: note: declared here [ClassMemberDeclaration] @@ -1622,10 +1621,10 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: --- import_non_function_member_public.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %S: type = class_type @S [concrete] +// CHECK:STDOUT: %NonFunctionMemberPublic: type = class_type @NonFunctionMemberPublic [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] -// CHECK:STDOUT: %S.elem: type = unbound_element_type %S, %i32 [concrete] +// CHECK:STDOUT: %NonFunctionMemberPublic.elem: type = unbound_element_type %NonFunctionMemberPublic, %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %instance_data.patt: %pattern_type.6b6 = value_binding_pattern instance_data [concrete] // CHECK:STDOUT: %static_data.patt.405: %pattern_type.6b6 = value_binding_pattern static_data [concrete] @@ -1635,19 +1634,19 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .S = %S.decl +// CHECK:STDOUT: .NonFunctionMemberPublic = %NonFunctionMemberPublic.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} +// CHECK:STDOUT: %NonFunctionMemberPublic.decl: type = class_decl @NonFunctionMemberPublic [concrete = constants.%NonFunctionMemberPublic] {} {} // CHECK:STDOUT: %static_data.patt: %pattern_type.6b6 = ref_binding_pattern static_data [concrete = constants.%static_data.patt.617] // CHECK:STDOUT: %static_data.var_patt: %pattern_type.6b6 = var_pattern %static_data.patt [concrete = constants.%static_data.var_patt] // CHECK:STDOUT: %static_data.var: ref %i32 = var_storage %static_data.var_patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%s.param: %S) { +// CHECK:STDOUT: fn @F(%s.param: %NonFunctionMemberPublic) { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %s.ref: %S = name_ref s, %s -// CHECK:STDOUT: %instance_data.ref: %S.elem = name_ref instance_data, @S.%.1 [concrete = @S.%.1] +// CHECK:STDOUT: %s.ref: %NonFunctionMemberPublic = name_ref s, %s +// CHECK:STDOUT: %instance_data.ref: %NonFunctionMemberPublic.elem = name_ref instance_data, @NonFunctionMemberPublic.%.1 [concrete = @NonFunctionMemberPublic.%.1] // CHECK:STDOUT: %.loc8_36.1: ref %i32 = class_element_access %s.ref, element0 // CHECK:STDOUT: %.loc8_36.2: %i32 = acquire_value %.loc8_36.1 // CHECK:STDOUT: %i32.loc8: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -1656,7 +1655,7 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: %instance_data.patt: %pattern_type.6b6 = value_binding_pattern instance_data [concrete = constants.%instance_data.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %S.ref.loc9: type = name_ref S, imports.%S.decl [concrete = constants.%S] +// CHECK:STDOUT: %NonFunctionMemberPublic.ref.loc9: type = name_ref NonFunctionMemberPublic, imports.%NonFunctionMemberPublic.decl [concrete = constants.%NonFunctionMemberPublic] // CHECK:STDOUT: // CHECK:STDOUT: %static_data.ref: ref %i32 = name_ref static_data, imports.%static_data.var [concrete = imports.%static_data.var] // CHECK:STDOUT: %.loc9: %i32 = acquire_value %static_data.ref @@ -1672,10 +1671,10 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] -// CHECK:STDOUT: %S: type = class_type @S [concrete] +// CHECK:STDOUT: %NonFunctionMemberPublic: type = class_type @NonFunctionMemberPublic [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] -// CHECK:STDOUT: %S.elem: type = unbound_element_type %S, %i32 [concrete] +// CHECK:STDOUT: %NonFunctionMemberPublic.elem: type = unbound_element_type %NonFunctionMemberPublic, %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %instance_data.patt: %pattern_type.6b6 = value_binding_pattern instance_data [concrete] // CHECK:STDOUT: %static_data.patt.405: %pattern_type.6b6 = value_binding_pattern static_data [concrete] @@ -1692,10 +1691,10 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: fn @F(%d.param: %Derived) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %d.ref: %Derived = name_ref d, %d -// CHECK:STDOUT: %instance_data.ref: %S.elem = name_ref instance_data, @S.%.1 [concrete = @S.%.1] -// CHECK:STDOUT: %.loc12_36.1: %S = as_compatible %d.ref -// CHECK:STDOUT: %.loc12_36.2: ref %S = class_element_access %.loc12_36.1, element0 -// CHECK:STDOUT: %.loc12_36.3: ref %S = converted %d.ref, %.loc12_36.2 +// CHECK:STDOUT: %instance_data.ref: %NonFunctionMemberPublic.elem = name_ref instance_data, @NonFunctionMemberPublic.%.1 [concrete = @NonFunctionMemberPublic.%.1] +// CHECK:STDOUT: %.loc12_36.1: %NonFunctionMemberPublic = as_compatible %d.ref +// CHECK:STDOUT: %.loc12_36.2: ref %NonFunctionMemberPublic = class_element_access %.loc12_36.1, element0 +// CHECK:STDOUT: %.loc12_36.3: ref %NonFunctionMemberPublic = converted %d.ref, %.loc12_36.2 // CHECK:STDOUT: %.loc12_36.4: ref %i32 = class_element_access %.loc12_36.3, element0 // CHECK:STDOUT: %.loc12_36.5: %i32 = acquire_value %.loc12_36.4 // CHECK:STDOUT: %i32.loc12: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -1719,10 +1718,10 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] -// CHECK:STDOUT: %C: type = class_type @C [concrete] +// CHECK:STDOUT: %NonFunctionMemberProtected: type = class_type @NonFunctionMemberProtected [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] -// CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %i32 [concrete] +// CHECK:STDOUT: %NonFunctionMemberProtected.elem: type = unbound_element_type %NonFunctionMemberProtected, %i32 [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] // CHECK:STDOUT: %instance_data.patt: %pattern_type.6b6 = value_binding_pattern instance_data [concrete] // CHECK:STDOUT: %unqualified_static_data.patt: %pattern_type.6b6 = value_binding_pattern unqualified_static_data [concrete] @@ -1734,10 +1733,10 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .C = %C.decl +// CHECK:STDOUT: .NonFunctionMemberProtected = %NonFunctionMemberProtected.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} +// CHECK:STDOUT: %NonFunctionMemberProtected.decl: type = class_decl @NonFunctionMemberProtected [concrete = constants.%NonFunctionMemberProtected] {} {} // CHECK:STDOUT: %static_data.patt: %pattern_type.6b6 = ref_binding_pattern static_data [concrete = constants.%static_data.patt] // CHECK:STDOUT: %static_data.var_patt: %pattern_type.6b6 = var_pattern %static_data.patt [concrete = constants.%static_data.var_patt] // CHECK:STDOUT: %static_data.var: ref %i32 = var_storage %static_data.var_patt [concrete] @@ -1754,16 +1753,16 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: .instance_data = // CHECK:STDOUT: .static_data = // CHECK:STDOUT: .Derived = -// CHECK:STDOUT: extend %C.ref +// CHECK:STDOUT: extend %NonFunctionMemberProtected.ref // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Derived.F(%self.param: %Derived) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: %Derived = name_ref self, %self -// CHECK:STDOUT: %instance_data.ref: %C.elem = name_ref instance_data, @C.%.1 [concrete = @C.%.1] -// CHECK:STDOUT: %.loc10_41.1: %C = as_compatible %self.ref -// CHECK:STDOUT: %.loc10_41.2: ref %C = class_element_access %.loc10_41.1, element0 -// CHECK:STDOUT: %.loc10_41.3: ref %C = converted %self.ref, %.loc10_41.2 +// CHECK:STDOUT: %instance_data.ref: %NonFunctionMemberProtected.elem = name_ref instance_data, @NonFunctionMemberProtected.%.1 [concrete = @NonFunctionMemberProtected.%.1] +// CHECK:STDOUT: %.loc10_41.1: %NonFunctionMemberProtected = as_compatible %self.ref +// CHECK:STDOUT: %.loc10_41.2: ref %NonFunctionMemberProtected = class_element_access %.loc10_41.1, element0 +// CHECK:STDOUT: %.loc10_41.3: ref %NonFunctionMemberProtected = converted %self.ref, %.loc10_41.2 // CHECK:STDOUT: %.loc10_41.4: ref %i32 = class_element_access %.loc10_41.3, element0 // CHECK:STDOUT: %.loc10_41.5: %i32 = acquire_value %.loc10_41.4 // CHECK:STDOUT: %i32.loc10: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -1788,7 +1787,7 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: %derived_static_data.patt: %pattern_type.6b6 = value_binding_pattern derived_static_data [concrete = constants.%derived_static_data.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %NonFunctionMemberProtected.ref: type = name_ref NonFunctionMemberProtected, imports.%NonFunctionMemberProtected.decl [concrete = constants.%NonFunctionMemberProtected] // CHECK:STDOUT: %static_data.ref.loc13: ref %i32 = name_ref static_data, imports.%static_data.var [concrete = imports.%static_data.var] // CHECK:STDOUT: %.loc13: %i32 = acquire_value %static_data.ref.loc13 // CHECK:STDOUT: %i32.loc13: type = type_literal constants.%i32 [concrete = constants.%i32] @@ -1802,46 +1801,46 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: --- import_function_member_public.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %S: type = class_type @S [concrete] -// CHECK:STDOUT: %ptr.037: type = ptr_type %S [concrete] +// CHECK:STDOUT: %FunctionMemberPublic: type = class_type @FunctionMemberPublic [concrete] +// CHECK:STDOUT: %ptr.9a9: type = ptr_type %FunctionMemberPublic [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %S.instance_fn.cpp_overload_set.type: type = cpp_overload_set_type @S.instance_fn.cpp_overload_set [concrete] -// CHECK:STDOUT: %S.instance_fn.cpp_overload_set.value: %S.instance_fn.cpp_overload_set.type = cpp_overload_set_value @S.instance_fn.cpp_overload_set [concrete] -// CHECK:STDOUT: %S.instance_fn.type: type = fn_type @S.instance_fn [concrete] -// CHECK:STDOUT: %S.instance_fn: %S.instance_fn.type = struct_value () [concrete] -// CHECK:STDOUT: %S.static_fn.cpp_overload_set.type: type = cpp_overload_set_type @S.static_fn.cpp_overload_set [concrete] -// CHECK:STDOUT: %S.static_fn.cpp_overload_set.value: %S.static_fn.cpp_overload_set.type = cpp_overload_set_value @S.static_fn.cpp_overload_set [concrete] -// CHECK:STDOUT: %S.static_fn.type: type = fn_type @S.static_fn [concrete] -// CHECK:STDOUT: %S.static_fn: %S.static_fn.type = struct_value () [concrete] +// CHECK:STDOUT: %FunctionMemberPublic.instance_fn.cpp_overload_set.type: type = cpp_overload_set_type @FunctionMemberPublic.instance_fn.cpp_overload_set [concrete] +// CHECK:STDOUT: %FunctionMemberPublic.instance_fn.cpp_overload_set.value: %FunctionMemberPublic.instance_fn.cpp_overload_set.type = cpp_overload_set_value @FunctionMemberPublic.instance_fn.cpp_overload_set [concrete] +// CHECK:STDOUT: %FunctionMemberPublic.instance_fn.type: type = fn_type @FunctionMemberPublic.instance_fn [concrete] +// CHECK:STDOUT: %FunctionMemberPublic.instance_fn: %FunctionMemberPublic.instance_fn.type = struct_value () [concrete] +// CHECK:STDOUT: %FunctionMemberPublic.static_fn.cpp_overload_set.type: type = cpp_overload_set_type @FunctionMemberPublic.static_fn.cpp_overload_set [concrete] +// CHECK:STDOUT: %FunctionMemberPublic.static_fn.cpp_overload_set.value: %FunctionMemberPublic.static_fn.cpp_overload_set.type = cpp_overload_set_value @FunctionMemberPublic.static_fn.cpp_overload_set [concrete] +// CHECK:STDOUT: %FunctionMemberPublic.static_fn.type: type = fn_type @FunctionMemberPublic.static_fn [concrete] +// CHECK:STDOUT: %FunctionMemberPublic.static_fn: %FunctionMemberPublic.static_fn.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .S = %S.decl +// CHECK:STDOUT: .FunctionMemberPublic = %FunctionMemberPublic.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} -// CHECK:STDOUT: %S.instance_fn.cpp_overload_set.value: %S.instance_fn.cpp_overload_set.type = cpp_overload_set_value @S.instance_fn.cpp_overload_set [concrete = constants.%S.instance_fn.cpp_overload_set.value] -// CHECK:STDOUT: %S.instance_fn.decl: %S.instance_fn.type = fn_decl @S.instance_fn [concrete = constants.%S.instance_fn] { +// CHECK:STDOUT: %FunctionMemberPublic.decl: type = class_decl @FunctionMemberPublic [concrete = constants.%FunctionMemberPublic] {} {} +// CHECK:STDOUT: %FunctionMemberPublic.instance_fn.cpp_overload_set.value: %FunctionMemberPublic.instance_fn.cpp_overload_set.type = cpp_overload_set_value @FunctionMemberPublic.instance_fn.cpp_overload_set [concrete = constants.%FunctionMemberPublic.instance_fn.cpp_overload_set.value] +// CHECK:STDOUT: %FunctionMemberPublic.instance_fn.decl: %FunctionMemberPublic.instance_fn.type = fn_decl @FunctionMemberPublic.instance_fn [concrete = constants.%FunctionMemberPublic.instance_fn] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } -// CHECK:STDOUT: %S.static_fn.cpp_overload_set.value: %S.static_fn.cpp_overload_set.type = cpp_overload_set_value @S.static_fn.cpp_overload_set [concrete = constants.%S.static_fn.cpp_overload_set.value] -// CHECK:STDOUT: %S.static_fn.decl: %S.static_fn.type = fn_decl @S.static_fn [concrete = constants.%S.static_fn] {} {} +// CHECK:STDOUT: %FunctionMemberPublic.static_fn.cpp_overload_set.value: %FunctionMemberPublic.static_fn.cpp_overload_set.type = cpp_overload_set_value @FunctionMemberPublic.static_fn.cpp_overload_set [concrete = constants.%FunctionMemberPublic.static_fn.cpp_overload_set.value] +// CHECK:STDOUT: %FunctionMemberPublic.static_fn.decl: %FunctionMemberPublic.static_fn.type = fn_decl @FunctionMemberPublic.static_fn [concrete = constants.%FunctionMemberPublic.static_fn] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%s.param: %ptr.037) { +// CHECK:STDOUT: fn @F(%s.param: %ptr.9a9) { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %s.ref: %ptr.037 = name_ref s, %s -// CHECK:STDOUT: %.loc8: ref %S = deref %s.ref -// CHECK:STDOUT: %instance_fn.ref: %S.instance_fn.cpp_overload_set.type = name_ref instance_fn, imports.%S.instance_fn.cpp_overload_set.value [concrete = constants.%S.instance_fn.cpp_overload_set.value] +// CHECK:STDOUT: %s.ref: %ptr.9a9 = name_ref s, %s +// CHECK:STDOUT: %.loc8: ref %FunctionMemberPublic = deref %s.ref +// CHECK:STDOUT: %instance_fn.ref: %FunctionMemberPublic.instance_fn.cpp_overload_set.type = name_ref instance_fn, imports.%FunctionMemberPublic.instance_fn.cpp_overload_set.value [concrete = constants.%FunctionMemberPublic.instance_fn.cpp_overload_set.value] // CHECK:STDOUT: %bound_method: = bound_method %.loc8, %instance_fn.ref -// CHECK:STDOUT: %S.instance_fn.call: init %empty_tuple.type = call imports.%S.instance_fn.decl(%.loc8) +// CHECK:STDOUT: %FunctionMemberPublic.instance_fn.call: init %empty_tuple.type = call imports.%FunctionMemberPublic.instance_fn.decl(%.loc8) // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %S.ref.loc9: type = name_ref S, imports.%S.decl [concrete = constants.%S] -// CHECK:STDOUT: %static_fn.ref: %S.static_fn.cpp_overload_set.type = name_ref static_fn, imports.%S.static_fn.cpp_overload_set.value [concrete = constants.%S.static_fn.cpp_overload_set.value] -// CHECK:STDOUT: %S.static_fn.call: init %empty_tuple.type = call imports.%S.static_fn.decl() +// CHECK:STDOUT: %FunctionMemberPublic.ref.loc9: type = name_ref FunctionMemberPublic, imports.%FunctionMemberPublic.decl [concrete = constants.%FunctionMemberPublic] +// CHECK:STDOUT: %static_fn.ref: %FunctionMemberPublic.static_fn.cpp_overload_set.type = name_ref static_fn, imports.%FunctionMemberPublic.static_fn.cpp_overload_set.value [concrete = constants.%FunctionMemberPublic.static_fn.cpp_overload_set.value] +// CHECK:STDOUT: %FunctionMemberPublic.static_fn.call: init %empty_tuple.type = call imports.%FunctionMemberPublic.static_fn.decl() // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1849,12 +1848,12 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] -// CHECK:STDOUT: %C.instance_fn.cpp_overload_set.type: type = cpp_overload_set_type @C.instance_fn.cpp_overload_set [concrete] -// CHECK:STDOUT: %C.instance_fn.cpp_overload_set.value: %C.instance_fn.cpp_overload_set.type = cpp_overload_set_value @C.instance_fn.cpp_overload_set [concrete] +// CHECK:STDOUT: %FunctionMemberProtected.instance_fn.cpp_overload_set.type: type = cpp_overload_set_type @FunctionMemberProtected.instance_fn.cpp_overload_set [concrete] +// CHECK:STDOUT: %FunctionMemberProtected.instance_fn.cpp_overload_set.value: %FunctionMemberProtected.instance_fn.cpp_overload_set.type = cpp_overload_set_value @FunctionMemberProtected.instance_fn.cpp_overload_set [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { -// CHECK:STDOUT: %C.instance_fn.cpp_overload_set.value: %C.instance_fn.cpp_overload_set.type = cpp_overload_set_value @C.instance_fn.cpp_overload_set [concrete = constants.%C.instance_fn.cpp_overload_set.value] +// CHECK:STDOUT: %FunctionMemberProtected.instance_fn.cpp_overload_set.value: %FunctionMemberProtected.instance_fn.cpp_overload_set.type = cpp_overload_set_value @FunctionMemberProtected.instance_fn.cpp_overload_set [concrete = constants.%FunctionMemberProtected.instance_fn.cpp_overload_set.value] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Derived { @@ -1866,13 +1865,13 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: .base = %.loc7 // CHECK:STDOUT: .F = %Derived.F.decl // CHECK:STDOUT: .instance_fn = -// CHECK:STDOUT: extend %C.ref +// CHECK:STDOUT: extend %FunctionMemberProtected.ref // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Derived.F(%self.param: %Derived) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: %Derived = name_ref self, %self -// CHECK:STDOUT: %instance_fn.ref: %C.instance_fn.cpp_overload_set.type = name_ref instance_fn, imports.%C.instance_fn.cpp_overload_set.value [concrete = constants.%C.instance_fn.cpp_overload_set.value] +// CHECK:STDOUT: %instance_fn.ref: %FunctionMemberProtected.instance_fn.cpp_overload_set.type = name_ref instance_fn, imports.%FunctionMemberProtected.instance_fn.cpp_overload_set.value [concrete = constants.%FunctionMemberProtected.instance_fn.cpp_overload_set.value] // CHECK:STDOUT: %bound_method: = bound_method %self.ref, %instance_fn.ref // CHECK:STDOUT: // CHECK:STDOUT: } @@ -1881,22 +1880,22 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] -// CHECK:STDOUT: %C: type = class_type @C [concrete] +// CHECK:STDOUT: %FunctionMemberProtected: type = class_type @FunctionMemberProtected [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C.static_fn.cpp_overload_set.type: type = cpp_overload_set_type @C.static_fn.cpp_overload_set [concrete] -// CHECK:STDOUT: %C.static_fn.cpp_overload_set.value: %C.static_fn.cpp_overload_set.type = cpp_overload_set_value @C.static_fn.cpp_overload_set [concrete] -// CHECK:STDOUT: %C.static_fn.type: type = fn_type @C.static_fn [concrete] -// CHECK:STDOUT: %C.static_fn: %C.static_fn.type = struct_value () [concrete] +// CHECK:STDOUT: %FunctionMemberProtected.static_fn.cpp_overload_set.type: type = cpp_overload_set_type @FunctionMemberProtected.static_fn.cpp_overload_set [concrete] +// CHECK:STDOUT: %FunctionMemberProtected.static_fn.cpp_overload_set.value: %FunctionMemberProtected.static_fn.cpp_overload_set.type = cpp_overload_set_value @FunctionMemberProtected.static_fn.cpp_overload_set [concrete] +// CHECK:STDOUT: %FunctionMemberProtected.static_fn.type: type = fn_type @FunctionMemberProtected.static_fn [concrete] +// CHECK:STDOUT: %FunctionMemberProtected.static_fn: %FunctionMemberProtected.static_fn.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .C = %C.decl +// CHECK:STDOUT: .FunctionMemberProtected = %FunctionMemberProtected.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: %C.static_fn.cpp_overload_set.value: %C.static_fn.cpp_overload_set.type = cpp_overload_set_value @C.static_fn.cpp_overload_set [concrete = constants.%C.static_fn.cpp_overload_set.value] -// CHECK:STDOUT: %C.static_fn.decl: %C.static_fn.type = fn_decl @C.static_fn [concrete = constants.%C.static_fn] {} {} +// CHECK:STDOUT: %FunctionMemberProtected.decl: type = class_decl @FunctionMemberProtected [concrete = constants.%FunctionMemberProtected] {} {} +// CHECK:STDOUT: %FunctionMemberProtected.static_fn.cpp_overload_set.value: %FunctionMemberProtected.static_fn.cpp_overload_set.type = cpp_overload_set_value @FunctionMemberProtected.static_fn.cpp_overload_set [concrete = constants.%FunctionMemberProtected.static_fn.cpp_overload_set.value] +// CHECK:STDOUT: %FunctionMemberProtected.static_fn.decl: %FunctionMemberProtected.static_fn.type = fn_decl @FunctionMemberProtected.static_fn [concrete = constants.%FunctionMemberProtected.static_fn] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Derived { @@ -1909,20 +1908,20 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: .F = %Derived.F.decl // CHECK:STDOUT: .static_fn = // CHECK:STDOUT: .Derived = -// CHECK:STDOUT: extend %C.ref +// CHECK:STDOUT: extend %FunctionMemberProtected.ref // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Derived.F(%self.param: %Derived) { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %static_fn.ref.loc10: %C.static_fn.cpp_overload_set.type = name_ref static_fn, imports.%C.static_fn.cpp_overload_set.value [concrete = constants.%C.static_fn.cpp_overload_set.value] -// CHECK:STDOUT: %C.static_fn.call.loc10: init %empty_tuple.type = call imports.%C.static_fn.decl() +// CHECK:STDOUT: %static_fn.ref.loc10: %FunctionMemberProtected.static_fn.cpp_overload_set.type = name_ref static_fn, imports.%FunctionMemberProtected.static_fn.cpp_overload_set.value [concrete = constants.%FunctionMemberProtected.static_fn.cpp_overload_set.value] +// CHECK:STDOUT: %FunctionMemberProtected.static_fn.call.loc10: init %empty_tuple.type = call imports.%FunctionMemberProtected.static_fn.decl() // CHECK:STDOUT: %Derived.ref: type = name_ref Derived, file.%Derived.decl [concrete = constants.%Derived] -// CHECK:STDOUT: %static_fn.ref.loc11: %C.static_fn.cpp_overload_set.type = name_ref static_fn, imports.%C.static_fn.cpp_overload_set.value [concrete = constants.%C.static_fn.cpp_overload_set.value] -// CHECK:STDOUT: %C.static_fn.call.loc11: init %empty_tuple.type = call imports.%C.static_fn.decl() +// CHECK:STDOUT: %static_fn.ref.loc11: %FunctionMemberProtected.static_fn.cpp_overload_set.type = name_ref static_fn, imports.%FunctionMemberProtected.static_fn.cpp_overload_set.value [concrete = constants.%FunctionMemberProtected.static_fn.cpp_overload_set.value] +// CHECK:STDOUT: %FunctionMemberProtected.static_fn.call.loc11: init %empty_tuple.type = call imports.%FunctionMemberProtected.static_fn.decl() // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref: type = name_ref C, imports.%C.decl [concrete = constants.%C] -// CHECK:STDOUT: %static_fn.ref.loc12: %C.static_fn.cpp_overload_set.type = name_ref static_fn, imports.%C.static_fn.cpp_overload_set.value [concrete = constants.%C.static_fn.cpp_overload_set.value] -// CHECK:STDOUT: %C.static_fn.call.loc12: init %empty_tuple.type = call imports.%C.static_fn.decl() +// CHECK:STDOUT: %FunctionMemberProtected.ref: type = name_ref FunctionMemberProtected, imports.%FunctionMemberProtected.decl [concrete = constants.%FunctionMemberProtected] +// CHECK:STDOUT: %static_fn.ref.loc12: %FunctionMemberProtected.static_fn.cpp_overload_set.type = name_ref static_fn, imports.%FunctionMemberProtected.static_fn.cpp_overload_set.value [concrete = constants.%FunctionMemberProtected.static_fn.cpp_overload_set.value] +// CHECK:STDOUT: %FunctionMemberProtected.static_fn.call.loc12: init %empty_tuple.type = call imports.%FunctionMemberProtected.static_fn.decl() // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1930,36 +1929,36 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] -// CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] +// CHECK:STDOUT: %OverloadSet: type = class_type @OverloadSet [concrete] +// CHECK:STDOUT: %OverloadSet.OverloadSet.cpp_overload_set.type: type = cpp_overload_set_type @OverloadSet.OverloadSet.cpp_overload_set [concrete] +// CHECK:STDOUT: %OverloadSet.OverloadSet.cpp_overload_set.value: %OverloadSet.OverloadSet.cpp_overload_set.type = cpp_overload_set_value @OverloadSet.OverloadSet.cpp_overload_set [concrete] // CHECK:STDOUT: %PublicCall: type = class_type @PublicCall [concrete] // CHECK:STDOUT: %PublicCall.PublicCall.cpp_overload_set.type: type = cpp_overload_set_type @PublicCall.PublicCall.cpp_overload_set [concrete] // CHECK:STDOUT: %PublicCall.PublicCall.cpp_overload_set.value: %PublicCall.PublicCall.cpp_overload_set.type = cpp_overload_set_value @PublicCall.PublicCall.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr.d0a: type = ptr_type %PublicCall [concrete] // CHECK:STDOUT: %PublicCall__carbon_thunk.type: type = fn_type @PublicCall__carbon_thunk [concrete] // CHECK:STDOUT: %PublicCall__carbon_thunk: %PublicCall__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] -// CHECK:STDOUT: %C__carbon_thunk.type: type = fn_type @C__carbon_thunk [concrete] -// CHECK:STDOUT: %C__carbon_thunk: %C__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] -// CHECK:STDOUT: %C.cpp_destructor: %C.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %ptr.4a0: type = ptr_type %OverloadSet [concrete] +// CHECK:STDOUT: %OverloadSet__carbon_thunk.type: type = fn_type @OverloadSet__carbon_thunk [concrete] +// CHECK:STDOUT: %OverloadSet__carbon_thunk: %OverloadSet__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %OverloadSet.cpp_destructor.type: type = fn_type @OverloadSet.cpp_destructor [concrete] +// CHECK:STDOUT: %OverloadSet.cpp_destructor: %OverloadSet.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: %PublicCall.cpp_destructor.type: type = fn_type @PublicCall.cpp_destructor [concrete] // CHECK:STDOUT: %PublicCall.cpp_destructor: %PublicCall.cpp_destructor.type = struct_value () [concrete] -// CHECK:STDOUT: %C.Overload.cpp_overload_set.type: type = cpp_overload_set_type @C.Overload.cpp_overload_set [concrete] -// CHECK:STDOUT: %C.Overload.cpp_overload_set.value: %C.Overload.cpp_overload_set.type = cpp_overload_set_value @C.Overload.cpp_overload_set [concrete] +// CHECK:STDOUT: %OverloadSet.Overload.cpp_overload_set.type: type = cpp_overload_set_type @OverloadSet.Overload.cpp_overload_set [concrete] +// CHECK:STDOUT: %OverloadSet.Overload.cpp_overload_set.value: %OverloadSet.Overload.cpp_overload_set.type = cpp_overload_set_value @OverloadSet.Overload.cpp_overload_set [concrete] // CHECK:STDOUT: %Overload__carbon_thunk.type: type = fn_type @Overload__carbon_thunk [concrete] // CHECK:STDOUT: %Overload__carbon_thunk: %Overload__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .C = %C.decl +// CHECK:STDOUT: .OverloadSet = %OverloadSet.decl // CHECK:STDOUT: .PublicCall = %PublicCall.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete = constants.%C.C.cpp_overload_set.value] +// CHECK:STDOUT: %OverloadSet.decl: type = class_decl @OverloadSet [concrete = constants.%OverloadSet] {} {} +// CHECK:STDOUT: %OverloadSet.OverloadSet.cpp_overload_set.value: %OverloadSet.OverloadSet.cpp_overload_set.type = cpp_overload_set_value @OverloadSet.OverloadSet.cpp_overload_set [concrete = constants.%OverloadSet.OverloadSet.cpp_overload_set.value] // CHECK:STDOUT: %PublicCall.decl: type = class_decl @PublicCall [concrete = constants.%PublicCall] {} {} // CHECK:STDOUT: %PublicCall.PublicCall.cpp_overload_set.value: %PublicCall.PublicCall.cpp_overload_set.type = cpp_overload_set_value @PublicCall.PublicCall.cpp_overload_set [concrete = constants.%PublicCall.PublicCall.cpp_overload_set.value] // CHECK:STDOUT: %PublicCall__carbon_thunk.decl: %PublicCall__carbon_thunk.type = fn_decl @PublicCall__carbon_thunk [concrete = constants.%PublicCall__carbon_thunk] { @@ -1967,12 +1966,12 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } -// CHECK:STDOUT: %C__carbon_thunk.decl: %C__carbon_thunk.type = fn_decl @C__carbon_thunk [concrete = constants.%C__carbon_thunk] { +// CHECK:STDOUT: %OverloadSet__carbon_thunk.decl: %OverloadSet__carbon_thunk.type = fn_decl @OverloadSet__carbon_thunk [concrete = constants.%OverloadSet__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } -// CHECK:STDOUT: %C.Overload.cpp_overload_set.value: %C.Overload.cpp_overload_set.type = cpp_overload_set_value @C.Overload.cpp_overload_set [concrete = constants.%C.Overload.cpp_overload_set.value] +// CHECK:STDOUT: %OverloadSet.Overload.cpp_overload_set.value: %OverloadSet.Overload.cpp_overload_set.type = cpp_overload_set_value @OverloadSet.Overload.cpp_overload_set [concrete = constants.%OverloadSet.Overload.cpp_overload_set.value] // CHECK:STDOUT: %Overload__carbon_thunk.decl: %Overload__carbon_thunk.type = fn_decl @Overload__carbon_thunk [concrete = constants.%Overload__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { @@ -1983,45 +1982,45 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8_3: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc8_6: type = name_ref C, imports.%C.decl [concrete = constants.%C] -// CHECK:STDOUT: %C.ref.loc8_8: %C.C.cpp_overload_set.type = name_ref C, imports.%C.C.cpp_overload_set.value [concrete = constants.%C.C.cpp_overload_set.value] -// CHECK:STDOUT: %Cpp.ref.loc8_11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %PublicCall.ref.loc8_14: type = name_ref PublicCall, imports.%PublicCall.decl [concrete = constants.%PublicCall] -// CHECK:STDOUT: %PublicCall.ref.loc8_25: %PublicCall.PublicCall.cpp_overload_set.type = name_ref PublicCall, imports.%PublicCall.PublicCall.cpp_overload_set.value [concrete = constants.%PublicCall.PublicCall.cpp_overload_set.value] -// CHECK:STDOUT: %.loc8_37.1: ref %PublicCall = temporary_storage -// CHECK:STDOUT: %addr.loc8_37: %ptr.d0a = addr_of %.loc8_37.1 -// CHECK:STDOUT: %PublicCall__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%PublicCall__carbon_thunk.decl(%addr.loc8_37) -// CHECK:STDOUT: %.loc8_37.2: init %PublicCall to %.loc8_37.1 = mark_in_place_init %PublicCall__carbon_thunk.call.loc8 -// CHECK:STDOUT: %.loc8_38.1: ref %C = temporary_storage -// CHECK:STDOUT: %.loc8_37.3: ref %PublicCall = temporary %.loc8_37.1, %.loc8_37.2 -// CHECK:STDOUT: %.loc8_37.4: %PublicCall = acquire_value %.loc8_37.3 -// CHECK:STDOUT: %.loc8_37.5: ref %PublicCall = value_as_ref %.loc8_37.4 -// CHECK:STDOUT: %addr.loc8_38.1: %ptr.d0a = addr_of %.loc8_37.5 -// CHECK:STDOUT: %addr.loc8_38.2: %ptr.0a2 = addr_of %.loc8_38.1 -// CHECK:STDOUT: %C__carbon_thunk.call: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%addr.loc8_38.1, %addr.loc8_38.2) -// CHECK:STDOUT: %.loc8_38.2: init %C to %.loc8_38.1 = mark_in_place_init %C__carbon_thunk.call -// CHECK:STDOUT: %.loc8_38.3: ref %C = temporary %.loc8_38.1, %.loc8_38.2 -// CHECK:STDOUT: %C.cpp_destructor.bound: = bound_method %.loc8_38.3, constants.%C.cpp_destructor -// CHECK:STDOUT: %C.cpp_destructor.call: init %empty_tuple.type = call %C.cpp_destructor.bound(%.loc8_38.3) -// CHECK:STDOUT: %PublicCall.cpp_destructor.bound.loc8: = bound_method %.loc8_37.3, constants.%PublicCall.cpp_destructor -// CHECK:STDOUT: %PublicCall.cpp_destructor.call.loc8: init %empty_tuple.type = call %PublicCall.cpp_destructor.bound.loc8(%.loc8_37.3) +// CHECK:STDOUT: %OverloadSet.ref.loc8_6: type = name_ref OverloadSet, imports.%OverloadSet.decl [concrete = constants.%OverloadSet] +// CHECK:STDOUT: %OverloadSet.ref.loc8_18: %OverloadSet.OverloadSet.cpp_overload_set.type = name_ref OverloadSet, imports.%OverloadSet.OverloadSet.cpp_overload_set.value [concrete = constants.%OverloadSet.OverloadSet.cpp_overload_set.value] +// CHECK:STDOUT: %Cpp.ref.loc8_31: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %PublicCall.ref.loc8_34: type = name_ref PublicCall, imports.%PublicCall.decl [concrete = constants.%PublicCall] +// CHECK:STDOUT: %PublicCall.ref.loc8_45: %PublicCall.PublicCall.cpp_overload_set.type = name_ref PublicCall, imports.%PublicCall.PublicCall.cpp_overload_set.value [concrete = constants.%PublicCall.PublicCall.cpp_overload_set.value] +// CHECK:STDOUT: %.loc8_57.1: ref %PublicCall = temporary_storage +// CHECK:STDOUT: %addr.loc8_57: %ptr.d0a = addr_of %.loc8_57.1 +// CHECK:STDOUT: %PublicCall__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%PublicCall__carbon_thunk.decl(%addr.loc8_57) +// CHECK:STDOUT: %.loc8_57.2: init %PublicCall to %.loc8_57.1 = mark_in_place_init %PublicCall__carbon_thunk.call.loc8 +// CHECK:STDOUT: %.loc8_58.1: ref %OverloadSet = temporary_storage +// CHECK:STDOUT: %.loc8_57.3: ref %PublicCall = temporary %.loc8_57.1, %.loc8_57.2 +// CHECK:STDOUT: %.loc8_57.4: %PublicCall = acquire_value %.loc8_57.3 +// CHECK:STDOUT: %.loc8_57.5: ref %PublicCall = value_as_ref %.loc8_57.4 +// CHECK:STDOUT: %addr.loc8_58.1: %ptr.d0a = addr_of %.loc8_57.5 +// CHECK:STDOUT: %addr.loc8_58.2: %ptr.4a0 = addr_of %.loc8_58.1 +// CHECK:STDOUT: %OverloadSet__carbon_thunk.call: init %empty_tuple.type = call imports.%OverloadSet__carbon_thunk.decl(%addr.loc8_58.1, %addr.loc8_58.2) +// CHECK:STDOUT: %.loc8_58.2: init %OverloadSet to %.loc8_58.1 = mark_in_place_init %OverloadSet__carbon_thunk.call +// CHECK:STDOUT: %.loc8_58.3: ref %OverloadSet = temporary %.loc8_58.1, %.loc8_58.2 +// CHECK:STDOUT: %OverloadSet.cpp_destructor.bound: = bound_method %.loc8_58.3, constants.%OverloadSet.cpp_destructor +// CHECK:STDOUT: %OverloadSet.cpp_destructor.call: init %empty_tuple.type = call %OverloadSet.cpp_destructor.bound(%.loc8_58.3) +// CHECK:STDOUT: %PublicCall.cpp_destructor.bound.loc8: = bound_method %.loc8_57.3, constants.%PublicCall.cpp_destructor +// CHECK:STDOUT: %PublicCall.cpp_destructor.call.loc8: init %empty_tuple.type = call %PublicCall.cpp_destructor.bound.loc8(%.loc8_57.3) // CHECK:STDOUT: %Cpp.ref.loc9_3: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc9: type = name_ref C, imports.%C.decl [concrete = constants.%C] -// CHECK:STDOUT: %Overload.ref: %C.Overload.cpp_overload_set.type = name_ref Overload, imports.%C.Overload.cpp_overload_set.value [concrete = constants.%C.Overload.cpp_overload_set.value] -// CHECK:STDOUT: %Cpp.ref.loc9_18: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %PublicCall.ref.loc9_21: type = name_ref PublicCall, imports.%PublicCall.decl [concrete = constants.%PublicCall] -// CHECK:STDOUT: %PublicCall.ref.loc9_32: %PublicCall.PublicCall.cpp_overload_set.type = name_ref PublicCall, imports.%PublicCall.PublicCall.cpp_overload_set.value [concrete = constants.%PublicCall.PublicCall.cpp_overload_set.value] -// CHECK:STDOUT: %.loc9_44.1: ref %PublicCall = temporary_storage -// CHECK:STDOUT: %addr.loc9_44: %ptr.d0a = addr_of %.loc9_44.1 -// CHECK:STDOUT: %PublicCall__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%PublicCall__carbon_thunk.decl(%addr.loc9_44) -// CHECK:STDOUT: %.loc9_44.2: init %PublicCall to %.loc9_44.1 = mark_in_place_init %PublicCall__carbon_thunk.call.loc9 -// CHECK:STDOUT: %.loc9_44.3: ref %PublicCall = temporary %.loc9_44.1, %.loc9_44.2 -// CHECK:STDOUT: %.loc9_44.4: %PublicCall = acquire_value %.loc9_44.3 -// CHECK:STDOUT: %.loc9_44.5: ref %PublicCall = value_as_ref %.loc9_44.4 -// CHECK:STDOUT: %addr.loc9_45: %ptr.d0a = addr_of %.loc9_44.5 -// CHECK:STDOUT: %Overload__carbon_thunk.call: init %empty_tuple.type = call imports.%Overload__carbon_thunk.decl(%addr.loc9_45) -// CHECK:STDOUT: %PublicCall.cpp_destructor.bound.loc9: = bound_method %.loc9_44.3, constants.%PublicCall.cpp_destructor -// CHECK:STDOUT: %PublicCall.cpp_destructor.call.loc9: init %empty_tuple.type = call %PublicCall.cpp_destructor.bound.loc9(%.loc9_44.3) +// CHECK:STDOUT: %OverloadSet.ref.loc9: type = name_ref OverloadSet, imports.%OverloadSet.decl [concrete = constants.%OverloadSet] +// CHECK:STDOUT: %Overload.ref: %OverloadSet.Overload.cpp_overload_set.type = name_ref Overload, imports.%OverloadSet.Overload.cpp_overload_set.value [concrete = constants.%OverloadSet.Overload.cpp_overload_set.value] +// CHECK:STDOUT: %Cpp.ref.loc9_28: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %PublicCall.ref.loc9_31: type = name_ref PublicCall, imports.%PublicCall.decl [concrete = constants.%PublicCall] +// CHECK:STDOUT: %PublicCall.ref.loc9_42: %PublicCall.PublicCall.cpp_overload_set.type = name_ref PublicCall, imports.%PublicCall.PublicCall.cpp_overload_set.value [concrete = constants.%PublicCall.PublicCall.cpp_overload_set.value] +// CHECK:STDOUT: %.loc9_54.1: ref %PublicCall = temporary_storage +// CHECK:STDOUT: %addr.loc9_54: %ptr.d0a = addr_of %.loc9_54.1 +// CHECK:STDOUT: %PublicCall__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%PublicCall__carbon_thunk.decl(%addr.loc9_54) +// CHECK:STDOUT: %.loc9_54.2: init %PublicCall to %.loc9_54.1 = mark_in_place_init %PublicCall__carbon_thunk.call.loc9 +// CHECK:STDOUT: %.loc9_54.3: ref %PublicCall = temporary %.loc9_54.1, %.loc9_54.2 +// CHECK:STDOUT: %.loc9_54.4: %PublicCall = acquire_value %.loc9_54.3 +// CHECK:STDOUT: %.loc9_54.5: ref %PublicCall = value_as_ref %.loc9_54.4 +// CHECK:STDOUT: %addr.loc9_55: %ptr.d0a = addr_of %.loc9_54.5 +// CHECK:STDOUT: %Overload__carbon_thunk.call: init %empty_tuple.type = call imports.%Overload__carbon_thunk.decl(%addr.loc9_55) +// CHECK:STDOUT: %PublicCall.cpp_destructor.bound.loc9: = bound_method %.loc9_54.3, constants.%PublicCall.cpp_destructor +// CHECK:STDOUT: %PublicCall.cpp_destructor.call.loc9: init %empty_tuple.type = call %PublicCall.cpp_destructor.bound.loc9(%.loc9_54.3) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -2029,21 +2028,21 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %D: type = class_type @D [concrete] -// CHECK:STDOUT: %C: type = class_type @C [concrete] +// CHECK:STDOUT: %OverloadSet: type = class_type @OverloadSet [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %struct_type.base.8d9: type = struct_type {.base: %C} [concrete] -// CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] -// CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] +// CHECK:STDOUT: %struct_type.base.d55: type = struct_type {.base: %OverloadSet} [concrete] +// CHECK:STDOUT: %OverloadSet.OverloadSet.cpp_overload_set.type: type = cpp_overload_set_type @OverloadSet.OverloadSet.cpp_overload_set [concrete] +// CHECK:STDOUT: %OverloadSet.OverloadSet.cpp_overload_set.value: %OverloadSet.OverloadSet.cpp_overload_set.type = cpp_overload_set_value @OverloadSet.OverloadSet.cpp_overload_set [concrete] // CHECK:STDOUT: %PublicCall: type = class_type @PublicCall [concrete] // CHECK:STDOUT: %PublicCall.PublicCall.cpp_overload_set.type: type = cpp_overload_set_type @PublicCall.PublicCall.cpp_overload_set [concrete] // CHECK:STDOUT: %PublicCall.PublicCall.cpp_overload_set.value: %PublicCall.PublicCall.cpp_overload_set.type = cpp_overload_set_value @PublicCall.PublicCall.cpp_overload_set [concrete] // CHECK:STDOUT: %ptr.d0a: type = ptr_type %PublicCall [concrete] // CHECK:STDOUT: %PublicCall__carbon_thunk.type: type = fn_type @PublicCall__carbon_thunk [concrete] // CHECK:STDOUT: %PublicCall__carbon_thunk: %PublicCall__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] -// CHECK:STDOUT: %C__carbon_thunk.type.e78457.1: type = fn_type @C__carbon_thunk.1 [concrete] -// CHECK:STDOUT: %C__carbon_thunk.ca303d.1: %C__carbon_thunk.type.e78457.1 = struct_value () [concrete] -// CHECK:STDOUT: %.292: type = partial_type %C [concrete] +// CHECK:STDOUT: %ptr.4a0: type = ptr_type %OverloadSet [concrete] +// CHECK:STDOUT: %OverloadSet__carbon_thunk.type.c7f6eb.1: type = fn_type @OverloadSet__carbon_thunk.1 [concrete] +// CHECK:STDOUT: %OverloadSet__carbon_thunk.e50482.1: %OverloadSet__carbon_thunk.type.c7f6eb.1 = struct_value () [concrete] +// CHECK:STDOUT: %.244: type = partial_type %OverloadSet [concrete] // CHECK:STDOUT: %PublicCall.cpp_destructor.type: type = fn_type @PublicCall.cpp_destructor [concrete] // CHECK:STDOUT: %PublicCall.cpp_destructor: %PublicCall.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: %ProtectedCall: type = class_type @ProtectedCall [concrete] @@ -2052,12 +2051,12 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: %ptr.bc1: type = ptr_type %ProtectedCall [concrete] // CHECK:STDOUT: %ProtectedCall__carbon_thunk.type: type = fn_type @ProtectedCall__carbon_thunk [concrete] // CHECK:STDOUT: %ProtectedCall__carbon_thunk: %ProtectedCall__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %C__carbon_thunk.type.e78457.2: type = fn_type @C__carbon_thunk.2 [concrete] -// CHECK:STDOUT: %C__carbon_thunk.ca303d.2: %C__carbon_thunk.type.e78457.2 = struct_value () [concrete] +// CHECK:STDOUT: %OverloadSet__carbon_thunk.type.c7f6eb.2: type = fn_type @OverloadSet__carbon_thunk.2 [concrete] +// CHECK:STDOUT: %OverloadSet__carbon_thunk.e50482.2: %OverloadSet__carbon_thunk.type.c7f6eb.2 = struct_value () [concrete] // CHECK:STDOUT: %ProtectedCall.cpp_destructor.type: type = fn_type @ProtectedCall.cpp_destructor [concrete] // CHECK:STDOUT: %ProtectedCall.cpp_destructor: %ProtectedCall.cpp_destructor.type = struct_value () [concrete] -// CHECK:STDOUT: %C.Overload.cpp_overload_set.type: type = cpp_overload_set_type @C.Overload.cpp_overload_set [concrete] -// CHECK:STDOUT: %C.Overload.cpp_overload_set.value: %C.Overload.cpp_overload_set.type = cpp_overload_set_value @C.Overload.cpp_overload_set [concrete] +// CHECK:STDOUT: %OverloadSet.Overload.cpp_overload_set.type: type = cpp_overload_set_type @OverloadSet.Overload.cpp_overload_set [concrete] +// CHECK:STDOUT: %OverloadSet.Overload.cpp_overload_set.value: %OverloadSet.Overload.cpp_overload_set.type = cpp_overload_set_value @OverloadSet.Overload.cpp_overload_set [concrete] // CHECK:STDOUT: %Overload__carbon_thunk.type.3dd392.1: type = fn_type @Overload__carbon_thunk.1 [concrete] // CHECK:STDOUT: %Overload__carbon_thunk.1c804c.1: %Overload__carbon_thunk.type.3dd392.1 = struct_value () [concrete] // CHECK:STDOUT: %Overload__carbon_thunk.type.3dd392.2: type = fn_type @Overload__carbon_thunk.2 [concrete] @@ -2066,13 +2065,13 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .C = %C.decl +// CHECK:STDOUT: .OverloadSet = %OverloadSet.decl // CHECK:STDOUT: .PublicCall = %PublicCall.decl // CHECK:STDOUT: .ProtectedCall = %ProtectedCall.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete = constants.%C.C.cpp_overload_set.value] +// CHECK:STDOUT: %OverloadSet.decl: type = class_decl @OverloadSet [concrete = constants.%OverloadSet] {} {} +// CHECK:STDOUT: %OverloadSet.OverloadSet.cpp_overload_set.value: %OverloadSet.OverloadSet.cpp_overload_set.type = cpp_overload_set_value @OverloadSet.OverloadSet.cpp_overload_set [concrete = constants.%OverloadSet.OverloadSet.cpp_overload_set.value] // CHECK:STDOUT: %PublicCall.decl: type = class_decl @PublicCall [concrete = constants.%PublicCall] {} {} // CHECK:STDOUT: %PublicCall.PublicCall.cpp_overload_set.value: %PublicCall.PublicCall.cpp_overload_set.type = cpp_overload_set_value @PublicCall.PublicCall.cpp_overload_set [concrete = constants.%PublicCall.PublicCall.cpp_overload_set.value] // CHECK:STDOUT: %PublicCall__carbon_thunk.decl: %PublicCall__carbon_thunk.type = fn_decl @PublicCall__carbon_thunk [concrete = constants.%PublicCall__carbon_thunk] { @@ -2080,7 +2079,7 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } -// CHECK:STDOUT: %C__carbon_thunk.decl.abd9a2.1: %C__carbon_thunk.type.e78457.1 = fn_decl @C__carbon_thunk.1 [concrete = constants.%C__carbon_thunk.ca303d.1] { +// CHECK:STDOUT: %OverloadSet__carbon_thunk.decl.b67c1b.1: %OverloadSet__carbon_thunk.type.c7f6eb.1 = fn_decl @OverloadSet__carbon_thunk.1 [concrete = constants.%OverloadSet__carbon_thunk.e50482.1] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -2092,12 +2091,12 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } -// CHECK:STDOUT: %C__carbon_thunk.decl.abd9a2.2: %C__carbon_thunk.type.e78457.2 = fn_decl @C__carbon_thunk.2 [concrete = constants.%C__carbon_thunk.ca303d.2] { +// CHECK:STDOUT: %OverloadSet__carbon_thunk.decl.b67c1b.2: %OverloadSet__carbon_thunk.type.c7f6eb.2 = fn_decl @OverloadSet__carbon_thunk.2 [concrete = constants.%OverloadSet__carbon_thunk.e50482.2] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } -// CHECK:STDOUT: %C.Overload.cpp_overload_set.value: %C.Overload.cpp_overload_set.type = cpp_overload_set_value @C.Overload.cpp_overload_set [concrete = constants.%C.Overload.cpp_overload_set.value] +// CHECK:STDOUT: %OverloadSet.Overload.cpp_overload_set.value: %OverloadSet.Overload.cpp_overload_set.type = cpp_overload_set_value @OverloadSet.Overload.cpp_overload_set [concrete = constants.%OverloadSet.Overload.cpp_overload_set.value] // CHECK:STDOUT: %Overload__carbon_thunk.decl.c2f84f.1: %Overload__carbon_thunk.type.3dd392.1 = fn_decl @Overload__carbon_thunk.1 [concrete = constants.%Overload__carbon_thunk.1c804c.1] { // CHECK:STDOUT: // CHECK:STDOUT: } { @@ -2122,72 +2121,72 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: .MakeProtected = %D.MakeProtected.decl // CHECK:STDOUT: .CallPublic = %D.CallPublic.decl // CHECK:STDOUT: .CallProtected = %D.CallProtected.decl -// CHECK:STDOUT: .C = +// CHECK:STDOUT: .OverloadSet = // CHECK:STDOUT: .Overload = -// CHECK:STDOUT: extend %C.ref +// CHECK:STDOUT: extend %OverloadSet.ref // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @D.MakePublic() -> out %return.param: %D { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %C.ref: %C.C.cpp_overload_set.type = name_ref C, imports.%C.C.cpp_overload_set.value [concrete = constants.%C.C.cpp_overload_set.value] +// CHECK:STDOUT: %OverloadSet.ref: %OverloadSet.OverloadSet.cpp_overload_set.type = name_ref OverloadSet, imports.%OverloadSet.OverloadSet.cpp_overload_set.value [concrete = constants.%OverloadSet.OverloadSet.cpp_overload_set.value] // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %PublicCall.ref.loc11_26: type = name_ref PublicCall, imports.%PublicCall.decl [concrete = constants.%PublicCall] -// CHECK:STDOUT: %PublicCall.ref.loc11_37: %PublicCall.PublicCall.cpp_overload_set.type = name_ref PublicCall, imports.%PublicCall.PublicCall.cpp_overload_set.value [concrete = constants.%PublicCall.PublicCall.cpp_overload_set.value] -// CHECK:STDOUT: %.loc11_49.1: ref %PublicCall = temporary_storage -// CHECK:STDOUT: %addr.loc11_49: %ptr.d0a = addr_of %.loc11_49.1 -// CHECK:STDOUT: %PublicCall__carbon_thunk.call: init %empty_tuple.type = call imports.%PublicCall__carbon_thunk.decl(%addr.loc11_49) -// CHECK:STDOUT: %.loc11_49.2: init %PublicCall to %.loc11_49.1 = mark_in_place_init %PublicCall__carbon_thunk.call -// CHECK:STDOUT: %.loc11_51.1: ref %.292 = class_element_access %return.param, element0 -// CHECK:STDOUT: %.loc11_49.3: ref %PublicCall = temporary %.loc11_49.1, %.loc11_49.2 -// CHECK:STDOUT: %.loc11_49.4: %PublicCall = acquire_value %.loc11_49.3 -// CHECK:STDOUT: %.loc11_49.5: ref %PublicCall = value_as_ref %.loc11_49.4 -// CHECK:STDOUT: %addr.loc11_50.1: %ptr.d0a = addr_of %.loc11_49.5 -// CHECK:STDOUT: %addr.loc11_50.2: %ptr.0a2 = addr_of %.loc11_51.1 -// CHECK:STDOUT: %C__carbon_thunk.call: init %empty_tuple.type = call imports.%C__carbon_thunk.decl.abd9a2.1(%addr.loc11_50.1, %addr.loc11_50.2) -// CHECK:STDOUT: %.loc11_50: init %C to %.loc11_51.1 = mark_in_place_init %C__carbon_thunk.call -// CHECK:STDOUT: %.loc11_51.2: %struct_type.base.8d9 = struct_literal (%.loc11_50) -// CHECK:STDOUT: %.loc11_51.3: init %.292 = as_compatible %.loc11_50 -// CHECK:STDOUT: %.loc11_51.4: init %.292 = converted %.loc11_50, %.loc11_51.3 -// CHECK:STDOUT: %.loc11_51.5: init %C = as_compatible %.loc11_51.4 -// CHECK:STDOUT: %.loc11_51.6: init %D to %return.param = class_init (%.loc11_51.5) -// CHECK:STDOUT: %.loc11_52: init %D = converted %.loc11_51.2, %.loc11_51.6 -// CHECK:STDOUT: %PublicCall.cpp_destructor.bound: = bound_method %.loc11_49.3, constants.%PublicCall.cpp_destructor -// CHECK:STDOUT: %PublicCall.cpp_destructor.call: init %empty_tuple.type = call %PublicCall.cpp_destructor.bound(%.loc11_49.3) -// CHECK:STDOUT: return %.loc11_52 to %return.param +// CHECK:STDOUT: %PublicCall.ref.loc11_36: type = name_ref PublicCall, imports.%PublicCall.decl [concrete = constants.%PublicCall] +// CHECK:STDOUT: %PublicCall.ref.loc11_47: %PublicCall.PublicCall.cpp_overload_set.type = name_ref PublicCall, imports.%PublicCall.PublicCall.cpp_overload_set.value [concrete = constants.%PublicCall.PublicCall.cpp_overload_set.value] +// CHECK:STDOUT: %.loc11_59.1: ref %PublicCall = temporary_storage +// CHECK:STDOUT: %addr.loc11_59: %ptr.d0a = addr_of %.loc11_59.1 +// CHECK:STDOUT: %PublicCall__carbon_thunk.call: init %empty_tuple.type = call imports.%PublicCall__carbon_thunk.decl(%addr.loc11_59) +// CHECK:STDOUT: %.loc11_59.2: init %PublicCall to %.loc11_59.1 = mark_in_place_init %PublicCall__carbon_thunk.call +// CHECK:STDOUT: %.loc11_61.1: ref %.244 = class_element_access %return.param, element0 +// CHECK:STDOUT: %.loc11_59.3: ref %PublicCall = temporary %.loc11_59.1, %.loc11_59.2 +// CHECK:STDOUT: %.loc11_59.4: %PublicCall = acquire_value %.loc11_59.3 +// CHECK:STDOUT: %.loc11_59.5: ref %PublicCall = value_as_ref %.loc11_59.4 +// CHECK:STDOUT: %addr.loc11_60.1: %ptr.d0a = addr_of %.loc11_59.5 +// CHECK:STDOUT: %addr.loc11_60.2: %ptr.4a0 = addr_of %.loc11_61.1 +// CHECK:STDOUT: %OverloadSet__carbon_thunk.call: init %empty_tuple.type = call imports.%OverloadSet__carbon_thunk.decl.b67c1b.1(%addr.loc11_60.1, %addr.loc11_60.2) +// CHECK:STDOUT: %.loc11_60: init %OverloadSet to %.loc11_61.1 = mark_in_place_init %OverloadSet__carbon_thunk.call +// CHECK:STDOUT: %.loc11_61.2: %struct_type.base.d55 = struct_literal (%.loc11_60) +// CHECK:STDOUT: %.loc11_61.3: init %.244 = as_compatible %.loc11_60 +// CHECK:STDOUT: %.loc11_61.4: init %.244 = converted %.loc11_60, %.loc11_61.3 +// CHECK:STDOUT: %.loc11_61.5: init %OverloadSet = as_compatible %.loc11_61.4 +// CHECK:STDOUT: %.loc11_61.6: init %D to %return.param = class_init (%.loc11_61.5) +// CHECK:STDOUT: %.loc11_62: init %D = converted %.loc11_61.2, %.loc11_61.6 +// CHECK:STDOUT: %PublicCall.cpp_destructor.bound: = bound_method %.loc11_59.3, constants.%PublicCall.cpp_destructor +// CHECK:STDOUT: %PublicCall.cpp_destructor.call: init %empty_tuple.type = call %PublicCall.cpp_destructor.bound(%.loc11_59.3) +// CHECK:STDOUT: return %.loc11_62 to %return.param // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @D.MakeProtected() -> out %return.param: %D { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %C.ref: %C.C.cpp_overload_set.type = name_ref C, imports.%C.C.cpp_overload_set.value [concrete = constants.%C.C.cpp_overload_set.value] +// CHECK:STDOUT: %OverloadSet.ref: %OverloadSet.OverloadSet.cpp_overload_set.type = name_ref OverloadSet, imports.%OverloadSet.OverloadSet.cpp_overload_set.value [concrete = constants.%OverloadSet.OverloadSet.cpp_overload_set.value] // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %ProtectedCall.ref.loc17_26: type = name_ref ProtectedCall, imports.%ProtectedCall.decl [concrete = constants.%ProtectedCall] -// CHECK:STDOUT: %ProtectedCall.ref.loc17_40: %ProtectedCall.ProtectedCall.cpp_overload_set.type = name_ref ProtectedCall, imports.%ProtectedCall.ProtectedCall.cpp_overload_set.value [concrete = constants.%ProtectedCall.ProtectedCall.cpp_overload_set.value] -// CHECK:STDOUT: %.loc17_55.1: ref %ProtectedCall = temporary_storage -// CHECK:STDOUT: %addr.loc17_55: %ptr.bc1 = addr_of %.loc17_55.1 -// CHECK:STDOUT: %ProtectedCall__carbon_thunk.call: init %empty_tuple.type = call imports.%ProtectedCall__carbon_thunk.decl(%addr.loc17_55) -// CHECK:STDOUT: %.loc17_55.2: init %ProtectedCall to %.loc17_55.1 = mark_in_place_init %ProtectedCall__carbon_thunk.call -// CHECK:STDOUT: %.loc17_57.1: ref %.292 = class_element_access %return.param, element0 -// CHECK:STDOUT: %.loc17_55.3: ref %ProtectedCall = temporary %.loc17_55.1, %.loc17_55.2 -// CHECK:STDOUT: %.loc17_55.4: %ProtectedCall = acquire_value %.loc17_55.3 -// CHECK:STDOUT: %.loc17_55.5: ref %ProtectedCall = value_as_ref %.loc17_55.4 -// CHECK:STDOUT: %addr.loc17_56.1: %ptr.bc1 = addr_of %.loc17_55.5 -// CHECK:STDOUT: %addr.loc17_56.2: %ptr.0a2 = addr_of %.loc17_57.1 -// CHECK:STDOUT: %C__carbon_thunk.call: init %empty_tuple.type = call imports.%C__carbon_thunk.decl.abd9a2.2(%addr.loc17_56.1, %addr.loc17_56.2) -// CHECK:STDOUT: %.loc17_56: init %C to %.loc17_57.1 = mark_in_place_init %C__carbon_thunk.call -// CHECK:STDOUT: %.loc17_57.2: %struct_type.base.8d9 = struct_literal (%.loc17_56) -// CHECK:STDOUT: %.loc17_57.3: init %.292 = as_compatible %.loc17_56 -// CHECK:STDOUT: %.loc17_57.4: init %.292 = converted %.loc17_56, %.loc17_57.3 -// CHECK:STDOUT: %.loc17_57.5: init %C = as_compatible %.loc17_57.4 -// CHECK:STDOUT: %.loc17_57.6: init %D to %return.param = class_init (%.loc17_57.5) -// CHECK:STDOUT: %.loc17_58: init %D = converted %.loc17_57.2, %.loc17_57.6 -// CHECK:STDOUT: %ProtectedCall.cpp_destructor.bound: = bound_method %.loc17_55.3, constants.%ProtectedCall.cpp_destructor -// CHECK:STDOUT: %ProtectedCall.cpp_destructor.call: init %empty_tuple.type = call %ProtectedCall.cpp_destructor.bound(%.loc17_55.3) -// CHECK:STDOUT: return %.loc17_58 to %return.param +// CHECK:STDOUT: %ProtectedCall.ref.loc17_36: type = name_ref ProtectedCall, imports.%ProtectedCall.decl [concrete = constants.%ProtectedCall] +// CHECK:STDOUT: %ProtectedCall.ref.loc17_50: %ProtectedCall.ProtectedCall.cpp_overload_set.type = name_ref ProtectedCall, imports.%ProtectedCall.ProtectedCall.cpp_overload_set.value [concrete = constants.%ProtectedCall.ProtectedCall.cpp_overload_set.value] +// CHECK:STDOUT: %.loc17_65.1: ref %ProtectedCall = temporary_storage +// CHECK:STDOUT: %addr.loc17_65: %ptr.bc1 = addr_of %.loc17_65.1 +// CHECK:STDOUT: %ProtectedCall__carbon_thunk.call: init %empty_tuple.type = call imports.%ProtectedCall__carbon_thunk.decl(%addr.loc17_65) +// CHECK:STDOUT: %.loc17_65.2: init %ProtectedCall to %.loc17_65.1 = mark_in_place_init %ProtectedCall__carbon_thunk.call +// CHECK:STDOUT: %.loc17_67.1: ref %.244 = class_element_access %return.param, element0 +// CHECK:STDOUT: %.loc17_65.3: ref %ProtectedCall = temporary %.loc17_65.1, %.loc17_65.2 +// CHECK:STDOUT: %.loc17_65.4: %ProtectedCall = acquire_value %.loc17_65.3 +// CHECK:STDOUT: %.loc17_65.5: ref %ProtectedCall = value_as_ref %.loc17_65.4 +// CHECK:STDOUT: %addr.loc17_66.1: %ptr.bc1 = addr_of %.loc17_65.5 +// CHECK:STDOUT: %addr.loc17_66.2: %ptr.4a0 = addr_of %.loc17_67.1 +// CHECK:STDOUT: %OverloadSet__carbon_thunk.call: init %empty_tuple.type = call imports.%OverloadSet__carbon_thunk.decl.b67c1b.2(%addr.loc17_66.1, %addr.loc17_66.2) +// CHECK:STDOUT: %.loc17_66: init %OverloadSet to %.loc17_67.1 = mark_in_place_init %OverloadSet__carbon_thunk.call +// CHECK:STDOUT: %.loc17_67.2: %struct_type.base.d55 = struct_literal (%.loc17_66) +// CHECK:STDOUT: %.loc17_67.3: init %.244 = as_compatible %.loc17_66 +// CHECK:STDOUT: %.loc17_67.4: init %.244 = converted %.loc17_66, %.loc17_67.3 +// CHECK:STDOUT: %.loc17_67.5: init %OverloadSet = as_compatible %.loc17_67.4 +// CHECK:STDOUT: %.loc17_67.6: init %D to %return.param = class_init (%.loc17_67.5) +// CHECK:STDOUT: %.loc17_68: init %D = converted %.loc17_67.2, %.loc17_67.6 +// CHECK:STDOUT: %ProtectedCall.cpp_destructor.bound: = bound_method %.loc17_65.3, constants.%ProtectedCall.cpp_destructor +// CHECK:STDOUT: %ProtectedCall.cpp_destructor.call: init %empty_tuple.type = call %ProtectedCall.cpp_destructor.bound(%.loc17_65.3) +// CHECK:STDOUT: return %.loc17_68 to %return.param // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @D.CallPublic() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Overload.ref: %C.Overload.cpp_overload_set.type = name_ref Overload, imports.%C.Overload.cpp_overload_set.value [concrete = constants.%C.Overload.cpp_overload_set.value] +// CHECK:STDOUT: %Overload.ref: %OverloadSet.Overload.cpp_overload_set.type = name_ref Overload, imports.%OverloadSet.Overload.cpp_overload_set.value [concrete = constants.%OverloadSet.Overload.cpp_overload_set.value] // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %PublicCall.ref.loc23_17: type = name_ref PublicCall, imports.%PublicCall.decl [concrete = constants.%PublicCall] // CHECK:STDOUT: %PublicCall.ref.loc23_28: %PublicCall.PublicCall.cpp_overload_set.type = name_ref PublicCall, imports.%PublicCall.PublicCall.cpp_overload_set.value [concrete = constants.%PublicCall.PublicCall.cpp_overload_set.value] @@ -2207,7 +2206,7 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: // CHECK:STDOUT: fn @D.CallProtected() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Overload.ref: %C.Overload.cpp_overload_set.type = name_ref Overload, imports.%C.Overload.cpp_overload_set.value [concrete = constants.%C.Overload.cpp_overload_set.value] +// CHECK:STDOUT: %Overload.ref: %OverloadSet.Overload.cpp_overload_set.type = name_ref Overload, imports.%OverloadSet.Overload.cpp_overload_set.value [concrete = constants.%OverloadSet.Overload.cpp_overload_set.value] // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %ProtectedCall.ref.loc29_17: type = name_ref ProtectedCall, imports.%ProtectedCall.decl [concrete = constants.%ProtectedCall] // CHECK:STDOUT: %ProtectedCall.ref.loc29_31: %ProtectedCall.ProtectedCall.cpp_overload_set.type = name_ref ProtectedCall, imports.%ProtectedCall.ProtectedCall.cpp_overload_set.value [concrete = constants.%ProtectedCall.ProtectedCall.cpp_overload_set.value] @@ -2229,9 +2228,9 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %Public: type = class_type @Public [concrete] -// CHECK:STDOUT: %Public.Overload.cpp_overload_set.type: type = cpp_overload_set_type @Public.Overload.cpp_overload_set [concrete] -// CHECK:STDOUT: %Public.Overload.cpp_overload_set.value: %Public.Overload.cpp_overload_set.type = cpp_overload_set_value @Public.Overload.cpp_overload_set [concrete] +// CHECK:STDOUT: %OverloadPublic: type = class_type @OverloadPublic [concrete] +// CHECK:STDOUT: %OverloadPublic.Overload.cpp_overload_set.type: type = cpp_overload_set_type @OverloadPublic.Overload.cpp_overload_set [concrete] +// CHECK:STDOUT: %OverloadPublic.Overload.cpp_overload_set.value: %OverloadPublic.Overload.cpp_overload_set.type = cpp_overload_set_value @OverloadPublic.Overload.cpp_overload_set [concrete] // CHECK:STDOUT: %PublicCall: type = class_type @PublicCall [concrete] // CHECK:STDOUT: %PublicCall.PublicCall.cpp_overload_set.type: type = cpp_overload_set_type @PublicCall.PublicCall.cpp_overload_set [concrete] // CHECK:STDOUT: %PublicCall.PublicCall.cpp_overload_set.value: %PublicCall.PublicCall.cpp_overload_set.type = cpp_overload_set_value @PublicCall.PublicCall.cpp_overload_set [concrete] @@ -2246,12 +2245,12 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .Public = %Public.decl +// CHECK:STDOUT: .OverloadPublic = %OverloadPublic.decl // CHECK:STDOUT: .PublicCall = %PublicCall.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %Public.decl: type = class_decl @Public [concrete = constants.%Public] {} {} -// CHECK:STDOUT: %Public.Overload.cpp_overload_set.value: %Public.Overload.cpp_overload_set.type = cpp_overload_set_value @Public.Overload.cpp_overload_set [concrete = constants.%Public.Overload.cpp_overload_set.value] +// CHECK:STDOUT: %OverloadPublic.decl: type = class_decl @OverloadPublic [concrete = constants.%OverloadPublic] {} {} +// CHECK:STDOUT: %OverloadPublic.Overload.cpp_overload_set.value: %OverloadPublic.Overload.cpp_overload_set.type = cpp_overload_set_value @OverloadPublic.Overload.cpp_overload_set [concrete = constants.%OverloadPublic.Overload.cpp_overload_set.value] // CHECK:STDOUT: %PublicCall.decl: type = class_decl @PublicCall [concrete = constants.%PublicCall] {} {} // CHECK:STDOUT: %PublicCall.PublicCall.cpp_overload_set.value: %PublicCall.PublicCall.cpp_overload_set.type = cpp_overload_set_value @PublicCall.PublicCall.cpp_overload_set [concrete = constants.%PublicCall.PublicCall.cpp_overload_set.value] // CHECK:STDOUT: %PublicCall__carbon_thunk.decl: %PublicCall__carbon_thunk.type = fn_decl @PublicCall__carbon_thunk [concrete = constants.%PublicCall__carbon_thunk] { @@ -2269,22 +2268,22 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8_3: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Public.ref: type = name_ref Public, imports.%Public.decl [concrete = constants.%Public] -// CHECK:STDOUT: %Overload.ref: %Public.Overload.cpp_overload_set.type = name_ref Overload, imports.%Public.Overload.cpp_overload_set.value [concrete = constants.%Public.Overload.cpp_overload_set.value] -// CHECK:STDOUT: %Cpp.ref.loc8_23: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %PublicCall.ref.loc8_26: type = name_ref PublicCall, imports.%PublicCall.decl [concrete = constants.%PublicCall] -// CHECK:STDOUT: %PublicCall.ref.loc8_37: %PublicCall.PublicCall.cpp_overload_set.type = name_ref PublicCall, imports.%PublicCall.PublicCall.cpp_overload_set.value [concrete = constants.%PublicCall.PublicCall.cpp_overload_set.value] -// CHECK:STDOUT: %.loc8_49.1: ref %PublicCall = temporary_storage -// CHECK:STDOUT: %addr.loc8_49: %ptr.d0a = addr_of %.loc8_49.1 -// CHECK:STDOUT: %PublicCall__carbon_thunk.call: init %empty_tuple.type = call imports.%PublicCall__carbon_thunk.decl(%addr.loc8_49) -// CHECK:STDOUT: %.loc8_49.2: init %PublicCall to %.loc8_49.1 = mark_in_place_init %PublicCall__carbon_thunk.call -// CHECK:STDOUT: %.loc8_49.3: ref %PublicCall = temporary %.loc8_49.1, %.loc8_49.2 -// CHECK:STDOUT: %.loc8_49.4: %PublicCall = acquire_value %.loc8_49.3 -// CHECK:STDOUT: %.loc8_49.5: ref %PublicCall = value_as_ref %.loc8_49.4 -// CHECK:STDOUT: %addr.loc8_50: %ptr.d0a = addr_of %.loc8_49.5 -// CHECK:STDOUT: %Overload__carbon_thunk.call: init %empty_tuple.type = call imports.%Overload__carbon_thunk.decl(%addr.loc8_50) -// CHECK:STDOUT: %PublicCall.cpp_destructor.bound: = bound_method %.loc8_49.3, constants.%PublicCall.cpp_destructor -// CHECK:STDOUT: %PublicCall.cpp_destructor.call: init %empty_tuple.type = call %PublicCall.cpp_destructor.bound(%.loc8_49.3) +// CHECK:STDOUT: %OverloadPublic.ref: type = name_ref OverloadPublic, imports.%OverloadPublic.decl [concrete = constants.%OverloadPublic] +// CHECK:STDOUT: %Overload.ref: %OverloadPublic.Overload.cpp_overload_set.type = name_ref Overload, imports.%OverloadPublic.Overload.cpp_overload_set.value [concrete = constants.%OverloadPublic.Overload.cpp_overload_set.value] +// CHECK:STDOUT: %Cpp.ref.loc8_31: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %PublicCall.ref.loc8_34: type = name_ref PublicCall, imports.%PublicCall.decl [concrete = constants.%PublicCall] +// CHECK:STDOUT: %PublicCall.ref.loc8_45: %PublicCall.PublicCall.cpp_overload_set.type = name_ref PublicCall, imports.%PublicCall.PublicCall.cpp_overload_set.value [concrete = constants.%PublicCall.PublicCall.cpp_overload_set.value] +// CHECK:STDOUT: %.loc8_57.1: ref %PublicCall = temporary_storage +// CHECK:STDOUT: %addr.loc8_57: %ptr.d0a = addr_of %.loc8_57.1 +// CHECK:STDOUT: %PublicCall__carbon_thunk.call: init %empty_tuple.type = call imports.%PublicCall__carbon_thunk.decl(%addr.loc8_57) +// CHECK:STDOUT: %.loc8_57.2: init %PublicCall to %.loc8_57.1 = mark_in_place_init %PublicCall__carbon_thunk.call +// CHECK:STDOUT: %.loc8_57.3: ref %PublicCall = temporary %.loc8_57.1, %.loc8_57.2 +// CHECK:STDOUT: %.loc8_57.4: %PublicCall = acquire_value %.loc8_57.3 +// CHECK:STDOUT: %.loc8_57.5: ref %PublicCall = value_as_ref %.loc8_57.4 +// CHECK:STDOUT: %addr.loc8_58: %ptr.d0a = addr_of %.loc8_57.5 +// CHECK:STDOUT: %Overload__carbon_thunk.call: init %empty_tuple.type = call imports.%Overload__carbon_thunk.decl(%addr.loc8_58) +// CHECK:STDOUT: %PublicCall.cpp_destructor.bound: = bound_method %.loc8_57.3, constants.%PublicCall.cpp_destructor +// CHECK:STDOUT: %PublicCall.cpp_destructor.call: init %empty_tuple.type = call %PublicCall.cpp_destructor.bound(%.loc8_57.3) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -2292,10 +2291,10 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] -// CHECK:STDOUT: %Public: type = class_type @Public [concrete] +// CHECK:STDOUT: %OverloadPublic: type = class_type @OverloadPublic [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %Public.Overload.cpp_overload_set.type: type = cpp_overload_set_type @Public.Overload.cpp_overload_set [concrete] -// CHECK:STDOUT: %Public.Overload.cpp_overload_set.value: %Public.Overload.cpp_overload_set.type = cpp_overload_set_value @Public.Overload.cpp_overload_set [concrete] +// CHECK:STDOUT: %OverloadPublic.Overload.cpp_overload_set.type: type = cpp_overload_set_type @OverloadPublic.Overload.cpp_overload_set [concrete] +// CHECK:STDOUT: %OverloadPublic.Overload.cpp_overload_set.value: %OverloadPublic.Overload.cpp_overload_set.type = cpp_overload_set_value @OverloadPublic.Overload.cpp_overload_set [concrete] // CHECK:STDOUT: %PublicCall: type = class_type @PublicCall [concrete] // CHECK:STDOUT: %PublicCall.PublicCall.cpp_overload_set.type: type = cpp_overload_set_type @PublicCall.PublicCall.cpp_overload_set [concrete] // CHECK:STDOUT: %PublicCall.PublicCall.cpp_overload_set.value: %PublicCall.PublicCall.cpp_overload_set.type = cpp_overload_set_value @PublicCall.PublicCall.cpp_overload_set [concrete] @@ -2320,13 +2319,13 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .Public = %Public.decl +// CHECK:STDOUT: .OverloadPublic = %OverloadPublic.decl // CHECK:STDOUT: .PublicCall = %PublicCall.decl // CHECK:STDOUT: .ProtectedCall = %ProtectedCall.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %Public.decl: type = class_decl @Public [concrete = constants.%Public] {} {} -// CHECK:STDOUT: %Public.Overload.cpp_overload_set.value: %Public.Overload.cpp_overload_set.type = cpp_overload_set_value @Public.Overload.cpp_overload_set [concrete = constants.%Public.Overload.cpp_overload_set.value] +// CHECK:STDOUT: %OverloadPublic.decl: type = class_decl @OverloadPublic [concrete = constants.%OverloadPublic] {} {} +// CHECK:STDOUT: %OverloadPublic.Overload.cpp_overload_set.value: %OverloadPublic.Overload.cpp_overload_set.type = cpp_overload_set_value @OverloadPublic.Overload.cpp_overload_set [concrete = constants.%OverloadPublic.Overload.cpp_overload_set.value] // CHECK:STDOUT: %PublicCall.decl: type = class_decl @PublicCall [concrete = constants.%PublicCall] {} {} // CHECK:STDOUT: %PublicCall.PublicCall.cpp_overload_set.value: %PublicCall.PublicCall.cpp_overload_set.type = cpp_overload_set_value @PublicCall.PublicCall.cpp_overload_set [concrete = constants.%PublicCall.PublicCall.cpp_overload_set.value] // CHECK:STDOUT: %PublicCall__carbon_thunk.decl: %PublicCall__carbon_thunk.type = fn_decl @PublicCall__carbon_thunk [concrete = constants.%PublicCall__carbon_thunk] { @@ -2362,12 +2361,12 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: .base = %.loc7 // CHECK:STDOUT: .F = %Derived.F.decl // CHECK:STDOUT: .Overload = -// CHECK:STDOUT: extend %Public.ref +// CHECK:STDOUT: extend %OverloadPublic.ref // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Derived.F() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Overload.ref.loc11: %Public.Overload.cpp_overload_set.type = name_ref Overload, imports.%Public.Overload.cpp_overload_set.value [concrete = constants.%Public.Overload.cpp_overload_set.value] +// CHECK:STDOUT: %Overload.ref.loc11: %OverloadPublic.Overload.cpp_overload_set.type = name_ref Overload, imports.%OverloadPublic.Overload.cpp_overload_set.value [concrete = constants.%OverloadPublic.Overload.cpp_overload_set.value] // CHECK:STDOUT: %Cpp.ref.loc11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %PublicCall.ref.loc11_17: type = name_ref PublicCall, imports.%PublicCall.decl [concrete = constants.%PublicCall] // CHECK:STDOUT: %PublicCall.ref.loc11_28: %PublicCall.PublicCall.cpp_overload_set.type = name_ref PublicCall, imports.%PublicCall.PublicCall.cpp_overload_set.value [concrete = constants.%PublicCall.PublicCall.cpp_overload_set.value] @@ -2382,7 +2381,7 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: %Overload__carbon_thunk.call.loc11: init %empty_tuple.type = call imports.%Overload__carbon_thunk.decl.c2f84f.1(%addr.loc11_41) // CHECK:STDOUT: %PublicCall.cpp_destructor.bound: = bound_method %.loc11_40.3, constants.%PublicCall.cpp_destructor // CHECK:STDOUT: %PublicCall.cpp_destructor.call: init %empty_tuple.type = call %PublicCall.cpp_destructor.bound(%.loc11_40.3) -// CHECK:STDOUT: %Overload.ref.loc12: %Public.Overload.cpp_overload_set.type = name_ref Overload, imports.%Public.Overload.cpp_overload_set.value [concrete = constants.%Public.Overload.cpp_overload_set.value] +// CHECK:STDOUT: %Overload.ref.loc12: %OverloadPublic.Overload.cpp_overload_set.type = name_ref Overload, imports.%OverloadPublic.Overload.cpp_overload_set.value [concrete = constants.%OverloadPublic.Overload.cpp_overload_set.value] // CHECK:STDOUT: %Cpp.ref.loc12: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %ProtectedCall.ref.loc12_17: type = name_ref ProtectedCall, imports.%ProtectedCall.decl [concrete = constants.%ProtectedCall] // CHECK:STDOUT: %ProtectedCall.ref.loc12_31: %ProtectedCall.ProtectedCall.cpp_overload_set.type = name_ref ProtectedCall, imports.%ProtectedCall.ProtectedCall.cpp_overload_set.value [concrete = constants.%ProtectedCall.ProtectedCall.cpp_overload_set.value] @@ -2404,10 +2403,10 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] -// CHECK:STDOUT: %Protected: type = class_type @Protected [concrete] +// CHECK:STDOUT: %OverloadProtected: type = class_type @OverloadProtected [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %Protected.Overload.cpp_overload_set.type: type = cpp_overload_set_type @Protected.Overload.cpp_overload_set [concrete] -// CHECK:STDOUT: %Protected.Overload.cpp_overload_set.value: %Protected.Overload.cpp_overload_set.type = cpp_overload_set_value @Protected.Overload.cpp_overload_set [concrete] +// CHECK:STDOUT: %OverloadProtected.Overload.cpp_overload_set.type: type = cpp_overload_set_type @OverloadProtected.Overload.cpp_overload_set [concrete] +// CHECK:STDOUT: %OverloadProtected.Overload.cpp_overload_set.value: %OverloadProtected.Overload.cpp_overload_set.type = cpp_overload_set_value @OverloadProtected.Overload.cpp_overload_set [concrete] // CHECK:STDOUT: %PublicCall: type = class_type @PublicCall [concrete] // CHECK:STDOUT: %PublicCall.PublicCall.cpp_overload_set.type: type = cpp_overload_set_type @PublicCall.PublicCall.cpp_overload_set [concrete] // CHECK:STDOUT: %PublicCall.PublicCall.cpp_overload_set.value: %PublicCall.PublicCall.cpp_overload_set.type = cpp_overload_set_value @PublicCall.PublicCall.cpp_overload_set [concrete] @@ -2432,13 +2431,13 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .Protected = %Protected.decl +// CHECK:STDOUT: .OverloadProtected = %OverloadProtected.decl // CHECK:STDOUT: .PublicCall = %PublicCall.decl // CHECK:STDOUT: .ProtectedCall = %ProtectedCall.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %Protected.decl: type = class_decl @Protected [concrete = constants.%Protected] {} {} -// CHECK:STDOUT: %Protected.Overload.cpp_overload_set.value: %Protected.Overload.cpp_overload_set.type = cpp_overload_set_value @Protected.Overload.cpp_overload_set [concrete = constants.%Protected.Overload.cpp_overload_set.value] +// CHECK:STDOUT: %OverloadProtected.decl: type = class_decl @OverloadProtected [concrete = constants.%OverloadProtected] {} {} +// CHECK:STDOUT: %OverloadProtected.Overload.cpp_overload_set.value: %OverloadProtected.Overload.cpp_overload_set.type = cpp_overload_set_value @OverloadProtected.Overload.cpp_overload_set [concrete = constants.%OverloadProtected.Overload.cpp_overload_set.value] // CHECK:STDOUT: %PublicCall.decl: type = class_decl @PublicCall [concrete = constants.%PublicCall] {} {} // CHECK:STDOUT: %PublicCall.PublicCall.cpp_overload_set.value: %PublicCall.PublicCall.cpp_overload_set.type = cpp_overload_set_value @PublicCall.PublicCall.cpp_overload_set [concrete = constants.%PublicCall.PublicCall.cpp_overload_set.value] // CHECK:STDOUT: %PublicCall__carbon_thunk.decl: %PublicCall__carbon_thunk.type = fn_decl @PublicCall__carbon_thunk [concrete = constants.%PublicCall__carbon_thunk] { @@ -2474,12 +2473,12 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: .base = %.loc7 // CHECK:STDOUT: .F = %Derived.F.decl // CHECK:STDOUT: .Overload = -// CHECK:STDOUT: extend %Protected.ref +// CHECK:STDOUT: extend %OverloadProtected.ref // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Derived.F() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Overload.ref.loc11: %Protected.Overload.cpp_overload_set.type = name_ref Overload, imports.%Protected.Overload.cpp_overload_set.value [concrete = constants.%Protected.Overload.cpp_overload_set.value] +// CHECK:STDOUT: %Overload.ref.loc11: %OverloadProtected.Overload.cpp_overload_set.type = name_ref Overload, imports.%OverloadProtected.Overload.cpp_overload_set.value [concrete = constants.%OverloadProtected.Overload.cpp_overload_set.value] // CHECK:STDOUT: %Cpp.ref.loc11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %PublicCall.ref.loc11_17: type = name_ref PublicCall, imports.%PublicCall.decl [concrete = constants.%PublicCall] // CHECK:STDOUT: %PublicCall.ref.loc11_28: %PublicCall.PublicCall.cpp_overload_set.type = name_ref PublicCall, imports.%PublicCall.PublicCall.cpp_overload_set.value [concrete = constants.%PublicCall.PublicCall.cpp_overload_set.value] @@ -2494,7 +2493,7 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: %Overload__carbon_thunk.call.loc11: init %empty_tuple.type = call imports.%Overload__carbon_thunk.decl.c2f84f.1(%addr.loc11_41) // CHECK:STDOUT: %PublicCall.cpp_destructor.bound: = bound_method %.loc11_40.3, constants.%PublicCall.cpp_destructor // CHECK:STDOUT: %PublicCall.cpp_destructor.call: init %empty_tuple.type = call %PublicCall.cpp_destructor.bound(%.loc11_40.3) -// CHECK:STDOUT: %Overload.ref.loc12: %Protected.Overload.cpp_overload_set.type = name_ref Overload, imports.%Protected.Overload.cpp_overload_set.value [concrete = constants.%Protected.Overload.cpp_overload_set.value] +// CHECK:STDOUT: %Overload.ref.loc12: %OverloadProtected.Overload.cpp_overload_set.type = name_ref Overload, imports.%OverloadProtected.Overload.cpp_overload_set.value [concrete = constants.%OverloadProtected.Overload.cpp_overload_set.value] // CHECK:STDOUT: %Cpp.ref.loc12: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %ProtectedCall.ref.loc12_17: type = name_ref ProtectedCall, imports.%ProtectedCall.decl [concrete = constants.%ProtectedCall] // CHECK:STDOUT: %ProtectedCall.ref.loc12_31: %ProtectedCall.ProtectedCall.cpp_overload_set.type = name_ref ProtectedCall, imports.%ProtectedCall.ProtectedCall.cpp_overload_set.value [concrete = constants.%ProtectedCall.ProtectedCall.cpp_overload_set.value] diff --git a/toolchain/check/testdata/interop/cpp/class/import/base.carbon b/toolchain/check/testdata/interop/cpp/class/import/base.carbon index 15da1cd60611..ad8a87098b06 100644 --- a/toolchain/check/testdata/interop/cpp/class/import/base.carbon +++ b/toolchain/check/testdata/interop/cpp/class/import/base.carbon @@ -37,12 +37,12 @@ fn ConvertVal(d: Cpp.Derived) { // --- static_member.h -class Base { +class StaticBase { public: static auto base_fn() -> void; }; -class Derived : public Base { +class StaticDerived : public StaticBase { public: static auto derived_fn() -> void; }; @@ -55,20 +55,20 @@ import Cpp library "static_member.h"; fn MyF() { //@dump-sem-ir-begin - Cpp.Base.base_fn(); - Cpp.Derived.base_fn(); - Cpp.Derived.derived_fn(); + Cpp.StaticBase.base_fn(); + Cpp.StaticDerived.base_fn(); + Cpp.StaticDerived.derived_fn(); //@dump-sem-ir-end } // --- base_field.h -struct Base { +struct FieldBase { int a; int b; }; -struct Derived : Base { +struct FieldDerived : FieldBase { int b; }; @@ -78,26 +78,26 @@ library "[[@TEST_NAME]]"; import Cpp library "base_field.h"; -fn AccessDirect(d: Cpp.Derived) -> i32 { +fn AccessDirect(d: Cpp.FieldDerived) -> i32 { //@dump-sem-ir-begin return d.a; //@dump-sem-ir-end } -fn AccessQualified(d: Cpp.Derived) -> i32 { +fn AccessQualified(d: Cpp.FieldDerived) -> i32 { //@dump-sem-ir-begin - return d.(Cpp.Base.b); + return d.(Cpp.FieldBase.b); //@dump-sem-ir-end } // --- base_method.h -struct Base { +struct MethodBase { void f() const; void g() const; }; -struct Derived : Base { +struct MethodDerived : MethodBase { void g() const; }; @@ -107,25 +107,25 @@ library "[[@TEST_NAME]]"; import Cpp library "base_method.h"; -fn CallDirect(d: Cpp.Derived) { +fn CallDirect(d: Cpp.MethodDerived) { //@dump-sem-ir-begin d.f(); //@dump-sem-ir-end } -fn CallQualified(d: Cpp.Derived) { +fn CallQualified(d: Cpp.MethodDerived) { //@dump-sem-ir-begin - d.(Cpp.Base.g)(); + d.(Cpp.MethodBase.g)(); //@dump-sem-ir-end } -fn CallBaseQualifiedByDerived(d: Cpp.Derived, b: Cpp.Base) { +fn CallBaseQualifiedByDerived(d: Cpp.MethodDerived, b: Cpp.MethodBase) { //@dump-sem-ir-begin - // `Cpp.Derived.f` names a member of `Cpp.Base`, so we allow that to be used - // when `self` is a `Cpp.Base` or anything that implicitly converts to - // `Cpp.Base`, such as `Cpp.Derived`. - d.(Cpp.Derived.f)(); - b.(Cpp.Derived.f)(); + // `Cpp.MethodDerived.f` names a member of `Cpp.MethodBase`, so we allow + // that to be used when `self` is a `Cpp.MethodBase` or anything that + // implicitly converts to `Cpp.MethodBase`, such as `Cpp.MethodDerived`. + d.(Cpp.MethodDerived.f)(); + b.(Cpp.MethodDerived.f)(); //@dump-sem-ir-end } @@ -285,10 +285,10 @@ fn ConvertOnePolymorphicBaseToPolymorphic1(p: Cpp.OnePolymorphicBase*) -> Cpp.Po // --- virtual_inheritance.h -struct A { int a; }; -struct B : virtual A {}; +struct VirtA { int a; }; +struct VirtB : virtual VirtA {}; -void UseB(B * _Nonnull p); +void UseB(VirtB * _Nonnull p); // --- use_virtual_inheritance_incomplete.carbon @@ -296,8 +296,8 @@ library "[[@TEST_NAME]]"; import Cpp library "virtual_inheritance.h"; -fn Convert(p: Cpp.B*) { - // OK, doesn't require `Cpp.B` to be a complete type. +fn Convert(p: Cpp.VirtB*) { + // OK, doesn't require `Cpp.VirtB` to be a complete type. Cpp.UseB(p); } @@ -307,11 +307,11 @@ library "[[@TEST_NAME]]"; import Cpp library "virtual_inheritance.h"; -fn Convert(p: Cpp.B*) -> Cpp.A* { - // CHECK:STDERR: fail_todo_use_virtual_inheritance.carbon:[[@LINE+7]]:3: error: cannot implicitly convert expression of type `Cpp.B*` to `Cpp.A*` [ConversionFailure] +fn Convert(p: Cpp.VirtB*) -> Cpp.VirtA* { + // CHECK:STDERR: fail_todo_use_virtual_inheritance.carbon:[[@LINE+7]]:3: error: cannot implicitly convert expression of type `Cpp.VirtB*` to `Cpp.VirtA*` [ConversionFailure] // CHECK:STDERR: return p; // CHECK:STDERR: ^~~~~~~~~ - // CHECK:STDERR: fail_todo_use_virtual_inheritance.carbon:[[@LINE+4]]:3: note: type `Cpp.B*` does not implement interface `Core.ImplicitAs(Cpp.A*)` [MissingImplInMemberAccessInContext] + // CHECK:STDERR: fail_todo_use_virtual_inheritance.carbon:[[@LINE+4]]:3: note: type `Cpp.VirtB*` does not implement interface `Core.ImplicitAs(Cpp.VirtA*)` [MissingImplInMemberAccessInContext] // CHECK:STDERR: return p; // CHECK:STDERR: ^~~~~~~~~ // CHECK:STDERR: @@ -320,19 +320,19 @@ fn Convert(p: Cpp.B*) -> Cpp.A* { // --- diamond.h -struct A { +struct DiamondA { int a; }; -struct B : virtual A { +struct DiamondB : virtual DiamondA { int b; }; -struct C : virtual A { +struct DiamondC : virtual DiamondA { int c; }; -struct D : B, C { +struct DiamondD : DiamondB, DiamondC { int d; }; @@ -342,88 +342,88 @@ library "[[@TEST_NAME]]"; import Cpp library "diamond.h"; -fn ConvertBA(p: Cpp.B*) -> Cpp.A* { - // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+7]]:3: error: cannot implicitly convert expression of type `Cpp.B*` to `Cpp.A*` [ConversionFailure] +fn ConvertBA(p: Cpp.DiamondB*) -> Cpp.DiamondA* { + // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+7]]:3: error: cannot implicitly convert expression of type `Cpp.DiamondB*` to `Cpp.DiamondA*` [ConversionFailure] // CHECK:STDERR: return p; // CHECK:STDERR: ^~~~~~~~~ - // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+4]]:3: note: type `Cpp.B*` does not implement interface `Core.ImplicitAs(Cpp.A*)` [MissingImplInMemberAccessInContext] + // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+4]]:3: note: type `Cpp.DiamondB*` does not implement interface `Core.ImplicitAs(Cpp.DiamondA*)` [MissingImplInMemberAccessInContext] // CHECK:STDERR: return p; // CHECK:STDERR: ^~~~~~~~~ // CHECK:STDERR: return p; } -fn ConvertCA(p: Cpp.C*) -> Cpp.A* { - // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+7]]:3: error: cannot implicitly convert expression of type `Cpp.C*` to `Cpp.A*` [ConversionFailure] +fn ConvertCA(p: Cpp.DiamondC*) -> Cpp.DiamondA* { + // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+7]]:3: error: cannot implicitly convert expression of type `Cpp.DiamondC*` to `Cpp.DiamondA*` [ConversionFailure] // CHECK:STDERR: return p; // CHECK:STDERR: ^~~~~~~~~ - // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+4]]:3: note: type `Cpp.C*` does not implement interface `Core.ImplicitAs(Cpp.A*)` [MissingImplInMemberAccessInContext] + // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+4]]:3: note: type `Cpp.DiamondC*` does not implement interface `Core.ImplicitAs(Cpp.DiamondA*)` [MissingImplInMemberAccessInContext] // CHECK:STDERR: return p; // CHECK:STDERR: ^~~~~~~~~ // CHECK:STDERR: return p; } -fn ConvertDB(p: Cpp.D*) -> Cpp.B* { - // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+7]]:3: error: cannot implicitly convert expression of type `Cpp.D*` to `Cpp.B*` [ConversionFailure] +fn ConvertDB(p: Cpp.DiamondD*) -> Cpp.DiamondB* { + // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+7]]:3: error: cannot implicitly convert expression of type `Cpp.DiamondD*` to `Cpp.DiamondB*` [ConversionFailure] // CHECK:STDERR: return p; // CHECK:STDERR: ^~~~~~~~~ - // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+4]]:3: note: type `Cpp.D*` does not implement interface `Core.ImplicitAs(Cpp.B*)` [MissingImplInMemberAccessInContext] + // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+4]]:3: note: type `Cpp.DiamondD*` does not implement interface `Core.ImplicitAs(Cpp.DiamondB*)` [MissingImplInMemberAccessInContext] // CHECK:STDERR: return p; // CHECK:STDERR: ^~~~~~~~~ // CHECK:STDERR: return p; } -fn ConvertDC(p: Cpp.D*) -> Cpp.C* { - // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+7]]:3: error: cannot implicitly convert expression of type `Cpp.D*` to `Cpp.C*` [ConversionFailure] +fn ConvertDC(p: Cpp.DiamondD*) -> Cpp.DiamondC* { + // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+7]]:3: error: cannot implicitly convert expression of type `Cpp.DiamondD*` to `Cpp.DiamondC*` [ConversionFailure] // CHECK:STDERR: return p; // CHECK:STDERR: ^~~~~~~~~ - // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+4]]:3: note: type `Cpp.D*` does not implement interface `Core.ImplicitAs(Cpp.C*)` [MissingImplInMemberAccessInContext] + // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+4]]:3: note: type `Cpp.DiamondD*` does not implement interface `Core.ImplicitAs(Cpp.DiamondC*)` [MissingImplInMemberAccessInContext] // CHECK:STDERR: return p; // CHECK:STDERR: ^~~~~~~~~ // CHECK:STDERR: return p; } -fn AccessBA(d: Cpp.D) -> i32 { - // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+7]]:11: error: cannot convert expression of type `Cpp.D` to `Cpp.B` with `as` [ConversionFailure] - // CHECK:STDERR: return (d as Cpp.B).b; - // CHECK:STDERR: ^~~~~~~~~~ - // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+4]]:11: note: type `Cpp.D` does not implement interface `Core.As(Cpp.B)` [MissingImplInMemberAccessInContext] - // CHECK:STDERR: return (d as Cpp.B).b; - // CHECK:STDERR: ^~~~~~~~~~ +fn AccessBA(d: Cpp.DiamondD) -> i32 { + // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+7]]:11: error: cannot convert expression of type `Cpp.DiamondD` to `Cpp.DiamondB` with `as` [ConversionFailure] + // CHECK:STDERR: return (d as Cpp.DiamondB).b; + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+4]]:11: note: type `Cpp.DiamondD` does not implement interface `Core.As(Cpp.DiamondB)` [MissingImplInMemberAccessInContext] + // CHECK:STDERR: return (d as Cpp.DiamondB).b; + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~ // CHECK:STDERR: - return (d as Cpp.B).b; + return (d as Cpp.DiamondB).b; } -fn AccessCA(d: Cpp.D) -> i32 { - // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+7]]:11: error: cannot convert expression of type `Cpp.D` to `Cpp.C` with `as` [ConversionFailure] - // CHECK:STDERR: return (d as Cpp.C).b; - // CHECK:STDERR: ^~~~~~~~~~ - // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+4]]:11: note: type `Cpp.D` does not implement interface `Core.As(Cpp.C)` [MissingImplInMemberAccessInContext] - // CHECK:STDERR: return (d as Cpp.C).b; - // CHECK:STDERR: ^~~~~~~~~~ +fn AccessCA(d: Cpp.DiamondD) -> i32 { + // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+7]]:11: error: cannot convert expression of type `Cpp.DiamondD` to `Cpp.DiamondC` with `as` [ConversionFailure] + // CHECK:STDERR: return (d as Cpp.DiamondC).b; + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+4]]:11: note: type `Cpp.DiamondD` does not implement interface `Core.As(Cpp.DiamondC)` [MissingImplInMemberAccessInContext] + // CHECK:STDERR: return (d as Cpp.DiamondC).b; + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~ // CHECK:STDERR: - return (d as Cpp.C).b; + return (d as Cpp.DiamondC).b; } -fn AccessDB(d: Cpp.D) -> i32 { - // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+7]]:10: error: cannot implicitly convert expression of type `Cpp.D` to `Cpp.B` [ConversionFailure] +fn AccessDB(d: Cpp.DiamondD) -> i32 { + // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+7]]:10: error: cannot implicitly convert expression of type `Cpp.DiamondD` to `Cpp.DiamondB` [ConversionFailure] // CHECK:STDERR: return d.b; // CHECK:STDERR: ^~~ - // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+4]]:10: note: type `Cpp.D` does not implement interface `Core.ImplicitAs(Cpp.B)` [MissingImplInMemberAccessInContext] + // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+4]]:10: note: type `Cpp.DiamondD` does not implement interface `Core.ImplicitAs(Cpp.DiamondB)` [MissingImplInMemberAccessInContext] // CHECK:STDERR: return d.b; // CHECK:STDERR: ^~~ // CHECK:STDERR: return d.b; } -fn AccessDC(d: Cpp.D) -> i32 { - // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+7]]:10: error: cannot implicitly convert expression of type `Cpp.D` to `Cpp.C` [ConversionFailure] +fn AccessDC(d: Cpp.DiamondD) -> i32 { + // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+7]]:10: error: cannot implicitly convert expression of type `Cpp.DiamondD` to `Cpp.DiamondC` [ConversionFailure] // CHECK:STDERR: return d.c; // CHECK:STDERR: ^~~ - // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+4]]:10: note: type `Cpp.D` does not implement interface `Core.ImplicitAs(Cpp.C)` [MissingImplInMemberAccessInContext] + // CHECK:STDERR: fail_todo_use_diamond.carbon:[[@LINE+4]]:10: note: type `Cpp.DiamondD` does not implement interface `Core.ImplicitAs(Cpp.DiamondC)` [MissingImplInMemberAccessInContext] // CHECK:STDERR: return d.c; // CHECK:STDERR: ^~~ // CHECK:STDERR: @@ -432,7 +432,7 @@ fn AccessDC(d: Cpp.D) -> i32 { // --- final.h -struct A final {}; +struct FinalA final {}; // --- fail_derive_from_final.carbon @@ -441,11 +441,11 @@ library "[[@TEST_NAME]]"; import Cpp library "final.h"; class B { - // CHECK:STDERR: fail_derive_from_final.carbon:[[@LINE+4]]:16: error: deriving from final type `A`; base type must be an `abstract` or `base` class [BaseIsFinal] - // CHECK:STDERR: extend base: Cpp.A; - // CHECK:STDERR: ^~~~~ + // CHECK:STDERR: fail_derive_from_final.carbon:[[@LINE+4]]:16: error: deriving from final type `FinalA`; base type must be an `abstract` or `base` class [BaseIsFinal] + // CHECK:STDERR: extend base: Cpp.FinalA; + // CHECK:STDERR: ^~~~~~~~~~ // CHECK:STDERR: - extend base: Cpp.A; + extend base: Cpp.FinalA; } // --- union.h @@ -580,61 +580,61 @@ class V { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %Base: type = class_type @Base [concrete] -// CHECK:STDOUT: %Base.base_fn.cpp_overload_set.type: type = cpp_overload_set_type @Base.base_fn.cpp_overload_set [concrete] -// CHECK:STDOUT: %Base.base_fn.cpp_overload_set.value: %Base.base_fn.cpp_overload_set.type = cpp_overload_set_value @Base.base_fn.cpp_overload_set [concrete] -// CHECK:STDOUT: %Base.base_fn.type: type = fn_type @Base.base_fn [concrete] -// CHECK:STDOUT: %Base.base_fn: %Base.base_fn.type = struct_value () [concrete] -// CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] -// CHECK:STDOUT: %Derived.base_fn.cpp_overload_set.type: type = cpp_overload_set_type @Derived.base_fn.cpp_overload_set [concrete] -// CHECK:STDOUT: %Derived.base_fn.cpp_overload_set.value: %Derived.base_fn.cpp_overload_set.type = cpp_overload_set_value @Derived.base_fn.cpp_overload_set [concrete] -// CHECK:STDOUT: %Derived.derived_fn.cpp_overload_set.type: type = cpp_overload_set_type @Derived.derived_fn.cpp_overload_set [concrete] -// CHECK:STDOUT: %Derived.derived_fn.cpp_overload_set.value: %Derived.derived_fn.cpp_overload_set.type = cpp_overload_set_value @Derived.derived_fn.cpp_overload_set [concrete] -// CHECK:STDOUT: %Derived.derived_fn.type: type = fn_type @Derived.derived_fn [concrete] -// CHECK:STDOUT: %Derived.derived_fn: %Derived.derived_fn.type = struct_value () [concrete] +// CHECK:STDOUT: %StaticBase: type = class_type @StaticBase [concrete] +// CHECK:STDOUT: %StaticBase.base_fn.cpp_overload_set.type: type = cpp_overload_set_type @StaticBase.base_fn.cpp_overload_set [concrete] +// CHECK:STDOUT: %StaticBase.base_fn.cpp_overload_set.value: %StaticBase.base_fn.cpp_overload_set.type = cpp_overload_set_value @StaticBase.base_fn.cpp_overload_set [concrete] +// CHECK:STDOUT: %StaticBase.base_fn.type: type = fn_type @StaticBase.base_fn [concrete] +// CHECK:STDOUT: %StaticBase.base_fn: %StaticBase.base_fn.type = struct_value () [concrete] +// CHECK:STDOUT: %StaticDerived: type = class_type @StaticDerived [concrete] +// CHECK:STDOUT: %StaticDerived.base_fn.cpp_overload_set.type: type = cpp_overload_set_type @StaticDerived.base_fn.cpp_overload_set [concrete] +// CHECK:STDOUT: %StaticDerived.base_fn.cpp_overload_set.value: %StaticDerived.base_fn.cpp_overload_set.type = cpp_overload_set_value @StaticDerived.base_fn.cpp_overload_set [concrete] +// CHECK:STDOUT: %StaticDerived.derived_fn.cpp_overload_set.type: type = cpp_overload_set_type @StaticDerived.derived_fn.cpp_overload_set [concrete] +// CHECK:STDOUT: %StaticDerived.derived_fn.cpp_overload_set.value: %StaticDerived.derived_fn.cpp_overload_set.type = cpp_overload_set_value @StaticDerived.derived_fn.cpp_overload_set [concrete] +// CHECK:STDOUT: %StaticDerived.derived_fn.type: type = fn_type @StaticDerived.derived_fn [concrete] +// CHECK:STDOUT: %StaticDerived.derived_fn: %StaticDerived.derived_fn.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .Base = %Base.decl -// CHECK:STDOUT: .Derived = %Derived.decl +// CHECK:STDOUT: .StaticBase = %StaticBase.decl +// CHECK:STDOUT: .StaticDerived = %StaticDerived.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %Base.decl: type = class_decl @Base [concrete = constants.%Base] {} {} -// CHECK:STDOUT: %Base.base_fn.cpp_overload_set.value: %Base.base_fn.cpp_overload_set.type = cpp_overload_set_value @Base.base_fn.cpp_overload_set [concrete = constants.%Base.base_fn.cpp_overload_set.value] -// CHECK:STDOUT: %Base.base_fn.decl: %Base.base_fn.type = fn_decl @Base.base_fn [concrete = constants.%Base.base_fn] {} {} -// CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} -// CHECK:STDOUT: %Derived.base_fn.cpp_overload_set.value: %Derived.base_fn.cpp_overload_set.type = cpp_overload_set_value @Derived.base_fn.cpp_overload_set [concrete = constants.%Derived.base_fn.cpp_overload_set.value] -// CHECK:STDOUT: %Derived.derived_fn.cpp_overload_set.value: %Derived.derived_fn.cpp_overload_set.type = cpp_overload_set_value @Derived.derived_fn.cpp_overload_set [concrete = constants.%Derived.derived_fn.cpp_overload_set.value] -// CHECK:STDOUT: %Derived.derived_fn.decl: %Derived.derived_fn.type = fn_decl @Derived.derived_fn [concrete = constants.%Derived.derived_fn] {} {} +// CHECK:STDOUT: %StaticBase.decl: type = class_decl @StaticBase [concrete = constants.%StaticBase] {} {} +// CHECK:STDOUT: %StaticBase.base_fn.cpp_overload_set.value: %StaticBase.base_fn.cpp_overload_set.type = cpp_overload_set_value @StaticBase.base_fn.cpp_overload_set [concrete = constants.%StaticBase.base_fn.cpp_overload_set.value] +// CHECK:STDOUT: %StaticBase.base_fn.decl: %StaticBase.base_fn.type = fn_decl @StaticBase.base_fn [concrete = constants.%StaticBase.base_fn] {} {} +// CHECK:STDOUT: %StaticDerived.decl: type = class_decl @StaticDerived [concrete = constants.%StaticDerived] {} {} +// CHECK:STDOUT: %StaticDerived.base_fn.cpp_overload_set.value: %StaticDerived.base_fn.cpp_overload_set.type = cpp_overload_set_value @StaticDerived.base_fn.cpp_overload_set [concrete = constants.%StaticDerived.base_fn.cpp_overload_set.value] +// CHECK:STDOUT: %StaticDerived.derived_fn.cpp_overload_set.value: %StaticDerived.derived_fn.cpp_overload_set.type = cpp_overload_set_value @StaticDerived.derived_fn.cpp_overload_set [concrete = constants.%StaticDerived.derived_fn.cpp_overload_set.value] +// CHECK:STDOUT: %StaticDerived.derived_fn.decl: %StaticDerived.derived_fn.type = fn_decl @StaticDerived.derived_fn [concrete = constants.%StaticDerived.derived_fn] {} {} // 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: %Base.ref: type = name_ref Base, imports.%Base.decl [concrete = constants.%Base] -// CHECK:STDOUT: %base_fn.ref.loc8: %Base.base_fn.cpp_overload_set.type = name_ref base_fn, imports.%Base.base_fn.cpp_overload_set.value [concrete = constants.%Base.base_fn.cpp_overload_set.value] -// CHECK:STDOUT: %Base.base_fn.call.loc8: init %empty_tuple.type = call imports.%Base.base_fn.decl() +// CHECK:STDOUT: %StaticBase.ref: type = name_ref StaticBase, imports.%StaticBase.decl [concrete = constants.%StaticBase] +// CHECK:STDOUT: %base_fn.ref.loc8: %StaticBase.base_fn.cpp_overload_set.type = name_ref base_fn, imports.%StaticBase.base_fn.cpp_overload_set.value [concrete = constants.%StaticBase.base_fn.cpp_overload_set.value] +// CHECK:STDOUT: %StaticBase.base_fn.call.loc8: init %empty_tuple.type = call imports.%StaticBase.base_fn.decl() // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Derived.ref.loc9: type = name_ref Derived, imports.%Derived.decl [concrete = constants.%Derived] -// CHECK:STDOUT: %base_fn.ref.loc9: %Derived.base_fn.cpp_overload_set.type = name_ref base_fn, imports.%Derived.base_fn.cpp_overload_set.value [concrete = constants.%Derived.base_fn.cpp_overload_set.value] -// CHECK:STDOUT: %Base.base_fn.call.loc9: init %empty_tuple.type = call imports.%Base.base_fn.decl() +// CHECK:STDOUT: %StaticDerived.ref.loc9: type = name_ref StaticDerived, imports.%StaticDerived.decl [concrete = constants.%StaticDerived] +// CHECK:STDOUT: %base_fn.ref.loc9: %StaticDerived.base_fn.cpp_overload_set.type = name_ref base_fn, imports.%StaticDerived.base_fn.cpp_overload_set.value [concrete = constants.%StaticDerived.base_fn.cpp_overload_set.value] +// CHECK:STDOUT: %StaticBase.base_fn.call.loc9: init %empty_tuple.type = call imports.%StaticBase.base_fn.decl() // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Derived.ref.loc10: type = name_ref Derived, imports.%Derived.decl [concrete = constants.%Derived] -// CHECK:STDOUT: %derived_fn.ref: %Derived.derived_fn.cpp_overload_set.type = name_ref derived_fn, imports.%Derived.derived_fn.cpp_overload_set.value [concrete = constants.%Derived.derived_fn.cpp_overload_set.value] -// CHECK:STDOUT: %Derived.derived_fn.call: init %empty_tuple.type = call imports.%Derived.derived_fn.decl() +// CHECK:STDOUT: %StaticDerived.ref.loc10: type = name_ref StaticDerived, imports.%StaticDerived.decl [concrete = constants.%StaticDerived] +// CHECK:STDOUT: %derived_fn.ref: %StaticDerived.derived_fn.cpp_overload_set.type = name_ref derived_fn, imports.%StaticDerived.derived_fn.cpp_overload_set.value [concrete = constants.%StaticDerived.derived_fn.cpp_overload_set.value] +// CHECK:STDOUT: %StaticDerived.derived_fn.call: init %empty_tuple.type = call imports.%StaticDerived.derived_fn.decl() // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- use_base_field.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] +// CHECK:STDOUT: %FieldDerived: type = class_type @FieldDerived [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] -// CHECK:STDOUT: %Base: type = class_type @Base [concrete] -// CHECK:STDOUT: %Base.elem: type = unbound_element_type %Base, %i32 [concrete] +// CHECK:STDOUT: %FieldBase: type = class_type @FieldBase [concrete] +// CHECK:STDOUT: %FieldBase.elem: type = unbound_element_type %FieldBase, %i32 [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] @@ -649,23 +649,23 @@ class V { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .Derived = %Derived.decl -// CHECK:STDOUT: .Base = %Base.decl +// CHECK:STDOUT: .FieldDerived = %FieldDerived.decl +// CHECK:STDOUT: .FieldBase = %FieldBase.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} -// CHECK:STDOUT: %Base.decl: type = class_decl @Base [concrete = constants.%Base] {} {} +// CHECK:STDOUT: %FieldDerived.decl: type = class_decl @FieldDerived [concrete = constants.%FieldDerived] {} {} +// CHECK:STDOUT: %FieldBase.decl: type = class_decl @FieldBase [concrete = constants.%FieldBase] {} {} // CHECK:STDOUT: %Core.import_ref.cd6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.ac8) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.5e0)] // CHECK:STDOUT: %Copy.impl_witness_table.8d2 = impl_witness_table (%Core.import_ref.cd6), @Int.as.Copy.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @AccessDirect(%d.param: %Derived) -> out %return.param: %i32 { +// CHECK:STDOUT: fn @AccessDirect(%d.param: %FieldDerived) -> out %return.param: %i32 { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %d.ref: %Derived = name_ref d, %d -// CHECK:STDOUT: %a.ref: %Base.elem = name_ref a, @Base.%.1 [concrete = @Base.%.1] -// CHECK:STDOUT: %.loc8_11.1: %Base = as_compatible %d.ref -// CHECK:STDOUT: %.loc8_11.2: ref %Base = class_element_access %.loc8_11.1, element0 -// CHECK:STDOUT: %.loc8_11.3: ref %Base = converted %d.ref, %.loc8_11.2 +// CHECK:STDOUT: %d.ref: %FieldDerived = name_ref d, %d +// CHECK:STDOUT: %a.ref: %FieldBase.elem = name_ref a, @FieldBase.%.1 [concrete = @FieldBase.%.1] +// CHECK:STDOUT: %.loc8_11.1: %FieldBase = as_compatible %d.ref +// CHECK:STDOUT: %.loc8_11.2: ref %FieldBase = class_element_access %.loc8_11.1, element0 +// CHECK:STDOUT: %.loc8_11.3: ref %FieldBase = converted %d.ref, %.loc8_11.2 // CHECK:STDOUT: %.loc8_11.4: ref %i32 = class_element_access %.loc8_11.3, element0 // CHECK:STDOUT: %.loc8_11.5: %i32 = acquire_value %.loc8_11.4 // CHECK:STDOUT: %impl.elem0: %.737 = impl_witness_access constants.%Copy.impl_witness.b51, element0 [concrete = constants.%Int.as.Copy.impl.Op.4f6] @@ -676,15 +676,15 @@ class V { // CHECK:STDOUT: return %Int.as.Copy.impl.Op.call // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @AccessQualified(%d.param: %Derived) -> out %return.param: %i32 { +// CHECK:STDOUT: fn @AccessQualified(%d.param: %FieldDerived) -> out %return.param: %i32 { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %d.ref: %Derived = name_ref d, %d +// CHECK:STDOUT: %d.ref: %FieldDerived = name_ref d, %d // CHECK:STDOUT: %Cpp.ref.loc14: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Base.ref: type = name_ref Base, imports.%Base.decl [concrete = constants.%Base] -// CHECK:STDOUT: %b.ref: %Base.elem = name_ref b, @Base.%.2 [concrete = @Base.%.2] -// CHECK:STDOUT: %.loc14_11.1: %Base = as_compatible %d.ref -// CHECK:STDOUT: %.loc14_11.2: ref %Base = class_element_access %.loc14_11.1, element0 -// CHECK:STDOUT: %.loc14_11.3: ref %Base = converted %d.ref, %.loc14_11.2 +// CHECK:STDOUT: %FieldBase.ref: type = name_ref FieldBase, imports.%FieldBase.decl [concrete = constants.%FieldBase] +// CHECK:STDOUT: %b.ref: %FieldBase.elem = name_ref b, @FieldBase.%.2 [concrete = @FieldBase.%.2] +// CHECK:STDOUT: %.loc14_11.1: %FieldBase = as_compatible %d.ref +// CHECK:STDOUT: %.loc14_11.2: ref %FieldBase = class_element_access %.loc14_11.1, element0 +// CHECK:STDOUT: %.loc14_11.3: ref %FieldBase = converted %d.ref, %.loc14_11.2 // CHECK:STDOUT: %.loc14_11.4: ref %i32 = class_element_access %.loc14_11.3, element1 // CHECK:STDOUT: %.loc14_11.5: %i32 = acquire_value %.loc14_11.4 // CHECK:STDOUT: %impl.elem0: %.737 = impl_witness_access constants.%Copy.impl_witness.b51, element0 [concrete = constants.%Int.as.Copy.impl.Op.4f6] @@ -698,34 +698,34 @@ class V { // CHECK:STDOUT: --- use_base_method.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] +// CHECK:STDOUT: %MethodDerived: type = class_type @MethodDerived [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %Base: type = class_type @Base [concrete] -// CHECK:STDOUT: %Derived.f.cpp_overload_set.type: type = cpp_overload_set_type @Derived.f.cpp_overload_set [concrete] -// CHECK:STDOUT: %Derived.f.cpp_overload_set.value: %Derived.f.cpp_overload_set.type = cpp_overload_set_value @Derived.f.cpp_overload_set [concrete] +// CHECK:STDOUT: %MethodBase: type = class_type @MethodBase [concrete] +// CHECK:STDOUT: %MethodDerived.f.cpp_overload_set.type: type = cpp_overload_set_type @MethodDerived.f.cpp_overload_set [concrete] +// CHECK:STDOUT: %MethodDerived.f.cpp_overload_set.value: %MethodDerived.f.cpp_overload_set.type = cpp_overload_set_value @MethodDerived.f.cpp_overload_set [concrete] // CHECK:STDOUT: %f__carbon_thunk.type: type = fn_type @f__carbon_thunk [concrete] // CHECK:STDOUT: %f__carbon_thunk: %f__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %Base.g.cpp_overload_set.type: type = cpp_overload_set_type @Base.g.cpp_overload_set [concrete] -// CHECK:STDOUT: %Base.g.cpp_overload_set.value: %Base.g.cpp_overload_set.type = cpp_overload_set_value @Base.g.cpp_overload_set [concrete] +// CHECK:STDOUT: %MethodBase.g.cpp_overload_set.type: type = cpp_overload_set_type @MethodBase.g.cpp_overload_set [concrete] +// CHECK:STDOUT: %MethodBase.g.cpp_overload_set.value: %MethodBase.g.cpp_overload_set.type = cpp_overload_set_value @MethodBase.g.cpp_overload_set [concrete] // CHECK:STDOUT: %g__carbon_thunk.type: type = fn_type @g__carbon_thunk [concrete] // CHECK:STDOUT: %g__carbon_thunk: %g__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .Derived = %Derived.decl -// CHECK:STDOUT: .Base = %Base.decl +// CHECK:STDOUT: .MethodDerived = %MethodDerived.decl +// CHECK:STDOUT: .MethodBase = %MethodBase.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %Derived.decl: type = class_decl @Derived [concrete = constants.%Derived] {} {} -// CHECK:STDOUT: %Base.decl: type = class_decl @Base [concrete = constants.%Base] {} {} -// CHECK:STDOUT: %Derived.f.cpp_overload_set.value: %Derived.f.cpp_overload_set.type = cpp_overload_set_value @Derived.f.cpp_overload_set [concrete = constants.%Derived.f.cpp_overload_set.value] +// CHECK:STDOUT: %MethodDerived.decl: type = class_decl @MethodDerived [concrete = constants.%MethodDerived] {} {} +// CHECK:STDOUT: %MethodBase.decl: type = class_decl @MethodBase [concrete = constants.%MethodBase] {} {} +// CHECK:STDOUT: %MethodDerived.f.cpp_overload_set.value: %MethodDerived.f.cpp_overload_set.type = cpp_overload_set_value @MethodDerived.f.cpp_overload_set [concrete = constants.%MethodDerived.f.cpp_overload_set.value] // CHECK:STDOUT: %f__carbon_thunk.decl: %f__carbon_thunk.type = fn_decl @f__carbon_thunk [concrete = constants.%f__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } -// CHECK:STDOUT: %Base.g.cpp_overload_set.value: %Base.g.cpp_overload_set.type = cpp_overload_set_value @Base.g.cpp_overload_set [concrete = constants.%Base.g.cpp_overload_set.value] +// CHECK:STDOUT: %MethodBase.g.cpp_overload_set.value: %MethodBase.g.cpp_overload_set.type = cpp_overload_set_value @MethodBase.g.cpp_overload_set [concrete = constants.%MethodBase.g.cpp_overload_set.value] // CHECK:STDOUT: %g__carbon_thunk.decl: %g__carbon_thunk.type = fn_decl @g__carbon_thunk [concrete = constants.%g__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { @@ -733,50 +733,50 @@ class V { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @CallDirect(%d.param: %Derived) { +// CHECK:STDOUT: fn @CallDirect(%d.param: %MethodDerived) { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %d.ref: %Derived = name_ref d, %d -// CHECK:STDOUT: %f.ref: %Derived.f.cpp_overload_set.type = name_ref f, imports.%Derived.f.cpp_overload_set.value [concrete = constants.%Derived.f.cpp_overload_set.value] +// CHECK:STDOUT: %d.ref: %MethodDerived = name_ref d, %d +// CHECK:STDOUT: %f.ref: %MethodDerived.f.cpp_overload_set.type = name_ref f, imports.%MethodDerived.f.cpp_overload_set.value [concrete = constants.%MethodDerived.f.cpp_overload_set.value] // CHECK:STDOUT: %bound_method: = bound_method %d.ref, %f.ref -// CHECK:STDOUT: %.loc8_3.1: %Base = as_compatible %d.ref -// CHECK:STDOUT: %.loc8_3.2: ref %Base = class_element_access %.loc8_3.1, element0 -// CHECK:STDOUT: %.loc8_3.3: ref %Base = converted %d.ref, %.loc8_3.2 -// CHECK:STDOUT: %.loc8_3.4: %Base = acquire_value %.loc8_3.3 +// CHECK:STDOUT: %.loc8_3.1: %MethodBase = as_compatible %d.ref +// CHECK:STDOUT: %.loc8_3.2: ref %MethodBase = class_element_access %.loc8_3.1, element0 +// CHECK:STDOUT: %.loc8_3.3: ref %MethodBase = converted %d.ref, %.loc8_3.2 +// CHECK:STDOUT: %.loc8_3.4: %MethodBase = acquire_value %.loc8_3.3 // CHECK:STDOUT: %f__carbon_thunk.call: init %empty_tuple.type = call imports.%f__carbon_thunk.decl(%.loc8_3.4) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @CallQualified(%d.param: %Derived) { +// CHECK:STDOUT: fn @CallQualified(%d.param: %MethodDerived) { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %d.ref: %Derived = name_ref d, %d +// CHECK:STDOUT: %d.ref: %MethodDerived = name_ref d, %d // CHECK:STDOUT: %Cpp.ref.loc14: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Base.ref: type = name_ref Base, imports.%Base.decl [concrete = constants.%Base] -// CHECK:STDOUT: %g.ref: %Base.g.cpp_overload_set.type = name_ref g, imports.%Base.g.cpp_overload_set.value [concrete = constants.%Base.g.cpp_overload_set.value] +// CHECK:STDOUT: %MethodBase.ref: type = name_ref MethodBase, imports.%MethodBase.decl [concrete = constants.%MethodBase] +// CHECK:STDOUT: %g.ref: %MethodBase.g.cpp_overload_set.type = name_ref g, imports.%MethodBase.g.cpp_overload_set.value [concrete = constants.%MethodBase.g.cpp_overload_set.value] // CHECK:STDOUT: %bound_method: = bound_method %d.ref, %g.ref -// CHECK:STDOUT: %.loc14_3.1: %Base = as_compatible %d.ref -// CHECK:STDOUT: %.loc14_3.2: ref %Base = class_element_access %.loc14_3.1, element0 -// CHECK:STDOUT: %.loc14_3.3: ref %Base = converted %d.ref, %.loc14_3.2 -// CHECK:STDOUT: %.loc14_3.4: %Base = acquire_value %.loc14_3.3 +// CHECK:STDOUT: %.loc14_3.1: %MethodBase = as_compatible %d.ref +// CHECK:STDOUT: %.loc14_3.2: ref %MethodBase = class_element_access %.loc14_3.1, element0 +// CHECK:STDOUT: %.loc14_3.3: ref %MethodBase = converted %d.ref, %.loc14_3.2 +// CHECK:STDOUT: %.loc14_3.4: %MethodBase = acquire_value %.loc14_3.3 // CHECK:STDOUT: %g__carbon_thunk.call: init %empty_tuple.type = call imports.%g__carbon_thunk.decl(%.loc14_3.4) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @CallBaseQualifiedByDerived(%d.param: %Derived, %b.param: %Base) { +// CHECK:STDOUT: fn @CallBaseQualifiedByDerived(%d.param: %MethodDerived, %b.param: %MethodBase) { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %d.ref: %Derived = name_ref d, %d +// CHECK:STDOUT: %d.ref: %MethodDerived = name_ref d, %d // CHECK:STDOUT: %Cpp.ref.loc23: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Derived.ref.loc23: type = name_ref Derived, imports.%Derived.decl [concrete = constants.%Derived] -// CHECK:STDOUT: %f.ref.loc23: %Derived.f.cpp_overload_set.type = name_ref f, imports.%Derived.f.cpp_overload_set.value [concrete = constants.%Derived.f.cpp_overload_set.value] +// CHECK:STDOUT: %MethodDerived.ref.loc23: type = name_ref MethodDerived, imports.%MethodDerived.decl [concrete = constants.%MethodDerived] +// CHECK:STDOUT: %f.ref.loc23: %MethodDerived.f.cpp_overload_set.type = name_ref f, imports.%MethodDerived.f.cpp_overload_set.value [concrete = constants.%MethodDerived.f.cpp_overload_set.value] // CHECK:STDOUT: %bound_method.loc23: = bound_method %d.ref, %f.ref.loc23 -// CHECK:STDOUT: %.loc23_3.1: %Base = as_compatible %d.ref -// CHECK:STDOUT: %.loc23_3.2: ref %Base = class_element_access %.loc23_3.1, element0 -// CHECK:STDOUT: %.loc23_3.3: ref %Base = converted %d.ref, %.loc23_3.2 -// CHECK:STDOUT: %.loc23_3.4: %Base = acquire_value %.loc23_3.3 +// CHECK:STDOUT: %.loc23_3.1: %MethodBase = as_compatible %d.ref +// CHECK:STDOUT: %.loc23_3.2: ref %MethodBase = class_element_access %.loc23_3.1, element0 +// CHECK:STDOUT: %.loc23_3.3: ref %MethodBase = converted %d.ref, %.loc23_3.2 +// CHECK:STDOUT: %.loc23_3.4: %MethodBase = acquire_value %.loc23_3.3 // CHECK:STDOUT: %f__carbon_thunk.call.loc23: init %empty_tuple.type = call imports.%f__carbon_thunk.decl(%.loc23_3.4) -// CHECK:STDOUT: %b.ref: %Base = name_ref b, %b +// CHECK:STDOUT: %b.ref: %MethodBase = name_ref b, %b // CHECK:STDOUT: %Cpp.ref.loc24: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Derived.ref.loc24: type = name_ref Derived, imports.%Derived.decl [concrete = constants.%Derived] -// CHECK:STDOUT: %f.ref.loc24: %Derived.f.cpp_overload_set.type = name_ref f, imports.%Derived.f.cpp_overload_set.value [concrete = constants.%Derived.f.cpp_overload_set.value] +// CHECK:STDOUT: %MethodDerived.ref.loc24: type = name_ref MethodDerived, imports.%MethodDerived.decl [concrete = constants.%MethodDerived] +// CHECK:STDOUT: %f.ref.loc24: %MethodDerived.f.cpp_overload_set.type = name_ref f, imports.%MethodDerived.f.cpp_overload_set.value [concrete = constants.%MethodDerived.f.cpp_overload_set.value] // CHECK:STDOUT: %bound_method.loc24: = bound_method %b.ref, %f.ref.loc24 // CHECK:STDOUT: %f__carbon_thunk.call.loc24: init %empty_tuple.type = call imports.%f__carbon_thunk.decl(%b.ref) // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/class/import/class.carbon b/toolchain/check/testdata/interop/cpp/class/import/class.carbon index 95503a13ad97..04b27e9b7b84 100644 --- a/toolchain/check/testdata/interop/cpp/class/import/class.carbon +++ b/toolchain/check/testdata/interop/cpp/class/import/class.carbon @@ -16,7 +16,7 @@ // --- declaration.h -class Bar; +class DeclBar; // --- import_declaration.carbon @@ -25,7 +25,7 @@ library "[[@TEST_NAME]]"; import Cpp library "declaration.h"; //@dump-sem-ir-begin -fn MyF(bar: Cpp.Bar*); +fn MyF(bar: Cpp.DeclBar*); //@dump-sem-ir-end // --- fail_use_declaration_as_definition.carbon @@ -35,15 +35,15 @@ library "[[@TEST_NAME]]"; import Cpp library "declaration.h"; fn MyF() { - // CHECK:STDERR: fail_use_declaration_as_definition.carbon:[[@LINE+8]]:19: error: binding pattern has incomplete type `Bar` in name binding declaration [IncompleteTypeInBindingDecl] - // CHECK:STDERR: var unused bar: Cpp.Bar; - // CHECK:STDERR: ^~~~~~~ + // CHECK:STDERR: fail_use_declaration_as_definition.carbon:[[@LINE+8]]:19: error: binding pattern has incomplete type `DeclBar` in name binding declaration [IncompleteTypeInBindingDecl] + // CHECK:STDERR: var unused bar: Cpp.DeclBar; + // CHECK:STDERR: ^~~~~~~~~~~ // CHECK:STDERR: fail_use_declaration_as_definition.carbon:[[@LINE-6]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./declaration.h:2:7: note: class was forward declared here [ClassForwardDeclaredHere] - // CHECK:STDERR: class Bar; + // CHECK:STDERR: class DeclBar; // CHECK:STDERR: ^ // CHECK:STDERR: - var unused bar: Cpp.Bar; + var unused bar: Cpp.DeclBar; } // ============================================================================ @@ -52,7 +52,7 @@ fn MyF() { // --- definition.h -class Bar {}; +class DefBar {}; // --- import_definition.carbon @@ -61,7 +61,7 @@ library "[[@TEST_NAME]]"; import Cpp library "definition.h"; //@dump-sem-ir-begin -fn MyF(bar: Cpp.Bar*); +fn MyF(bar: Cpp.DefBar*); //@dump-sem-ir-end // ============================================================================ @@ -70,8 +70,8 @@ fn MyF(bar: Cpp.Bar*); // --- declaration_and_definition.h -class Bar; -class Bar {}; +class DeclDefBar; +class DeclDefBar {}; // --- import_declaration_and_definition.carbon @@ -80,7 +80,7 @@ library "[[@TEST_NAME]]"; import Cpp library "declaration_and_definition.h"; //@dump-sem-ir-begin -fn MyF(bar: Cpp.Bar*); +fn MyF(bar: Cpp.DeclDefBar*); //@dump-sem-ir-end // ============================================================================ @@ -89,7 +89,7 @@ fn MyF(bar: Cpp.Bar*); // --- static_member_function.h -class Bar { +class StaticMemberFnBar { public: static auto foo() -> void; }; @@ -102,7 +102,7 @@ import Cpp library "static_member_function.h"; fn MyF() { //@dump-sem-ir-begin - Cpp.Bar.foo(); + Cpp.StaticMemberFnBar.foo(); //@dump-sem-ir-end } @@ -112,9 +112,9 @@ fn MyF() { // --- static_data_member.h -class Bar { +class StaticDataMemberBar { public: - static Bar* _Nonnull foo; + static StaticDataMemberBar* _Nonnull foo; }; // --- import_static_data_member.carbon @@ -125,7 +125,7 @@ import Cpp library "static_data_member.h"; fn MyF() { //@dump-sem-ir-begin - let unused bar: Cpp.Bar* = Cpp.Bar.foo; + let unused bar: Cpp.StaticDataMemberBar* = Cpp.StaticDataMemberBar.foo; //@dump-sem-ir-end } @@ -135,9 +135,9 @@ fn MyF() { // --- data_member.h -class Bar { +class DataMemberBar { public: - Bar* _Nonnull foo; + DataMemberBar* _Nonnull foo; }; // --- import_data_member.carbon @@ -147,8 +147,8 @@ library "[[@TEST_NAME]]"; import Cpp library "data_member.h"; //@dump-sem-ir-begin -fn MyF(bar : Cpp.Bar*) { - let unused foo_bar: Cpp.Bar* = bar->foo; +fn MyF(bar : Cpp.DataMemberBar*) { + let unused foo_bar: Cpp.DataMemberBar* = bar->foo; } //@dump-sem-ir-end @@ -158,9 +158,9 @@ fn MyF(bar : Cpp.Bar*) { // --- dynamic.h -class Bar { +class DynamicBar { public: - virtual ~Bar(); + virtual ~DynamicBar(); virtual void f(); }; @@ -171,7 +171,7 @@ library "[[@TEST_NAME]]"; import Cpp library "dynamic.h"; //@dump-sem-ir-begin -fn MyF(bar: Cpp.Bar*) { +fn MyF(bar: Cpp.DynamicBar*) { bar->f(); } //@dump-sem-ir-end @@ -182,7 +182,7 @@ fn MyF(bar: Cpp.Bar*) { // --- to_inherit_public.h -class Bar { +class ToInheritBar { public: static auto foo() -> void; }; @@ -195,7 +195,7 @@ import Cpp library "to_inherit_public.h"; //@dump-sem-ir-begin class Derived { - extend base: Cpp.Bar; + extend base: Cpp.ToInheritBar; } fn MyF() { @@ -212,7 +212,7 @@ fn MyF() { struct X {}; template -class Bar {}; +class TemplateBar {}; // --- import_template.carbon @@ -221,7 +221,7 @@ library "[[@TEST_NAME]]"; import Cpp library "template.h"; //@dump-sem-ir-begin -fn MyF(bar: Cpp.Bar(Cpp.X)*); +fn MyF(bar: Cpp.TemplateBar(Cpp.X)*); //@dump-sem-ir-end // --- fail_copy_witness_of_incomplete_class.carbon @@ -255,8 +255,8 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: --- import_declaration.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] +// CHECK:STDOUT: %DeclBar: type = class_type @DeclBar [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %DeclBar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] // CHECK:STDOUT: %bar.patt: %pattern_type = wrapper_binding_pattern bar, %bar.param_patt [concrete] @@ -266,10 +266,10 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .Bar = %Bar.decl +// CHECK:STDOUT: .DeclBar = %DeclBar.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {} +// CHECK:STDOUT: %DeclBar.decl: type = class_decl @DeclBar [concrete = constants.%DeclBar] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -280,8 +280,8 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// 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: %DeclBar.ref: type = name_ref DeclBar, imports.%DeclBar.decl [concrete = constants.%DeclBar] +// CHECK:STDOUT: %ptr: type = ptr_type %DeclBar.ref [concrete = constants.%ptr] // CHECK:STDOUT: } // CHECK:STDOUT: %bar: %ptr = wrapper_binding bar, %bar.param // CHECK:STDOUT: } @@ -292,8 +292,8 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: --- import_definition.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] +// CHECK:STDOUT: %DefBar: type = class_type @DefBar [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %DefBar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] // CHECK:STDOUT: %bar.patt: %pattern_type = wrapper_binding_pattern bar, %bar.param_patt [concrete] @@ -303,10 +303,10 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .Bar = %Bar.decl +// CHECK:STDOUT: .DefBar = %DefBar.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {} +// CHECK:STDOUT: %DefBar.decl: type = class_decl @DefBar [concrete = constants.%DefBar] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -317,8 +317,8 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// 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: %DefBar.ref: type = name_ref DefBar, imports.%DefBar.decl [concrete = constants.%DefBar] +// CHECK:STDOUT: %ptr: type = ptr_type %DefBar.ref [concrete = constants.%ptr] // CHECK:STDOUT: } // CHECK:STDOUT: %bar: %ptr = wrapper_binding bar, %bar.param // CHECK:STDOUT: } @@ -329,8 +329,8 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: --- import_declaration_and_definition.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] +// CHECK:STDOUT: %DeclDefBar: type = class_type @DeclDefBar [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %DeclDefBar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] // CHECK:STDOUT: %bar.patt: %pattern_type = wrapper_binding_pattern bar, %bar.param_patt [concrete] @@ -340,10 +340,10 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .Bar = %Bar.decl +// CHECK:STDOUT: .DeclDefBar = %DeclDefBar.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {} +// CHECK:STDOUT: %DeclDefBar.decl: type = class_decl @DeclDefBar [concrete = constants.%DeclDefBar] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -354,8 +354,8 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// 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: %DeclDefBar.ref: type = name_ref DeclDefBar, imports.%DeclDefBar.decl [concrete = constants.%DeclDefBar] +// CHECK:STDOUT: %ptr: type = ptr_type %DeclDefBar.ref [concrete = constants.%ptr] // CHECK:STDOUT: } // CHECK:STDOUT: %bar: %ptr = wrapper_binding bar, %bar.param // CHECK:STDOUT: } @@ -367,38 +367,38 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %Bar.foo.cpp_overload_set.type: type = cpp_overload_set_type @Bar.foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %Bar.foo.cpp_overload_set.value: %Bar.foo.cpp_overload_set.type = cpp_overload_set_value @Bar.foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %Bar.foo.type: type = fn_type @Bar.foo [concrete] -// CHECK:STDOUT: %Bar.foo: %Bar.foo.type = struct_value () [concrete] +// CHECK:STDOUT: %StaticMemberFnBar: type = class_type @StaticMemberFnBar [concrete] +// CHECK:STDOUT: %StaticMemberFnBar.foo.cpp_overload_set.type: type = cpp_overload_set_type @StaticMemberFnBar.foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %StaticMemberFnBar.foo.cpp_overload_set.value: %StaticMemberFnBar.foo.cpp_overload_set.type = cpp_overload_set_value @StaticMemberFnBar.foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %StaticMemberFnBar.foo.type: type = fn_type @StaticMemberFnBar.foo [concrete] +// CHECK:STDOUT: %StaticMemberFnBar.foo: %StaticMemberFnBar.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: .StaticMemberFnBar = %StaticMemberFnBar.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {} -// CHECK:STDOUT: %Bar.foo.cpp_overload_set.value: %Bar.foo.cpp_overload_set.type = cpp_overload_set_value @Bar.foo.cpp_overload_set [concrete = constants.%Bar.foo.cpp_overload_set.value] -// CHECK:STDOUT: %Bar.foo.decl: %Bar.foo.type = fn_decl @Bar.foo [concrete = constants.%Bar.foo] {} {} +// CHECK:STDOUT: %StaticMemberFnBar.decl: type = class_decl @StaticMemberFnBar [concrete = constants.%StaticMemberFnBar] {} {} +// CHECK:STDOUT: %StaticMemberFnBar.foo.cpp_overload_set.value: %StaticMemberFnBar.foo.cpp_overload_set.type = cpp_overload_set_value @StaticMemberFnBar.foo.cpp_overload_set [concrete = constants.%StaticMemberFnBar.foo.cpp_overload_set.value] +// CHECK:STDOUT: %StaticMemberFnBar.foo.decl: %StaticMemberFnBar.foo.type = fn_decl @StaticMemberFnBar.foo [concrete = constants.%StaticMemberFnBar.foo] {} {} // 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: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] -// CHECK:STDOUT: %foo.ref: %Bar.foo.cpp_overload_set.type = name_ref foo, imports.%Bar.foo.cpp_overload_set.value [concrete = constants.%Bar.foo.cpp_overload_set.value] -// CHECK:STDOUT: %Bar.foo.call: init %empty_tuple.type = call imports.%Bar.foo.decl() +// CHECK:STDOUT: %StaticMemberFnBar.ref: type = name_ref StaticMemberFnBar, imports.%StaticMemberFnBar.decl [concrete = constants.%StaticMemberFnBar] +// CHECK:STDOUT: %foo.ref: %StaticMemberFnBar.foo.cpp_overload_set.type = name_ref foo, imports.%StaticMemberFnBar.foo.cpp_overload_set.value [concrete = constants.%StaticMemberFnBar.foo.cpp_overload_set.value] +// CHECK:STDOUT: %StaticMemberFnBar.foo.call: init %empty_tuple.type = call imports.%StaticMemberFnBar.foo.decl() // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_static_data_member.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %ptr.227: type = ptr_type %Bar [concrete] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.227 [concrete] +// CHECK:STDOUT: %StaticDataMemberBar: type = class_type @StaticDataMemberBar [concrete] +// CHECK:STDOUT: %ptr.a89: type = ptr_type %StaticDataMemberBar [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.a89 [concrete] // CHECK:STDOUT: %bar.patt: %pattern_type = value_binding_pattern bar [concrete] // CHECK:STDOUT: %foo.patt: %pattern_type = ref_binding_pattern foo [concrete] // CHECK:STDOUT: %foo.var_patt: %pattern_type = var_pattern %foo.patt [concrete] @@ -406,27 +406,27 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .Bar = %Bar.decl +// CHECK:STDOUT: .StaticDataMemberBar = %StaticDataMemberBar.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {} +// CHECK:STDOUT: %StaticDataMemberBar.decl: type = class_decl @StaticDataMemberBar [concrete = constants.%StaticDataMemberBar] {} {} // CHECK:STDOUT: %foo.patt: %pattern_type = ref_binding_pattern foo [concrete = constants.%foo.patt] // CHECK:STDOUT: %foo.var_patt: %pattern_type = var_pattern %foo.patt [concrete = constants.%foo.var_patt] -// CHECK:STDOUT: %foo.var: ref %ptr.227 = var_storage %foo.var_patt [concrete] +// CHECK:STDOUT: %foo.var: ref %ptr.a89 = var_storage %foo.var_patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Cpp.ref.loc8_30: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Bar.ref.loc8_33: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] -// CHECK:STDOUT: %foo.ref: ref %ptr.227 = name_ref foo, imports.%foo.var [concrete = imports.%foo.var] -// CHECK:STDOUT: %.loc8_37: %ptr.227 = acquire_value %foo.ref -// CHECK:STDOUT: %.loc8_26: type = splice_block %ptr [concrete = constants.%ptr.227] { +// CHECK:STDOUT: %Cpp.ref.loc8_46: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %StaticDataMemberBar.ref.loc8_49: type = name_ref StaticDataMemberBar, imports.%StaticDataMemberBar.decl [concrete = constants.%StaticDataMemberBar] +// CHECK:STDOUT: %foo.ref: ref %ptr.a89 = name_ref foo, imports.%foo.var [concrete = imports.%foo.var] +// CHECK:STDOUT: %.loc8_69: %ptr.a89 = acquire_value %foo.ref +// CHECK:STDOUT: %.loc8_42: type = splice_block %ptr [concrete = constants.%ptr.a89] { // CHECK:STDOUT: %Cpp.ref.loc8_19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Bar.ref.loc8_22: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] -// CHECK:STDOUT: %ptr: type = ptr_type %Bar.ref.loc8_22 [concrete = constants.%ptr.227] +// CHECK:STDOUT: %StaticDataMemberBar.ref.loc8_22: type = name_ref StaticDataMemberBar, imports.%StaticDataMemberBar.decl [concrete = constants.%StaticDataMemberBar] +// CHECK:STDOUT: %ptr: type = ptr_type %StaticDataMemberBar.ref.loc8_22 [concrete = constants.%ptr.a89] // CHECK:STDOUT: } -// CHECK:STDOUT: %bar: %ptr.227 = wrapper_binding bar, %.loc8_37 +// CHECK:STDOUT: %bar: %ptr.a89 = wrapper_binding bar, %.loc8_69 // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %bar.patt: %pattern_type = value_binding_pattern bar [concrete = constants.%bar.patt] // CHECK:STDOUT: } @@ -436,23 +436,23 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: --- import_data_member.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %ptr.227: type = ptr_type %Bar [concrete] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.227 [concrete] +// CHECK:STDOUT: %DataMemberBar: type = class_type @DataMemberBar [concrete] +// CHECK:STDOUT: %ptr.ec1: type = ptr_type %DataMemberBar [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.ec1 [concrete] // CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] // CHECK:STDOUT: %bar.patt: %pattern_type = wrapper_binding_pattern bar, %bar.param_patt [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: %foo_bar.patt: %pattern_type = value_binding_pattern foo_bar [concrete] -// CHECK:STDOUT: %Bar.elem: type = unbound_element_type %Bar, %ptr.227 [concrete] +// CHECK:STDOUT: %DataMemberBar.elem: type = unbound_element_type %DataMemberBar, %ptr.ec1 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .Bar = %Bar.decl +// CHECK:STDOUT: .DataMemberBar = %DataMemberBar.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {} +// CHECK:STDOUT: %DataMemberBar.decl: type = class_decl @DataMemberBar [concrete = constants.%DataMemberBar] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -460,29 +460,29 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete = constants.%bar.param_patt] // CHECK:STDOUT: %bar.patt: %pattern_type = wrapper_binding_pattern bar, %bar.param_patt [concrete = constants.%bar.patt] // CHECK:STDOUT: } { -// CHECK:STDOUT: %bar.param: %ptr.227 = value_param call_param0 -// CHECK:STDOUT: %.loc7: type = splice_block %ptr.loc7 [concrete = constants.%ptr.227] { +// CHECK:STDOUT: %bar.param: %ptr.ec1 = value_param call_param0 +// CHECK:STDOUT: %.loc7: type = splice_block %ptr.loc7 [concrete = constants.%ptr.ec1] { // CHECK:STDOUT: %Cpp.ref.loc7: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// 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.227] +// CHECK:STDOUT: %DataMemberBar.ref.loc7: type = name_ref DataMemberBar, imports.%DataMemberBar.decl [concrete = constants.%DataMemberBar] +// CHECK:STDOUT: %ptr.loc7: type = ptr_type %DataMemberBar.ref.loc7 [concrete = constants.%ptr.ec1] // CHECK:STDOUT: } -// CHECK:STDOUT: %bar: %ptr.227 = wrapper_binding bar, %bar.param +// CHECK:STDOUT: %bar: %ptr.ec1 = wrapper_binding bar, %bar.param // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @MyF(%bar.param: %ptr.227) { +// CHECK:STDOUT: fn @MyF(%bar.param: %ptr.ec1) { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %bar.ref: %ptr.227 = name_ref bar, %bar -// CHECK:STDOUT: %.loc8_37.1: ref %Bar = deref %bar.ref -// CHECK:STDOUT: %foo.ref: %Bar.elem = name_ref foo, @Bar.%.1 [concrete = @Bar.%.1] -// CHECK:STDOUT: %.loc8_37.2: ref %ptr.227 = class_element_access %.loc8_37.1, element0 -// CHECK:STDOUT: %.loc8_37.3: %ptr.227 = acquire_value %.loc8_37.2 -// CHECK:STDOUT: %.loc8_30: type = splice_block %ptr.loc8 [concrete = constants.%ptr.227] { +// CHECK:STDOUT: %bar.ref: %ptr.ec1 = name_ref bar, %bar +// CHECK:STDOUT: %.loc8_47.1: ref %DataMemberBar = deref %bar.ref +// CHECK:STDOUT: %foo.ref: %DataMemberBar.elem = name_ref foo, @DataMemberBar.%.1 [concrete = @DataMemberBar.%.1] +// CHECK:STDOUT: %.loc8_47.2: ref %ptr.ec1 = class_element_access %.loc8_47.1, element0 +// CHECK:STDOUT: %.loc8_47.3: %ptr.ec1 = acquire_value %.loc8_47.2 +// CHECK:STDOUT: %.loc8_40: type = splice_block %ptr.loc8 [concrete = constants.%ptr.ec1] { // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Bar.ref.loc8: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] -// CHECK:STDOUT: %ptr.loc8: type = ptr_type %Bar.ref.loc8 [concrete = constants.%ptr.227] +// CHECK:STDOUT: %DataMemberBar.ref.loc8: type = name_ref DataMemberBar, imports.%DataMemberBar.decl [concrete = constants.%DataMemberBar] +// CHECK:STDOUT: %ptr.loc8: type = ptr_type %DataMemberBar.ref.loc8 [concrete = constants.%ptr.ec1] // CHECK:STDOUT: } -// CHECK:STDOUT: %foo_bar: %ptr.227 = wrapper_binding foo_bar, %.loc8_37.3 +// CHECK:STDOUT: %foo_bar: %ptr.ec1 = wrapper_binding foo_bar, %.loc8_47.3 // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %foo_bar.patt: %pattern_type = value_binding_pattern foo_bar [concrete = constants.%foo_bar.patt] // CHECK:STDOUT: } @@ -492,62 +492,62 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: --- call_dynamic.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %ptr.227: type = ptr_type %Bar [concrete] -// CHECK:STDOUT: %pattern_type.1b6: type = pattern_type %ptr.227 [concrete] -// CHECK:STDOUT: %bar.param_patt: %pattern_type.1b6 = value_param_pattern [concrete] -// CHECK:STDOUT: %bar.patt: %pattern_type.1b6 = wrapper_binding_pattern bar, %bar.param_patt [concrete] +// CHECK:STDOUT: %DynamicBar: type = class_type @DynamicBar [concrete] +// CHECK:STDOUT: %ptr.077: type = ptr_type %DynamicBar [concrete] +// CHECK:STDOUT: %pattern_type.e8d: type = pattern_type %ptr.077 [concrete] +// CHECK:STDOUT: %bar.param_patt: %pattern_type.e8d = value_param_pattern [concrete] +// CHECK:STDOUT: %bar.patt: %pattern_type.e8d = wrapper_binding_pattern bar, %bar.param_patt [concrete] // 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.f.type: type = fn_type @Bar.f [concrete] -// CHECK:STDOUT: %Bar.f: %Bar.f.type = struct_value () [concrete] -// CHECK:STDOUT: %Bar.f.cpp_overload_set.type: type = cpp_overload_set_type @Bar.f.cpp_overload_set [concrete] -// CHECK:STDOUT: %Bar.f.cpp_overload_set.value: %Bar.f.cpp_overload_set.type = cpp_overload_set_value @Bar.f.cpp_overload_set [concrete] +// CHECK:STDOUT: %DynamicBar.f.type: type = fn_type @DynamicBar.f [concrete] +// CHECK:STDOUT: %DynamicBar.f: %DynamicBar.f.type = struct_value () [concrete] +// CHECK:STDOUT: %DynamicBar.f.cpp_overload_set.type: type = cpp_overload_set_type @DynamicBar.f.cpp_overload_set [concrete] +// CHECK:STDOUT: %DynamicBar.f.cpp_overload_set.value: %DynamicBar.f.cpp_overload_set.type = cpp_overload_set_value @DynamicBar.f.cpp_overload_set [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .Bar = %Bar.decl +// CHECK:STDOUT: .DynamicBar = %DynamicBar.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {} -// CHECK:STDOUT: %Bar.f.decl: %Bar.f.type = fn_decl @Bar.f [concrete = constants.%Bar.f] { +// CHECK:STDOUT: %DynamicBar.decl: type = class_decl @DynamicBar [concrete = constants.%DynamicBar] {} {} +// CHECK:STDOUT: %DynamicBar.f.decl: %DynamicBar.f.type = fn_decl @DynamicBar.f [concrete = constants.%DynamicBar.f] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } -// CHECK:STDOUT: %Bar.f.cpp_overload_set.value: %Bar.f.cpp_overload_set.type = cpp_overload_set_value @Bar.f.cpp_overload_set [concrete = constants.%Bar.f.cpp_overload_set.value] +// CHECK:STDOUT: %DynamicBar.f.cpp_overload_set.value: %DynamicBar.f.cpp_overload_set.type = cpp_overload_set_value @DynamicBar.f.cpp_overload_set [concrete = constants.%DynamicBar.f.cpp_overload_set.value] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { // CHECK:STDOUT: %MyF.decl: %MyF.type = fn_decl @MyF [concrete = constants.%MyF] { -// CHECK:STDOUT: %bar.param_patt: %pattern_type.1b6 = value_param_pattern [concrete = constants.%bar.param_patt] -// CHECK:STDOUT: %bar.patt: %pattern_type.1b6 = wrapper_binding_pattern bar, %bar.param_patt [concrete = constants.%bar.patt] +// CHECK:STDOUT: %bar.param_patt: %pattern_type.e8d = value_param_pattern [concrete = constants.%bar.param_patt] +// CHECK:STDOUT: %bar.patt: %pattern_type.e8d = wrapper_binding_pattern bar, %bar.param_patt [concrete = constants.%bar.patt] // CHECK:STDOUT: } { -// CHECK:STDOUT: %bar.param: %ptr.227 = value_param call_param0 -// CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr.227] { +// CHECK:STDOUT: %bar.param: %ptr.077 = value_param call_param0 +// CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr.077] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// 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.227] +// CHECK:STDOUT: %DynamicBar.ref: type = name_ref DynamicBar, imports.%DynamicBar.decl [concrete = constants.%DynamicBar] +// CHECK:STDOUT: %ptr: type = ptr_type %DynamicBar.ref [concrete = constants.%ptr.077] // CHECK:STDOUT: } -// CHECK:STDOUT: %bar: %ptr.227 = wrapper_binding bar, %bar.param +// CHECK:STDOUT: %bar: %ptr.077 = wrapper_binding bar, %bar.param // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: vtable @Bar.vtable { +// CHECK:STDOUT: vtable @DynamicBar.vtable { // CHECK:STDOUT: invalid // CHECK:STDOUT: invalid -// CHECK:STDOUT: imports.%Bar.f.decl +// CHECK:STDOUT: imports.%DynamicBar.f.decl // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @MyF(%bar.param: %ptr.227) { +// CHECK:STDOUT: fn @MyF(%bar.param: %ptr.077) { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %bar.ref: %ptr.227 = name_ref bar, %bar -// CHECK:STDOUT: %.loc8: ref %Bar = deref %bar.ref -// CHECK:STDOUT: %f.ref: %Bar.f.cpp_overload_set.type = name_ref f, imports.%Bar.f.cpp_overload_set.value [concrete = constants.%Bar.f.cpp_overload_set.value] +// CHECK:STDOUT: %bar.ref: %ptr.077 = name_ref bar, %bar +// CHECK:STDOUT: %.loc8: ref %DynamicBar = deref %bar.ref +// CHECK:STDOUT: %f.ref: %DynamicBar.f.cpp_overload_set.type = name_ref f, imports.%DynamicBar.f.cpp_overload_set.value [concrete = constants.%DynamicBar.f.cpp_overload_set.value] // CHECK:STDOUT: %bound_method: = bound_method %.loc8, %f.ref -// CHECK:STDOUT: %Bar.f.call: init %empty_tuple.type = call imports.%Bar.f.decl(%.loc8) +// CHECK:STDOUT: %DynamicBar.f.call: init %empty_tuple.type = call imports.%DynamicBar.f.decl(%.loc8) // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: @@ -555,27 +555,27 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Derived: type = class_type @Derived [concrete] -// CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] +// CHECK:STDOUT: %ToInheritBar: type = class_type @ToInheritBar [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.825: type = struct_type {.base: %Bar} [concrete] -// CHECK:STDOUT: %complete_type.cb3: = complete_type_witness %struct_type.base.825 [concrete] +// CHECK:STDOUT: %Derived.elem: type = unbound_element_type %Derived, %ToInheritBar [concrete] +// CHECK:STDOUT: %struct_type.base.188: type = struct_type {.base: %ToInheritBar} [concrete] +// CHECK:STDOUT: %complete_type.439: = complete_type_witness %struct_type.base.188 [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] -// CHECK:STDOUT: %Bar.foo.cpp_overload_set.type: type = cpp_overload_set_type @Bar.foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %Bar.foo.cpp_overload_set.value: %Bar.foo.cpp_overload_set.type = cpp_overload_set_value @Bar.foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %Bar.foo.type: type = fn_type @Bar.foo [concrete] -// CHECK:STDOUT: %Bar.foo: %Bar.foo.type = struct_value () [concrete] +// CHECK:STDOUT: %ToInheritBar.foo.cpp_overload_set.type: type = cpp_overload_set_type @ToInheritBar.foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %ToInheritBar.foo.cpp_overload_set.value: %ToInheritBar.foo.cpp_overload_set.type = cpp_overload_set_value @ToInheritBar.foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %ToInheritBar.foo.type: type = fn_type @ToInheritBar.foo [concrete] +// CHECK:STDOUT: %ToInheritBar.foo: %ToInheritBar.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: .ToInheritBar = %ToInheritBar.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {} -// CHECK:STDOUT: %Bar.foo.cpp_overload_set.value: %Bar.foo.cpp_overload_set.type = cpp_overload_set_value @Bar.foo.cpp_overload_set [concrete = constants.%Bar.foo.cpp_overload_set.value] -// CHECK:STDOUT: %Bar.foo.decl: %Bar.foo.type = fn_decl @Bar.foo [concrete = constants.%Bar.foo] {} {} +// CHECK:STDOUT: %ToInheritBar.decl: type = class_decl @ToInheritBar [concrete = constants.%ToInheritBar] {} {} +// CHECK:STDOUT: %ToInheritBar.foo.cpp_overload_set.value: %ToInheritBar.foo.cpp_overload_set.type = cpp_overload_set_value @ToInheritBar.foo.cpp_overload_set [concrete = constants.%ToInheritBar.foo.cpp_overload_set.value] +// CHECK:STDOUT: %ToInheritBar.foo.decl: %ToInheritBar.foo.type = fn_decl @ToInheritBar.foo [concrete = constants.%ToInheritBar.foo] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -585,34 +585,34 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: // CHECK:STDOUT: class @Derived { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Bar.ref: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] -// CHECK:STDOUT: %.loc8: %Derived.elem = base_decl %Bar.ref, element0 [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.825 [concrete = constants.%complete_type.cb3] +// CHECK:STDOUT: %ToInheritBar.ref: type = name_ref ToInheritBar, imports.%ToInheritBar.decl [concrete = constants.%ToInheritBar] +// CHECK:STDOUT: %.loc8: %Derived.elem = base_decl %ToInheritBar.ref, element0 [concrete] +// CHECK:STDOUT: %complete_type: = complete_type_witness constants.%struct_type.base.188 [concrete = constants.%complete_type.439] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Derived // CHECK:STDOUT: .base = %.loc8 // CHECK:STDOUT: .foo = -// CHECK:STDOUT: extend %Bar.ref +// CHECK:STDOUT: extend %ToInheritBar.ref // 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: %Bar.foo.cpp_overload_set.type = name_ref foo, imports.%Bar.foo.cpp_overload_set.value [concrete = constants.%Bar.foo.cpp_overload_set.value] -// CHECK:STDOUT: %Bar.foo.call: init %empty_tuple.type = call imports.%Bar.foo.decl() +// CHECK:STDOUT: %foo.ref: %ToInheritBar.foo.cpp_overload_set.type = name_ref foo, imports.%ToInheritBar.foo.cpp_overload_set.value [concrete = constants.%ToInheritBar.foo.cpp_overload_set.value] +// CHECK:STDOUT: %ToInheritBar.foo.call: init %empty_tuple.type = call imports.%ToInheritBar.foo.decl() // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_template.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %Bar.type: type = cpp_type_template_type Bar [concrete] -// CHECK:STDOUT: %Bar.template: %Bar.type = struct_value () [concrete] +// CHECK:STDOUT: %TemplateBar.type: type = cpp_type_template_type TemplateBar [concrete] +// CHECK:STDOUT: %TemplateBar.template: %TemplateBar.type = struct_value () [concrete] // CHECK:STDOUT: %X: type = class_type @X [concrete] -// CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] +// CHECK:STDOUT: %TemplateBar: type = class_type @TemplateBar [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %TemplateBar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] // CHECK:STDOUT: %bar.patt: %pattern_type = wrapper_binding_pattern bar, %bar.param_patt [concrete] @@ -622,13 +622,13 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .Bar = %Bar.template +// CHECK:STDOUT: .TemplateBar = %TemplateBar.template // CHECK:STDOUT: .X = %X.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %Bar.template: %Bar.type = struct_value () [concrete = constants.%Bar.template] +// CHECK:STDOUT: %TemplateBar.template: %TemplateBar.type = struct_value () [concrete = constants.%TemplateBar.template] // CHECK:STDOUT: %X.decl: type = class_decl @X [concrete = constants.%X] {} {} -// CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {} +// CHECK:STDOUT: %TemplateBar.decl: type = class_decl @TemplateBar [concrete = constants.%TemplateBar] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -639,10 +639,10 @@ fn GenericUse(p2: Generic(Cpp.Class1)) { // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr] { // CHECK:STDOUT: %Cpp.ref.loc7_13: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Bar.ref: %Bar.type = name_ref Bar, imports.%Bar.template [concrete = constants.%Bar.template] -// CHECK:STDOUT: %Cpp.ref.loc7_21: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %TemplateBar.ref: %TemplateBar.type = name_ref TemplateBar, imports.%TemplateBar.template [concrete = constants.%TemplateBar.template] +// CHECK:STDOUT: %Cpp.ref.loc7_29: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %X.ref: type = name_ref X, imports.%X.decl [concrete = constants.%X] -// CHECK:STDOUT: %ptr: type = ptr_type imports.%Bar.decl [concrete = constants.%ptr] +// CHECK:STDOUT: %ptr: type = ptr_type imports.%TemplateBar.decl [concrete = constants.%ptr] // CHECK:STDOUT: } // CHECK:STDOUT: %bar: %ptr = wrapper_binding bar, %bar.param // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/interop/cpp/class/import/constructor.carbon b/toolchain/check/testdata/interop/cpp/class/import/constructor.carbon index 3aabdc9ee9b6..324b1290352d 100644 --- a/toolchain/check/testdata/interop/cpp/class/import/constructor.carbon +++ b/toolchain/check/testdata/interop/cpp/class/import/constructor.carbon @@ -16,9 +16,9 @@ // --- default.h -class C { +class DefaultC { public: - C(); + DefaultC(); }; struct NoDefault { @@ -33,7 +33,7 @@ import Cpp library "default.h"; fn F() { //@dump-sem-ir-begin - let unused c: Cpp.C = Cpp.C.C(); + let unused c: Cpp.DefaultC = Cpp.DefaultC.DefaultC(); //@dump-sem-ir-end } @@ -45,7 +45,7 @@ import Cpp library "default.h"; fn F() { //@dump-sem-ir-begin - var unused c: Cpp.C; + var unused c: Cpp.DefaultC; //@dump-sem-ir-end } @@ -54,7 +54,7 @@ fn G(generic T: Core.Default & Core.Destroy) { } fn CallG() { - G(Cpp.C); + G(Cpp.DefaultC); } // --- todo_fail_no_default_decl.carbon @@ -96,9 +96,9 @@ fn CallG() { // --- non_default.h -class C { +class NonDefaultC { public: - C(int x, int y); + NonDefaultC(int x, int y); }; // --- import_non_default.carbon @@ -109,7 +109,7 @@ import Cpp library "non_default.h"; fn F() { //@dump-sem-ir-begin - let unused c: Cpp.C = Cpp.C.C(123, 456); + let unused c: Cpp.NonDefaultC = Cpp.NonDefaultC.NonDefaultC(123, 456); //@dump-sem-ir-end } @@ -119,10 +119,10 @@ fn F() { // --- multiple.h -class C { +class MultipleC { public: - C(); - C(int x, int y); + MultipleC(); + MultipleC(int x, int y); }; // --- import_multiple.carbon @@ -133,8 +133,8 @@ import Cpp library "multiple.h"; fn F() { //@dump-sem-ir-begin - let unused c1: Cpp.C = Cpp.C.C(); - let unused c2: Cpp.C = Cpp.C.C(123, 456); + let unused c1: Cpp.MultipleC = Cpp.MultipleC.MultipleC(); + let unused c2: Cpp.MultipleC = Cpp.MultipleC.MultipleC(123, 456); //@dump-sem-ir-end } @@ -144,9 +144,9 @@ fn F() { // --- default_arguments.h -class C { +class DefaultArgsC { public: - C(int x, int y = 8); + DefaultArgsC(int x, int y = 8); }; // --- import_default_arguments.carbon @@ -157,8 +157,8 @@ import Cpp library "default_arguments.h"; fn F() { //@dump-sem-ir-begin - let unused c1: Cpp.C = Cpp.C.C(8, 9); - let unused c2: Cpp.C = Cpp.C.C(8); + let unused c1: Cpp.DefaultArgsC = Cpp.DefaultArgsC.DefaultArgsC(8, 9); + let unused c2: Cpp.DefaultArgsC = Cpp.DefaultArgsC.DefaultArgsC(8); //@dump-sem-ir-end } @@ -168,10 +168,10 @@ fn F() { // --- template.h -class C { +class TemplateC { public: - C(int); - template C(T); + TemplateC(int); + template TemplateC(T); }; // --- import_template.carbon @@ -182,9 +182,9 @@ import Cpp library "template.h"; fn F() { //@dump-sem-ir-begin - var c1: Cpp.C = Cpp.C.C(123); - var unused c2: Cpp.C = Cpp.C.C(true); - var unused c3: Cpp.C = Cpp.C.C(&c1); + var c1: Cpp.TemplateC = Cpp.TemplateC.TemplateC(123); + var unused c2: Cpp.TemplateC = Cpp.TemplateC.TemplateC(true); + var unused c3: Cpp.TemplateC = Cpp.TemplateC.TemplateC(&c1); //@dump-sem-ir-end } @@ -194,15 +194,15 @@ fn F() { // --- deleted.h -class C { +class DeletedC { public: - C() = delete; + DeletedC() = delete; }; -class D { +class DeletedD { public: - D(int) = delete; - D(short); + DeletedD(int) = delete; + DeletedD(short); }; // --- fail_import_deleted.carbon @@ -212,29 +212,28 @@ library "[[@TEST_NAME]]"; import Cpp library "deleted.h"; fn F() { - // CHECK:STDERR: fail_import_deleted.carbon:[[@LINE+8]]:33: error: call to deleted function 'C' [CppInteropParseError] - // CHECK:STDERR: 15 | let unused c: Cpp.C = Cpp.C.C(); - // CHECK:STDERR: | ^ + // CHECK:STDERR: fail_import_deleted.carbon:[[@LINE+8]]:54: error: call to deleted function 'DeletedC' [CppInteropParseError] + // CHECK:STDERR: 15 | let unused c: Cpp.DeletedC = Cpp.DeletedC.DeletedC(); + // CHECK:STDERR: | ^ // CHECK:STDERR: fail_import_deleted.carbon:[[@LINE-6]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./deleted.h:4:3: note: candidate constructor has been explicitly deleted [CppInteropParseNote] - // CHECK:STDERR: 4 | C() = delete; + // CHECK:STDERR: 4 | DeletedC() = delete; // CHECK:STDERR: | ^ // CHECK:STDERR: - let unused c: Cpp.C = Cpp.C.C(); - - // CHECK:STDERR: fail_import_deleted.carbon:[[@LINE+12]]:34: error: call to deleted function 'D' [CppInteropParseError] - // CHECK:STDERR: 29 | let unused d: Cpp.D = Cpp.D.D(0); - // CHECK:STDERR: | ^ - // CHECK:STDERR: fail_import_deleted.carbon:[[@LINE-16]]:10: in file included here [InCppInclude] + let unused c: Cpp.DeletedC = Cpp.DeletedC.DeletedC(); + // CHECK:STDERR: fail_import_deleted.carbon:[[@LINE+12]]:55: error: call to deleted function 'DeletedD' [CppInteropParseError] + // CHECK:STDERR: 28 | let unused d: Cpp.DeletedD = Cpp.DeletedD.DeletedD(0); + // CHECK:STDERR: | ^ + // CHECK:STDERR: fail_import_deleted.carbon:[[@LINE-15]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./deleted.h:9:3: note: candidate constructor has been explicitly deleted [CppInteropParseNote] - // CHECK:STDERR: 9 | D(int) = delete; + // CHECK:STDERR: 9 | DeletedD(int) = delete; // CHECK:STDERR: | ^ - // CHECK:STDERR: fail_import_deleted.carbon:[[@LINE-20]]:10: in file included here [InCppInclude] + // CHECK:STDERR: fail_import_deleted.carbon:[[@LINE-19]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./deleted.h:10:3: note: candidate constructor [CppInteropParseNote] - // CHECK:STDERR: 10 | D(short); + // CHECK:STDERR: 10 | DeletedD(short); // CHECK:STDERR: | ^ // CHECK:STDERR: - let unused d: Cpp.D = Cpp.D.D(0); + let unused d: Cpp.DeletedD = Cpp.DeletedD.DeletedD(0); } // ============================================================================ @@ -243,9 +242,9 @@ fn F() { // --- implicit_single_argument.h -class C { +class SingleArgC { public: - C(int x); + SingleArgC(int x); }; // --- import_implicit_single_argument.carbon @@ -256,8 +255,8 @@ import Cpp library "implicit_single_argument.h"; fn F() { //@dump-sem-ir-begin - let unused c1: Cpp.C = Cpp.C.C(8); - let unused c2: Cpp.C = 8 as i32; + let unused c1: Cpp.SingleArgC = Cpp.SingleArgC.SingleArgC(8); + let unused c2: Cpp.SingleArgC = 8 as i32; //@dump-sem-ir-end } @@ -267,9 +266,9 @@ fn F() { // --- implicit_multi_arguments.h -class C { +class MultiArgC { public: - C(int x, int y = 8); + MultiArgC(int x, int y = 8); }; // --- import_implicit_multi_arguments.carbon @@ -280,9 +279,9 @@ import Cpp library "implicit_multi_arguments.h"; fn F() { //@dump-sem-ir-begin - let unused c1: Cpp.C = Cpp.C.C(8, 9); - let unused c2: Cpp.C = Cpp.C.C(8); - let unused c3: Cpp.C = 8 as i32; + let unused c1: Cpp.MultiArgC = Cpp.MultiArgC.MultiArgC(8, 9); + let unused c2: Cpp.MultiArgC = Cpp.MultiArgC.MultiArgC(8); + let unused c3: Cpp.MultiArgC = 8 as i32; //@dump-sem-ir-end } @@ -292,7 +291,7 @@ fn F() { // --- incomplete.h -class C; +class IncompleteC; // --- fail_import_incomplete.carbon @@ -301,41 +300,41 @@ library "[[@TEST_NAME]]"; import Cpp library "incomplete.h"; fn F() { - // CHECK:STDERR: fail_import_incomplete.carbon:[[@LINE+8]]:4: error: member access into incomplete class `Cpp.C` [QualifiedExprInIncompleteClassScope] - // CHECK:STDERR: Cpp.C.C(); - // CHECK:STDERR: ^~~~~~~ + // CHECK:STDERR: fail_import_incomplete.carbon:[[@LINE+8]]:4: error: member access into incomplete class `Cpp.IncompleteC` [QualifiedExprInIncompleteClassScope] + // CHECK:STDERR: Cpp.IncompleteC.IncompleteC(); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_incomplete.carbon:[[@LINE-6]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./incomplete.h:2:7: note: class was forward declared here [ClassForwardDeclaredHere] - // CHECK:STDERR: class C; + // CHECK:STDERR: class IncompleteC; // CHECK:STDERR: ^ // CHECK:STDERR: - Cpp.C.C(); + Cpp.IncompleteC.IncompleteC(); } // CHECK:STDOUT: --- import_default.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.bbc = value_binding_pattern c [concrete] -// CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] -// CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] -// CHECK:STDOUT: %C__carbon_thunk.type: type = fn_type @C__carbon_thunk [concrete] -// CHECK:STDOUT: %C__carbon_thunk: %C__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] -// CHECK:STDOUT: %C.cpp_destructor: %C.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %DefaultC: type = class_type @DefaultC [concrete] +// CHECK:STDOUT: %pattern_type.903: type = pattern_type %DefaultC [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.903 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %DefaultC.DefaultC.cpp_overload_set.type: type = cpp_overload_set_type @DefaultC.DefaultC.cpp_overload_set [concrete] +// CHECK:STDOUT: %DefaultC.DefaultC.cpp_overload_set.value: %DefaultC.DefaultC.cpp_overload_set.type = cpp_overload_set_value @DefaultC.DefaultC.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.d69: type = ptr_type %DefaultC [concrete] +// CHECK:STDOUT: %DefaultC__carbon_thunk.type: type = fn_type @DefaultC__carbon_thunk [concrete] +// CHECK:STDOUT: %DefaultC__carbon_thunk: %DefaultC__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %DefaultC.cpp_destructor.type: type = fn_type @DefaultC.cpp_destructor [concrete] +// CHECK:STDOUT: %DefaultC.cpp_destructor: %DefaultC.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .C = %C.decl +// CHECK:STDOUT: .DefaultC = %DefaultC.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete = constants.%C.C.cpp_overload_set.value] -// CHECK:STDOUT: %C__carbon_thunk.decl: %C__carbon_thunk.type = fn_decl @C__carbon_thunk [concrete = constants.%C__carbon_thunk] { +// CHECK:STDOUT: %DefaultC.decl: type = class_decl @DefaultC [concrete = constants.%DefaultC] {} {} +// CHECK:STDOUT: %DefaultC.DefaultC.cpp_overload_set.value: %DefaultC.DefaultC.cpp_overload_set.type = cpp_overload_set_value @DefaultC.DefaultC.cpp_overload_set [concrete = constants.%DefaultC.DefaultC.cpp_overload_set.value] +// CHECK:STDOUT: %DefaultC__carbon_thunk.decl: %DefaultC__carbon_thunk.type = fn_decl @DefaultC__carbon_thunk [concrete = constants.%DefaultC__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -344,25 +343,25 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Cpp.ref.loc8_25: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc8_28: type = name_ref C, imports.%C.decl [concrete = constants.%C] -// CHECK:STDOUT: %C.ref.loc8_30: %C.C.cpp_overload_set.type = name_ref C, imports.%C.C.cpp_overload_set.value [concrete = constants.%C.C.cpp_overload_set.value] -// CHECK:STDOUT: %.loc8_33.1: ref %C = temporary_storage -// CHECK:STDOUT: %addr: %ptr.0a2 = addr_of %.loc8_33.1 -// CHECK:STDOUT: %C__carbon_thunk.call: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%addr) -// CHECK:STDOUT: %.loc8_33.2: init %C to %.loc8_33.1 = mark_in_place_init %C__carbon_thunk.call -// CHECK:STDOUT: %.loc8_33.3: ref %C = temporary %.loc8_33.1, %.loc8_33.2 -// CHECK:STDOUT: %.loc8_33.4: %C = acquire_value %.loc8_33.3 -// CHECK:STDOUT: %.loc8_20: type = splice_block %C.ref.loc8_20 [concrete = constants.%C] { +// CHECK:STDOUT: %Cpp.ref.loc8_32: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %DefaultC.ref.loc8_35: type = name_ref DefaultC, imports.%DefaultC.decl [concrete = constants.%DefaultC] +// CHECK:STDOUT: %DefaultC.ref.loc8_44: %DefaultC.DefaultC.cpp_overload_set.type = name_ref DefaultC, imports.%DefaultC.DefaultC.cpp_overload_set.value [concrete = constants.%DefaultC.DefaultC.cpp_overload_set.value] +// CHECK:STDOUT: %.loc8_54.1: ref %DefaultC = temporary_storage +// CHECK:STDOUT: %addr: %ptr.d69 = addr_of %.loc8_54.1 +// CHECK:STDOUT: %DefaultC__carbon_thunk.call: init %empty_tuple.type = call imports.%DefaultC__carbon_thunk.decl(%addr) +// CHECK:STDOUT: %.loc8_54.2: init %DefaultC to %.loc8_54.1 = mark_in_place_init %DefaultC__carbon_thunk.call +// CHECK:STDOUT: %.loc8_54.3: ref %DefaultC = temporary %.loc8_54.1, %.loc8_54.2 +// CHECK:STDOUT: %.loc8_54.4: %DefaultC = acquire_value %.loc8_54.3 +// CHECK:STDOUT: %.loc8_20: type = splice_block %DefaultC.ref.loc8_20 [concrete = constants.%DefaultC] { // CHECK:STDOUT: %Cpp.ref.loc8_17: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc8_20: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %DefaultC.ref.loc8_20: type = name_ref DefaultC, imports.%DefaultC.decl [concrete = constants.%DefaultC] // CHECK:STDOUT: } -// CHECK:STDOUT: %c: %C = wrapper_binding c, %.loc8_33.4 +// CHECK:STDOUT: %c: %DefaultC = wrapper_binding c, %.loc8_54.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.bbc = value_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.patt: %pattern_type.903 = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %C.cpp_destructor.bound: = bound_method %.loc8_33.3, constants.%C.cpp_destructor -// CHECK:STDOUT: %C.cpp_destructor.call: init %empty_tuple.type = call %C.cpp_destructor.bound(%.loc8_33.3) +// CHECK:STDOUT: %DefaultC.cpp_destructor.bound: = bound_method %.loc8_54.3, constants.%DefaultC.cpp_destructor +// CHECK:STDOUT: %DefaultC.cpp_destructor.call: init %empty_tuple.type = call %DefaultC.cpp_destructor.bound(%.loc8_54.3) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -370,57 +369,57 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.bbc = ref_binding_pattern c [concrete] -// CHECK:STDOUT: %c.var_patt: %pattern_type.bbc = var_pattern %c.patt [concrete] +// CHECK:STDOUT: %DefaultC: type = class_type @DefaultC [concrete] +// CHECK:STDOUT: %pattern_type.903: type = pattern_type %DefaultC [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.903 = ref_binding_pattern c [concrete] +// CHECK:STDOUT: %c.var_patt: %pattern_type.903 = var_pattern %c.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete] // CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.type.0c9: type = fn_type @T.as_type.as.DefaultOrUnformed.impl.Op, @T.as_type.as.DefaultOrUnformed.impl(%T.b09) [symbolic] // CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.cfe: %T.as_type.as.DefaultOrUnformed.impl.Op.type.0c9 = struct_value () [symbolic] -// CHECK:STDOUT: %C.Op.type: type = fn_type @C.Op [concrete] -// CHECK:STDOUT: %C.Op: %C.Op.type = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.9b4: = custom_witness (%C.Op), @Default [concrete] -// CHECK:STDOUT: %Default.facet.3db: %Default.type = facet_value %C, (%custom_witness.9b4) [concrete] -// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.497: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.162, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.3db) [concrete] -// CHECK:STDOUT: %DefaultOrUnformed.facet.017: %DefaultOrUnformed.type = facet_value %C, (%DefaultOrUnformed.impl_witness.497) [concrete] -// CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] -// CHECK:STDOUT: %C.cpp_destructor: %C.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %DefaultC.Op.type: type = fn_type @DefaultC.Op [concrete] +// CHECK:STDOUT: %DefaultC.Op: %DefaultC.Op.type = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.9b4: = custom_witness (%DefaultC.Op), @Default [concrete] +// CHECK:STDOUT: %Default.facet.53e: %Default.type = facet_value %DefaultC, (%custom_witness.9b4) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.db1: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.162, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.53e) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet.898: %DefaultOrUnformed.type = facet_value %DefaultC, (%DefaultOrUnformed.impl_witness.db1) [concrete] +// CHECK:STDOUT: %DefaultC.cpp_destructor.type: type = fn_type @DefaultC.cpp_destructor [concrete] +// CHECK:STDOUT: %DefaultC.cpp_destructor: %DefaultC.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .C = %C.decl +// CHECK:STDOUT: .DefaultC = %DefaultC.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} +// CHECK:STDOUT: %DefaultC.decl: type = class_decl @DefaultC [concrete = constants.%DefaultC] {} {} // CHECK:STDOUT: %Core.import_ref.c2f: @T.as_type.as.DefaultOrUnformed.impl.%T.as_type.as.DefaultOrUnformed.impl.Op.type (%T.as_type.as.DefaultOrUnformed.impl.Op.type.0c9) = import_ref Core//prelude/parts/default, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.DefaultOrUnformed.impl.%T.as_type.as.DefaultOrUnformed.impl.Op (constants.%T.as_type.as.DefaultOrUnformed.impl.Op.cfe)] // CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table.162 = impl_witness_table (%Core.import_ref.c2f), @T.as_type.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %c.var: ref %C = var_storage %c.var_patt -// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%C, (constants.%DefaultOrUnformed.impl_witness.497) [concrete = constants.%DefaultOrUnformed.facet.017] -// CHECK:STDOUT: %.loc8_22.1: %DefaultOrUnformed.type = converted constants.%C, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet.017] -// CHECK:STDOUT: %as_type: type = facet_access_type %.loc8_22.1 [concrete = constants.%C] -// CHECK:STDOUT: %.loc8_22.2: type = converted %.loc8_22.1, %as_type [concrete = constants.%C] +// CHECK:STDOUT: %c.var: ref %DefaultC = var_storage %c.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%DefaultC, (constants.%DefaultOrUnformed.impl_witness.db1) [concrete = constants.%DefaultOrUnformed.facet.898] +// CHECK:STDOUT: %.loc8_29.1: %DefaultOrUnformed.type = converted constants.%DefaultC, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet.898] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc8_29.1 [concrete = constants.%DefaultC] +// CHECK:STDOUT: %.loc8_29.2: type = converted %.loc8_29.1, %as_type [concrete = constants.%DefaultC] // CHECK:STDOUT: -// CHECK:STDOUT: %.loc8_3: ref %C = splice_block %c.var {} -// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call: init %C to %.loc8_3 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: %.loc8_3: ref %DefaultC = splice_block %c.var {} +// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call: init %DefaultC to %.loc8_3 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn() // CHECK:STDOUT: assign %c.var, %T.as_type.as.DefaultOrUnformed.impl.Op.call -// CHECK:STDOUT: %.loc8_20: type = splice_block %C.ref [concrete = constants.%C] { +// CHECK:STDOUT: %.loc8_20: type = splice_block %DefaultC.ref [concrete = constants.%DefaultC] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %DefaultC.ref: type = name_ref DefaultC, imports.%DefaultC.decl [concrete = constants.%DefaultC] // CHECK:STDOUT: } -// CHECK:STDOUT: %c: ref %C = wrapper_binding c, %c.var +// CHECK:STDOUT: %c: ref %DefaultC = wrapper_binding c, %c.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.bbc = ref_binding_pattern c [concrete = constants.%c.patt] -// CHECK:STDOUT: %c.var_patt: %pattern_type.bbc = var_pattern %c.patt [concrete = constants.%c.var_patt] +// CHECK:STDOUT: %c.patt: %pattern_type.903 = ref_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.var_patt: %pattern_type.903 = var_pattern %c.patt [concrete = constants.%c.var_patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %C.cpp_destructor.bound: = bound_method %c.var, constants.%C.cpp_destructor -// CHECK:STDOUT: %C.cpp_destructor.call: init %empty_tuple.type = call %C.cpp_destructor.bound(%c.var) +// CHECK:STDOUT: %DefaultC.cpp_destructor.bound: = bound_method %c.var, constants.%DefaultC.cpp_destructor +// CHECK:STDOUT: %DefaultC.cpp_destructor.call: init %empty_tuple.type = call %DefaultC.cpp_destructor.bound(%c.var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -428,18 +427,18 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.bbc = value_binding_pattern c [concrete] -// CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] -// CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] +// CHECK:STDOUT: %NonDefaultC: type = class_type @NonDefaultC [concrete] +// CHECK:STDOUT: %pattern_type.714: type = pattern_type %NonDefaultC [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.714 = value_binding_pattern c [concrete] +// CHECK:STDOUT: %NonDefaultC.NonDefaultC.cpp_overload_set.type: type = cpp_overload_set_type @NonDefaultC.NonDefaultC.cpp_overload_set [concrete] +// CHECK:STDOUT: %NonDefaultC.NonDefaultC.cpp_overload_set.value: %NonDefaultC.NonDefaultC.cpp_overload_set.type = cpp_overload_set_value @NonDefaultC.NonDefaultC.cpp_overload_set [concrete] // CHECK:STDOUT: %int_123.fff: Core.IntLiteral = int_value 123 [concrete] // CHECK:STDOUT: %int_456.010: Core.IntLiteral = int_value 456 [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] -// CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] -// CHECK:STDOUT: %C__carbon_thunk.type: type = fn_type @C__carbon_thunk [concrete] -// CHECK:STDOUT: %C__carbon_thunk: %C__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %ptr.9fb: type = ptr_type %NonDefaultC [concrete] +// CHECK:STDOUT: %NonDefaultC__carbon_thunk.type: type = fn_type @NonDefaultC__carbon_thunk [concrete] +// CHECK:STDOUT: %NonDefaultC__carbon_thunk: %NonDefaultC__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.914: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert, @Core.IntLiteral.as.ImplicitAs.impl(%To) [symbolic] @@ -457,18 +456,18 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.efc: = bound_method %int_456.010, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.c5c: = bound_method %int_456.010, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_456.8dd: %i32 = int_value 456 [concrete] -// CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] -// CHECK:STDOUT: %C.cpp_destructor: %C.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %NonDefaultC.cpp_destructor.type: type = fn_type @NonDefaultC.cpp_destructor [concrete] +// CHECK:STDOUT: %NonDefaultC.cpp_destructor: %NonDefaultC.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .C = %C.decl +// CHECK:STDOUT: .NonDefaultC = %NonDefaultC.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete = constants.%C.C.cpp_overload_set.value] -// CHECK:STDOUT: %C__carbon_thunk.decl: %C__carbon_thunk.type = fn_decl @C__carbon_thunk [concrete = constants.%C__carbon_thunk] { +// CHECK:STDOUT: %NonDefaultC.decl: type = class_decl @NonDefaultC [concrete = constants.%NonDefaultC] {} {} +// CHECK:STDOUT: %NonDefaultC.NonDefaultC.cpp_overload_set.value: %NonDefaultC.NonDefaultC.cpp_overload_set.type = cpp_overload_set_value @NonDefaultC.NonDefaultC.cpp_overload_set [concrete = constants.%NonDefaultC.NonDefaultC.cpp_overload_set.value] +// CHECK:STDOUT: %NonDefaultC__carbon_thunk.decl: %NonDefaultC__carbon_thunk.type = fn_decl @NonDefaultC__carbon_thunk [concrete = constants.%NonDefaultC__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -479,41 +478,41 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Cpp.ref.loc8_25: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc8_28: type = name_ref C, imports.%C.decl [concrete = constants.%C] -// CHECK:STDOUT: %C.ref.loc8_30: %C.C.cpp_overload_set.type = name_ref C, imports.%C.C.cpp_overload_set.value [concrete = constants.%C.C.cpp_overload_set.value] +// CHECK:STDOUT: %Cpp.ref.loc8_35: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %NonDefaultC.ref.loc8_38: type = name_ref NonDefaultC, imports.%NonDefaultC.decl [concrete = constants.%NonDefaultC] +// CHECK:STDOUT: %NonDefaultC.ref.loc8_50: %NonDefaultC.NonDefaultC.cpp_overload_set.type = name_ref NonDefaultC, imports.%NonDefaultC.NonDefaultC.cpp_overload_set.value [concrete = constants.%NonDefaultC.NonDefaultC.cpp_overload_set.value] // CHECK:STDOUT: %int_123: Core.IntLiteral = int_value 123 [concrete = constants.%int_123.fff] // CHECK:STDOUT: %int_456: Core.IntLiteral = int_value 456 [concrete = constants.%int_456.010] -// CHECK:STDOUT: %.loc8_41.1: ref %C = temporary_storage -// CHECK:STDOUT: %impl.elem0.loc8_33: %.b7a = impl_witness_access constants.%ImplicitAs.impl_witness.a2a, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] -// CHECK:STDOUT: %bound_method.loc8_33.1: = bound_method %int_123, %impl.elem0.loc8_33 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.b1d] -// CHECK:STDOUT: %specific_fn.loc8_33: = specific_function %impl.elem0.loc8_33, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc8_33.2: = bound_method %int_123, %specific_fn.loc8_33 [concrete = constants.%bound_method.450] -// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8_33: init %i32 = call %bound_method.loc8_33.2(%int_123) [concrete = constants.%int_123.2bf] -// CHECK:STDOUT: %.loc8_33.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8_33 [concrete = constants.%int_123.2bf] -// CHECK:STDOUT: %.loc8_33.2: %i32 = converted %int_123, %.loc8_33.1 [concrete = constants.%int_123.2bf] -// CHECK:STDOUT: %impl.elem0.loc8_38: %.b7a = impl_witness_access constants.%ImplicitAs.impl_witness.a2a, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] -// CHECK:STDOUT: %bound_method.loc8_38.1: = bound_method %int_456, %impl.elem0.loc8_38 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.efc] -// CHECK:STDOUT: %specific_fn.loc8_38: = specific_function %impl.elem0.loc8_38, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc8_38.2: = bound_method %int_456, %specific_fn.loc8_38 [concrete = constants.%bound_method.c5c] -// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8_38: init %i32 = call %bound_method.loc8_38.2(%int_456) [concrete = constants.%int_456.8dd] -// CHECK:STDOUT: %.loc8_38.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8_38 [concrete = constants.%int_456.8dd] -// CHECK:STDOUT: %.loc8_38.2: %i32 = converted %int_456, %.loc8_38.1 [concrete = constants.%int_456.8dd] -// CHECK:STDOUT: %addr: %ptr.0a2 = addr_of %.loc8_41.1 -// CHECK:STDOUT: %C__carbon_thunk.call: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%.loc8_33.2, %.loc8_38.2, %addr) -// CHECK:STDOUT: %.loc8_41.2: init %C to %.loc8_41.1 = mark_in_place_init %C__carbon_thunk.call -// CHECK:STDOUT: %.loc8_41.3: ref %C = temporary %.loc8_41.1, %.loc8_41.2 -// CHECK:STDOUT: %.loc8_41.4: %C = acquire_value %.loc8_41.3 -// CHECK:STDOUT: %.loc8_20: type = splice_block %C.ref.loc8_20 [concrete = constants.%C] { +// CHECK:STDOUT: %.loc8_71.1: ref %NonDefaultC = temporary_storage +// CHECK:STDOUT: %impl.elem0.loc8_63: %.b7a = impl_witness_access constants.%ImplicitAs.impl_witness.a2a, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] +// CHECK:STDOUT: %bound_method.loc8_63.1: = bound_method %int_123, %impl.elem0.loc8_63 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.b1d] +// CHECK:STDOUT: %specific_fn.loc8_63: = specific_function %impl.elem0.loc8_63, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] +// CHECK:STDOUT: %bound_method.loc8_63.2: = bound_method %int_123, %specific_fn.loc8_63 [concrete = constants.%bound_method.450] +// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8_63: init %i32 = call %bound_method.loc8_63.2(%int_123) [concrete = constants.%int_123.2bf] +// CHECK:STDOUT: %.loc8_63.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8_63 [concrete = constants.%int_123.2bf] +// CHECK:STDOUT: %.loc8_63.2: %i32 = converted %int_123, %.loc8_63.1 [concrete = constants.%int_123.2bf] +// CHECK:STDOUT: %impl.elem0.loc8_68: %.b7a = impl_witness_access constants.%ImplicitAs.impl_witness.a2a, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] +// CHECK:STDOUT: %bound_method.loc8_68.1: = bound_method %int_456, %impl.elem0.loc8_68 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.efc] +// CHECK:STDOUT: %specific_fn.loc8_68: = specific_function %impl.elem0.loc8_68, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] +// CHECK:STDOUT: %bound_method.loc8_68.2: = bound_method %int_456, %specific_fn.loc8_68 [concrete = constants.%bound_method.c5c] +// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8_68: init %i32 = call %bound_method.loc8_68.2(%int_456) [concrete = constants.%int_456.8dd] +// CHECK:STDOUT: %.loc8_68.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8_68 [concrete = constants.%int_456.8dd] +// CHECK:STDOUT: %.loc8_68.2: %i32 = converted %int_456, %.loc8_68.1 [concrete = constants.%int_456.8dd] +// CHECK:STDOUT: %addr: %ptr.9fb = addr_of %.loc8_71.1 +// CHECK:STDOUT: %NonDefaultC__carbon_thunk.call: init %empty_tuple.type = call imports.%NonDefaultC__carbon_thunk.decl(%.loc8_63.2, %.loc8_68.2, %addr) +// CHECK:STDOUT: %.loc8_71.2: init %NonDefaultC to %.loc8_71.1 = mark_in_place_init %NonDefaultC__carbon_thunk.call +// CHECK:STDOUT: %.loc8_71.3: ref %NonDefaultC = temporary %.loc8_71.1, %.loc8_71.2 +// CHECK:STDOUT: %.loc8_71.4: %NonDefaultC = acquire_value %.loc8_71.3 +// CHECK:STDOUT: %.loc8_20: type = splice_block %NonDefaultC.ref.loc8_20 [concrete = constants.%NonDefaultC] { // CHECK:STDOUT: %Cpp.ref.loc8_17: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc8_20: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %NonDefaultC.ref.loc8_20: type = name_ref NonDefaultC, imports.%NonDefaultC.decl [concrete = constants.%NonDefaultC] // CHECK:STDOUT: } -// CHECK:STDOUT: %c: %C = wrapper_binding c, %.loc8_41.4 +// CHECK:STDOUT: %c: %NonDefaultC = wrapper_binding c, %.loc8_71.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.bbc = value_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.patt: %pattern_type.714 = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %C.cpp_destructor.bound: = bound_method %.loc8_41.3, constants.%C.cpp_destructor -// CHECK:STDOUT: %C.cpp_destructor.call: init %empty_tuple.type = call %C.cpp_destructor.bound(%.loc8_41.3) +// CHECK:STDOUT: %NonDefaultC.cpp_destructor.bound: = bound_method %.loc8_71.3, constants.%NonDefaultC.cpp_destructor +// CHECK:STDOUT: %NonDefaultC.cpp_destructor.call: init %empty_tuple.type = call %NonDefaultC.cpp_destructor.bound(%.loc8_71.3) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -521,21 +520,21 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] -// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = value_binding_pattern c1 [concrete] -// CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] -// CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] -// CHECK:STDOUT: %C__carbon_thunk.type.e78457.1: type = fn_type @C__carbon_thunk.1 [concrete] -// CHECK:STDOUT: %C__carbon_thunk.ca303d.1: %C__carbon_thunk.type.e78457.1 = struct_value () [concrete] -// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = value_binding_pattern c2 [concrete] +// CHECK:STDOUT: %MultipleC: type = class_type @MultipleC [concrete] +// CHECK:STDOUT: %pattern_type.56a: type = pattern_type %MultipleC [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.56a = value_binding_pattern c1 [concrete] +// CHECK:STDOUT: %MultipleC.MultipleC.cpp_overload_set.type: type = cpp_overload_set_type @MultipleC.MultipleC.cpp_overload_set [concrete] +// CHECK:STDOUT: %MultipleC.MultipleC.cpp_overload_set.value: %MultipleC.MultipleC.cpp_overload_set.type = cpp_overload_set_value @MultipleC.MultipleC.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.898: type = ptr_type %MultipleC [concrete] +// CHECK:STDOUT: %MultipleC__carbon_thunk.type.2f7b76.1: type = fn_type @MultipleC__carbon_thunk.1 [concrete] +// CHECK:STDOUT: %MultipleC__carbon_thunk.dde1c4.1: %MultipleC__carbon_thunk.type.2f7b76.1 = struct_value () [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.56a = value_binding_pattern c2 [concrete] // CHECK:STDOUT: %int_123.fff: Core.IntLiteral = int_value 123 [concrete] // CHECK:STDOUT: %int_456.010: Core.IntLiteral = int_value 456 [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] -// CHECK:STDOUT: %C__carbon_thunk.type.e78457.2: type = fn_type @C__carbon_thunk.2 [concrete] -// CHECK:STDOUT: %C__carbon_thunk.ca303d.2: %C__carbon_thunk.type.e78457.2 = struct_value () [concrete] +// CHECK:STDOUT: %MultipleC__carbon_thunk.type.2f7b76.2: type = fn_type @MultipleC__carbon_thunk.2 [concrete] +// CHECK:STDOUT: %MultipleC__carbon_thunk.dde1c4.2: %MultipleC__carbon_thunk.type.2f7b76.2 = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.914: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert, @Core.IntLiteral.as.ImplicitAs.impl(%To) [symbolic] @@ -553,23 +552,23 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.efc: = bound_method %int_456.010, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.c5c: = bound_method %int_456.010, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_456.8dd: %i32 = int_value 456 [concrete] -// CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] -// CHECK:STDOUT: %C.cpp_destructor: %C.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %MultipleC.cpp_destructor.type: type = fn_type @MultipleC.cpp_destructor [concrete] +// CHECK:STDOUT: %MultipleC.cpp_destructor: %MultipleC.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .C = %C.decl +// CHECK:STDOUT: .MultipleC = %MultipleC.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete = constants.%C.C.cpp_overload_set.value] -// CHECK:STDOUT: %C__carbon_thunk.decl.abd9a2.1: %C__carbon_thunk.type.e78457.1 = fn_decl @C__carbon_thunk.1 [concrete = constants.%C__carbon_thunk.ca303d.1] { +// CHECK:STDOUT: %MultipleC.decl: type = class_decl @MultipleC [concrete = constants.%MultipleC] {} {} +// CHECK:STDOUT: %MultipleC.MultipleC.cpp_overload_set.value: %MultipleC.MultipleC.cpp_overload_set.type = cpp_overload_set_value @MultipleC.MultipleC.cpp_overload_set [concrete = constants.%MultipleC.MultipleC.cpp_overload_set.value] +// CHECK:STDOUT: %MultipleC__carbon_thunk.decl.02182b.1: %MultipleC__carbon_thunk.type.2f7b76.1 = fn_decl @MultipleC__carbon_thunk.1 [concrete = constants.%MultipleC__carbon_thunk.dde1c4.1] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } -// CHECK:STDOUT: %C__carbon_thunk.decl.abd9a2.2: %C__carbon_thunk.type.e78457.2 = fn_decl @C__carbon_thunk.2 [concrete = constants.%C__carbon_thunk.ca303d.2] { +// CHECK:STDOUT: %MultipleC__carbon_thunk.decl.02182b.2: %MultipleC__carbon_thunk.type.2f7b76.2 = fn_decl @MultipleC__carbon_thunk.2 [concrete = constants.%MultipleC__carbon_thunk.dde1c4.2] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -580,60 +579,60 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Cpp.ref.loc8_26: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc8_29: type = name_ref C, imports.%C.decl [concrete = constants.%C] -// CHECK:STDOUT: %C.ref.loc8_31: %C.C.cpp_overload_set.type = name_ref C, imports.%C.C.cpp_overload_set.value [concrete = constants.%C.C.cpp_overload_set.value] -// CHECK:STDOUT: %.loc8_34.1: ref %C = temporary_storage -// CHECK:STDOUT: %addr.loc8: %ptr.0a2 = addr_of %.loc8_34.1 -// CHECK:STDOUT: %C__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%C__carbon_thunk.decl.abd9a2.1(%addr.loc8) -// CHECK:STDOUT: %.loc8_34.2: init %C to %.loc8_34.1 = mark_in_place_init %C__carbon_thunk.call.loc8 -// CHECK:STDOUT: %.loc8_34.3: ref %C = temporary %.loc8_34.1, %.loc8_34.2 -// CHECK:STDOUT: %.loc8_34.4: %C = acquire_value %.loc8_34.3 -// CHECK:STDOUT: %.loc8_21: type = splice_block %C.ref.loc8_21 [concrete = constants.%C] { +// CHECK:STDOUT: %Cpp.ref.loc8_34: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %MultipleC.ref.loc8_37: type = name_ref MultipleC, imports.%MultipleC.decl [concrete = constants.%MultipleC] +// CHECK:STDOUT: %MultipleC.ref.loc8_47: %MultipleC.MultipleC.cpp_overload_set.type = name_ref MultipleC, imports.%MultipleC.MultipleC.cpp_overload_set.value [concrete = constants.%MultipleC.MultipleC.cpp_overload_set.value] +// CHECK:STDOUT: %.loc8_58.1: ref %MultipleC = temporary_storage +// CHECK:STDOUT: %addr.loc8: %ptr.898 = addr_of %.loc8_58.1 +// CHECK:STDOUT: %MultipleC__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%MultipleC__carbon_thunk.decl.02182b.1(%addr.loc8) +// CHECK:STDOUT: %.loc8_58.2: init %MultipleC to %.loc8_58.1 = mark_in_place_init %MultipleC__carbon_thunk.call.loc8 +// CHECK:STDOUT: %.loc8_58.3: ref %MultipleC = temporary %.loc8_58.1, %.loc8_58.2 +// CHECK:STDOUT: %.loc8_58.4: %MultipleC = acquire_value %.loc8_58.3 +// CHECK:STDOUT: %.loc8_21: type = splice_block %MultipleC.ref.loc8_21 [concrete = constants.%MultipleC] { // CHECK:STDOUT: %Cpp.ref.loc8_18: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc8_21: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %MultipleC.ref.loc8_21: type = name_ref MultipleC, imports.%MultipleC.decl [concrete = constants.%MultipleC] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1: %C = wrapper_binding c1, %.loc8_34.4 +// CHECK:STDOUT: %c1: %MultipleC = wrapper_binding c1, %.loc8_58.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = value_binding_pattern c1 [concrete = constants.%c1.patt] +// CHECK:STDOUT: %c1.patt: %pattern_type.56a = value_binding_pattern c1 [concrete = constants.%c1.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.ref.loc9_26: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc9_29: type = name_ref C, imports.%C.decl [concrete = constants.%C] -// CHECK:STDOUT: %C.ref.loc9_31: %C.C.cpp_overload_set.type = name_ref C, imports.%C.C.cpp_overload_set.value [concrete = constants.%C.C.cpp_overload_set.value] +// CHECK:STDOUT: %Cpp.ref.loc9_34: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %MultipleC.ref.loc9_37: type = name_ref MultipleC, imports.%MultipleC.decl [concrete = constants.%MultipleC] +// CHECK:STDOUT: %MultipleC.ref.loc9_47: %MultipleC.MultipleC.cpp_overload_set.type = name_ref MultipleC, imports.%MultipleC.MultipleC.cpp_overload_set.value [concrete = constants.%MultipleC.MultipleC.cpp_overload_set.value] // CHECK:STDOUT: %int_123: Core.IntLiteral = int_value 123 [concrete = constants.%int_123.fff] // CHECK:STDOUT: %int_456: Core.IntLiteral = int_value 456 [concrete = constants.%int_456.010] -// CHECK:STDOUT: %.loc9_42.1: ref %C = temporary_storage -// CHECK:STDOUT: %impl.elem0.loc9_34: %.b7a = impl_witness_access constants.%ImplicitAs.impl_witness.a2a, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] -// CHECK:STDOUT: %bound_method.loc9_34.1: = bound_method %int_123, %impl.elem0.loc9_34 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.b1d] -// CHECK:STDOUT: %specific_fn.loc9_34: = specific_function %impl.elem0.loc9_34, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc9_34.2: = bound_method %int_123, %specific_fn.loc9_34 [concrete = constants.%bound_method.450] -// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9_34: init %i32 = call %bound_method.loc9_34.2(%int_123) [concrete = constants.%int_123.2bf] -// CHECK:STDOUT: %.loc9_34.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9_34 [concrete = constants.%int_123.2bf] -// CHECK:STDOUT: %.loc9_34.2: %i32 = converted %int_123, %.loc9_34.1 [concrete = constants.%int_123.2bf] -// CHECK:STDOUT: %impl.elem0.loc9_39: %.b7a = impl_witness_access constants.%ImplicitAs.impl_witness.a2a, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] -// CHECK:STDOUT: %bound_method.loc9_39.1: = bound_method %int_456, %impl.elem0.loc9_39 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.efc] -// CHECK:STDOUT: %specific_fn.loc9_39: = specific_function %impl.elem0.loc9_39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc9_39.2: = bound_method %int_456, %specific_fn.loc9_39 [concrete = constants.%bound_method.c5c] -// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9_39: init %i32 = call %bound_method.loc9_39.2(%int_456) [concrete = constants.%int_456.8dd] -// CHECK:STDOUT: %.loc9_39.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9_39 [concrete = constants.%int_456.8dd] -// CHECK:STDOUT: %.loc9_39.2: %i32 = converted %int_456, %.loc9_39.1 [concrete = constants.%int_456.8dd] -// CHECK:STDOUT: %addr.loc9: %ptr.0a2 = addr_of %.loc9_42.1 -// CHECK:STDOUT: %C__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%C__carbon_thunk.decl.abd9a2.2(%.loc9_34.2, %.loc9_39.2, %addr.loc9) -// CHECK:STDOUT: %.loc9_42.2: init %C to %.loc9_42.1 = mark_in_place_init %C__carbon_thunk.call.loc9 -// CHECK:STDOUT: %.loc9_42.3: ref %C = temporary %.loc9_42.1, %.loc9_42.2 -// CHECK:STDOUT: %.loc9_42.4: %C = acquire_value %.loc9_42.3 -// CHECK:STDOUT: %.loc9_21: type = splice_block %C.ref.loc9_21 [concrete = constants.%C] { +// CHECK:STDOUT: %.loc9_66.1: ref %MultipleC = temporary_storage +// CHECK:STDOUT: %impl.elem0.loc9_58: %.b7a = impl_witness_access constants.%ImplicitAs.impl_witness.a2a, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] +// CHECK:STDOUT: %bound_method.loc9_58.1: = bound_method %int_123, %impl.elem0.loc9_58 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.b1d] +// CHECK:STDOUT: %specific_fn.loc9_58: = specific_function %impl.elem0.loc9_58, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] +// CHECK:STDOUT: %bound_method.loc9_58.2: = bound_method %int_123, %specific_fn.loc9_58 [concrete = constants.%bound_method.450] +// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9_58: init %i32 = call %bound_method.loc9_58.2(%int_123) [concrete = constants.%int_123.2bf] +// CHECK:STDOUT: %.loc9_58.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9_58 [concrete = constants.%int_123.2bf] +// CHECK:STDOUT: %.loc9_58.2: %i32 = converted %int_123, %.loc9_58.1 [concrete = constants.%int_123.2bf] +// CHECK:STDOUT: %impl.elem0.loc9_63: %.b7a = impl_witness_access constants.%ImplicitAs.impl_witness.a2a, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] +// CHECK:STDOUT: %bound_method.loc9_63.1: = bound_method %int_456, %impl.elem0.loc9_63 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.efc] +// CHECK:STDOUT: %specific_fn.loc9_63: = specific_function %impl.elem0.loc9_63, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] +// CHECK:STDOUT: %bound_method.loc9_63.2: = bound_method %int_456, %specific_fn.loc9_63 [concrete = constants.%bound_method.c5c] +// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9_63: init %i32 = call %bound_method.loc9_63.2(%int_456) [concrete = constants.%int_456.8dd] +// CHECK:STDOUT: %.loc9_63.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9_63 [concrete = constants.%int_456.8dd] +// CHECK:STDOUT: %.loc9_63.2: %i32 = converted %int_456, %.loc9_63.1 [concrete = constants.%int_456.8dd] +// CHECK:STDOUT: %addr.loc9: %ptr.898 = addr_of %.loc9_66.1 +// CHECK:STDOUT: %MultipleC__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%MultipleC__carbon_thunk.decl.02182b.2(%.loc9_58.2, %.loc9_63.2, %addr.loc9) +// CHECK:STDOUT: %.loc9_66.2: init %MultipleC to %.loc9_66.1 = mark_in_place_init %MultipleC__carbon_thunk.call.loc9 +// CHECK:STDOUT: %.loc9_66.3: ref %MultipleC = temporary %.loc9_66.1, %.loc9_66.2 +// CHECK:STDOUT: %.loc9_66.4: %MultipleC = acquire_value %.loc9_66.3 +// CHECK:STDOUT: %.loc9_21: type = splice_block %MultipleC.ref.loc9_21 [concrete = constants.%MultipleC] { // CHECK:STDOUT: %Cpp.ref.loc9_18: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc9_21: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %MultipleC.ref.loc9_21: type = name_ref MultipleC, imports.%MultipleC.decl [concrete = constants.%MultipleC] // CHECK:STDOUT: } -// CHECK:STDOUT: %c2: %C = wrapper_binding c2, %.loc9_42.4 +// CHECK:STDOUT: %c2: %MultipleC = wrapper_binding c2, %.loc9_66.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = value_binding_pattern c2 [concrete = constants.%c2.patt] +// CHECK:STDOUT: %c2.patt: %pattern_type.56a = value_binding_pattern c2 [concrete = constants.%c2.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %C.cpp_destructor.bound.loc9: = bound_method %.loc9_42.3, constants.%C.cpp_destructor -// CHECK:STDOUT: %C.cpp_destructor.call.loc9: init %empty_tuple.type = call %C.cpp_destructor.bound.loc9(%.loc9_42.3) -// CHECK:STDOUT: %C.cpp_destructor.bound.loc8: = bound_method %.loc8_34.3, constants.%C.cpp_destructor -// CHECK:STDOUT: %C.cpp_destructor.call.loc8: init %empty_tuple.type = call %C.cpp_destructor.bound.loc8(%.loc8_34.3) +// CHECK:STDOUT: %MultipleC.cpp_destructor.bound.loc9: = bound_method %.loc9_66.3, constants.%MultipleC.cpp_destructor +// CHECK:STDOUT: %MultipleC.cpp_destructor.call.loc9: init %empty_tuple.type = call %MultipleC.cpp_destructor.bound.loc9(%.loc9_66.3) +// CHECK:STDOUT: %MultipleC.cpp_destructor.bound.loc8: = bound_method %.loc8_58.3, constants.%MultipleC.cpp_destructor +// CHECK:STDOUT: %MultipleC.cpp_destructor.call.loc8: init %empty_tuple.type = call %MultipleC.cpp_destructor.bound.loc8(%.loc8_58.3) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -641,18 +640,18 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] -// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = value_binding_pattern c1 [concrete] -// CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] -// CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] +// CHECK:STDOUT: %DefaultArgsC: type = class_type @DefaultArgsC [concrete] +// CHECK:STDOUT: %pattern_type.52d: type = pattern_type %DefaultArgsC [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.52d = value_binding_pattern c1 [concrete] +// CHECK:STDOUT: %DefaultArgsC.DefaultArgsC.cpp_overload_set.type: type = cpp_overload_set_type @DefaultArgsC.DefaultArgsC.cpp_overload_set [concrete] +// CHECK:STDOUT: %DefaultArgsC.DefaultArgsC.cpp_overload_set.value: %DefaultArgsC.DefaultArgsC.cpp_overload_set.type = cpp_overload_set_value @DefaultArgsC.DefaultArgsC.cpp_overload_set [concrete] // CHECK:STDOUT: %int_8.b85: Core.IntLiteral = int_value 8 [concrete] // CHECK:STDOUT: %int_9.988: Core.IntLiteral = int_value 9 [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] -// CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] -// CHECK:STDOUT: %C__carbon_thunk.type.e78457.1: type = fn_type @C__carbon_thunk.1 [concrete] -// CHECK:STDOUT: %C__carbon_thunk.ca303d.1: %C__carbon_thunk.type.e78457.1 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.cf5: type = ptr_type %DefaultArgsC [concrete] +// CHECK:STDOUT: %DefaultArgsC__carbon_thunk.type.4c24d7.1: type = fn_type @DefaultArgsC__carbon_thunk.1 [concrete] +// CHECK:STDOUT: %DefaultArgsC__carbon_thunk.137e61.1: %DefaultArgsC__carbon_thunk.type.4c24d7.1 = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.914: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert, @Core.IntLiteral.as.ImplicitAs.impl(%To) [symbolic] @@ -670,28 +669,28 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.f46: = bound_method %int_9.988, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.9bf: = bound_method %int_9.988, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_9.056: %i32 = int_value 9 [concrete] -// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = value_binding_pattern c2 [concrete] -// CHECK:STDOUT: %C__carbon_thunk.type.e78457.2: type = fn_type @C__carbon_thunk.2 [concrete] -// CHECK:STDOUT: %C__carbon_thunk.ca303d.2: %C__carbon_thunk.type.e78457.2 = struct_value () [concrete] -// CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] -// CHECK:STDOUT: %C.cpp_destructor: %C.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.52d = value_binding_pattern c2 [concrete] +// CHECK:STDOUT: %DefaultArgsC__carbon_thunk.type.4c24d7.2: type = fn_type @DefaultArgsC__carbon_thunk.2 [concrete] +// CHECK:STDOUT: %DefaultArgsC__carbon_thunk.137e61.2: %DefaultArgsC__carbon_thunk.type.4c24d7.2 = struct_value () [concrete] +// CHECK:STDOUT: %DefaultArgsC.cpp_destructor.type: type = fn_type @DefaultArgsC.cpp_destructor [concrete] +// CHECK:STDOUT: %DefaultArgsC.cpp_destructor: %DefaultArgsC.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .C = %C.decl +// CHECK:STDOUT: .DefaultArgsC = %DefaultArgsC.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete = constants.%C.C.cpp_overload_set.value] -// CHECK:STDOUT: %C__carbon_thunk.decl.abd9a2.1: %C__carbon_thunk.type.e78457.1 = fn_decl @C__carbon_thunk.1 [concrete = constants.%C__carbon_thunk.ca303d.1] { +// CHECK:STDOUT: %DefaultArgsC.decl: type = class_decl @DefaultArgsC [concrete = constants.%DefaultArgsC] {} {} +// CHECK:STDOUT: %DefaultArgsC.DefaultArgsC.cpp_overload_set.value: %DefaultArgsC.DefaultArgsC.cpp_overload_set.type = cpp_overload_set_value @DefaultArgsC.DefaultArgsC.cpp_overload_set [concrete = constants.%DefaultArgsC.DefaultArgsC.cpp_overload_set.value] +// CHECK:STDOUT: %DefaultArgsC__carbon_thunk.decl.45c66b.1: %DefaultArgsC__carbon_thunk.type.4c24d7.1 = fn_decl @DefaultArgsC__carbon_thunk.1 [concrete = constants.%DefaultArgsC__carbon_thunk.137e61.1] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import_ref.edf: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.845)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.1aa = impl_witness_table (%Core.import_ref.edf), @Core.IntLiteral.as.ImplicitAs.impl [concrete] -// CHECK:STDOUT: %C__carbon_thunk.decl.abd9a2.2: %C__carbon_thunk.type.e78457.2 = fn_decl @C__carbon_thunk.2 [concrete = constants.%C__carbon_thunk.ca303d.2] { +// CHECK:STDOUT: %DefaultArgsC__carbon_thunk.decl.45c66b.2: %DefaultArgsC__carbon_thunk.type.4c24d7.2 = fn_decl @DefaultArgsC__carbon_thunk.2 [concrete = constants.%DefaultArgsC__carbon_thunk.137e61.2] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -700,68 +699,68 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Cpp.ref.loc8_26: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc8_29: type = name_ref C, imports.%C.decl [concrete = constants.%C] -// CHECK:STDOUT: %C.ref.loc8_31: %C.C.cpp_overload_set.type = name_ref C, imports.%C.C.cpp_overload_set.value [concrete = constants.%C.C.cpp_overload_set.value] +// CHECK:STDOUT: %Cpp.ref.loc8_37: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %DefaultArgsC.ref.loc8_40: type = name_ref DefaultArgsC, imports.%DefaultArgsC.decl [concrete = constants.%DefaultArgsC] +// CHECK:STDOUT: %DefaultArgsC.ref.loc8_53: %DefaultArgsC.DefaultArgsC.cpp_overload_set.type = name_ref DefaultArgsC, imports.%DefaultArgsC.DefaultArgsC.cpp_overload_set.value [concrete = constants.%DefaultArgsC.DefaultArgsC.cpp_overload_set.value] // CHECK:STDOUT: %int_8.loc8: Core.IntLiteral = int_value 8 [concrete = constants.%int_8.b85] // CHECK:STDOUT: %int_9: Core.IntLiteral = int_value 9 [concrete = constants.%int_9.988] -// CHECK:STDOUT: %.loc8_38.1: ref %C = temporary_storage -// CHECK:STDOUT: %impl.elem0.loc8_34: %.b7a = impl_witness_access constants.%ImplicitAs.impl_witness.a2a, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] -// CHECK:STDOUT: %bound_method.loc8_34.1: = bound_method %int_8.loc8, %impl.elem0.loc8_34 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.9dd] -// CHECK:STDOUT: %specific_fn.loc8_34: = specific_function %impl.elem0.loc8_34, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc8_34.2: = bound_method %int_8.loc8, %specific_fn.loc8_34 [concrete = constants.%bound_method.01f] -// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8_34: init %i32 = call %bound_method.loc8_34.2(%int_8.loc8) [concrete = constants.%int_8.9cf] -// CHECK:STDOUT: %.loc8_34.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8_34 [concrete = constants.%int_8.9cf] -// CHECK:STDOUT: %.loc8_34.2: %i32 = converted %int_8.loc8, %.loc8_34.1 [concrete = constants.%int_8.9cf] -// CHECK:STDOUT: %impl.elem0.loc8_37: %.b7a = impl_witness_access constants.%ImplicitAs.impl_witness.a2a, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] -// CHECK:STDOUT: %bound_method.loc8_37.1: = bound_method %int_9, %impl.elem0.loc8_37 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.f46] -// CHECK:STDOUT: %specific_fn.loc8_37: = specific_function %impl.elem0.loc8_37, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc8_37.2: = bound_method %int_9, %specific_fn.loc8_37 [concrete = constants.%bound_method.9bf] -// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8_37: init %i32 = call %bound_method.loc8_37.2(%int_9) [concrete = constants.%int_9.056] -// CHECK:STDOUT: %.loc8_37.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8_37 [concrete = constants.%int_9.056] -// CHECK:STDOUT: %.loc8_37.2: %i32 = converted %int_9, %.loc8_37.1 [concrete = constants.%int_9.056] -// CHECK:STDOUT: %addr.loc8: %ptr.0a2 = addr_of %.loc8_38.1 -// CHECK:STDOUT: %C__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%C__carbon_thunk.decl.abd9a2.1(%.loc8_34.2, %.loc8_37.2, %addr.loc8) -// CHECK:STDOUT: %.loc8_38.2: init %C to %.loc8_38.1 = mark_in_place_init %C__carbon_thunk.call.loc8 -// CHECK:STDOUT: %.loc8_38.3: ref %C = temporary %.loc8_38.1, %.loc8_38.2 -// CHECK:STDOUT: %.loc8_38.4: %C = acquire_value %.loc8_38.3 -// CHECK:STDOUT: %.loc8_21: type = splice_block %C.ref.loc8_21 [concrete = constants.%C] { +// CHECK:STDOUT: %.loc8_71.1: ref %DefaultArgsC = temporary_storage +// CHECK:STDOUT: %impl.elem0.loc8_67: %.b7a = impl_witness_access constants.%ImplicitAs.impl_witness.a2a, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] +// CHECK:STDOUT: %bound_method.loc8_67.1: = bound_method %int_8.loc8, %impl.elem0.loc8_67 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.9dd] +// CHECK:STDOUT: %specific_fn.loc8_67: = specific_function %impl.elem0.loc8_67, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] +// CHECK:STDOUT: %bound_method.loc8_67.2: = bound_method %int_8.loc8, %specific_fn.loc8_67 [concrete = constants.%bound_method.01f] +// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8_67: init %i32 = call %bound_method.loc8_67.2(%int_8.loc8) [concrete = constants.%int_8.9cf] +// CHECK:STDOUT: %.loc8_67.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8_67 [concrete = constants.%int_8.9cf] +// CHECK:STDOUT: %.loc8_67.2: %i32 = converted %int_8.loc8, %.loc8_67.1 [concrete = constants.%int_8.9cf] +// CHECK:STDOUT: %impl.elem0.loc8_70: %.b7a = impl_witness_access constants.%ImplicitAs.impl_witness.a2a, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] +// CHECK:STDOUT: %bound_method.loc8_70.1: = bound_method %int_9, %impl.elem0.loc8_70 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.f46] +// CHECK:STDOUT: %specific_fn.loc8_70: = specific_function %impl.elem0.loc8_70, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] +// CHECK:STDOUT: %bound_method.loc8_70.2: = bound_method %int_9, %specific_fn.loc8_70 [concrete = constants.%bound_method.9bf] +// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8_70: init %i32 = call %bound_method.loc8_70.2(%int_9) [concrete = constants.%int_9.056] +// CHECK:STDOUT: %.loc8_70.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8_70 [concrete = constants.%int_9.056] +// CHECK:STDOUT: %.loc8_70.2: %i32 = converted %int_9, %.loc8_70.1 [concrete = constants.%int_9.056] +// CHECK:STDOUT: %addr.loc8: %ptr.cf5 = addr_of %.loc8_71.1 +// CHECK:STDOUT: %DefaultArgsC__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%DefaultArgsC__carbon_thunk.decl.45c66b.1(%.loc8_67.2, %.loc8_70.2, %addr.loc8) +// CHECK:STDOUT: %.loc8_71.2: init %DefaultArgsC to %.loc8_71.1 = mark_in_place_init %DefaultArgsC__carbon_thunk.call.loc8 +// CHECK:STDOUT: %.loc8_71.3: ref %DefaultArgsC = temporary %.loc8_71.1, %.loc8_71.2 +// CHECK:STDOUT: %.loc8_71.4: %DefaultArgsC = acquire_value %.loc8_71.3 +// CHECK:STDOUT: %.loc8_21: type = splice_block %DefaultArgsC.ref.loc8_21 [concrete = constants.%DefaultArgsC] { // CHECK:STDOUT: %Cpp.ref.loc8_18: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc8_21: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %DefaultArgsC.ref.loc8_21: type = name_ref DefaultArgsC, imports.%DefaultArgsC.decl [concrete = constants.%DefaultArgsC] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1: %C = wrapper_binding c1, %.loc8_38.4 +// CHECK:STDOUT: %c1: %DefaultArgsC = wrapper_binding c1, %.loc8_71.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = value_binding_pattern c1 [concrete = constants.%c1.patt] +// CHECK:STDOUT: %c1.patt: %pattern_type.52d = value_binding_pattern c1 [concrete = constants.%c1.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.ref.loc9_26: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc9_29: type = name_ref C, imports.%C.decl [concrete = constants.%C] -// CHECK:STDOUT: %C.ref.loc9_31: %C.C.cpp_overload_set.type = name_ref C, imports.%C.C.cpp_overload_set.value [concrete = constants.%C.C.cpp_overload_set.value] +// CHECK:STDOUT: %Cpp.ref.loc9_37: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %DefaultArgsC.ref.loc9_40: type = name_ref DefaultArgsC, imports.%DefaultArgsC.decl [concrete = constants.%DefaultArgsC] +// CHECK:STDOUT: %DefaultArgsC.ref.loc9_53: %DefaultArgsC.DefaultArgsC.cpp_overload_set.type = name_ref DefaultArgsC, imports.%DefaultArgsC.DefaultArgsC.cpp_overload_set.value [concrete = constants.%DefaultArgsC.DefaultArgsC.cpp_overload_set.value] // CHECK:STDOUT: %int_8.loc9: Core.IntLiteral = int_value 8 [concrete = constants.%int_8.b85] -// CHECK:STDOUT: %.loc9_35.1: ref %C = temporary_storage +// CHECK:STDOUT: %.loc9_68.1: ref %DefaultArgsC = temporary_storage // CHECK:STDOUT: %impl.elem0.loc9: %.b7a = impl_witness_access constants.%ImplicitAs.impl_witness.a2a, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] -// CHECK:STDOUT: %bound_method.loc9_34.1: = bound_method %int_8.loc9, %impl.elem0.loc9 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.9dd] +// CHECK:STDOUT: %bound_method.loc9_67.1: = bound_method %int_8.loc9, %impl.elem0.loc9 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.9dd] // CHECK:STDOUT: %specific_fn.loc9: = specific_function %impl.elem0.loc9, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc9_34.2: = bound_method %int_8.loc9, %specific_fn.loc9 [concrete = constants.%bound_method.01f] -// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9: init %i32 = call %bound_method.loc9_34.2(%int_8.loc9) [concrete = constants.%int_8.9cf] -// CHECK:STDOUT: %.loc9_34.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9 [concrete = constants.%int_8.9cf] -// CHECK:STDOUT: %.loc9_34.2: %i32 = converted %int_8.loc9, %.loc9_34.1 [concrete = constants.%int_8.9cf] -// CHECK:STDOUT: %addr.loc9: %ptr.0a2 = addr_of %.loc9_35.1 -// CHECK:STDOUT: %C__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%C__carbon_thunk.decl.abd9a2.2(%.loc9_34.2, %addr.loc9) -// CHECK:STDOUT: %.loc9_35.2: init %C to %.loc9_35.1 = mark_in_place_init %C__carbon_thunk.call.loc9 -// CHECK:STDOUT: %.loc9_35.3: ref %C = temporary %.loc9_35.1, %.loc9_35.2 -// CHECK:STDOUT: %.loc9_35.4: %C = acquire_value %.loc9_35.3 -// CHECK:STDOUT: %.loc9_21: type = splice_block %C.ref.loc9_21 [concrete = constants.%C] { +// CHECK:STDOUT: %bound_method.loc9_67.2: = bound_method %int_8.loc9, %specific_fn.loc9 [concrete = constants.%bound_method.01f] +// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9: init %i32 = call %bound_method.loc9_67.2(%int_8.loc9) [concrete = constants.%int_8.9cf] +// CHECK:STDOUT: %.loc9_67.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9 [concrete = constants.%int_8.9cf] +// CHECK:STDOUT: %.loc9_67.2: %i32 = converted %int_8.loc9, %.loc9_67.1 [concrete = constants.%int_8.9cf] +// CHECK:STDOUT: %addr.loc9: %ptr.cf5 = addr_of %.loc9_68.1 +// CHECK:STDOUT: %DefaultArgsC__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%DefaultArgsC__carbon_thunk.decl.45c66b.2(%.loc9_67.2, %addr.loc9) +// CHECK:STDOUT: %.loc9_68.2: init %DefaultArgsC to %.loc9_68.1 = mark_in_place_init %DefaultArgsC__carbon_thunk.call.loc9 +// CHECK:STDOUT: %.loc9_68.3: ref %DefaultArgsC = temporary %.loc9_68.1, %.loc9_68.2 +// CHECK:STDOUT: %.loc9_68.4: %DefaultArgsC = acquire_value %.loc9_68.3 +// CHECK:STDOUT: %.loc9_21: type = splice_block %DefaultArgsC.ref.loc9_21 [concrete = constants.%DefaultArgsC] { // CHECK:STDOUT: %Cpp.ref.loc9_18: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc9_21: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %DefaultArgsC.ref.loc9_21: type = name_ref DefaultArgsC, imports.%DefaultArgsC.decl [concrete = constants.%DefaultArgsC] // CHECK:STDOUT: } -// CHECK:STDOUT: %c2: %C = wrapper_binding c2, %.loc9_35.4 +// CHECK:STDOUT: %c2: %DefaultArgsC = wrapper_binding c2, %.loc9_68.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = value_binding_pattern c2 [concrete = constants.%c2.patt] +// CHECK:STDOUT: %c2.patt: %pattern_type.52d = value_binding_pattern c2 [concrete = constants.%c2.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %C.cpp_destructor.bound.loc9: = bound_method %.loc9_35.3, constants.%C.cpp_destructor -// CHECK:STDOUT: %C.cpp_destructor.call.loc9: init %empty_tuple.type = call %C.cpp_destructor.bound.loc9(%.loc9_35.3) -// CHECK:STDOUT: %C.cpp_destructor.bound.loc8: = bound_method %.loc8_38.3, constants.%C.cpp_destructor -// CHECK:STDOUT: %C.cpp_destructor.call.loc8: init %empty_tuple.type = call %C.cpp_destructor.bound.loc8(%.loc8_38.3) +// CHECK:STDOUT: %DefaultArgsC.cpp_destructor.bound.loc9: = bound_method %.loc9_68.3, constants.%DefaultArgsC.cpp_destructor +// CHECK:STDOUT: %DefaultArgsC.cpp_destructor.call.loc9: init %empty_tuple.type = call %DefaultArgsC.cpp_destructor.bound.loc9(%.loc9_68.3) +// CHECK:STDOUT: %DefaultArgsC.cpp_destructor.bound.loc8: = bound_method %.loc8_71.3, constants.%DefaultArgsC.cpp_destructor +// CHECK:STDOUT: %DefaultArgsC.cpp_destructor.call.loc8: init %empty_tuple.type = call %DefaultArgsC.cpp_destructor.bound.loc8(%.loc8_71.3) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -769,18 +768,18 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] -// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = ref_binding_pattern c1 [concrete] -// CHECK:STDOUT: %c1.var_patt: %pattern_type.bbc = var_pattern %c1.patt [concrete] -// CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] -// CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] +// CHECK:STDOUT: %TemplateC: type = class_type @TemplateC [concrete] +// CHECK:STDOUT: %pattern_type.f20: type = pattern_type %TemplateC [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.f20 = ref_binding_pattern c1 [concrete] +// CHECK:STDOUT: %c1.var_patt: %pattern_type.f20 = var_pattern %c1.patt [concrete] +// CHECK:STDOUT: %TemplateC.TemplateC.cpp_overload_set.type: type = cpp_overload_set_type @TemplateC.TemplateC.cpp_overload_set [concrete] +// CHECK:STDOUT: %TemplateC.TemplateC.cpp_overload_set.value: %TemplateC.TemplateC.cpp_overload_set.type = cpp_overload_set_value @TemplateC.TemplateC.cpp_overload_set [concrete] // CHECK:STDOUT: %int_123.fff: Core.IntLiteral = int_value 123 [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] -// CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] -// CHECK:STDOUT: %C__carbon_thunk.type.e78457.1: type = fn_type @C__carbon_thunk.1 [concrete] -// CHECK:STDOUT: %C__carbon_thunk.ca303d.1: %C__carbon_thunk.type.e78457.1 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.588: type = ptr_type %TemplateC [concrete] +// CHECK:STDOUT: %TemplateC__carbon_thunk.type.7462cf.1: type = fn_type @TemplateC__carbon_thunk.1 [concrete] +// CHECK:STDOUT: %TemplateC__carbon_thunk.a4007a.1: %TemplateC__carbon_thunk.type.7462cf.1 = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.914: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert, @Core.IntLiteral.as.ImplicitAs.impl(%To) [symbolic] @@ -795,12 +794,12 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %int_123.fff, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_123.2bf: %i32 = int_value 123 [concrete] -// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = ref_binding_pattern c2 [concrete] -// CHECK:STDOUT: %c2.var_patt: %pattern_type.bbc = var_pattern %c2.patt [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.f20 = ref_binding_pattern c2 [concrete] +// CHECK:STDOUT: %c2.var_patt: %pattern_type.f20 = var_pattern %c2.patt [concrete] // CHECK:STDOUT: %true: bool = bool_literal true [concrete] // CHECK:STDOUT: %ptr.bb2: type = ptr_type bool [concrete] -// CHECK:STDOUT: %C__carbon_thunk.type.e78457.2: type = fn_type @C__carbon_thunk.2 [concrete] -// CHECK:STDOUT: %C__carbon_thunk.ca303d.2: %C__carbon_thunk.type.e78457.2 = struct_value () [concrete] +// CHECK:STDOUT: %TemplateC__carbon_thunk.type.7462cf.2: type = fn_type @TemplateC__carbon_thunk.2 [concrete] +// CHECK:STDOUT: %TemplateC__carbon_thunk.a4007a.2: %TemplateC__carbon_thunk.type.7462cf.2 = struct_value () [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Copy.impl_witness.5e1: = impl_witness imports.%Copy.impl_witness_table.bda [concrete] // CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value bool, (%Copy.impl_witness.5e1) [concrete] @@ -811,36 +810,36 @@ fn F() { // CHECK:STDOUT: %bool.as.Copy.impl.Op.bound: = bound_method %true, %bool.as.Copy.impl.Op [concrete] // CHECK:STDOUT: %.e3b: ref bool = temporary invalid, %true [concrete] // CHECK:STDOUT: %addr: %ptr.bb2 = addr_of %.e3b [concrete] -// CHECK:STDOUT: %c3.patt: %pattern_type.bbc = ref_binding_pattern c3 [concrete] -// CHECK:STDOUT: %c3.var_patt: %pattern_type.bbc = var_pattern %c3.patt [concrete] -// CHECK:STDOUT: %C__carbon_thunk.type.e78457.3: type = fn_type @C__carbon_thunk.3 [concrete] -// CHECK:STDOUT: %C__carbon_thunk.ca303d.3: %C__carbon_thunk.type.e78457.3 = struct_value () [concrete] -// CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] -// CHECK:STDOUT: %C.cpp_destructor: %C.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %c3.patt: %pattern_type.f20 = ref_binding_pattern c3 [concrete] +// CHECK:STDOUT: %c3.var_patt: %pattern_type.f20 = var_pattern %c3.patt [concrete] +// CHECK:STDOUT: %TemplateC__carbon_thunk.type.7462cf.3: type = fn_type @TemplateC__carbon_thunk.3 [concrete] +// CHECK:STDOUT: %TemplateC__carbon_thunk.a4007a.3: %TemplateC__carbon_thunk.type.7462cf.3 = struct_value () [concrete] +// CHECK:STDOUT: %TemplateC.cpp_destructor.type: type = fn_type @TemplateC.cpp_destructor [concrete] +// CHECK:STDOUT: %TemplateC.cpp_destructor: %TemplateC.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .C = %C.decl +// CHECK:STDOUT: .TemplateC = %TemplateC.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete = constants.%C.C.cpp_overload_set.value] -// CHECK:STDOUT: %C__carbon_thunk.decl.abd9a2.1: %C__carbon_thunk.type.e78457.1 = fn_decl @C__carbon_thunk.1 [concrete = constants.%C__carbon_thunk.ca303d.1] { +// CHECK:STDOUT: %TemplateC.decl: type = class_decl @TemplateC [concrete = constants.%TemplateC] {} {} +// CHECK:STDOUT: %TemplateC.TemplateC.cpp_overload_set.value: %TemplateC.TemplateC.cpp_overload_set.type = cpp_overload_set_value @TemplateC.TemplateC.cpp_overload_set [concrete = constants.%TemplateC.TemplateC.cpp_overload_set.value] +// CHECK:STDOUT: %TemplateC__carbon_thunk.decl.a5784e.1: %TemplateC__carbon_thunk.type.7462cf.1 = fn_decl @TemplateC__carbon_thunk.1 [concrete = constants.%TemplateC__carbon_thunk.a4007a.1] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import_ref.edf: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.845)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.1aa = impl_witness_table (%Core.import_ref.edf), @Core.IntLiteral.as.ImplicitAs.impl [concrete] -// CHECK:STDOUT: %C__carbon_thunk.decl.abd9a2.2: %C__carbon_thunk.type.e78457.2 = fn_decl @C__carbon_thunk.2 [concrete = constants.%C__carbon_thunk.ca303d.2] { +// CHECK:STDOUT: %TemplateC__carbon_thunk.decl.a5784e.2: %TemplateC__carbon_thunk.type.7462cf.2 = fn_decl @TemplateC__carbon_thunk.2 [concrete = constants.%TemplateC__carbon_thunk.a4007a.2] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import_ref.9c3: %bool.as.Copy.impl.Op.type = import_ref Core//prelude/parts/copy, loc{{\d+_\d+}}, loaded [concrete = constants.%bool.as.Copy.impl.Op] // CHECK:STDOUT: %Copy.impl_witness_table.bda = impl_witness_table (%Core.import_ref.9c3), @bool.as.Copy.impl [concrete] -// CHECK:STDOUT: %C__carbon_thunk.decl.abd9a2.3: %C__carbon_thunk.type.e78457.3 = fn_decl @C__carbon_thunk.3 [concrete = constants.%C__carbon_thunk.ca303d.3] { +// CHECK:STDOUT: %TemplateC__carbon_thunk.decl.a5784e.3: %TemplateC__carbon_thunk.type.7462cf.3 = fn_decl @TemplateC__carbon_thunk.3 [concrete = constants.%TemplateC__carbon_thunk.a4007a.3] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -849,83 +848,83 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %c1.var: ref %C = var_storage %c1.var_patt -// CHECK:STDOUT: %Cpp.ref.loc8_19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc8_22: type = name_ref C, imports.%C.decl [concrete = constants.%C] -// CHECK:STDOUT: %C.ref.loc8_24: %C.C.cpp_overload_set.type = name_ref C, imports.%C.C.cpp_overload_set.value [concrete = constants.%C.C.cpp_overload_set.value] +// CHECK:STDOUT: %c1.var: ref %TemplateC = var_storage %c1.var_patt +// CHECK:STDOUT: %Cpp.ref.loc8_27: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %TemplateC.ref.loc8_30: type = name_ref TemplateC, imports.%TemplateC.decl [concrete = constants.%TemplateC] +// CHECK:STDOUT: %TemplateC.ref.loc8_40: %TemplateC.TemplateC.cpp_overload_set.type = name_ref TemplateC, imports.%TemplateC.TemplateC.cpp_overload_set.value [concrete = constants.%TemplateC.TemplateC.cpp_overload_set.value] // CHECK:STDOUT: %int_123: Core.IntLiteral = int_value 123 [concrete = constants.%int_123.fff] -// CHECK:STDOUT: %.loc8_3: ref %C = splice_block %c1.var {} +// CHECK:STDOUT: %.loc8_3: ref %TemplateC = splice_block %c1.var {} // CHECK:STDOUT: %impl.elem0.loc8: %.b7a = impl_witness_access constants.%ImplicitAs.impl_witness.a2a, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] -// CHECK:STDOUT: %bound_method.loc8_27.1: = bound_method %int_123, %impl.elem0.loc8 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] +// CHECK:STDOUT: %bound_method.loc8_51.1: = bound_method %int_123, %impl.elem0.loc8 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0.loc8, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc8_27.2: = bound_method %int_123, %specific_fn [concrete = constants.%bound_method] -// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc8_27.2(%int_123) [concrete = constants.%int_123.2bf] -// CHECK:STDOUT: %.loc8_27.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_123.2bf] -// CHECK:STDOUT: %.loc8_27.2: %i32 = converted %int_123, %.loc8_27.1 [concrete = constants.%int_123.2bf] -// CHECK:STDOUT: %addr.loc8: %ptr.0a2 = addr_of %.loc8_3 -// CHECK:STDOUT: %C__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%C__carbon_thunk.decl.abd9a2.1(%.loc8_27.2, %addr.loc8) -// CHECK:STDOUT: %.loc8_30: init %C to %.loc8_3 = mark_in_place_init %C__carbon_thunk.call.loc8 -// CHECK:STDOUT: assign %c1.var, %.loc8_30 -// CHECK:STDOUT: %.loc8_14: type = splice_block %C.ref.loc8_14 [concrete = constants.%C] { +// CHECK:STDOUT: %bound_method.loc8_51.2: = bound_method %int_123, %specific_fn [concrete = constants.%bound_method] +// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc8_51.2(%int_123) [concrete = constants.%int_123.2bf] +// CHECK:STDOUT: %.loc8_51.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_123.2bf] +// CHECK:STDOUT: %.loc8_51.2: %i32 = converted %int_123, %.loc8_51.1 [concrete = constants.%int_123.2bf] +// CHECK:STDOUT: %addr.loc8: %ptr.588 = addr_of %.loc8_3 +// CHECK:STDOUT: %TemplateC__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%TemplateC__carbon_thunk.decl.a5784e.1(%.loc8_51.2, %addr.loc8) +// CHECK:STDOUT: %.loc8_54: init %TemplateC to %.loc8_3 = mark_in_place_init %TemplateC__carbon_thunk.call.loc8 +// CHECK:STDOUT: assign %c1.var, %.loc8_54 +// CHECK:STDOUT: %.loc8_14: type = splice_block %TemplateC.ref.loc8_14 [concrete = constants.%TemplateC] { // CHECK:STDOUT: %Cpp.ref.loc8_11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc8_14: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %TemplateC.ref.loc8_14: type = name_ref TemplateC, imports.%TemplateC.decl [concrete = constants.%TemplateC] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1: ref %C = wrapper_binding c1, %c1.var +// CHECK:STDOUT: %c1: ref %TemplateC = wrapper_binding c1, %c1.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = ref_binding_pattern c1 [concrete = constants.%c1.patt] -// CHECK:STDOUT: %c1.var_patt: %pattern_type.bbc = var_pattern %c1.patt [concrete = constants.%c1.var_patt] +// CHECK:STDOUT: %c1.patt: %pattern_type.f20 = ref_binding_pattern c1 [concrete = constants.%c1.patt] +// CHECK:STDOUT: %c1.var_patt: %pattern_type.f20 = var_pattern %c1.patt [concrete = constants.%c1.var_patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c2.var: ref %C = var_storage %c2.var_patt -// CHECK:STDOUT: %Cpp.ref.loc9_26: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc9_29: type = name_ref C, imports.%C.decl [concrete = constants.%C] -// CHECK:STDOUT: %C.ref.loc9_31: %C.C.cpp_overload_set.type = name_ref C, imports.%C.C.cpp_overload_set.value [concrete = constants.%C.C.cpp_overload_set.value] +// CHECK:STDOUT: %c2.var: ref %TemplateC = var_storage %c2.var_patt +// CHECK:STDOUT: %Cpp.ref.loc9_34: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %TemplateC.ref.loc9_37: type = name_ref TemplateC, imports.%TemplateC.decl [concrete = constants.%TemplateC] +// CHECK:STDOUT: %TemplateC.ref.loc9_47: %TemplateC.TemplateC.cpp_overload_set.type = name_ref TemplateC, imports.%TemplateC.TemplateC.cpp_overload_set.value [concrete = constants.%TemplateC.TemplateC.cpp_overload_set.value] // CHECK:STDOUT: %true: bool = bool_literal true [concrete = constants.%true] -// CHECK:STDOUT: %.loc9_3: ref %C = splice_block %c2.var {} +// CHECK:STDOUT: %.loc9_3: ref %TemplateC = splice_block %c2.var {} // CHECK:STDOUT: %impl.elem0.loc9: %.e28 = impl_witness_access constants.%Copy.impl_witness.5e1, element0 [concrete = constants.%bool.as.Copy.impl.Op] // CHECK:STDOUT: %bound_method.loc9: = bound_method %true, %impl.elem0.loc9 [concrete = constants.%bool.as.Copy.impl.Op.bound] // CHECK:STDOUT: %bool.as.Copy.impl.Op.call: init bool = call %bound_method.loc9(%true) [concrete = constants.%true] -// CHECK:STDOUT: %.loc9_34.1: ref bool = temporary_storage -// CHECK:STDOUT: %.loc9_34.2: ref bool = temporary %.loc9_34.1, %bool.as.Copy.impl.Op.call [concrete = constants.%.e3b] -// CHECK:STDOUT: %addr.loc9_38.1: %ptr.bb2 = addr_of %.loc9_34.2 [concrete = constants.%addr] -// CHECK:STDOUT: %addr.loc9_38.2: %ptr.0a2 = addr_of %.loc9_3 -// CHECK:STDOUT: %C__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%C__carbon_thunk.decl.abd9a2.2(%addr.loc9_38.1, %addr.loc9_38.2) -// CHECK:STDOUT: %.loc9_38: init %C to %.loc9_3 = mark_in_place_init %C__carbon_thunk.call.loc9 -// CHECK:STDOUT: assign %c2.var, %.loc9_38 -// CHECK:STDOUT: %.loc9_21: type = splice_block %C.ref.loc9_21 [concrete = constants.%C] { +// CHECK:STDOUT: %.loc9_58.1: ref bool = temporary_storage +// CHECK:STDOUT: %.loc9_58.2: ref bool = temporary %.loc9_58.1, %bool.as.Copy.impl.Op.call [concrete = constants.%.e3b] +// CHECK:STDOUT: %addr.loc9_62.1: %ptr.bb2 = addr_of %.loc9_58.2 [concrete = constants.%addr] +// CHECK:STDOUT: %addr.loc9_62.2: %ptr.588 = addr_of %.loc9_3 +// CHECK:STDOUT: %TemplateC__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%TemplateC__carbon_thunk.decl.a5784e.2(%addr.loc9_62.1, %addr.loc9_62.2) +// CHECK:STDOUT: %.loc9_62: init %TemplateC to %.loc9_3 = mark_in_place_init %TemplateC__carbon_thunk.call.loc9 +// CHECK:STDOUT: assign %c2.var, %.loc9_62 +// CHECK:STDOUT: %.loc9_21: type = splice_block %TemplateC.ref.loc9_21 [concrete = constants.%TemplateC] { // CHECK:STDOUT: %Cpp.ref.loc9_18: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc9_21: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %TemplateC.ref.loc9_21: type = name_ref TemplateC, imports.%TemplateC.decl [concrete = constants.%TemplateC] // CHECK:STDOUT: } -// CHECK:STDOUT: %c2: ref %C = wrapper_binding c2, %c2.var +// CHECK:STDOUT: %c2: ref %TemplateC = wrapper_binding c2, %c2.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = ref_binding_pattern c2 [concrete = constants.%c2.patt] -// CHECK:STDOUT: %c2.var_patt: %pattern_type.bbc = var_pattern %c2.patt [concrete = constants.%c2.var_patt] +// CHECK:STDOUT: %c2.patt: %pattern_type.f20 = ref_binding_pattern c2 [concrete = constants.%c2.patt] +// CHECK:STDOUT: %c2.var_patt: %pattern_type.f20 = var_pattern %c2.patt [concrete = constants.%c2.var_patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c3.var: ref %C = var_storage %c3.var_patt -// CHECK:STDOUT: %Cpp.ref.loc10_26: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc10_29: type = name_ref C, imports.%C.decl [concrete = constants.%C] -// CHECK:STDOUT: %C.ref.loc10_31: %C.C.cpp_overload_set.type = name_ref C, imports.%C.C.cpp_overload_set.value [concrete = constants.%C.C.cpp_overload_set.value] -// CHECK:STDOUT: %c1.ref: ref %C = name_ref c1, %c1 -// CHECK:STDOUT: %addr.loc10_34: %ptr.0a2 = addr_of %c1.ref -// CHECK:STDOUT: %.loc10_3: ref %C = splice_block %c3.var {} -// CHECK:STDOUT: %addr.loc10_37: %ptr.0a2 = addr_of %.loc10_3 -// CHECK:STDOUT: %C__carbon_thunk.call.loc10: init %empty_tuple.type = call imports.%C__carbon_thunk.decl.abd9a2.3(%addr.loc10_34, %addr.loc10_37) -// CHECK:STDOUT: %.loc10_37: init %C to %.loc10_3 = mark_in_place_init %C__carbon_thunk.call.loc10 -// CHECK:STDOUT: assign %c3.var, %.loc10_37 -// CHECK:STDOUT: %.loc10_21: type = splice_block %C.ref.loc10_21 [concrete = constants.%C] { +// CHECK:STDOUT: %c3.var: ref %TemplateC = var_storage %c3.var_patt +// CHECK:STDOUT: %Cpp.ref.loc10_34: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %TemplateC.ref.loc10_37: type = name_ref TemplateC, imports.%TemplateC.decl [concrete = constants.%TemplateC] +// CHECK:STDOUT: %TemplateC.ref.loc10_47: %TemplateC.TemplateC.cpp_overload_set.type = name_ref TemplateC, imports.%TemplateC.TemplateC.cpp_overload_set.value [concrete = constants.%TemplateC.TemplateC.cpp_overload_set.value] +// CHECK:STDOUT: %c1.ref: ref %TemplateC = name_ref c1, %c1 +// CHECK:STDOUT: %addr.loc10_58: %ptr.588 = addr_of %c1.ref +// CHECK:STDOUT: %.loc10_3: ref %TemplateC = splice_block %c3.var {} +// CHECK:STDOUT: %addr.loc10_61: %ptr.588 = addr_of %.loc10_3 +// CHECK:STDOUT: %TemplateC__carbon_thunk.call.loc10: init %empty_tuple.type = call imports.%TemplateC__carbon_thunk.decl.a5784e.3(%addr.loc10_58, %addr.loc10_61) +// CHECK:STDOUT: %.loc10_61: init %TemplateC to %.loc10_3 = mark_in_place_init %TemplateC__carbon_thunk.call.loc10 +// CHECK:STDOUT: assign %c3.var, %.loc10_61 +// CHECK:STDOUT: %.loc10_21: type = splice_block %TemplateC.ref.loc10_21 [concrete = constants.%TemplateC] { // CHECK:STDOUT: %Cpp.ref.loc10_18: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc10_21: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %TemplateC.ref.loc10_21: type = name_ref TemplateC, imports.%TemplateC.decl [concrete = constants.%TemplateC] // CHECK:STDOUT: } -// CHECK:STDOUT: %c3: ref %C = wrapper_binding c3, %c3.var +// CHECK:STDOUT: %c3: ref %TemplateC = wrapper_binding c3, %c3.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c3.patt: %pattern_type.bbc = ref_binding_pattern c3 [concrete = constants.%c3.patt] -// CHECK:STDOUT: %c3.var_patt: %pattern_type.bbc = var_pattern %c3.patt [concrete = constants.%c3.var_patt] +// CHECK:STDOUT: %c3.patt: %pattern_type.f20 = ref_binding_pattern c3 [concrete = constants.%c3.patt] +// CHECK:STDOUT: %c3.var_patt: %pattern_type.f20 = var_pattern %c3.patt [concrete = constants.%c3.var_patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %C.cpp_destructor.bound.loc10: = bound_method %c3.var, constants.%C.cpp_destructor -// CHECK:STDOUT: %C.cpp_destructor.call.loc10: init %empty_tuple.type = call %C.cpp_destructor.bound.loc10(%c3.var) -// CHECK:STDOUT: %C.cpp_destructor.bound.loc9: = bound_method %c2.var, constants.%C.cpp_destructor -// CHECK:STDOUT: %C.cpp_destructor.call.loc9: init %empty_tuple.type = call %C.cpp_destructor.bound.loc9(%c2.var) -// CHECK:STDOUT: %C.cpp_destructor.bound.loc8: = bound_method %c1.var, constants.%C.cpp_destructor -// CHECK:STDOUT: %C.cpp_destructor.call.loc8: init %empty_tuple.type = call %C.cpp_destructor.bound.loc8(%c1.var) +// CHECK:STDOUT: %TemplateC.cpp_destructor.bound.loc10: = bound_method %c3.var, constants.%TemplateC.cpp_destructor +// CHECK:STDOUT: %TemplateC.cpp_destructor.call.loc10: init %empty_tuple.type = call %TemplateC.cpp_destructor.bound.loc10(%c3.var) +// CHECK:STDOUT: %TemplateC.cpp_destructor.bound.loc9: = bound_method %c2.var, constants.%TemplateC.cpp_destructor +// CHECK:STDOUT: %TemplateC.cpp_destructor.call.loc9: init %empty_tuple.type = call %TemplateC.cpp_destructor.bound.loc9(%c2.var) +// CHECK:STDOUT: %TemplateC.cpp_destructor.bound.loc8: = bound_method %c1.var, constants.%TemplateC.cpp_destructor +// CHECK:STDOUT: %TemplateC.cpp_destructor.call.loc8: init %empty_tuple.type = call %TemplateC.cpp_destructor.bound.loc8(%c1.var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -935,17 +934,17 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] -// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = value_binding_pattern c1 [concrete] -// CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] -// CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] +// CHECK:STDOUT: %SingleArgC: type = class_type @SingleArgC [concrete] +// CHECK:STDOUT: %pattern_type.bac: type = pattern_type %SingleArgC [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.bac = value_binding_pattern c1 [concrete] +// CHECK:STDOUT: %SingleArgC.SingleArgC.cpp_overload_set.type: type = cpp_overload_set_type @SingleArgC.SingleArgC.cpp_overload_set [concrete] +// CHECK:STDOUT: %SingleArgC.SingleArgC.cpp_overload_set.value: %SingleArgC.SingleArgC.cpp_overload_set.type = cpp_overload_set_value @SingleArgC.SingleArgC.cpp_overload_set [concrete] // CHECK:STDOUT: %int_8.b85: Core.IntLiteral = int_value 8 [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] -// CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] -// CHECK:STDOUT: %C__carbon_thunk.type: type = fn_type @C__carbon_thunk [concrete] -// CHECK:STDOUT: %C__carbon_thunk: %C__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %ptr.15b: type = ptr_type %SingleArgC [concrete] +// CHECK:STDOUT: %SingleArgC__carbon_thunk.type: type = fn_type @SingleArgC__carbon_thunk [concrete] +// CHECK:STDOUT: %SingleArgC__carbon_thunk: %SingleArgC__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.914: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert, @Core.IntLiteral.as.ImplicitAs.impl(%To) [symbolic] @@ -960,7 +959,7 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method.01f: = bound_method %int_8.b85, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_8.9cf: %i32 = int_value 8 [concrete] -// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = value_binding_pattern c2 [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.bac = value_binding_pattern c2 [concrete] // CHECK:STDOUT: %As.type.155: type = facet_type <@As, @As(%i32)> [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.type.c5d: type = fn_type @Core.IntLiteral.as.As.impl.Convert, @Core.IntLiteral.as.As.impl(%To) [symbolic] // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.6ee: %Core.IntLiteral.as.As.impl.Convert.type.c5d = struct_value () [symbolic] @@ -973,18 +972,18 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.bound: = bound_method %int_8.b85, %Core.IntLiteral.as.As.impl.Convert.8a4 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.As.impl.Convert.8a4, @Core.IntLiteral.as.As.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method.07f: = bound_method %int_8.b85, %Core.IntLiteral.as.As.impl.Convert.specific_fn [concrete] -// CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] -// CHECK:STDOUT: %C.cpp_destructor: %C.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %SingleArgC.cpp_destructor.type: type = fn_type @SingleArgC.cpp_destructor [concrete] +// CHECK:STDOUT: %SingleArgC.cpp_destructor: %SingleArgC.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .C = %C.decl +// CHECK:STDOUT: .SingleArgC = %SingleArgC.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete = constants.%C.C.cpp_overload_set.value] -// CHECK:STDOUT: %C__carbon_thunk.decl: %C__carbon_thunk.type = fn_decl @C__carbon_thunk [concrete = constants.%C__carbon_thunk] { +// CHECK:STDOUT: %SingleArgC.decl: type = class_decl @SingleArgC [concrete = constants.%SingleArgC] {} {} +// CHECK:STDOUT: %SingleArgC.SingleArgC.cpp_overload_set.value: %SingleArgC.SingleArgC.cpp_overload_set.type = cpp_overload_set_value @SingleArgC.SingleArgC.cpp_overload_set [concrete = constants.%SingleArgC.SingleArgC.cpp_overload_set.value] +// CHECK:STDOUT: %SingleArgC__carbon_thunk.decl: %SingleArgC__carbon_thunk.type = fn_decl @SingleArgC__carbon_thunk [concrete = constants.%SingleArgC__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -997,59 +996,59 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Cpp.ref.loc8_26: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc8_29: type = name_ref C, imports.%C.decl [concrete = constants.%C] -// CHECK:STDOUT: %C.ref.loc8_31: %C.C.cpp_overload_set.type = name_ref C, imports.%C.C.cpp_overload_set.value [concrete = constants.%C.C.cpp_overload_set.value] +// CHECK:STDOUT: %Cpp.ref.loc8_35: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %SingleArgC.ref.loc8_38: type = name_ref SingleArgC, imports.%SingleArgC.decl [concrete = constants.%SingleArgC] +// CHECK:STDOUT: %SingleArgC.ref.loc8_49: %SingleArgC.SingleArgC.cpp_overload_set.type = name_ref SingleArgC, imports.%SingleArgC.SingleArgC.cpp_overload_set.value [concrete = constants.%SingleArgC.SingleArgC.cpp_overload_set.value] // CHECK:STDOUT: %int_8.loc8: Core.IntLiteral = int_value 8 [concrete = constants.%int_8.b85] -// CHECK:STDOUT: %.loc8_35.1: ref %C = temporary_storage +// CHECK:STDOUT: %.loc8_62.1: ref %SingleArgC = temporary_storage // CHECK:STDOUT: %impl.elem0.loc8: %.b7a = impl_witness_access constants.%ImplicitAs.impl_witness.a2a, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] -// CHECK:STDOUT: %bound_method.loc8_34.1: = bound_method %int_8.loc8, %impl.elem0.loc8 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] +// CHECK:STDOUT: %bound_method.loc8_61.1: = bound_method %int_8.loc8, %impl.elem0.loc8 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn.loc8: = specific_function %impl.elem0.loc8, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc8_34.2: = bound_method %int_8.loc8, %specific_fn.loc8 [concrete = constants.%bound_method.01f] -// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc8_34.2(%int_8.loc8) [concrete = constants.%int_8.9cf] -// CHECK:STDOUT: %.loc8_34.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_8.9cf] -// CHECK:STDOUT: %.loc8_34.2: %i32 = converted %int_8.loc8, %.loc8_34.1 [concrete = constants.%int_8.9cf] -// CHECK:STDOUT: %addr.loc8: %ptr.0a2 = addr_of %.loc8_35.1 -// CHECK:STDOUT: %C__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%.loc8_34.2, %addr.loc8) -// CHECK:STDOUT: %.loc8_35.2: init %C to %.loc8_35.1 = mark_in_place_init %C__carbon_thunk.call.loc8 -// CHECK:STDOUT: %.loc8_35.3: ref %C = temporary %.loc8_35.1, %.loc8_35.2 -// CHECK:STDOUT: %.loc8_35.4: %C = acquire_value %.loc8_35.3 -// CHECK:STDOUT: %.loc8_21: type = splice_block %C.ref.loc8_21 [concrete = constants.%C] { +// CHECK:STDOUT: %bound_method.loc8_61.2: = bound_method %int_8.loc8, %specific_fn.loc8 [concrete = constants.%bound_method.01f] +// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc8_61.2(%int_8.loc8) [concrete = constants.%int_8.9cf] +// CHECK:STDOUT: %.loc8_61.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_8.9cf] +// CHECK:STDOUT: %.loc8_61.2: %i32 = converted %int_8.loc8, %.loc8_61.1 [concrete = constants.%int_8.9cf] +// CHECK:STDOUT: %addr.loc8: %ptr.15b = addr_of %.loc8_62.1 +// CHECK:STDOUT: %SingleArgC__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%SingleArgC__carbon_thunk.decl(%.loc8_61.2, %addr.loc8) +// CHECK:STDOUT: %.loc8_62.2: init %SingleArgC to %.loc8_62.1 = mark_in_place_init %SingleArgC__carbon_thunk.call.loc8 +// CHECK:STDOUT: %.loc8_62.3: ref %SingleArgC = temporary %.loc8_62.1, %.loc8_62.2 +// CHECK:STDOUT: %.loc8_62.4: %SingleArgC = acquire_value %.loc8_62.3 +// CHECK:STDOUT: %.loc8_21: type = splice_block %SingleArgC.ref.loc8_21 [concrete = constants.%SingleArgC] { // CHECK:STDOUT: %Cpp.ref.loc8_18: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc8_21: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %SingleArgC.ref.loc8_21: type = name_ref SingleArgC, imports.%SingleArgC.decl [concrete = constants.%SingleArgC] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1: %C = wrapper_binding c1, %.loc8_35.4 +// CHECK:STDOUT: %c1: %SingleArgC = wrapper_binding c1, %.loc8_62.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = value_binding_pattern c1 [concrete = constants.%c1.patt] +// CHECK:STDOUT: %c1.patt: %pattern_type.bac = value_binding_pattern c1 [concrete = constants.%c1.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_8.loc9: Core.IntLiteral = int_value 8 [concrete = constants.%int_8.b85] // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %impl.elem0.loc9: %.453 = impl_witness_access constants.%As.impl_witness.e7f, element0 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.8a4] -// CHECK:STDOUT: %bound_method.loc9_28.1: = bound_method %int_8.loc9, %impl.elem0.loc9 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.bound] +// CHECK:STDOUT: %bound_method.loc9_37.1: = bound_method %int_8.loc9, %impl.elem0.loc9 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.bound] // CHECK:STDOUT: %specific_fn.loc9: = specific_function %impl.elem0.loc9, @Core.IntLiteral.as.As.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc9_28.2: = bound_method %int_8.loc9, %specific_fn.loc9 [concrete = constants.%bound_method.07f] -// CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.call: init %i32 = call %bound_method.loc9_28.2(%int_8.loc9) [concrete = constants.%int_8.9cf] -// CHECK:STDOUT: %.loc9_28.1: %i32 = value_of_initializer %Core.IntLiteral.as.As.impl.Convert.call [concrete = constants.%int_8.9cf] -// CHECK:STDOUT: %.loc9_28.2: %i32 = converted %int_8.loc9, %.loc9_28.1 [concrete = constants.%int_8.9cf] -// CHECK:STDOUT: %.loc9_28.3: ref %C = temporary_storage -// CHECK:STDOUT: %addr.loc9: %ptr.0a2 = addr_of %.loc9_28.3 -// CHECK:STDOUT: %C__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%.loc9_28.2, %addr.loc9) -// CHECK:STDOUT: %.loc9_28.4: init %C to %.loc9_28.3 = mark_in_place_init %C__carbon_thunk.call.loc9 -// CHECK:STDOUT: %.loc9_28.5: init %C = converted %.loc9_28.2, %.loc9_28.4 -// CHECK:STDOUT: %.loc9_28.6: ref %C = temporary %.loc9_28.3, %.loc9_28.5 -// CHECK:STDOUT: %.loc9_28.7: %C = acquire_value %.loc9_28.6 -// CHECK:STDOUT: %.loc9_21: type = splice_block %C.ref.loc9 [concrete = constants.%C] { +// CHECK:STDOUT: %bound_method.loc9_37.2: = bound_method %int_8.loc9, %specific_fn.loc9 [concrete = constants.%bound_method.07f] +// CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.call: init %i32 = call %bound_method.loc9_37.2(%int_8.loc9) [concrete = constants.%int_8.9cf] +// CHECK:STDOUT: %.loc9_37.1: %i32 = value_of_initializer %Core.IntLiteral.as.As.impl.Convert.call [concrete = constants.%int_8.9cf] +// CHECK:STDOUT: %.loc9_37.2: %i32 = converted %int_8.loc9, %.loc9_37.1 [concrete = constants.%int_8.9cf] +// CHECK:STDOUT: %.loc9_37.3: ref %SingleArgC = temporary_storage +// CHECK:STDOUT: %addr.loc9: %ptr.15b = addr_of %.loc9_37.3 +// CHECK:STDOUT: %SingleArgC__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%SingleArgC__carbon_thunk.decl(%.loc9_37.2, %addr.loc9) +// CHECK:STDOUT: %.loc9_37.4: init %SingleArgC to %.loc9_37.3 = mark_in_place_init %SingleArgC__carbon_thunk.call.loc9 +// CHECK:STDOUT: %.loc9_37.5: init %SingleArgC = converted %.loc9_37.2, %.loc9_37.4 +// CHECK:STDOUT: %.loc9_37.6: ref %SingleArgC = temporary %.loc9_37.3, %.loc9_37.5 +// CHECK:STDOUT: %.loc9_37.7: %SingleArgC = acquire_value %.loc9_37.6 +// CHECK:STDOUT: %.loc9_21: type = splice_block %SingleArgC.ref.loc9 [concrete = constants.%SingleArgC] { // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc9: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %SingleArgC.ref.loc9: type = name_ref SingleArgC, imports.%SingleArgC.decl [concrete = constants.%SingleArgC] // CHECK:STDOUT: } -// CHECK:STDOUT: %c2: %C = wrapper_binding c2, %.loc9_28.7 +// CHECK:STDOUT: %c2: %SingleArgC = wrapper_binding c2, %.loc9_37.7 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = value_binding_pattern c2 [concrete = constants.%c2.patt] +// CHECK:STDOUT: %c2.patt: %pattern_type.bac = value_binding_pattern c2 [concrete = constants.%c2.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %C.cpp_destructor.bound.loc9: = bound_method %.loc9_28.6, constants.%C.cpp_destructor -// CHECK:STDOUT: %C.cpp_destructor.call.loc9: init %empty_tuple.type = call %C.cpp_destructor.bound.loc9(%.loc9_28.6) -// CHECK:STDOUT: %C.cpp_destructor.bound.loc8: = bound_method %.loc8_35.3, constants.%C.cpp_destructor -// CHECK:STDOUT: %C.cpp_destructor.call.loc8: init %empty_tuple.type = call %C.cpp_destructor.bound.loc8(%.loc8_35.3) +// CHECK:STDOUT: %SingleArgC.cpp_destructor.bound.loc9: = bound_method %.loc9_37.6, constants.%SingleArgC.cpp_destructor +// CHECK:STDOUT: %SingleArgC.cpp_destructor.call.loc9: init %empty_tuple.type = call %SingleArgC.cpp_destructor.bound.loc9(%.loc9_37.6) +// CHECK:STDOUT: %SingleArgC.cpp_destructor.bound.loc8: = bound_method %.loc8_62.3, constants.%SingleArgC.cpp_destructor +// CHECK:STDOUT: %SingleArgC.cpp_destructor.call.loc8: init %empty_tuple.type = call %SingleArgC.cpp_destructor.bound.loc8(%.loc8_62.3) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1057,18 +1056,18 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] -// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = value_binding_pattern c1 [concrete] -// CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] -// CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] +// CHECK:STDOUT: %MultiArgC: type = class_type @MultiArgC [concrete] +// CHECK:STDOUT: %pattern_type.b5c: type = pattern_type %MultiArgC [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.b5c = value_binding_pattern c1 [concrete] +// CHECK:STDOUT: %MultiArgC.MultiArgC.cpp_overload_set.type: type = cpp_overload_set_type @MultiArgC.MultiArgC.cpp_overload_set [concrete] +// CHECK:STDOUT: %MultiArgC.MultiArgC.cpp_overload_set.value: %MultiArgC.MultiArgC.cpp_overload_set.type = cpp_overload_set_value @MultiArgC.MultiArgC.cpp_overload_set [concrete] // CHECK:STDOUT: %int_8.b85: Core.IntLiteral = int_value 8 [concrete] // CHECK:STDOUT: %int_9.988: Core.IntLiteral = int_value 9 [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] -// CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] -// CHECK:STDOUT: %C__carbon_thunk.type.e78457.1: type = fn_type @C__carbon_thunk.1 [concrete] -// CHECK:STDOUT: %C__carbon_thunk.ca303d.1: %C__carbon_thunk.type.e78457.1 = struct_value () [concrete] +// CHECK:STDOUT: %ptr.b73: type = ptr_type %MultiArgC [concrete] +// CHECK:STDOUT: %MultiArgC__carbon_thunk.type.e5b71e.1: type = fn_type @MultiArgC__carbon_thunk.1 [concrete] +// CHECK:STDOUT: %MultiArgC__carbon_thunk.dd06c5.1: %MultiArgC__carbon_thunk.type.e5b71e.1 = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.914: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert, @Core.IntLiteral.as.ImplicitAs.impl(%To) [symbolic] @@ -1086,10 +1085,10 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.f46: = bound_method %int_9.988, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.9bf: = bound_method %int_9.988, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_9.056: %i32 = int_value 9 [concrete] -// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = value_binding_pattern c2 [concrete] -// CHECK:STDOUT: %C__carbon_thunk.type.e78457.2: type = fn_type @C__carbon_thunk.2 [concrete] -// CHECK:STDOUT: %C__carbon_thunk.ca303d.2: %C__carbon_thunk.type.e78457.2 = struct_value () [concrete] -// CHECK:STDOUT: %c3.patt: %pattern_type.bbc = value_binding_pattern c3 [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.b5c = value_binding_pattern c2 [concrete] +// CHECK:STDOUT: %MultiArgC__carbon_thunk.type.e5b71e.2: type = fn_type @MultiArgC__carbon_thunk.2 [concrete] +// CHECK:STDOUT: %MultiArgC__carbon_thunk.dd06c5.2: %MultiArgC__carbon_thunk.type.e5b71e.2 = struct_value () [concrete] +// CHECK:STDOUT: %c3.patt: %pattern_type.b5c = value_binding_pattern c3 [concrete] // CHECK:STDOUT: %As.type.155: type = facet_type <@As, @As(%i32)> [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.type.c5d: type = fn_type @Core.IntLiteral.as.As.impl.Convert, @Core.IntLiteral.as.As.impl(%To) [symbolic] // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.6ee: %Core.IntLiteral.as.As.impl.Convert.type.c5d = struct_value () [symbolic] @@ -1102,25 +1101,25 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.bound: = bound_method %int_8.b85, %Core.IntLiteral.as.As.impl.Convert.8a4 [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.As.impl.Convert.8a4, @Core.IntLiteral.as.As.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method.07f: = bound_method %int_8.b85, %Core.IntLiteral.as.As.impl.Convert.specific_fn [concrete] -// CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] -// CHECK:STDOUT: %C.cpp_destructor: %C.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %MultiArgC.cpp_destructor.type: type = fn_type @MultiArgC.cpp_destructor [concrete] +// CHECK:STDOUT: %MultiArgC.cpp_destructor: %MultiArgC.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .C = %C.decl +// CHECK:STDOUT: .MultiArgC = %MultiArgC.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete = constants.%C.C.cpp_overload_set.value] -// CHECK:STDOUT: %C__carbon_thunk.decl.abd9a2.1: %C__carbon_thunk.type.e78457.1 = fn_decl @C__carbon_thunk.1 [concrete = constants.%C__carbon_thunk.ca303d.1] { +// CHECK:STDOUT: %MultiArgC.decl: type = class_decl @MultiArgC [concrete = constants.%MultiArgC] {} {} +// CHECK:STDOUT: %MultiArgC.MultiArgC.cpp_overload_set.value: %MultiArgC.MultiArgC.cpp_overload_set.type = cpp_overload_set_value @MultiArgC.MultiArgC.cpp_overload_set [concrete = constants.%MultiArgC.MultiArgC.cpp_overload_set.value] +// CHECK:STDOUT: %MultiArgC__carbon_thunk.decl.bde754.1: %MultiArgC__carbon_thunk.type.e5b71e.1 = fn_decl @MultiArgC__carbon_thunk.1 [concrete = constants.%MultiArgC__carbon_thunk.dd06c5.1] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import_ref.edf: @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.845)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.1aa = impl_witness_table (%Core.import_ref.edf), @Core.IntLiteral.as.ImplicitAs.impl [concrete] -// CHECK:STDOUT: %C__carbon_thunk.decl.abd9a2.2: %C__carbon_thunk.type.e78457.2 = fn_decl @C__carbon_thunk.2 [concrete = constants.%C__carbon_thunk.ca303d.2] { +// CHECK:STDOUT: %MultiArgC__carbon_thunk.decl.bde754.2: %MultiArgC__carbon_thunk.type.e5b71e.2 = fn_decl @MultiArgC__carbon_thunk.2 [concrete = constants.%MultiArgC__carbon_thunk.dd06c5.2] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -1131,94 +1130,94 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Cpp.ref.loc8_26: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc8_29: type = name_ref C, imports.%C.decl [concrete = constants.%C] -// CHECK:STDOUT: %C.ref.loc8_31: %C.C.cpp_overload_set.type = name_ref C, imports.%C.C.cpp_overload_set.value [concrete = constants.%C.C.cpp_overload_set.value] +// CHECK:STDOUT: %Cpp.ref.loc8_34: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %MultiArgC.ref.loc8_37: type = name_ref MultiArgC, imports.%MultiArgC.decl [concrete = constants.%MultiArgC] +// CHECK:STDOUT: %MultiArgC.ref.loc8_47: %MultiArgC.MultiArgC.cpp_overload_set.type = name_ref MultiArgC, imports.%MultiArgC.MultiArgC.cpp_overload_set.value [concrete = constants.%MultiArgC.MultiArgC.cpp_overload_set.value] // CHECK:STDOUT: %int_8.loc8: Core.IntLiteral = int_value 8 [concrete = constants.%int_8.b85] // CHECK:STDOUT: %int_9: Core.IntLiteral = int_value 9 [concrete = constants.%int_9.988] -// CHECK:STDOUT: %.loc8_38.1: ref %C = temporary_storage -// CHECK:STDOUT: %impl.elem0.loc8_34: %.b7a = impl_witness_access constants.%ImplicitAs.impl_witness.a2a, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] -// CHECK:STDOUT: %bound_method.loc8_34.1: = bound_method %int_8.loc8, %impl.elem0.loc8_34 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.9dd] -// CHECK:STDOUT: %specific_fn.loc8_34: = specific_function %impl.elem0.loc8_34, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc8_34.2: = bound_method %int_8.loc8, %specific_fn.loc8_34 [concrete = constants.%bound_method.01f] -// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8_34: init %i32 = call %bound_method.loc8_34.2(%int_8.loc8) [concrete = constants.%int_8.9cf] -// CHECK:STDOUT: %.loc8_34.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8_34 [concrete = constants.%int_8.9cf] -// CHECK:STDOUT: %.loc8_34.2: %i32 = converted %int_8.loc8, %.loc8_34.1 [concrete = constants.%int_8.9cf] -// CHECK:STDOUT: %impl.elem0.loc8_37: %.b7a = impl_witness_access constants.%ImplicitAs.impl_witness.a2a, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] -// CHECK:STDOUT: %bound_method.loc8_37.1: = bound_method %int_9, %impl.elem0.loc8_37 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.f46] -// CHECK:STDOUT: %specific_fn.loc8_37: = specific_function %impl.elem0.loc8_37, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc8_37.2: = bound_method %int_9, %specific_fn.loc8_37 [concrete = constants.%bound_method.9bf] -// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8_37: init %i32 = call %bound_method.loc8_37.2(%int_9) [concrete = constants.%int_9.056] -// CHECK:STDOUT: %.loc8_37.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8_37 [concrete = constants.%int_9.056] -// CHECK:STDOUT: %.loc8_37.2: %i32 = converted %int_9, %.loc8_37.1 [concrete = constants.%int_9.056] -// CHECK:STDOUT: %addr.loc8: %ptr.0a2 = addr_of %.loc8_38.1 -// CHECK:STDOUT: %C__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%C__carbon_thunk.decl.abd9a2.1(%.loc8_34.2, %.loc8_37.2, %addr.loc8) -// CHECK:STDOUT: %.loc8_38.2: init %C to %.loc8_38.1 = mark_in_place_init %C__carbon_thunk.call.loc8 -// CHECK:STDOUT: %.loc8_38.3: ref %C = temporary %.loc8_38.1, %.loc8_38.2 -// CHECK:STDOUT: %.loc8_38.4: %C = acquire_value %.loc8_38.3 -// CHECK:STDOUT: %.loc8_21: type = splice_block %C.ref.loc8_21 [concrete = constants.%C] { +// CHECK:STDOUT: %.loc8_62.1: ref %MultiArgC = temporary_storage +// CHECK:STDOUT: %impl.elem0.loc8_58: %.b7a = impl_witness_access constants.%ImplicitAs.impl_witness.a2a, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] +// CHECK:STDOUT: %bound_method.loc8_58.1: = bound_method %int_8.loc8, %impl.elem0.loc8_58 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.9dd] +// CHECK:STDOUT: %specific_fn.loc8_58: = specific_function %impl.elem0.loc8_58, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] +// CHECK:STDOUT: %bound_method.loc8_58.2: = bound_method %int_8.loc8, %specific_fn.loc8_58 [concrete = constants.%bound_method.01f] +// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8_58: init %i32 = call %bound_method.loc8_58.2(%int_8.loc8) [concrete = constants.%int_8.9cf] +// CHECK:STDOUT: %.loc8_58.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8_58 [concrete = constants.%int_8.9cf] +// CHECK:STDOUT: %.loc8_58.2: %i32 = converted %int_8.loc8, %.loc8_58.1 [concrete = constants.%int_8.9cf] +// CHECK:STDOUT: %impl.elem0.loc8_61: %.b7a = impl_witness_access constants.%ImplicitAs.impl_witness.a2a, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] +// CHECK:STDOUT: %bound_method.loc8_61.1: = bound_method %int_9, %impl.elem0.loc8_61 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.f46] +// CHECK:STDOUT: %specific_fn.loc8_61: = specific_function %impl.elem0.loc8_61, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] +// CHECK:STDOUT: %bound_method.loc8_61.2: = bound_method %int_9, %specific_fn.loc8_61 [concrete = constants.%bound_method.9bf] +// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8_61: init %i32 = call %bound_method.loc8_61.2(%int_9) [concrete = constants.%int_9.056] +// CHECK:STDOUT: %.loc8_61.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc8_61 [concrete = constants.%int_9.056] +// CHECK:STDOUT: %.loc8_61.2: %i32 = converted %int_9, %.loc8_61.1 [concrete = constants.%int_9.056] +// CHECK:STDOUT: %addr.loc8: %ptr.b73 = addr_of %.loc8_62.1 +// CHECK:STDOUT: %MultiArgC__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%MultiArgC__carbon_thunk.decl.bde754.1(%.loc8_58.2, %.loc8_61.2, %addr.loc8) +// CHECK:STDOUT: %.loc8_62.2: init %MultiArgC to %.loc8_62.1 = mark_in_place_init %MultiArgC__carbon_thunk.call.loc8 +// CHECK:STDOUT: %.loc8_62.3: ref %MultiArgC = temporary %.loc8_62.1, %.loc8_62.2 +// CHECK:STDOUT: %.loc8_62.4: %MultiArgC = acquire_value %.loc8_62.3 +// CHECK:STDOUT: %.loc8_21: type = splice_block %MultiArgC.ref.loc8_21 [concrete = constants.%MultiArgC] { // CHECK:STDOUT: %Cpp.ref.loc8_18: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc8_21: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %MultiArgC.ref.loc8_21: type = name_ref MultiArgC, imports.%MultiArgC.decl [concrete = constants.%MultiArgC] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1: %C = wrapper_binding c1, %.loc8_38.4 +// CHECK:STDOUT: %c1: %MultiArgC = wrapper_binding c1, %.loc8_62.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = value_binding_pattern c1 [concrete = constants.%c1.patt] +// CHECK:STDOUT: %c1.patt: %pattern_type.b5c = value_binding_pattern c1 [concrete = constants.%c1.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.ref.loc9_26: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc9_29: type = name_ref C, imports.%C.decl [concrete = constants.%C] -// CHECK:STDOUT: %C.ref.loc9_31: %C.C.cpp_overload_set.type = name_ref C, imports.%C.C.cpp_overload_set.value [concrete = constants.%C.C.cpp_overload_set.value] +// CHECK:STDOUT: %Cpp.ref.loc9_34: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %MultiArgC.ref.loc9_37: type = name_ref MultiArgC, imports.%MultiArgC.decl [concrete = constants.%MultiArgC] +// CHECK:STDOUT: %MultiArgC.ref.loc9_47: %MultiArgC.MultiArgC.cpp_overload_set.type = name_ref MultiArgC, imports.%MultiArgC.MultiArgC.cpp_overload_set.value [concrete = constants.%MultiArgC.MultiArgC.cpp_overload_set.value] // CHECK:STDOUT: %int_8.loc9: Core.IntLiteral = int_value 8 [concrete = constants.%int_8.b85] -// CHECK:STDOUT: %.loc9_35.1: ref %C = temporary_storage +// CHECK:STDOUT: %.loc9_59.1: ref %MultiArgC = temporary_storage // CHECK:STDOUT: %impl.elem0.loc9: %.b7a = impl_witness_access constants.%ImplicitAs.impl_witness.a2a, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] -// CHECK:STDOUT: %bound_method.loc9_34.1: = bound_method %int_8.loc9, %impl.elem0.loc9 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.9dd] +// CHECK:STDOUT: %bound_method.loc9_58.1: = bound_method %int_8.loc9, %impl.elem0.loc9 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.9dd] // CHECK:STDOUT: %specific_fn.loc9: = specific_function %impl.elem0.loc9, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc9_34.2: = bound_method %int_8.loc9, %specific_fn.loc9 [concrete = constants.%bound_method.01f] -// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9: init %i32 = call %bound_method.loc9_34.2(%int_8.loc9) [concrete = constants.%int_8.9cf] -// CHECK:STDOUT: %.loc9_34.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9 [concrete = constants.%int_8.9cf] -// CHECK:STDOUT: %.loc9_34.2: %i32 = converted %int_8.loc9, %.loc9_34.1 [concrete = constants.%int_8.9cf] -// CHECK:STDOUT: %addr.loc9: %ptr.0a2 = addr_of %.loc9_35.1 -// CHECK:STDOUT: %C__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%C__carbon_thunk.decl.abd9a2.2(%.loc9_34.2, %addr.loc9) -// CHECK:STDOUT: %.loc9_35.2: init %C to %.loc9_35.1 = mark_in_place_init %C__carbon_thunk.call.loc9 -// CHECK:STDOUT: %.loc9_35.3: ref %C = temporary %.loc9_35.1, %.loc9_35.2 -// CHECK:STDOUT: %.loc9_35.4: %C = acquire_value %.loc9_35.3 -// CHECK:STDOUT: %.loc9_21: type = splice_block %C.ref.loc9_21 [concrete = constants.%C] { +// CHECK:STDOUT: %bound_method.loc9_58.2: = bound_method %int_8.loc9, %specific_fn.loc9 [concrete = constants.%bound_method.01f] +// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9: init %i32 = call %bound_method.loc9_58.2(%int_8.loc9) [concrete = constants.%int_8.9cf] +// CHECK:STDOUT: %.loc9_58.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc9 [concrete = constants.%int_8.9cf] +// CHECK:STDOUT: %.loc9_58.2: %i32 = converted %int_8.loc9, %.loc9_58.1 [concrete = constants.%int_8.9cf] +// CHECK:STDOUT: %addr.loc9: %ptr.b73 = addr_of %.loc9_59.1 +// CHECK:STDOUT: %MultiArgC__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%MultiArgC__carbon_thunk.decl.bde754.2(%.loc9_58.2, %addr.loc9) +// CHECK:STDOUT: %.loc9_59.2: init %MultiArgC to %.loc9_59.1 = mark_in_place_init %MultiArgC__carbon_thunk.call.loc9 +// CHECK:STDOUT: %.loc9_59.3: ref %MultiArgC = temporary %.loc9_59.1, %.loc9_59.2 +// CHECK:STDOUT: %.loc9_59.4: %MultiArgC = acquire_value %.loc9_59.3 +// CHECK:STDOUT: %.loc9_21: type = splice_block %MultiArgC.ref.loc9_21 [concrete = constants.%MultiArgC] { // CHECK:STDOUT: %Cpp.ref.loc9_18: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc9_21: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %MultiArgC.ref.loc9_21: type = name_ref MultiArgC, imports.%MultiArgC.decl [concrete = constants.%MultiArgC] // CHECK:STDOUT: } -// CHECK:STDOUT: %c2: %C = wrapper_binding c2, %.loc9_35.4 +// CHECK:STDOUT: %c2: %MultiArgC = wrapper_binding c2, %.loc9_59.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = value_binding_pattern c2 [concrete = constants.%c2.patt] +// CHECK:STDOUT: %c2.patt: %pattern_type.b5c = value_binding_pattern c2 [concrete = constants.%c2.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %int_8.loc10: Core.IntLiteral = int_value 8 [concrete = constants.%int_8.b85] // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %impl.elem0.loc10: %.453 = impl_witness_access constants.%As.impl_witness.e7f, element0 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.8a4] -// CHECK:STDOUT: %bound_method.loc10_28.1: = bound_method %int_8.loc10, %impl.elem0.loc10 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.bound] +// CHECK:STDOUT: %bound_method.loc10_36.1: = bound_method %int_8.loc10, %impl.elem0.loc10 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.bound] // CHECK:STDOUT: %specific_fn.loc10: = specific_function %impl.elem0.loc10, @Core.IntLiteral.as.As.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc10_28.2: = bound_method %int_8.loc10, %specific_fn.loc10 [concrete = constants.%bound_method.07f] -// CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.call: init %i32 = call %bound_method.loc10_28.2(%int_8.loc10) [concrete = constants.%int_8.9cf] -// CHECK:STDOUT: %.loc10_28.1: %i32 = value_of_initializer %Core.IntLiteral.as.As.impl.Convert.call [concrete = constants.%int_8.9cf] -// CHECK:STDOUT: %.loc10_28.2: %i32 = converted %int_8.loc10, %.loc10_28.1 [concrete = constants.%int_8.9cf] -// CHECK:STDOUT: %.loc10_28.3: ref %C = temporary_storage -// CHECK:STDOUT: %addr.loc10: %ptr.0a2 = addr_of %.loc10_28.3 -// CHECK:STDOUT: %C__carbon_thunk.call.loc10: init %empty_tuple.type = call imports.%C__carbon_thunk.decl.abd9a2.2(%.loc10_28.2, %addr.loc10) -// CHECK:STDOUT: %.loc10_28.4: init %C to %.loc10_28.3 = mark_in_place_init %C__carbon_thunk.call.loc10 -// CHECK:STDOUT: %.loc10_28.5: init %C = converted %.loc10_28.2, %.loc10_28.4 -// CHECK:STDOUT: %.loc10_28.6: ref %C = temporary %.loc10_28.3, %.loc10_28.5 -// CHECK:STDOUT: %.loc10_28.7: %C = acquire_value %.loc10_28.6 -// CHECK:STDOUT: %.loc10_21: type = splice_block %C.ref.loc10 [concrete = constants.%C] { +// CHECK:STDOUT: %bound_method.loc10_36.2: = bound_method %int_8.loc10, %specific_fn.loc10 [concrete = constants.%bound_method.07f] +// CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.call: init %i32 = call %bound_method.loc10_36.2(%int_8.loc10) [concrete = constants.%int_8.9cf] +// CHECK:STDOUT: %.loc10_36.1: %i32 = value_of_initializer %Core.IntLiteral.as.As.impl.Convert.call [concrete = constants.%int_8.9cf] +// CHECK:STDOUT: %.loc10_36.2: %i32 = converted %int_8.loc10, %.loc10_36.1 [concrete = constants.%int_8.9cf] +// CHECK:STDOUT: %.loc10_36.3: ref %MultiArgC = temporary_storage +// CHECK:STDOUT: %addr.loc10: %ptr.b73 = addr_of %.loc10_36.3 +// CHECK:STDOUT: %MultiArgC__carbon_thunk.call.loc10: init %empty_tuple.type = call imports.%MultiArgC__carbon_thunk.decl.bde754.2(%.loc10_36.2, %addr.loc10) +// CHECK:STDOUT: %.loc10_36.4: init %MultiArgC to %.loc10_36.3 = mark_in_place_init %MultiArgC__carbon_thunk.call.loc10 +// CHECK:STDOUT: %.loc10_36.5: init %MultiArgC = converted %.loc10_36.2, %.loc10_36.4 +// CHECK:STDOUT: %.loc10_36.6: ref %MultiArgC = temporary %.loc10_36.3, %.loc10_36.5 +// CHECK:STDOUT: %.loc10_36.7: %MultiArgC = acquire_value %.loc10_36.6 +// CHECK:STDOUT: %.loc10_21: type = splice_block %MultiArgC.ref.loc10 [concrete = constants.%MultiArgC] { // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc10: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %MultiArgC.ref.loc10: type = name_ref MultiArgC, imports.%MultiArgC.decl [concrete = constants.%MultiArgC] // CHECK:STDOUT: } -// CHECK:STDOUT: %c3: %C = wrapper_binding c3, %.loc10_28.7 +// CHECK:STDOUT: %c3: %MultiArgC = wrapper_binding c3, %.loc10_36.7 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c3.patt: %pattern_type.bbc = value_binding_pattern c3 [concrete = constants.%c3.patt] +// CHECK:STDOUT: %c3.patt: %pattern_type.b5c = value_binding_pattern c3 [concrete = constants.%c3.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %C.cpp_destructor.bound.loc10: = bound_method %.loc10_28.6, constants.%C.cpp_destructor -// CHECK:STDOUT: %C.cpp_destructor.call.loc10: init %empty_tuple.type = call %C.cpp_destructor.bound.loc10(%.loc10_28.6) -// CHECK:STDOUT: %C.cpp_destructor.bound.loc9: = bound_method %.loc9_35.3, constants.%C.cpp_destructor -// CHECK:STDOUT: %C.cpp_destructor.call.loc9: init %empty_tuple.type = call %C.cpp_destructor.bound.loc9(%.loc9_35.3) -// CHECK:STDOUT: %C.cpp_destructor.bound.loc8: = bound_method %.loc8_38.3, constants.%C.cpp_destructor -// CHECK:STDOUT: %C.cpp_destructor.call.loc8: init %empty_tuple.type = call %C.cpp_destructor.bound.loc8(%.loc8_38.3) +// CHECK:STDOUT: %MultiArgC.cpp_destructor.bound.loc10: = bound_method %.loc10_36.6, constants.%MultiArgC.cpp_destructor +// CHECK:STDOUT: %MultiArgC.cpp_destructor.call.loc10: init %empty_tuple.type = call %MultiArgC.cpp_destructor.bound.loc10(%.loc10_36.6) +// CHECK:STDOUT: %MultiArgC.cpp_destructor.bound.loc9: = bound_method %.loc9_59.3, constants.%MultiArgC.cpp_destructor +// CHECK:STDOUT: %MultiArgC.cpp_destructor.call.loc9: init %empty_tuple.type = call %MultiArgC.cpp_destructor.bound.loc9(%.loc9_59.3) +// CHECK:STDOUT: %MultiArgC.cpp_destructor.bound.loc8: = bound_method %.loc8_62.3, constants.%MultiArgC.cpp_destructor +// CHECK:STDOUT: %MultiArgC.cpp_destructor.call.loc8: init %empty_tuple.type = call %MultiArgC.cpp_destructor.bound.loc8(%.loc8_62.3) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/class/import/field.carbon b/toolchain/check/testdata/interop/cpp/class/import/field.carbon index 5d12cad474f7..fdbafb0643ca 100644 --- a/toolchain/check/testdata/interop/cpp/class/import/field.carbon +++ b/toolchain/check/testdata/interop/cpp/class/import/field.carbon @@ -93,12 +93,12 @@ fn GetF(a: Cpp.A) -> i32 { return a.f_4; } // --- with_bitfields.h -struct Struct { +struct BitfieldStruct { int a; int b : 2; }; -union Union { +union BitfieldUnion { int c; int d : 3; }; @@ -109,13 +109,13 @@ library "[[@TEST_NAME]]"; import Cpp library "with_bitfields.h"; -fn F(s: Cpp.Struct) -> i32 { +fn F(s: Cpp.BitfieldStruct) -> i32 { //@dump-sem-ir-begin return s.a; //@dump-sem-ir-end } -fn G(s: Cpp.Union) -> i32 { +fn G(s: Cpp.BitfieldUnion) -> i32 { //@dump-sem-ir-begin return s.c; //@dump-sem-ir-end @@ -131,7 +131,7 @@ library "[[@TEST_NAME]]"; // CHECK:STDERR: ^ import Cpp library "with_bitfields.h"; -fn F(s: Cpp.Struct) -> i32 { +fn F(s: Cpp.BitfieldStruct) -> i32 { //@dump-sem-ir-begin // CHECK:STDERR: fail_todo_use_bitfields.carbon:[[@LINE+8]]:10: note: in `Cpp` name lookup for `b` [InCppNameLookup] // CHECK:STDERR: return s.b; @@ -145,7 +145,7 @@ fn F(s: Cpp.Struct) -> i32 { //@dump-sem-ir-end } -fn G(s: Cpp.Union) -> i32 { +fn G(s: Cpp.BitfieldUnion) -> i32 { //@dump-sem-ir-begin // CHECK:STDERR: fail_todo_use_bitfields.carbon:[[@LINE+4]]:10: note: in `Cpp` name lookup for `d` [InCppNameLookup] // CHECK:STDERR: return s.d; @@ -405,11 +405,11 @@ fn Test(m: Cpp.UnsupportedMembers*) { // CHECK:STDOUT: --- use_non_bitfields_in_type_with_bitfields.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %Struct: type = class_type @Struct [concrete] +// CHECK:STDOUT: %BitfieldStruct: type = class_type @BitfieldStruct [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] -// CHECK:STDOUT: %Struct.elem: type = unbound_element_type %Struct, %i32 [concrete] +// CHECK:STDOUT: %BitfieldStruct.elem: type = unbound_element_type %BitfieldStruct, %i32 [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] @@ -420,8 +420,8 @@ fn Test(m: Cpp.UnsupportedMembers*) { // CHECK:STDOUT: %Copy.WithSelf.Op.type.381: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet) [concrete] // CHECK:STDOUT: %.737: type = fn_type_with_self_type %Copy.WithSelf.Op.type.381, %Copy.facet [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.4f6, @Int.as.Copy.impl.Op(%int_32) [concrete] -// CHECK:STDOUT: %Union: type = class_type @Union [concrete] -// CHECK:STDOUT: %Union.elem: type = unbound_element_type %Union, %i32 [concrete] +// CHECK:STDOUT: %BitfieldUnion: type = class_type @BitfieldUnion [concrete] +// CHECK:STDOUT: %BitfieldUnion.elem: type = unbound_element_type %BitfieldUnion, %i32 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -429,10 +429,10 @@ fn Test(m: Cpp.UnsupportedMembers*) { // CHECK:STDOUT: %Copy.impl_witness_table.8d2 = impl_witness_table (%Core.import_ref.cd6), @Int.as.Copy.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%s.param: %Struct) -> out %return.param: %i32 { +// CHECK:STDOUT: fn @F(%s.param: %BitfieldStruct) -> out %return.param: %i32 { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %s.ref: %Struct = name_ref s, %s -// CHECK:STDOUT: %a.ref: %Struct.elem = name_ref a, @Struct.%.1 [concrete = @Struct.%.1] +// CHECK:STDOUT: %s.ref: %BitfieldStruct = name_ref s, %s +// CHECK:STDOUT: %a.ref: %BitfieldStruct.elem = name_ref a, @BitfieldStruct.%.1 [concrete = @BitfieldStruct.%.1] // CHECK:STDOUT: %.loc8_11.1: ref %i32 = class_element_access %s.ref, element0 // CHECK:STDOUT: %.loc8_11.2: %i32 = acquire_value %.loc8_11.1 // CHECK:STDOUT: %impl.elem0: %.737 = impl_witness_access constants.%Copy.impl_witness.b51, element0 [concrete = constants.%Int.as.Copy.impl.Op.4f6] @@ -443,10 +443,10 @@ fn Test(m: Cpp.UnsupportedMembers*) { // CHECK:STDOUT: return %Int.as.Copy.impl.Op.call // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @G(%s.param: %Union) -> out %return.param: %i32 { +// CHECK:STDOUT: fn @G(%s.param: %BitfieldUnion) -> out %return.param: %i32 { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %s.ref: %Union = name_ref s, %s -// CHECK:STDOUT: %c.ref: %Union.elem = name_ref c, @Union.%.1 [concrete = @Union.%.1] +// CHECK:STDOUT: %s.ref: %BitfieldUnion = name_ref s, %s +// CHECK:STDOUT: %c.ref: %BitfieldUnion.elem = name_ref c, @BitfieldUnion.%.1 [concrete = @BitfieldUnion.%.1] // CHECK:STDOUT: %.loc14_11.1: ref %i32 = class_element_access %s.ref, element0 // CHECK:STDOUT: %.loc14_11.2: %i32 = acquire_value %.loc14_11.1 // CHECK:STDOUT: %impl.elem0: %.737 = impl_witness_access constants.%Copy.impl_witness.b51, element0 [concrete = constants.%Int.as.Copy.impl.Op.4f6] @@ -460,22 +460,22 @@ fn Test(m: Cpp.UnsupportedMembers*) { // CHECK:STDOUT: --- fail_todo_use_bitfields.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %Struct: type = class_type @Struct [concrete] +// CHECK:STDOUT: %BitfieldStruct: type = class_type @BitfieldStruct [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] -// CHECK:STDOUT: %Union: type = class_type @Union [concrete] +// CHECK:STDOUT: %BitfieldUnion: type = class_type @BitfieldUnion [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%s.param: %Struct) -> out %return.param: %i32 { +// CHECK:STDOUT: fn @F(%s.param: %BitfieldStruct) -> out %return.param: %i32 { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %s.ref: %Struct = name_ref s, %s +// CHECK:STDOUT: %s.ref: %BitfieldStruct = name_ref s, %s // CHECK:STDOUT: %b.ref: = name_ref b, [concrete = ] // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @G(%s.param: %Union) -> out %return.param: %i32 { +// CHECK:STDOUT: fn @G(%s.param: %BitfieldUnion) -> out %return.param: %i32 { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %s.ref: %Union = name_ref s, %s +// CHECK:STDOUT: %s.ref: %BitfieldUnion = name_ref s, %s // CHECK:STDOUT: %d.ref: = name_ref d, [concrete = ] // CHECK:STDOUT: return // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/interop/cpp/class/import/method.carbon b/toolchain/check/testdata/interop/cpp/class/import/method.carbon index a30ba653407a..76474b49abd5 100644 --- a/toolchain/check/testdata/interop/cpp/class/import/method.carbon +++ b/toolchain/check/testdata/interop/cpp/class/import/method.carbon @@ -228,28 +228,28 @@ fn Call(e: Cpp.ExplicitObjectParam, n: i32, a: Cpp.Another) { library "[[@TEST_NAME]]"; import Cpp inline ''' -struct ExplicitObjectParam { - void F(this ExplicitObjectParam, _BitInt(23) x); +struct ExplicitObjectParamUnsupported { + void F(this ExplicitObjectParamUnsupported, _BitInt(23) x); }; '''; -fn Call(e: Cpp.ExplicitObjectParam) { +fn Call(e: Cpp.ExplicitObjectParamUnsupported) { // CHECK:STDERR: fail_call_explicit_object_param_with_unsupported_type_param.carbon:[[@LINE+4]]:3: error: semantics TODO: `Unsupported: parameter type: _BitInt(23)` [SemanticsTodo] - // CHECK:STDERR: e.(Cpp.ExplicitObjectParam.F)(1); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: e.(Cpp.ExplicitObjectParamUnsupported.F)(1); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - e.(Cpp.ExplicitObjectParam.F)(1); + e.(Cpp.ExplicitObjectParamUnsupported.F)(1); } // --- explicit_object_param_overloaded.h -struct Another { +struct AnotherOverloaded { }; -struct ExplicitObjectParam { - void F(this ExplicitObjectParam); +struct ExplicitObjectParamOverloaded { + void F(this ExplicitObjectParamOverloaded); void F(this int); - void F(this Another); + void F(this AnotherOverloaded); }; // --- call_explicit_object_param_overloaded.carbon @@ -258,11 +258,11 @@ library "[[@TEST_NAME]]"; import Cpp library "explicit_object_param_overloaded.h"; -fn Call(e: Cpp.ExplicitObjectParam, n: i32, a: Cpp.Another) { +fn Call(e: Cpp.ExplicitObjectParamOverloaded, n: i32, a: Cpp.AnotherOverloaded) { //@dump-sem-ir-begin e.F(); - n.(Cpp.ExplicitObjectParam.F)(); - a.(Cpp.ExplicitObjectParam.F)(); + n.(Cpp.ExplicitObjectParamOverloaded.F)(); + a.(Cpp.ExplicitObjectParamOverloaded.F)(); //@dump-sem-ir-end } @@ -721,32 +721,32 @@ fn Call(e: Cpp.ExplicitObjectParam, n: i32, a: Cpp.Another) { // CHECK:STDOUT: --- call_explicit_object_param_overloaded.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %ExplicitObjectParam: type = class_type @ExplicitObjectParam [concrete] +// CHECK:STDOUT: %ExplicitObjectParamOverloaded: type = class_type @ExplicitObjectParamOverloaded [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] -// CHECK:STDOUT: %Another: type = class_type @Another [concrete] -// CHECK:STDOUT: %ExplicitObjectParam.F.cpp_overload_set.type: type = cpp_overload_set_type @ExplicitObjectParam.F.cpp_overload_set [concrete] -// CHECK:STDOUT: %ExplicitObjectParam.F.cpp_overload_set.value: %ExplicitObjectParam.F.cpp_overload_set.type = cpp_overload_set_value @ExplicitObjectParam.F.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.900: type = ptr_type %ExplicitObjectParam [concrete] +// CHECK:STDOUT: %AnotherOverloaded: type = class_type @AnotherOverloaded [concrete] +// CHECK:STDOUT: %ExplicitObjectParamOverloaded.F.cpp_overload_set.type: type = cpp_overload_set_type @ExplicitObjectParamOverloaded.F.cpp_overload_set [concrete] +// CHECK:STDOUT: %ExplicitObjectParamOverloaded.F.cpp_overload_set.value: %ExplicitObjectParamOverloaded.F.cpp_overload_set.type = cpp_overload_set_value @ExplicitObjectParamOverloaded.F.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.fb2: type = ptr_type %ExplicitObjectParamOverloaded [concrete] // CHECK:STDOUT: %F__carbon_thunk.type.8cce43.1: type = fn_type @F__carbon_thunk.1 [concrete] // CHECK:STDOUT: %F__carbon_thunk.a92106.1: %F__carbon_thunk.type.8cce43.1 = struct_value () [concrete] // CHECK:STDOUT: %F__carbon_thunk.type.8cce43.2: type = fn_type @F__carbon_thunk.2 [concrete] // CHECK:STDOUT: %F__carbon_thunk.a92106.2: %F__carbon_thunk.type.8cce43.2 = struct_value () [concrete] -// CHECK:STDOUT: %ptr.bad: type = ptr_type %Another [concrete] +// CHECK:STDOUT: %ptr.9e5: type = ptr_type %AnotherOverloaded [concrete] // CHECK:STDOUT: %F__carbon_thunk.type.8cce43.3: type = fn_type @F__carbon_thunk.3 [concrete] // CHECK:STDOUT: %F__carbon_thunk.a92106.3: %F__carbon_thunk.type.8cce43.3 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .ExplicitObjectParam = %ExplicitObjectParam.decl -// CHECK:STDOUT: .Another = %Another.decl +// CHECK:STDOUT: .ExplicitObjectParamOverloaded = %ExplicitObjectParamOverloaded.decl +// CHECK:STDOUT: .AnotherOverloaded = %AnotherOverloaded.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %ExplicitObjectParam.decl: type = class_decl @ExplicitObjectParam [concrete = constants.%ExplicitObjectParam] {} {} -// CHECK:STDOUT: %Another.decl: type = class_decl @Another [concrete = constants.%Another] {} {} -// CHECK:STDOUT: %ExplicitObjectParam.F.cpp_overload_set.value: %ExplicitObjectParam.F.cpp_overload_set.type = cpp_overload_set_value @ExplicitObjectParam.F.cpp_overload_set [concrete = constants.%ExplicitObjectParam.F.cpp_overload_set.value] +// CHECK:STDOUT: %ExplicitObjectParamOverloaded.decl: type = class_decl @ExplicitObjectParamOverloaded [concrete = constants.%ExplicitObjectParamOverloaded] {} {} +// CHECK:STDOUT: %AnotherOverloaded.decl: type = class_decl @AnotherOverloaded [concrete = constants.%AnotherOverloaded] {} {} +// CHECK:STDOUT: %ExplicitObjectParamOverloaded.F.cpp_overload_set.value: %ExplicitObjectParamOverloaded.F.cpp_overload_set.type = cpp_overload_set_value @ExplicitObjectParamOverloaded.F.cpp_overload_set [concrete = constants.%ExplicitObjectParamOverloaded.F.cpp_overload_set.value] // CHECK:STDOUT: %F__carbon_thunk.decl.828b0d.1: %F__carbon_thunk.type.8cce43.1 = fn_decl @F__carbon_thunk.1 [concrete = constants.%F__carbon_thunk.a92106.1] { // CHECK:STDOUT: // CHECK:STDOUT: } { @@ -764,27 +764,27 @@ fn Call(e: Cpp.ExplicitObjectParam, n: i32, a: Cpp.Another) { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Call(%e.param: %ExplicitObjectParam, %n.param: %i32, %a.param: %Another) { +// CHECK:STDOUT: fn @Call(%e.param: %ExplicitObjectParamOverloaded, %n.param: %i32, %a.param: %AnotherOverloaded) { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %e.ref: %ExplicitObjectParam = name_ref e, %e -// CHECK:STDOUT: %F.ref.loc8: %ExplicitObjectParam.F.cpp_overload_set.type = name_ref F, imports.%ExplicitObjectParam.F.cpp_overload_set.value [concrete = constants.%ExplicitObjectParam.F.cpp_overload_set.value] +// CHECK:STDOUT: %e.ref: %ExplicitObjectParamOverloaded = name_ref e, %e +// CHECK:STDOUT: %F.ref.loc8: %ExplicitObjectParamOverloaded.F.cpp_overload_set.type = name_ref F, imports.%ExplicitObjectParamOverloaded.F.cpp_overload_set.value [concrete = constants.%ExplicitObjectParamOverloaded.F.cpp_overload_set.value] // CHECK:STDOUT: %bound_method.loc8: = bound_method %e.ref, %F.ref.loc8 -// CHECK:STDOUT: %.loc8: ref %ExplicitObjectParam = value_as_ref %e.ref -// CHECK:STDOUT: %addr.loc8: %ptr.900 = addr_of %.loc8 +// CHECK:STDOUT: %.loc8: ref %ExplicitObjectParamOverloaded = value_as_ref %e.ref +// CHECK:STDOUT: %addr.loc8: %ptr.fb2 = addr_of %.loc8 // CHECK:STDOUT: %F__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%F__carbon_thunk.decl.828b0d.1(%addr.loc8) // CHECK:STDOUT: %n.ref: %i32 = name_ref n, %n // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %ExplicitObjectParam.ref.loc9: type = name_ref ExplicitObjectParam, imports.%ExplicitObjectParam.decl [concrete = constants.%ExplicitObjectParam] -// CHECK:STDOUT: %F.ref.loc9: %ExplicitObjectParam.F.cpp_overload_set.type = name_ref F, imports.%ExplicitObjectParam.F.cpp_overload_set.value [concrete = constants.%ExplicitObjectParam.F.cpp_overload_set.value] +// CHECK:STDOUT: %ExplicitObjectParamOverloaded.ref.loc9: type = name_ref ExplicitObjectParamOverloaded, imports.%ExplicitObjectParamOverloaded.decl [concrete = constants.%ExplicitObjectParamOverloaded] +// CHECK:STDOUT: %F.ref.loc9: %ExplicitObjectParamOverloaded.F.cpp_overload_set.type = name_ref F, imports.%ExplicitObjectParamOverloaded.F.cpp_overload_set.value [concrete = constants.%ExplicitObjectParamOverloaded.F.cpp_overload_set.value] // CHECK:STDOUT: %bound_method.loc9: = bound_method %n.ref, %F.ref.loc9 // CHECK:STDOUT: %F__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%F__carbon_thunk.decl.828b0d.2(%n.ref) -// CHECK:STDOUT: %a.ref: %Another = name_ref a, %a +// CHECK:STDOUT: %a.ref: %AnotherOverloaded = name_ref a, %a // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %ExplicitObjectParam.ref.loc10: type = name_ref ExplicitObjectParam, imports.%ExplicitObjectParam.decl [concrete = constants.%ExplicitObjectParam] -// CHECK:STDOUT: %F.ref.loc10: %ExplicitObjectParam.F.cpp_overload_set.type = name_ref F, imports.%ExplicitObjectParam.F.cpp_overload_set.value [concrete = constants.%ExplicitObjectParam.F.cpp_overload_set.value] +// CHECK:STDOUT: %ExplicitObjectParamOverloaded.ref.loc10: type = name_ref ExplicitObjectParamOverloaded, imports.%ExplicitObjectParamOverloaded.decl [concrete = constants.%ExplicitObjectParamOverloaded] +// CHECK:STDOUT: %F.ref.loc10: %ExplicitObjectParamOverloaded.F.cpp_overload_set.type = name_ref F, imports.%ExplicitObjectParamOverloaded.F.cpp_overload_set.value [concrete = constants.%ExplicitObjectParamOverloaded.F.cpp_overload_set.value] // CHECK:STDOUT: %bound_method.loc10: = bound_method %a.ref, %F.ref.loc10 -// CHECK:STDOUT: %.loc10: ref %Another = value_as_ref %a.ref -// CHECK:STDOUT: %addr.loc10: %ptr.bad = addr_of %.loc10 +// CHECK:STDOUT: %.loc10: ref %AnotherOverloaded = value_as_ref %a.ref +// CHECK:STDOUT: %addr.loc10: %ptr.9e5 = addr_of %.loc10 // CHECK:STDOUT: %F__carbon_thunk.call.loc10: init %empty_tuple.type = call imports.%F__carbon_thunk.decl.828b0d.3(%addr.loc10) // CHECK:STDOUT: // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/interop/cpp/class/import/union.carbon b/toolchain/check/testdata/interop/cpp/class/import/union.carbon index c28fa0c2c1b6..0b99677f3832 100644 --- a/toolchain/check/testdata/interop/cpp/class/import/union.carbon +++ b/toolchain/check/testdata/interop/cpp/class/import/union.carbon @@ -16,7 +16,7 @@ // --- declaration.h -union Bar; +union DeclBar; // --- import_declaration.carbon @@ -25,7 +25,7 @@ library "[[@TEST_NAME]]"; import Cpp library "declaration.h"; //@dump-sem-ir-begin -fn MyF(bar: Cpp.Bar*); +fn MyF(bar: Cpp.DeclBar*); //@dump-sem-ir-end // --- fail_use_declaration_as_definition.carbon @@ -35,15 +35,15 @@ library "[[@TEST_NAME]]"; import Cpp library "declaration.h"; fn MyF() { - // CHECK:STDERR: fail_use_declaration_as_definition.carbon:[[@LINE+8]]:19: error: binding pattern has incomplete type `Bar` in name binding declaration [IncompleteTypeInBindingDecl] - // CHECK:STDERR: var unused bar: Cpp.Bar; - // CHECK:STDERR: ^~~~~~~ + // CHECK:STDERR: fail_use_declaration_as_definition.carbon:[[@LINE+8]]:19: error: binding pattern has incomplete type `DeclBar` in name binding declaration [IncompleteTypeInBindingDecl] + // CHECK:STDERR: var unused bar: Cpp.DeclBar; + // CHECK:STDERR: ^~~~~~~~~~~ // CHECK:STDERR: fail_use_declaration_as_definition.carbon:[[@LINE-6]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./declaration.h:2:7: note: class was forward declared here [ClassForwardDeclaredHere] - // CHECK:STDERR: union Bar; + // CHECK:STDERR: union DeclBar; // CHECK:STDERR: ^ // CHECK:STDERR: - var unused bar: Cpp.Bar; + var unused bar: Cpp.DeclBar; } // ============================================================================ @@ -52,7 +52,7 @@ fn MyF() { // --- definition.h -union Bar {}; +union DefBar {}; // --- import_definition.carbon @@ -61,7 +61,7 @@ library "[[@TEST_NAME]]"; import Cpp library "definition.h"; //@dump-sem-ir-begin -fn MyF(bar: Cpp.Bar*); +fn MyF(bar: Cpp.DefBar*); //@dump-sem-ir-end // ============================================================================ @@ -70,8 +70,8 @@ fn MyF(bar: Cpp.Bar*); // --- declaration_and_definition.h -union Bar; -union Bar {}; +union DeclDefBar; +union DeclDefBar {}; // --- import_declaration_and_definition.carbon @@ -80,7 +80,7 @@ library "[[@TEST_NAME]]"; import Cpp library "declaration_and_definition.h"; //@dump-sem-ir-begin -fn MyF(bar: Cpp.Bar*); +fn MyF(bar: Cpp.DeclDefBar*); //@dump-sem-ir-end // ============================================================================ @@ -89,7 +89,7 @@ fn MyF(bar: Cpp.Bar*); // --- static_member_function.h -union Bar { +union StaticMemberFnBar { public: static auto foo() -> void; }; @@ -102,7 +102,7 @@ import Cpp library "static_member_function.h"; fn MyF() { //@dump-sem-ir-begin - Cpp.Bar.foo(); + Cpp.StaticMemberFnBar.foo(); //@dump-sem-ir-end } @@ -112,9 +112,9 @@ fn MyF() { // --- static_data_member.h -union Bar { +union StaticDataMemberBar { public: - static Bar* _Nonnull foo; + static StaticDataMemberBar* _Nonnull foo; }; // --- import_static_data_member.carbon @@ -125,7 +125,7 @@ import Cpp library "static_data_member.h"; fn MyF() { //@dump-sem-ir-begin - let unused bar: Cpp.Bar* = Cpp.Bar.foo; + let unused bar: Cpp.StaticDataMemberBar* = Cpp.StaticDataMemberBar.foo; //@dump-sem-ir-end } @@ -135,9 +135,9 @@ fn MyF() { // --- data_member.h -union Bar { +union DataMemberBar { public: - Bar* _Nonnull foo; + DataMemberBar* _Nonnull foo; }; // --- import_data_member.carbon @@ -147,8 +147,8 @@ library "[[@TEST_NAME]]"; import Cpp library "data_member.h"; //@dump-sem-ir-begin -fn MyF(bar : Cpp.Bar*) { - let unused foo_bar: Cpp.Bar* = bar->foo; +fn MyF(bar : Cpp.DataMemberBar*) { + let unused foo_bar: Cpp.DataMemberBar* = bar->foo; } //@dump-sem-ir-end @@ -161,7 +161,7 @@ fn MyF(bar : Cpp.Bar*) { struct X {}; template -union Bar {}; +union TemplateBar {}; // --- import_template.carbon @@ -170,14 +170,14 @@ library "[[@TEST_NAME]]"; import Cpp library "template.h"; //@dump-sem-ir-begin -fn MyF(bar: Cpp.Bar(Cpp.X)*); +fn MyF(bar: Cpp.TemplateBar(Cpp.X)*); //@dump-sem-ir-end // CHECK:STDOUT: --- import_declaration.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] +// CHECK:STDOUT: %DeclBar: type = class_type @DeclBar [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %DeclBar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] // CHECK:STDOUT: %bar.patt: %pattern_type = wrapper_binding_pattern bar, %bar.param_patt [concrete] @@ -187,10 +187,10 @@ fn MyF(bar: Cpp.Bar(Cpp.X)*); // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .Bar = %Bar.decl +// CHECK:STDOUT: .DeclBar = %DeclBar.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {} +// CHECK:STDOUT: %DeclBar.decl: type = class_decl @DeclBar [concrete = constants.%DeclBar] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -201,8 +201,8 @@ fn MyF(bar: Cpp.Bar(Cpp.X)*); // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// 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: %DeclBar.ref: type = name_ref DeclBar, imports.%DeclBar.decl [concrete = constants.%DeclBar] +// CHECK:STDOUT: %ptr: type = ptr_type %DeclBar.ref [concrete = constants.%ptr] // CHECK:STDOUT: } // CHECK:STDOUT: %bar: %ptr = wrapper_binding bar, %bar.param // CHECK:STDOUT: } @@ -213,8 +213,8 @@ fn MyF(bar: Cpp.Bar(Cpp.X)*); // CHECK:STDOUT: --- import_definition.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] +// CHECK:STDOUT: %DefBar: type = class_type @DefBar [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %DefBar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] // CHECK:STDOUT: %bar.patt: %pattern_type = wrapper_binding_pattern bar, %bar.param_patt [concrete] @@ -224,10 +224,10 @@ fn MyF(bar: Cpp.Bar(Cpp.X)*); // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .Bar = %Bar.decl +// CHECK:STDOUT: .DefBar = %DefBar.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {} +// CHECK:STDOUT: %DefBar.decl: type = class_decl @DefBar [concrete = constants.%DefBar] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -238,8 +238,8 @@ fn MyF(bar: Cpp.Bar(Cpp.X)*); // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// 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: %DefBar.ref: type = name_ref DefBar, imports.%DefBar.decl [concrete = constants.%DefBar] +// CHECK:STDOUT: %ptr: type = ptr_type %DefBar.ref [concrete = constants.%ptr] // CHECK:STDOUT: } // CHECK:STDOUT: %bar: %ptr = wrapper_binding bar, %bar.param // CHECK:STDOUT: } @@ -250,8 +250,8 @@ fn MyF(bar: Cpp.Bar(Cpp.X)*); // CHECK:STDOUT: --- import_declaration_and_definition.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] +// CHECK:STDOUT: %DeclDefBar: type = class_type @DeclDefBar [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %DeclDefBar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] // CHECK:STDOUT: %bar.patt: %pattern_type = wrapper_binding_pattern bar, %bar.param_patt [concrete] @@ -261,10 +261,10 @@ fn MyF(bar: Cpp.Bar(Cpp.X)*); // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .Bar = %Bar.decl +// CHECK:STDOUT: .DeclDefBar = %DeclDefBar.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {} +// CHECK:STDOUT: %DeclDefBar.decl: type = class_decl @DeclDefBar [concrete = constants.%DeclDefBar] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -275,8 +275,8 @@ fn MyF(bar: Cpp.Bar(Cpp.X)*); // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// 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: %DeclDefBar.ref: type = name_ref DeclDefBar, imports.%DeclDefBar.decl [concrete = constants.%DeclDefBar] +// CHECK:STDOUT: %ptr: type = ptr_type %DeclDefBar.ref [concrete = constants.%ptr] // CHECK:STDOUT: } // CHECK:STDOUT: %bar: %ptr = wrapper_binding bar, %bar.param // CHECK:STDOUT: } @@ -288,38 +288,38 @@ fn MyF(bar: Cpp.Bar(Cpp.X)*); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %Bar.foo.cpp_overload_set.type: type = cpp_overload_set_type @Bar.foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %Bar.foo.cpp_overload_set.value: %Bar.foo.cpp_overload_set.type = cpp_overload_set_value @Bar.foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %Bar.foo.type: type = fn_type @Bar.foo [concrete] -// CHECK:STDOUT: %Bar.foo: %Bar.foo.type = struct_value () [concrete] +// CHECK:STDOUT: %StaticMemberFnBar: type = class_type @StaticMemberFnBar [concrete] +// CHECK:STDOUT: %StaticMemberFnBar.foo.cpp_overload_set.type: type = cpp_overload_set_type @StaticMemberFnBar.foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %StaticMemberFnBar.foo.cpp_overload_set.value: %StaticMemberFnBar.foo.cpp_overload_set.type = cpp_overload_set_value @StaticMemberFnBar.foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %StaticMemberFnBar.foo.type: type = fn_type @StaticMemberFnBar.foo [concrete] +// CHECK:STDOUT: %StaticMemberFnBar.foo: %StaticMemberFnBar.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: .StaticMemberFnBar = %StaticMemberFnBar.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {} -// CHECK:STDOUT: %Bar.foo.cpp_overload_set.value: %Bar.foo.cpp_overload_set.type = cpp_overload_set_value @Bar.foo.cpp_overload_set [concrete = constants.%Bar.foo.cpp_overload_set.value] -// CHECK:STDOUT: %Bar.foo.decl: %Bar.foo.type = fn_decl @Bar.foo [concrete = constants.%Bar.foo] {} {} +// CHECK:STDOUT: %StaticMemberFnBar.decl: type = class_decl @StaticMemberFnBar [concrete = constants.%StaticMemberFnBar] {} {} +// CHECK:STDOUT: %StaticMemberFnBar.foo.cpp_overload_set.value: %StaticMemberFnBar.foo.cpp_overload_set.type = cpp_overload_set_value @StaticMemberFnBar.foo.cpp_overload_set [concrete = constants.%StaticMemberFnBar.foo.cpp_overload_set.value] +// CHECK:STDOUT: %StaticMemberFnBar.foo.decl: %StaticMemberFnBar.foo.type = fn_decl @StaticMemberFnBar.foo [concrete = constants.%StaticMemberFnBar.foo] {} {} // 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: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] -// CHECK:STDOUT: %foo.ref: %Bar.foo.cpp_overload_set.type = name_ref foo, imports.%Bar.foo.cpp_overload_set.value [concrete = constants.%Bar.foo.cpp_overload_set.value] -// CHECK:STDOUT: %Bar.foo.call: init %empty_tuple.type = call imports.%Bar.foo.decl() +// CHECK:STDOUT: %StaticMemberFnBar.ref: type = name_ref StaticMemberFnBar, imports.%StaticMemberFnBar.decl [concrete = constants.%StaticMemberFnBar] +// CHECK:STDOUT: %foo.ref: %StaticMemberFnBar.foo.cpp_overload_set.type = name_ref foo, imports.%StaticMemberFnBar.foo.cpp_overload_set.value [concrete = constants.%StaticMemberFnBar.foo.cpp_overload_set.value] +// CHECK:STDOUT: %StaticMemberFnBar.foo.call: init %empty_tuple.type = call imports.%StaticMemberFnBar.foo.decl() // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_static_data_member.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %ptr.227: type = ptr_type %Bar [concrete] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.227 [concrete] +// CHECK:STDOUT: %StaticDataMemberBar: type = class_type @StaticDataMemberBar [concrete] +// CHECK:STDOUT: %ptr.a89: type = ptr_type %StaticDataMemberBar [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.a89 [concrete] // CHECK:STDOUT: %bar.patt: %pattern_type = value_binding_pattern bar [concrete] // CHECK:STDOUT: %foo.patt: %pattern_type = ref_binding_pattern foo [concrete] // CHECK:STDOUT: %foo.var_patt: %pattern_type = var_pattern %foo.patt [concrete] @@ -327,27 +327,27 @@ fn MyF(bar: Cpp.Bar(Cpp.X)*); // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .Bar = %Bar.decl +// CHECK:STDOUT: .StaticDataMemberBar = %StaticDataMemberBar.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {} +// CHECK:STDOUT: %StaticDataMemberBar.decl: type = class_decl @StaticDataMemberBar [concrete = constants.%StaticDataMemberBar] {} {} // CHECK:STDOUT: %foo.patt: %pattern_type = ref_binding_pattern foo [concrete = constants.%foo.patt] // CHECK:STDOUT: %foo.var_patt: %pattern_type = var_pattern %foo.patt [concrete = constants.%foo.var_patt] -// CHECK:STDOUT: %foo.var: ref %ptr.227 = var_storage %foo.var_patt [concrete] +// CHECK:STDOUT: %foo.var: ref %ptr.a89 = var_storage %foo.var_patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Cpp.ref.loc8_30: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Bar.ref.loc8_33: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] -// CHECK:STDOUT: %foo.ref: ref %ptr.227 = name_ref foo, imports.%foo.var [concrete = imports.%foo.var] -// CHECK:STDOUT: %.loc8_37: %ptr.227 = acquire_value %foo.ref -// CHECK:STDOUT: %.loc8_26: type = splice_block %ptr [concrete = constants.%ptr.227] { +// CHECK:STDOUT: %Cpp.ref.loc8_46: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %StaticDataMemberBar.ref.loc8_49: type = name_ref StaticDataMemberBar, imports.%StaticDataMemberBar.decl [concrete = constants.%StaticDataMemberBar] +// CHECK:STDOUT: %foo.ref: ref %ptr.a89 = name_ref foo, imports.%foo.var [concrete = imports.%foo.var] +// CHECK:STDOUT: %.loc8_69: %ptr.a89 = acquire_value %foo.ref +// CHECK:STDOUT: %.loc8_42: type = splice_block %ptr [concrete = constants.%ptr.a89] { // CHECK:STDOUT: %Cpp.ref.loc8_19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Bar.ref.loc8_22: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] -// CHECK:STDOUT: %ptr: type = ptr_type %Bar.ref.loc8_22 [concrete = constants.%ptr.227] +// CHECK:STDOUT: %StaticDataMemberBar.ref.loc8_22: type = name_ref StaticDataMemberBar, imports.%StaticDataMemberBar.decl [concrete = constants.%StaticDataMemberBar] +// CHECK:STDOUT: %ptr: type = ptr_type %StaticDataMemberBar.ref.loc8_22 [concrete = constants.%ptr.a89] // CHECK:STDOUT: } -// CHECK:STDOUT: %bar: %ptr.227 = wrapper_binding bar, %.loc8_37 +// CHECK:STDOUT: %bar: %ptr.a89 = wrapper_binding bar, %.loc8_69 // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %bar.patt: %pattern_type = value_binding_pattern bar [concrete = constants.%bar.patt] // CHECK:STDOUT: } @@ -357,23 +357,23 @@ fn MyF(bar: Cpp.Bar(Cpp.X)*); // CHECK:STDOUT: --- import_data_member.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %ptr.227: type = ptr_type %Bar [concrete] -// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.227 [concrete] +// CHECK:STDOUT: %DataMemberBar: type = class_type @DataMemberBar [concrete] +// CHECK:STDOUT: %ptr.ec1: type = ptr_type %DataMemberBar [concrete] +// CHECK:STDOUT: %pattern_type: type = pattern_type %ptr.ec1 [concrete] // CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] // CHECK:STDOUT: %bar.patt: %pattern_type = wrapper_binding_pattern bar, %bar.param_patt [concrete] // CHECK:STDOUT: %MyF.type: type = fn_type @MyF [concrete] // CHECK:STDOUT: %MyF: %MyF.type = struct_value () [concrete] // CHECK:STDOUT: %foo_bar.patt: %pattern_type = value_binding_pattern foo_bar [concrete] -// CHECK:STDOUT: %Bar.elem: type = unbound_element_type %Bar, %ptr.227 [concrete] +// CHECK:STDOUT: %DataMemberBar.elem: type = unbound_element_type %DataMemberBar, %ptr.ec1 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .Bar = %Bar.decl +// CHECK:STDOUT: .DataMemberBar = %DataMemberBar.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {} +// CHECK:STDOUT: %DataMemberBar.decl: type = class_decl @DataMemberBar [concrete = constants.%DataMemberBar] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -381,29 +381,29 @@ fn MyF(bar: Cpp.Bar(Cpp.X)*); // CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete = constants.%bar.param_patt] // CHECK:STDOUT: %bar.patt: %pattern_type = wrapper_binding_pattern bar, %bar.param_patt [concrete = constants.%bar.patt] // CHECK:STDOUT: } { -// CHECK:STDOUT: %bar.param: %ptr.227 = value_param call_param0 -// CHECK:STDOUT: %.loc7: type = splice_block %ptr.loc7 [concrete = constants.%ptr.227] { +// CHECK:STDOUT: %bar.param: %ptr.ec1 = value_param call_param0 +// CHECK:STDOUT: %.loc7: type = splice_block %ptr.loc7 [concrete = constants.%ptr.ec1] { // CHECK:STDOUT: %Cpp.ref.loc7: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// 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.227] +// CHECK:STDOUT: %DataMemberBar.ref.loc7: type = name_ref DataMemberBar, imports.%DataMemberBar.decl [concrete = constants.%DataMemberBar] +// CHECK:STDOUT: %ptr.loc7: type = ptr_type %DataMemberBar.ref.loc7 [concrete = constants.%ptr.ec1] // CHECK:STDOUT: } -// CHECK:STDOUT: %bar: %ptr.227 = wrapper_binding bar, %bar.param +// CHECK:STDOUT: %bar: %ptr.ec1 = wrapper_binding bar, %bar.param // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @MyF(%bar.param: %ptr.227) { +// CHECK:STDOUT: fn @MyF(%bar.param: %ptr.ec1) { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %bar.ref: %ptr.227 = name_ref bar, %bar -// CHECK:STDOUT: %.loc8_37.1: ref %Bar = deref %bar.ref -// CHECK:STDOUT: %foo.ref: %Bar.elem = name_ref foo, @Bar.%.1 [concrete = @Bar.%.1] -// CHECK:STDOUT: %.loc8_37.2: ref %ptr.227 = class_element_access %.loc8_37.1, element0 -// CHECK:STDOUT: %.loc8_37.3: %ptr.227 = acquire_value %.loc8_37.2 -// CHECK:STDOUT: %.loc8_30: type = splice_block %ptr.loc8 [concrete = constants.%ptr.227] { +// CHECK:STDOUT: %bar.ref: %ptr.ec1 = name_ref bar, %bar +// CHECK:STDOUT: %.loc8_47.1: ref %DataMemberBar = deref %bar.ref +// CHECK:STDOUT: %foo.ref: %DataMemberBar.elem = name_ref foo, @DataMemberBar.%.1 [concrete = @DataMemberBar.%.1] +// CHECK:STDOUT: %.loc8_47.2: ref %ptr.ec1 = class_element_access %.loc8_47.1, element0 +// CHECK:STDOUT: %.loc8_47.3: %ptr.ec1 = acquire_value %.loc8_47.2 +// CHECK:STDOUT: %.loc8_40: type = splice_block %ptr.loc8 [concrete = constants.%ptr.ec1] { // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Bar.ref.loc8: type = name_ref Bar, imports.%Bar.decl [concrete = constants.%Bar] -// CHECK:STDOUT: %ptr.loc8: type = ptr_type %Bar.ref.loc8 [concrete = constants.%ptr.227] +// CHECK:STDOUT: %DataMemberBar.ref.loc8: type = name_ref DataMemberBar, imports.%DataMemberBar.decl [concrete = constants.%DataMemberBar] +// CHECK:STDOUT: %ptr.loc8: type = ptr_type %DataMemberBar.ref.loc8 [concrete = constants.%ptr.ec1] // CHECK:STDOUT: } -// CHECK:STDOUT: %foo_bar: %ptr.227 = wrapper_binding foo_bar, %.loc8_37.3 +// CHECK:STDOUT: %foo_bar: %ptr.ec1 = wrapper_binding foo_bar, %.loc8_47.3 // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %foo_bar.patt: %pattern_type = value_binding_pattern foo_bar [concrete = constants.%foo_bar.patt] // CHECK:STDOUT: } @@ -413,11 +413,11 @@ fn MyF(bar: Cpp.Bar(Cpp.X)*); // CHECK:STDOUT: --- import_template.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %Bar.type: type = cpp_type_template_type Bar [concrete] -// CHECK:STDOUT: %Bar.template: %Bar.type = struct_value () [concrete] +// CHECK:STDOUT: %TemplateBar.type: type = cpp_type_template_type TemplateBar [concrete] +// CHECK:STDOUT: %TemplateBar.template: %TemplateBar.type = struct_value () [concrete] // CHECK:STDOUT: %X: type = class_type @X [concrete] -// CHECK:STDOUT: %Bar: type = class_type @Bar [concrete] -// CHECK:STDOUT: %ptr: type = ptr_type %Bar [concrete] +// CHECK:STDOUT: %TemplateBar: type = class_type @TemplateBar [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %TemplateBar [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %bar.param_patt: %pattern_type = value_param_pattern [concrete] // CHECK:STDOUT: %bar.patt: %pattern_type = wrapper_binding_pattern bar, %bar.param_patt [concrete] @@ -427,13 +427,13 @@ fn MyF(bar: Cpp.Bar(Cpp.X)*); // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .Bar = %Bar.template +// CHECK:STDOUT: .TemplateBar = %TemplateBar.template // CHECK:STDOUT: .X = %X.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %Bar.template: %Bar.type = struct_value () [concrete = constants.%Bar.template] +// CHECK:STDOUT: %TemplateBar.template: %TemplateBar.type = struct_value () [concrete = constants.%TemplateBar.template] // CHECK:STDOUT: %X.decl: type = class_decl @X [concrete = constants.%X] {} {} -// CHECK:STDOUT: %Bar.decl: type = class_decl @Bar [concrete = constants.%Bar] {} {} +// CHECK:STDOUT: %TemplateBar.decl: type = class_decl @TemplateBar [concrete = constants.%TemplateBar] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -444,10 +444,10 @@ fn MyF(bar: Cpp.Bar(Cpp.X)*); // CHECK:STDOUT: %bar.param: %ptr = value_param call_param0 // CHECK:STDOUT: %.loc7: type = splice_block %ptr [concrete = constants.%ptr] { // CHECK:STDOUT: %Cpp.ref.loc7_13: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Bar.ref: %Bar.type = name_ref Bar, imports.%Bar.template [concrete = constants.%Bar.template] -// CHECK:STDOUT: %Cpp.ref.loc7_21: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %TemplateBar.ref: %TemplateBar.type = name_ref TemplateBar, imports.%TemplateBar.template [concrete = constants.%TemplateBar.template] +// CHECK:STDOUT: %Cpp.ref.loc7_29: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %X.ref: type = name_ref X, imports.%X.decl [concrete = constants.%X] -// CHECK:STDOUT: %ptr: type = ptr_type imports.%Bar.decl [concrete = constants.%ptr] +// CHECK:STDOUT: %ptr: type = ptr_type imports.%TemplateBar.decl [concrete = constants.%ptr] // CHECK:STDOUT: } // CHECK:STDOUT: %bar: %ptr = wrapper_binding bar, %bar.param // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/interop/cpp/function/export/array.carbon b/toolchain/check/testdata/interop/cpp/function/export/array.carbon index 7815066e9fde..c6634349ec93 100644 --- a/toolchain/check/testdata/interop/cpp/function/export/array.carbon +++ b/toolchain/check/testdata/interop/cpp/function/export/array.carbon @@ -15,19 +15,19 @@ library "[[@TEST_NAME]]"; import Cpp; -fn F(a: array(i32, 5)) -> i32 { return a[2]; } +fn FArrayValueParam(a: array(i32, 5)) -> i32 { return a[2]; } inline Cpp ''' -int G() { +int GArrayValueParam() { int arr[5]; //@dump-sem-ir-begin - return Carbon::F(arr); + return Carbon::FArrayValueParam(arr); //@dump-sem-ir-end } -int H() { +int HArrayValueParam() { //@dump-sem-ir-begin - return Carbon::F({1, 2, 3, 4, 5}); + return Carbon::FArrayValueParam({1, 2, 3, 4, 5}); //@dump-sem-ir-end } '''; @@ -44,23 +44,34 @@ import Cpp; // TODO: These diagnostics are very bad. // CHECK:STDERR: fail_todo_array_var_param.carbon:[[@LINE+8]]:1: error: semantics TODO: `by-var array parameter` [SemanticsTodo] -// CHECK:STDERR: fn F(var a: array(i32, 5)) -> i32 { return a[2]; } -// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// CHECK:STDERR: fn FArrayVarParam(var a: array(i32, 5)) -> i32 { return a[2]; } +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: // CHECK:STDERR: fail_todo_array_var_param.carbon:[[@LINE+4]]:1: error: semantics TODO: `failed to map C++ type to Carbon` [SemanticsTodo] -// CHECK:STDERR: fn F(var a: array(i32, 5)) -> i32 { return a[2]; } -// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// CHECK:STDERR: fn FArrayVarParam(var a: array(i32, 5)) -> i32 { return a[2]; } +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: -fn F(var a: array(i32, 5)) -> i32 { return a[2]; } +fn FArrayVarParam(var a: array(i32, 5)) -> i32 { return a[2]; } inline Cpp ''' -int G() { +int GArrayVarParam() { //@dump-sem-ir-begin - // CHECK:STDERR: fail_todo_array_var_param.carbon:[[@LINE+4]]:18: error: no member named 'F' in namespace 'Carbon' [CppInteropParseError] - // CHECK:STDERR: 28 | return Carbon::F({1, 2, 3, 4, 5}); - // CHECK:STDERR: | ^ + // CHECK:STDERR: fail_todo_array_var_param.carbon:[[@LINE+15]]:10: error: no member named 'FArrayVarParam' in namespace 'Carbon'; did you mean 'GArrayVarParam'? [CppInteropParseError] + // CHECK:STDERR: 39 | return Carbon::FArrayVarParam({1, 2, 3, 4, 5}); + // CHECK:STDERR: | ^~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: | GArrayVarParam + // CHECK:STDERR: fail_todo_array_var_param.carbon:[[@LINE-6]]:5: note: 'GArrayVarParam' declared here [CppInteropParseNote] + // CHECK:STDERR: 22 | int GArrayVarParam() { + // CHECK:STDERR: | ^ // CHECK:STDERR: - return Carbon::F({1, 2, 3, 4, 5}); + // CHECK:STDERR: fail_todo_array_var_param.carbon:[[@LINE+7]]:33: error: too many arguments to function call, expected 0, have 1 [CppInteropParseError] + // CHECK:STDERR: 39 | return Carbon::FArrayVarParam({1, 2, 3, 4, 5}); + // CHECK:STDERR: | ~~~~~~~~~~~~~~ ^~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_todo_array_var_param.carbon:[[@LINE-13]]:5: note: 'GArrayVarParam' declared here [CppInteropParseNote] + // CHECK:STDERR: 22 | int GArrayVarParam() { + // CHECK:STDERR: | ^ + // CHECK:STDERR: + return Carbon::FArrayVarParam({1, 2, 3, 4, 5}); //@dump-sem-ir-end } '''; @@ -75,20 +86,28 @@ import Cpp; // TODO: Support this, perhaps by returning a `std::array`. // CHECK:STDERR: fail_todo_array_return.carbon:[[@LINE+4]]:1: error: semantics TODO: `array return type` [SemanticsTodo] -// CHECK:STDERR: fn F() -> array(i32, 5) { -// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~ +// CHECK:STDERR: fn FArrayReturn() -> array(i32, 5) { +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: -fn F() -> array(i32, 5) { +fn FArrayReturn() -> array(i32, 5) { return (1, 2, 3, 4, 5); } inline Cpp ''' -int G() { - // CHECK:STDERR: fail_todo_array_return.carbon:[[@LINE+4]]:24: error: no member named 'F' in namespace 'Carbon' [CppInteropParseError] - // CHECK:STDERR: 23 | auto &&arr = Carbon::F(); - // CHECK:STDERR: | ^ +int GArrayReturn() { + // CHECK:STDERR: fail_todo_array_return.carbon:[[@LINE+8]]:16: error: no member named 'FArrayReturn' in namespace 'Carbon'; did you mean 'GArrayReturn'? [CppInteropParseError] + // CHECK:STDERR: 27 | auto &&arr = Carbon::FArrayReturn(); + // CHECK:STDERR: | ^~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: | GArrayReturn + // CHECK:STDERR: fail_todo_array_return.carbon:[[@LINE-5]]:5: note: 'GArrayReturn' declared here [CppInteropParseNote] + // CHECK:STDERR: 18 | int GArrayReturn() { + // CHECK:STDERR: | ^ + // CHECK:STDERR: + auto &&arr = Carbon::FArrayReturn(); + // CHECK:STDERR: fail_todo_array_return.carbon:[[@LINE+4]]:13: error: subscripted value is not an array, pointer, or vector [CppInteropParseError] + // CHECK:STDERR: 32 | return arr[0]; + // CHECK:STDERR: | ~~~^~ // CHECK:STDERR: - auto &&arr = Carbon::F(); return arr[0]; } '''; diff --git a/toolchain/check/testdata/interop/cpp/function/export/constructor.carbon b/toolchain/check/testdata/interop/cpp/function/export/constructor.carbon index 9063b9b9aba0..36e8e81c0ae0 100644 --- a/toolchain/check/testdata/interop/cpp/function/export/constructor.carbon +++ b/toolchain/check/testdata/interop/cpp/function/export/constructor.carbon @@ -20,7 +20,7 @@ class OneArg { } inline Cpp ''' -void f() { +void CallOneArg() { Carbon::OneArg a(42); } '''; @@ -30,26 +30,26 @@ library "[[@TEST_NAME]]"; import Cpp; -class OneArg { - fn OneArg(self, i: i32) -> Self; +class FactoryIsMethod { + fn FactoryIsMethod(self, i: i32) -> Self; } inline Cpp ''' -void f() { - // CHECK:STDERR: fail_factory_is_method.carbon:[[@LINE+13]]:18: error: no matching constructor for initialization of 'Carbon::OneArg' [CppInteropParseError] - // CHECK:STDERR: 24 | Carbon::OneArg a(42); - // CHECK:STDERR: | ^ ~~ - // CHECK:STDERR: fail_factory_is_method.carbon:[[@LINE-9]]:14: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'int' to 'const OneArg' for 1st argument [CppInteropParseNote] - // CHECK:STDERR: 5 | class OneArg { - // CHECK:STDERR: | ^ - // CHECK:STDERR: fail_factory_is_method.carbon:[[@LINE-12]]:14: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'int' to 'OneArg' for 1st argument [CppInteropParseNote] - // CHECK:STDERR: 5 | class OneArg { - // CHECK:STDERR: | ^ - // CHECK:STDERR: fail_factory_is_method.carbon:[[@LINE-15]]:14: note: candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 1 was provided [CppInteropParseNote] - // CHECK:STDERR: 5 | class OneArg { - // CHECK:STDERR: | ^ +void CallFactoryIsMethod() { + // CHECK:STDERR: fail_factory_is_method.carbon:[[@LINE+13]]:27: error: no matching constructor for initialization of 'Carbon::FactoryIsMethod' [CppInteropParseError] + // CHECK:STDERR: 24 | Carbon::FactoryIsMethod a(42); + // CHECK:STDERR: | ^ ~~ + // CHECK:STDERR: fail_factory_is_method.carbon:[[@LINE-9]]:23: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'int' to 'const FactoryIsMethod' for 1st argument [CppInteropParseNote] + // CHECK:STDERR: 5 | class FactoryIsMethod { + // CHECK:STDERR: | ^ + // CHECK:STDERR: fail_factory_is_method.carbon:[[@LINE-12]]:23: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'int' to 'FactoryIsMethod' for 1st argument [CppInteropParseNote] + // CHECK:STDERR: 5 | class FactoryIsMethod { + // CHECK:STDERR: | ^ + // CHECK:STDERR: fail_factory_is_method.carbon:[[@LINE-15]]:23: note: candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 1 was provided [CppInteropParseNote] + // CHECK:STDERR: 5 | class FactoryIsMethod { + // CHECK:STDERR: | ^ // CHECK:STDERR: - Carbon::OneArg a(42); + Carbon::FactoryIsMethod a(42); } '''; @@ -58,26 +58,26 @@ library "[[@TEST_NAME]]"; import Cpp; -class OneArg { - fn OneArg(i: i32) -> i32; +class FactoryDoesntReturnSelf { + fn FactoryDoesntReturnSelf(i: i32) -> i32; } inline Cpp ''' -void f() { - // CHECK:STDERR: fail_factory_doesnt_return_self.carbon:[[@LINE+13]]:18: error: no matching constructor for initialization of 'Carbon::OneArg' [CppInteropParseError] - // CHECK:STDERR: 24 | Carbon::OneArg a(42); - // CHECK:STDERR: | ^ ~~ - // CHECK:STDERR: fail_factory_doesnt_return_self.carbon:[[@LINE-9]]:14: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'int' to 'const OneArg' for 1st argument [CppInteropParseNote] - // CHECK:STDERR: 5 | class OneArg { - // CHECK:STDERR: | ^ - // CHECK:STDERR: fail_factory_doesnt_return_self.carbon:[[@LINE-12]]:14: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'int' to 'OneArg' for 1st argument [CppInteropParseNote] - // CHECK:STDERR: 5 | class OneArg { - // CHECK:STDERR: | ^ - // CHECK:STDERR: fail_factory_doesnt_return_self.carbon:[[@LINE-15]]:14: note: candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 1 was provided [CppInteropParseNote] - // CHECK:STDERR: 5 | class OneArg { - // CHECK:STDERR: | ^ +void CallFactoryDoesntReturnSelf() { + // CHECK:STDERR: fail_factory_doesnt_return_self.carbon:[[@LINE+13]]:35: error: no matching constructor for initialization of 'Carbon::FactoryDoesntReturnSelf' [CppInteropParseError] + // CHECK:STDERR: 24 | Carbon::FactoryDoesntReturnSelf a(42); + // CHECK:STDERR: | ^ ~~ + // CHECK:STDERR: fail_factory_doesnt_return_self.carbon:[[@LINE-9]]:31: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'int' to 'const FactoryDoesntReturnSelf' for 1st argument [CppInteropParseNote] + // CHECK:STDERR: 5 | class FactoryDoesntReturnSelf { + // CHECK:STDERR: | ^ + // CHECK:STDERR: fail_factory_doesnt_return_self.carbon:[[@LINE-12]]:31: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'int' to 'FactoryDoesntReturnSelf' for 1st argument [CppInteropParseNote] + // CHECK:STDERR: 5 | class FactoryDoesntReturnSelf { + // CHECK:STDERR: | ^ + // CHECK:STDERR: fail_factory_doesnt_return_self.carbon:[[@LINE-15]]:31: note: candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 1 was provided [CppInteropParseNote] + // CHECK:STDERR: 5 | class FactoryDoesntReturnSelf { + // CHECK:STDERR: | ^ // CHECK:STDERR: - Carbon::OneArg a(42); + Carbon::FactoryDoesntReturnSelf a(42); } '''; @@ -86,26 +86,26 @@ library "[[@TEST_NAME]]"; import Cpp; -class OneArg { - fn OneArg(i: i32) -> ref Self; +class FactoryReturnsByRef { + fn FactoryReturnsByRef(i: i32) -> ref Self; } inline Cpp ''' -void f() { - // CHECK:STDERR: fail_factory_returns_by_ref.carbon:[[@LINE+13]]:18: error: no matching constructor for initialization of 'Carbon::OneArg' [CppInteropParseError] - // CHECK:STDERR: 24 | Carbon::OneArg a(42); - // CHECK:STDERR: | ^ ~~ - // CHECK:STDERR: fail_factory_returns_by_ref.carbon:[[@LINE-9]]:14: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'int' to 'const OneArg' for 1st argument [CppInteropParseNote] - // CHECK:STDERR: 5 | class OneArg { - // CHECK:STDERR: | ^ - // CHECK:STDERR: fail_factory_returns_by_ref.carbon:[[@LINE-12]]:14: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'int' to 'OneArg' for 1st argument [CppInteropParseNote] - // CHECK:STDERR: 5 | class OneArg { - // CHECK:STDERR: | ^ - // CHECK:STDERR: fail_factory_returns_by_ref.carbon:[[@LINE-15]]:14: note: candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 1 was provided [CppInteropParseNote] - // CHECK:STDERR: 5 | class OneArg { - // CHECK:STDERR: | ^ +void CallFactoryReturnsByRef() { + // CHECK:STDERR: fail_factory_returns_by_ref.carbon:[[@LINE+13]]:31: error: no matching constructor for initialization of 'Carbon::FactoryReturnsByRef' [CppInteropParseError] + // CHECK:STDERR: 24 | Carbon::FactoryReturnsByRef a(42); + // CHECK:STDERR: | ^ ~~ + // CHECK:STDERR: fail_factory_returns_by_ref.carbon:[[@LINE-9]]:27: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'int' to 'const FactoryReturnsByRef' for 1st argument [CppInteropParseNote] + // CHECK:STDERR: 5 | class FactoryReturnsByRef { + // CHECK:STDERR: | ^ + // CHECK:STDERR: fail_factory_returns_by_ref.carbon:[[@LINE-12]]:27: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'int' to 'FactoryReturnsByRef' for 1st argument [CppInteropParseNote] + // CHECK:STDERR: 5 | class FactoryReturnsByRef { + // CHECK:STDERR: | ^ + // CHECK:STDERR: fail_factory_returns_by_ref.carbon:[[@LINE-15]]:27: note: candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 1 was provided [CppInteropParseNote] + // CHECK:STDERR: 5 | class FactoryReturnsByRef { + // CHECK:STDERR: | ^ // CHECK:STDERR: - Carbon::OneArg a(42); + Carbon::FactoryReturnsByRef a(42); } '''; @@ -125,7 +125,7 @@ class GenericConstructor { } inline Cpp ''' -void f() { +void CallGenericConstructor() { // CHECK:STDERR: fail_todo_call_generic_constructor.carbon:[[@LINE+13]]:30: error: no matching constructor for initialization of 'Carbon::GenericConstructor' [CppInteropParseError] // CHECK:STDERR: 30 | Carbon::GenericConstructor b(0); // CHECK:STDERR: | ^ ~ @@ -159,7 +159,7 @@ class GenericClass(T: type) { } inline Cpp ''' -void f() { +void CallGenericClass() { // CHECK:STDERR: fail_todo_call_generic_class_constructor.carbon:[[@LINE+13]]:29: error: no matching constructor for initialization of 'Carbon::GenericClass' [CppInteropParseError] // CHECK:STDERR: 30 | Carbon::GenericClass c(0); // CHECK:STDERR: | ^ ~ diff --git a/toolchain/check/testdata/interop/cpp/function/export/function.carbon b/toolchain/check/testdata/interop/cpp/function/export/function.carbon index e711c09cfcb6..75b9497d9daf 100644 --- a/toolchain/check/testdata/interop/cpp/function/export/function.carbon +++ b/toolchain/check/testdata/interop/cpp/function/export/function.carbon @@ -10,46 +10,51 @@ // TIP: To dump output, run: // TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/interop/cpp/function/export/function.carbon -// --- other.carbon +// --- other_function.carbon -package Other; +package OtherFunction; fn F1() {} -fn F2() -> i32 { return 0; } -fn F3(_: i32) {} - -fn HasGenericArg(generic T: type, a: T) { a; } -fn HasDeducedArg[T: type](a: T) { a; } // --- function.carbon library "[[@TEST_NAME]]"; -import Other; +import OtherFunction; import Cpp inline ''' -void G() { - Carbon::Other::F1(); +void CallF1() { + Carbon::OtherFunction::F1(); } '''; +// --- other_return_int.carbon + +package OtherReturnInt; +fn F2() -> i32 { return 0; } + // --- return_int.carbon library "[[@TEST_NAME]]"; -import Other; +import OtherReturnInt; import Cpp inline ''' -int G() { - return Carbon::Other::F2(); +int CallF2() { + return Carbon::OtherReturnInt::F2(); } '''; +// --- other_args.carbon + +package OtherArgs; +fn F3(_: i32) {} + // --- args.carbon library "[[@TEST_NAME]]"; -import Other; +import OtherArgs; import Cpp inline ''' -void G() { - Carbon::Other::F3(123); +void CallF3() { + Carbon::OtherArgs::F3(123); } '''; @@ -59,12 +64,12 @@ library "[[@TEST_NAME]]"; import Cpp; -fn F(ref n: i32); +fn RefF(ref n: i32); inline Cpp ''' -void G() { +void CallRefF() { int n = 0; - Carbon::F(n); + Carbon::RefF(n); } '''; @@ -74,40 +79,50 @@ library "[[@TEST_NAME]]"; import Cpp; -fn F(); +fn UsingF(); inline Cpp ''' -using Carbon::F; -void G() { F(); } +using Carbon::UsingF; +void CallUsingF() { UsingF(); } '''; +// --- other_generic.carbon + +package OtherGeneric; +fn HasGenericArg(generic T: type, a: T) { a; } + // --- fail_todo_generic.carbon library "[[@TEST_NAME]]"; // CHECK:STDERR: fail_todo_generic.carbon:[[@LINE+9]]:1: in import [InImport] -// CHECK:STDERR: other.carbon:7:1: error: 1 argument passed to function expecting 2 arguments [CallArgCountMismatch] +// CHECK:STDERR: other_generic.carbon:3:1: error: 1 argument passed to function expecting 2 arguments [CallArgCountMismatch] // CHECK:STDERR: fn HasGenericArg(generic T: type, a: T) { a; } // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_todo_generic.carbon:[[@LINE+5]]:1: in import [InImport] -// CHECK:STDERR: other.carbon:7:1: note: calling function declared here [InCallToEntity] +// CHECK:STDERR: other_generic.carbon:3:1: note: calling function declared here [InCallToEntity] // CHECK:STDERR: fn HasGenericArg(generic T: type, a: T) { a; } // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: -import Other; +import OtherGeneric; import Cpp inline ''' -void G() { - Carbon::Other::HasGenericArg(123); +void CallHasGenericArg() { + Carbon::OtherGeneric::HasGenericArg(123); } '''; +// --- other_deduced.carbon + +package OtherDeduced; +fn HasDeducedArg[T: type](a: T) { a; } + // --- deduced.carbon library "[[@TEST_NAME]]"; -import Other; +import OtherDeduced; import Cpp inline ''' -void G() { - Carbon::Other::HasDeducedArg(123); +void CallHasDeducedArg() { + Carbon::OtherDeduced::HasDeducedArg(123); } '''; diff --git a/toolchain/check/testdata/interop/cpp/function/export/generic.carbon b/toolchain/check/testdata/interop/cpp/function/export/generic.carbon index 5f6bc65a5963..0f432e39ab39 100644 --- a/toolchain/check/testdata/interop/cpp/function/export/generic.carbon +++ b/toolchain/check/testdata/interop/cpp/function/export/generic.carbon @@ -39,7 +39,7 @@ fn F[T: I](t: T) -> T { } inline Cpp ''' -Carbon::B G() { +Carbon::B CallInterfaceF() { Carbon::A a; Carbon::B b; Carbon::F(a); @@ -53,22 +53,22 @@ library "[[@TEST_NAME]]"; import Cpp; // CHECK:STDERR: fail_todo_non_type_generic.carbon:[[@LINE+4]]:1: error: semantics TODO: `binding maps to a non-type template parameter` [SemanticsTodo] -// CHECK:STDERR: fn F[unused N: i32]() {} -// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~ +// CHECK:STDERR: fn NonTypeF[unused N: i32]() {} +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: -fn F[unused N: i32]() {} +fn NonTypeF[unused N: i32]() {} inline Cpp ''' -void G() { - // CHECK:STDERR: fail_todo_non_type_generic.carbon:[[@LINE+8]]:11: error: no member named 'F' in namespace 'Carbon' [CppInteropParseError] - // CHECK:STDERR: 20 | Carbon::F<3>(); - // CHECK:STDERR: | ^ +void CallNonTypeF() { + // CHECK:STDERR: fail_todo_non_type_generic.carbon:[[@LINE+8]]:11: error: no member named 'NonTypeF' in namespace 'Carbon' [CppInteropParseError] + // CHECK:STDERR: 20 | Carbon::NonTypeF<3>(); + // CHECK:STDERR: | ^~~~~~~~ // CHECK:STDERR: - // CHECK:STDERR: fail_todo_non_type_generic.carbon:[[@LINE+4]]:16: error: expected expression [CppInteropParseError] - // CHECK:STDERR: 20 | Carbon::F<3>(); - // CHECK:STDERR: | ^ + // CHECK:STDERR: fail_todo_non_type_generic.carbon:[[@LINE+4]]:23: error: expected expression [CppInteropParseError] + // CHECK:STDERR: 20 | Carbon::NonTypeF<3>(); + // CHECK:STDERR: | ^ // CHECK:STDERR: - Carbon::F<3>(); + Carbon::NonTypeF<3>(); } '''; @@ -76,13 +76,13 @@ void G() { library "[[@TEST_NAME]]"; import Cpp; -fn F[T: type](unused t: T*) {} +fn PointerF[T: type](unused t: T*) {} inline Cpp ''' -void G() { +void CallPointerF() { int x = 0; int* _Nonnull p = &x; - Carbon::F(p); + Carbon::PointerF(p); } '''; @@ -90,26 +90,26 @@ void G() { library "[[@TEST_NAME]]"; import Cpp; -class A(T: type) { +class EnclosingA(T: type) { // CHECK:STDERR: fail_todo_enclosing_generic.carbon:[[@LINE+4]]:3: error: semantics TODO: `non-class non-namespace name scope` [SemanticsTodo] - // CHECK:STDERR: fn F[U: type](x: T, y: U); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fn MemberF[U: type](x: T, y: U); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - fn F[U: type](x: T, y: U); + fn MemberF[U: type](x: T, y: U); } -alias B = A(i32); +alias EnclosingB = EnclosingA(i32); inline Cpp ''' -void f() { - // TODO: this currently fails because `B` can't be imported, but the intent +void CallEnclosingF() { + // TODO: this currently fails because `EnclosingB` can't be imported, but the intent // is to test a generic function within an enclosing generic scope. // - Carbon::B b; - // CHECK:STDERR: fail_todo_enclosing_generic.carbon:[[@LINE+4]]:5: error: no member named 'F' in 'Carbon::A' [CppInteropParseError] - // CHECK:STDERR: 23 | b.F(1, 2); + Carbon::EnclosingB b; + // CHECK:STDERR: fail_todo_enclosing_generic.carbon:[[@LINE+4]]:5: error: no member named 'MemberF' in 'Carbon::EnclosingA' [CppInteropParseError] + // CHECK:STDERR: 23 | b.MemberF(1, 2); // CHECK:STDERR: | ~ ^ // CHECK:STDERR: - b.F(1, 2); + b.MemberF(1, 2); } '''; @@ -118,22 +118,22 @@ library "[[@TEST_NAME]]"; import Cpp; // CHECK:STDERR: fail_generic_unsupported_type.carbon:[[@LINE+4]]:1: error: semantics TODO: `failed to import C++ type` [SemanticsTodo] -// CHECK:STDERR: fn F[T: type](unused t: T) {} -// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// CHECK:STDERR: fn UnsupportedF[T: type](unused t: T) {} +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: -fn F[T: type](unused t: T) {} +fn UnsupportedF[T: type](unused t: T) {} inline Cpp ''' -void G() { +void CallUnsupportedF() { volatile int x; - // CHECK:STDERR: fail_generic_unsupported_type.carbon:[[@LINE+7]]:3: error: no matching function for call to 'F' [CppInteropParseError] - // CHECK:STDERR: 20 | Carbon::F(x); - // CHECK:STDERR: | ^~~~~~~~~ - // CHECK:STDERR: fail_generic_unsupported_type.carbon:[[@LINE-8]]:28: note: candidate template ignored: substitution failure [with T = volatile int] [CppInteropParseNote] - // CHECK:STDERR: 8 | fn F[T: type](unused t: T) {} - // CHECK:STDERR: | ^ + // CHECK:STDERR: fail_generic_unsupported_type.carbon:[[@LINE+7]]:3: error: no matching function for call to 'UnsupportedF' [CppInteropParseError] + // CHECK:STDERR: 20 | Carbon::UnsupportedF(x); + // CHECK:STDERR: | ^~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_generic_unsupported_type.carbon:[[@LINE-8]]:39: note: candidate template ignored: substitution failure [with T = volatile int] [CppInteropParseNote] + // CHECK:STDERR: 8 | fn UnsupportedF[T: type](unused t: T) {} + // CHECK:STDERR: | ^ // CHECK:STDERR: - Carbon::F(x); + Carbon::UnsupportedF(x); } '''; @@ -274,7 +274,7 @@ void G() { // CHECK:STDOUT: %.loc24_23.1: %I.type = converted %A.decl, %I.facet.loc24_23.1 [concrete = constants.%I.facet.f31] // CHECK:STDOUT: %I.facet.loc24_23.2: %I.type = facet_value %B.decl, (constants.%I.impl_witness.b14) [concrete = constants.%I.facet.a68] // CHECK:STDOUT: %.loc24_23.2: %I.type = converted %B.decl, %I.facet.loc24_23.2 [concrete = constants.%I.facet.a68] -// CHECK:STDOUT: inline_cpp "Carbon::B G() {\n Carbon::A a;\n Carbon::B b;\n Carbon::F(a);\n return Carbon::F(b);\n}\n" +// CHECK:STDOUT: inline_cpp "Carbon::B CallInterfaceF() {\n Carbon::A a;\n Carbon::B b;\n Carbon::F(a);\n return Carbon::F(b);\n}\n" // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @I { diff --git a/toolchain/check/testdata/interop/cpp/function/import/class.carbon b/toolchain/check/testdata/interop/cpp/function/import/class.carbon index 241740cea0d2..86fc5194cf26 100644 --- a/toolchain/check/testdata/interop/cpp/function/import/class.carbon +++ b/toolchain/check/testdata/interop/cpp/function/import/class.carbon @@ -16,68 +16,68 @@ // --- decl_value_param_type.h -class C; +class ForwardDeclaredClass; -auto foo1(C) -> void; -auto foo2(C) -> void; +auto foo_decl_param1(ForwardDeclaredClass) -> void; +auto foo_decl_param2(ForwardDeclaredClass) -> void; // --- fail_import_decl_value_param_type.carbon library "[[@TEST_NAME]]"; // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE+8]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./decl_value_param_type.h:4:6: error: argument type 'C' is incomplete [CppInteropParseError] -// CHECK:STDERR: 4 | auto foo1(C) -> void; -// CHECK:STDERR: | ^~~~ +// CHECK:STDERR: ./decl_value_param_type.h:4:6: error: argument type 'ForwardDeclaredClass' is incomplete [CppInteropParseError] +// CHECK:STDERR: 4 | auto foo_decl_param1(ForwardDeclaredClass) -> void; +// CHECK:STDERR: | ^~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE+4]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./decl_value_param_type.h:2:7: note: forward declaration of 'C' [CppInteropParseNote] -// CHECK:STDERR: 2 | class C; +// CHECK:STDERR: ./decl_value_param_type.h:2:7: note: forward declaration of 'ForwardDeclaredClass' [CppInteropParseNote] +// CHECK:STDERR: 2 | class ForwardDeclaredClass; // CHECK:STDERR: | ^ import Cpp library "decl_value_param_type.h"; -fn F(p: Cpp.C*) { +fn F(p: Cpp.ForwardDeclaredClass*) { // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE+12]]:3: note: in thunk for C++ function used here [InCppThunk] - // CHECK:STDERR: Cpp.foo1(*p); - // CHECK:STDERR: ^~~~~~~~~~~~ + // CHECK:STDERR: Cpp.foo_decl_param1(*p); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE-7]]:10: in file included here [InCppInclude] - // CHECK:STDERR: ./decl_value_param_type.h:5:6: error: argument type 'C' is incomplete [CppInteropParseError] - // CHECK:STDERR: 5 | auto foo2(C) -> void; - // CHECK:STDERR: | ^~~~ + // CHECK:STDERR: ./decl_value_param_type.h:5:6: error: argument type 'ForwardDeclaredClass' is incomplete [CppInteropParseError] + // CHECK:STDERR: 5 | auto foo_decl_param2(ForwardDeclaredClass) -> void; + // CHECK:STDERR: | ^~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE-11]]:10: in file included here [InCppInclude] - // CHECK:STDERR: ./decl_value_param_type.h:2:7: note: forward declaration of 'C' [CppInteropParseNote] - // CHECK:STDERR: 2 | class C; + // CHECK:STDERR: ./decl_value_param_type.h:2:7: note: forward declaration of 'ForwardDeclaredClass' [CppInteropParseNote] + // CHECK:STDERR: 2 | class ForwardDeclaredClass; // CHECK:STDERR: | ^ - Cpp.foo1(*p); + Cpp.foo_decl_param1(*p); // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE+28]]:3: note: in thunk for C++ function used here [InCppThunk] - // CHECK:STDERR: Cpp.foo2(*p); - // CHECK:STDERR: ^~~~~~~~~~~~ + // CHECK:STDERR: Cpp.foo_decl_param2(*p); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE-5]]:12: error: forming value of incomplete type `Cpp.C` [IncompleteTypeInValueConversion] - // CHECK:STDERR: Cpp.foo1(*p); - // CHECK:STDERR: ^~ + // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE-5]]:23: error: forming value of incomplete type `Cpp.ForwardDeclaredClass` [IncompleteTypeInValueConversion] + // CHECK:STDERR: Cpp.foo_decl_param1(*p); + // CHECK:STDERR: ^~ // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE-23]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./decl_value_param_type.h:2:7: note: class was forward declared here [ClassForwardDeclaredHere] - // CHECK:STDERR: class C; + // CHECK:STDERR: class ForwardDeclaredClass; // CHECK:STDERR: ^ // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE-27]]:10: in file included here [InCppInclude] - // CHECK:STDERR: ./decl_value_param_type.h:4:12: note: initializing function parameter [InCallToFunctionParam] - // CHECK:STDERR: auto foo1(C) -> void; - // CHECK:STDERR: ^ + // CHECK:STDERR: ./decl_value_param_type.h:4:42: note: initializing function parameter [InCallToFunctionParam] + // CHECK:STDERR: auto foo_decl_param1(ForwardDeclaredClass) -> void; + // CHECK:STDERR: ^ // CHECK:STDERR: - // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE+12]]:12: error: forming value of incomplete type `Cpp.C` [IncompleteTypeInValueConversion] - // CHECK:STDERR: Cpp.foo2(*p); - // CHECK:STDERR: ^~ + // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE+12]]:23: error: forming value of incomplete type `Cpp.ForwardDeclaredClass` [IncompleteTypeInValueConversion] + // CHECK:STDERR: Cpp.foo_decl_param2(*p); + // CHECK:STDERR: ^~ // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE-35]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./decl_value_param_type.h:2:7: note: class was forward declared here [ClassForwardDeclaredHere] - // CHECK:STDERR: class C; + // CHECK:STDERR: class ForwardDeclaredClass; // CHECK:STDERR: ^ // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE-39]]:10: in file included here [InCppInclude] - // CHECK:STDERR: ./decl_value_param_type.h:5:12: note: initializing function parameter [InCallToFunctionParam] - // CHECK:STDERR: auto foo2(C) -> void; - // CHECK:STDERR: ^ + // CHECK:STDERR: ./decl_value_param_type.h:5:42: note: initializing function parameter [InCallToFunctionParam] + // CHECK:STDERR: auto foo_decl_param2(ForwardDeclaredClass) -> void; + // CHECK:STDERR: ^ // CHECK:STDERR: - Cpp.foo2(*p); + Cpp.foo_decl_param2(*p); } // ============================================================================ @@ -86,9 +86,9 @@ fn F(p: Cpp.C*) { // --- definition_no_data_members_value_param_type.h -class C {}; +class EmptyClass {}; -auto foo(C) -> void; +auto foo_empty_param(EmptyClass) -> void; // --- import_definition_no_data_members_value_param_type.carbon @@ -96,9 +96,9 @@ library "[[@TEST_NAME]]"; import Cpp library "definition_no_data_members_value_param_type.h"; -fn F(c: Cpp.C) { +fn F(c: Cpp.EmptyClass) { //@dump-sem-ir-begin - Cpp.foo(c); + Cpp.foo_empty_param(c); //@dump-sem-ir-end } @@ -108,37 +108,37 @@ fn F(c: Cpp.C) { // --- non_copyable_param_type.h -class C { - C(const C&) = delete; +class NonCopyableClass { + NonCopyableClass(const NonCopyableClass&) = delete; }; -auto foo(C) -> void; +auto foo_non_copyable_param(NonCopyableClass) -> void; // --- fail_import_non_copyable_param_type.carbon library "[[@TEST_NAME]]"; // CHECK:STDERR: fail_import_non_copyable_param_type.carbon:[[@LINE+12]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./non_copyable_param_type.h:6:6: error: call to deleted constructor of 'C' [CppInteropParseError] -// CHECK:STDERR: 6 | auto foo(C) -> void; -// CHECK:STDERR: | ^~~ +// CHECK:STDERR: ./non_copyable_param_type.h:6:6: error: call to deleted constructor of 'NonCopyableClass' [CppInteropParseError] +// CHECK:STDERR: 6 | auto foo_non_copyable_param(NonCopyableClass) -> void; +// CHECK:STDERR: | ^~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_non_copyable_param_type.carbon:[[@LINE+8]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./non_copyable_param_type.h:3:3: note: 'C' has been explicitly marked deleted here [CppInteropParseNote] -// CHECK:STDERR: 3 | C(const C&) = delete; +// CHECK:STDERR: ./non_copyable_param_type.h:3:3: note: 'NonCopyableClass' has been explicitly marked deleted here [CppInteropParseNote] +// CHECK:STDERR: 3 | NonCopyableClass(const NonCopyableClass&) = delete; // CHECK:STDERR: | ^ // CHECK:STDERR: fail_import_non_copyable_param_type.carbon:[[@LINE+4]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./non_copyable_param_type.h:6:11: note: passing argument to parameter here [CppInteropParseNote] -// CHECK:STDERR: 6 | auto foo(C) -> void; -// CHECK:STDERR: | ^ +// CHECK:STDERR: ./non_copyable_param_type.h:6:45: note: passing argument to parameter here [CppInteropParseNote] +// CHECK:STDERR: 6 | auto foo_non_copyable_param(NonCopyableClass) -> void; +// CHECK:STDERR: | ^ import Cpp library "non_copyable_param_type.h"; -fn F(c: Cpp.C) { +fn F(c: Cpp.NonCopyableClass) { //@dump-sem-ir-begin // CHECK:STDERR: fail_import_non_copyable_param_type.carbon:[[@LINE+4]]:3: note: in thunk for C++ function used here [InCppThunk] - // CHECK:STDERR: Cpp.foo(c); - // CHECK:STDERR: ^~~~~~~~~~ + // CHECK:STDERR: Cpp.foo_non_copyable_param(c); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - Cpp.foo(c); + Cpp.foo_non_copyable_param(c); //@dump-sem-ir-end } @@ -148,13 +148,13 @@ fn F(c: Cpp.C) { // --- move_only_param_type.h -struct C { - C(C&&); +struct MoveOnlyClass { + MoveOnlyClass(MoveOnlyClass&&); }; -auto foo(C) -> void; -auto make() -> C; -auto move(C&) -> C&&; +auto foo_move_only_param(MoveOnlyClass) -> void; +auto make_move_only() -> MoveOnlyClass; +auto move_move_only(MoveOnlyClass&) -> MoveOnlyClass&&; // --- pass_move_only_param_temporary.carbon @@ -164,7 +164,7 @@ import Cpp library "move_only_param_type.h"; fn F() { //@dump-sem-ir-begin - Cpp.foo(Cpp.make()); + Cpp.foo_move_only_param(Cpp.make_move_only()); //@dump-sem-ir-end } @@ -173,25 +173,25 @@ fn F() { library "[[@TEST_NAME]]"; // CHECK:STDERR: fail_pass_move_only_param_value.carbon:[[@LINE+12]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./move_only_param_type.h:6:6: error: call to implicitly-deleted copy constructor of 'C' [CppInteropParseError] -// CHECK:STDERR: 6 | auto foo(C) -> void; -// CHECK:STDERR: | ^~~ +// CHECK:STDERR: ./move_only_param_type.h:6:6: error: call to implicitly-deleted copy constructor of 'MoveOnlyClass' [CppInteropParseError] +// CHECK:STDERR: 6 | auto foo_move_only_param(MoveOnlyClass) -> void; +// CHECK:STDERR: | ^~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_pass_move_only_param_value.carbon:[[@LINE+8]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./move_only_param_type.h:3:3: note: copy constructor is implicitly deleted because 'C' has a user-declared move constructor [CppInteropParseNote] -// CHECK:STDERR: 3 | C(C&&); +// CHECK:STDERR: ./move_only_param_type.h:3:3: note: copy constructor is implicitly deleted because 'MoveOnlyClass' has a user-declared move constructor [CppInteropParseNote] +// CHECK:STDERR: 3 | MoveOnlyClass(MoveOnlyClass&&); // CHECK:STDERR: | ^ // CHECK:STDERR: fail_pass_move_only_param_value.carbon:[[@LINE+4]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./move_only_param_type.h:6:11: note: passing argument to parameter here [CppInteropParseNote] -// CHECK:STDERR: 6 | auto foo(C) -> void; -// CHECK:STDERR: | ^ +// CHECK:STDERR: ./move_only_param_type.h:6:39: note: passing argument to parameter here [CppInteropParseNote] +// CHECK:STDERR: 6 | auto foo_move_only_param(MoveOnlyClass) -> void; +// CHECK:STDERR: | ^ import Cpp library "move_only_param_type.h"; -fn F(c: Cpp.C) { +fn F(c: Cpp.MoveOnlyClass) { // CHECK:STDERR: fail_pass_move_only_param_value.carbon:[[@LINE+4]]:3: note: in thunk for C++ function used here [InCppThunk] - // CHECK:STDERR: Cpp.foo(c); - // CHECK:STDERR: ^~~~~~~~~~ + // CHECK:STDERR: Cpp.foo_move_only_param(c); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - Cpp.foo(c); + Cpp.foo_move_only_param(c); } // --- fail_pass_move_only_param_ref.carbon @@ -199,25 +199,25 @@ fn F(c: Cpp.C) { library "[[@TEST_NAME]]"; // CHECK:STDERR: fail_pass_move_only_param_ref.carbon:[[@LINE+12]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./move_only_param_type.h:6:6: error: call to implicitly-deleted copy constructor of 'C' [CppInteropParseError] -// CHECK:STDERR: 6 | auto foo(C) -> void; -// CHECK:STDERR: | ^~~ +// CHECK:STDERR: ./move_only_param_type.h:6:6: error: call to implicitly-deleted copy constructor of 'MoveOnlyClass' [CppInteropParseError] +// CHECK:STDERR: 6 | auto foo_move_only_param(MoveOnlyClass) -> void; +// CHECK:STDERR: | ^~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_pass_move_only_param_ref.carbon:[[@LINE+8]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./move_only_param_type.h:3:3: note: copy constructor is implicitly deleted because 'C' has a user-declared move constructor [CppInteropParseNote] -// CHECK:STDERR: 3 | C(C&&); +// CHECK:STDERR: ./move_only_param_type.h:3:3: note: copy constructor is implicitly deleted because 'MoveOnlyClass' has a user-declared move constructor [CppInteropParseNote] +// CHECK:STDERR: 3 | MoveOnlyClass(MoveOnlyClass&&); // CHECK:STDERR: | ^ // CHECK:STDERR: fail_pass_move_only_param_ref.carbon:[[@LINE+4]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./move_only_param_type.h:6:11: note: passing argument to parameter here [CppInteropParseNote] -// CHECK:STDERR: 6 | auto foo(C) -> void; -// CHECK:STDERR: | ^ +// CHECK:STDERR: ./move_only_param_type.h:6:39: note: passing argument to parameter here [CppInteropParseNote] +// CHECK:STDERR: 6 | auto foo_move_only_param(MoveOnlyClass) -> void; +// CHECK:STDERR: | ^ import Cpp library "move_only_param_type.h"; -fn F(ref c: Cpp.C) { +fn F(ref c: Cpp.MoveOnlyClass) { // CHECK:STDERR: fail_pass_move_only_param_ref.carbon:[[@LINE+4]]:3: note: in thunk for C++ function used here [InCppThunk] - // CHECK:STDERR: Cpp.foo(c); - // CHECK:STDERR: ^~~~~~~~~~ + // CHECK:STDERR: Cpp.foo_move_only_param(c); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - Cpp.foo(c); + Cpp.foo_move_only_param(c); } // --- fail_todo_pass_move_only_param_ref_by_move.carbon @@ -225,25 +225,25 @@ fn F(ref c: Cpp.C) { library "[[@TEST_NAME]]"; // CHECK:STDERR: fail_todo_pass_move_only_param_ref_by_move.carbon:[[@LINE+12]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./move_only_param_type.h:6:6: error: call to implicitly-deleted copy constructor of 'C' [CppInteropParseError] -// CHECK:STDERR: 6 | auto foo(C) -> void; -// CHECK:STDERR: | ^~~ +// CHECK:STDERR: ./move_only_param_type.h:6:6: error: call to implicitly-deleted copy constructor of 'MoveOnlyClass' [CppInteropParseError] +// CHECK:STDERR: 6 | auto foo_move_only_param(MoveOnlyClass) -> void; +// CHECK:STDERR: | ^~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_todo_pass_move_only_param_ref_by_move.carbon:[[@LINE+8]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./move_only_param_type.h:3:3: note: copy constructor is implicitly deleted because 'C' has a user-declared move constructor [CppInteropParseNote] -// CHECK:STDERR: 3 | C(C&&); +// CHECK:STDERR: ./move_only_param_type.h:3:3: note: copy constructor is implicitly deleted because 'MoveOnlyClass' has a user-declared move constructor [CppInteropParseNote] +// CHECK:STDERR: 3 | MoveOnlyClass(MoveOnlyClass&&); // CHECK:STDERR: | ^ // CHECK:STDERR: fail_todo_pass_move_only_param_ref_by_move.carbon:[[@LINE+4]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./move_only_param_type.h:6:11: note: passing argument to parameter here [CppInteropParseNote] -// CHECK:STDERR: 6 | auto foo(C) -> void; -// CHECK:STDERR: | ^ +// CHECK:STDERR: ./move_only_param_type.h:6:39: note: passing argument to parameter here [CppInteropParseNote] +// CHECK:STDERR: 6 | auto foo_move_only_param(MoveOnlyClass) -> void; +// CHECK:STDERR: | ^ import Cpp library "move_only_param_type.h"; -fn F(ref c: Cpp.C) { +fn F(ref c: Cpp.MoveOnlyClass) { // CHECK:STDERR: fail_todo_pass_move_only_param_ref_by_move.carbon:[[@LINE+4]]:3: note: in thunk for C++ function used here [InCppThunk] - // CHECK:STDERR: Cpp.foo(Cpp.move(ref c)); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: Cpp.foo_move_only_param(Cpp.move_move_only(ref c)); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - Cpp.foo(Cpp.move(ref c)); + Cpp.foo_move_only_param(Cpp.move_move_only(ref c)); } // ============================================================================ @@ -252,13 +252,13 @@ fn F(ref c: Cpp.C) { // --- definition_single_data_member_value_param_type.h -class D {}; +class SingleMemberD {}; -class C { - D d; +class SingleMemberClass { + SingleMemberD d; }; -auto foo(C) -> void; +auto foo_single_member_param(SingleMemberClass) -> void; // --- import_definition_single_data_member_value_param_type.carbon @@ -266,9 +266,9 @@ library "[[@TEST_NAME]]"; import Cpp library "definition_single_data_member_value_param_type.h"; -fn F(c: Cpp.C) { +fn F(c: Cpp.SingleMemberClass) { //@dump-sem-ir-begin - Cpp.foo(c); + Cpp.foo_single_member_param(c); //@dump-sem-ir-end } @@ -278,15 +278,15 @@ fn F(c: Cpp.C) { // --- definition_multiple_data_members_value_param_type.h -class D {}; +class MultipleMembersD {}; -class C { - D d1; - D d2; - D d3; +class MultipleMembersClass { + MultipleMembersD d1; + MultipleMembersD d2; + MultipleMembersD d3; }; -auto foo(C) -> void; +auto foo_multiple_members_param(MultipleMembersClass) -> void; // --- import_definition_multiple_data_members_value_param_type.carbon @@ -294,9 +294,9 @@ library "[[@TEST_NAME]]"; import Cpp library "definition_multiple_data_members_value_param_type.h"; -fn F(c: Cpp.C) { +fn F(c: Cpp.MultipleMembersClass) { //@dump-sem-ir-begin - Cpp.foo(c); + Cpp.foo_multiple_members_param(c); //@dump-sem-ir-end } @@ -306,9 +306,9 @@ fn F(c: Cpp.C) { // --- definition_in_namespace_value_param_type.h -namespace N { class C {}; } +namespace N { class InNamespaceClass {}; } -auto foo(N::C) -> void; +auto foo_in_namespace_param(N::InNamespaceClass) -> void; // --- import_definition_in_namespace_value_param_type.carbon @@ -316,11 +316,11 @@ library "[[@TEST_NAME]]"; import Cpp library "definition_in_namespace_value_param_type.h"; -fn F(c: Cpp.N.C) { +fn F(c: Cpp.N.InNamespaceClass) { //@dump-sem-ir-begin - Cpp.foo(c); + Cpp.foo_in_namespace_param(c); // Check that the parameter type was imported correctly. - var unused x: Cpp.N.C; + var unused x: Cpp.N.InNamespaceClass; //@dump-sem-ir-end } @@ -331,8 +331,8 @@ fn F(c: Cpp.N.C) { // --- definition_in_relative_namespace_value_param_type.h namespace N1 { - namespace N2 { class C {}; } - auto foo(N2::C) -> void; + namespace N2 { class InRelativeNamespaceClass {}; } + auto foo(N2::InRelativeNamespaceClass) -> void; } // --- import_definition_in_relative_namespace_value_param_type.carbon @@ -341,7 +341,7 @@ library "[[@TEST_NAME]]"; import Cpp library "definition_in_relative_namespace_value_param_type.h"; -fn F(c: Cpp.N1.N2.C) { +fn F(c: Cpp.N1.N2.InRelativeNamespaceClass) { //@dump-sem-ir-begin Cpp.N1.foo(c); //@dump-sem-ir-end @@ -353,12 +353,12 @@ fn F(c: Cpp.N1.N2.C) { // --- definition_in_outer_definition.h -class O { +class OuterClass { public: - class C {}; + class InnerClass {}; }; -auto foo(O::C) -> void; +auto foo_in_outer_param(OuterClass::InnerClass) -> void; // --- import_definition_in_outer_definition.carbon @@ -366,10 +366,10 @@ library "[[@TEST_NAME]]"; import Cpp library "definition_in_outer_definition.h"; -fn F(c: Cpp.O.C) { +fn F(c: Cpp.OuterClass.InnerClass) { //@dump-sem-ir-begin - Cpp.foo(c); - var unused x: Cpp.O; + Cpp.foo_in_outer_param(c); + var unused x: Cpp.OuterClass; //@dump-sem-ir-end } @@ -379,12 +379,12 @@ fn F(c: Cpp.O.C) { // --- definition_with_static_method.h -class C { +class StaticMethodClass { public: static void bar(); }; -auto foo(C) -> void; +auto foo_static_method_param(StaticMethodClass) -> void; // --- import_definition_and_static_method_call_before.carbon @@ -392,10 +392,10 @@ library "[[@TEST_NAME]]"; import Cpp library "definition_with_static_method.h"; -fn F(c: Cpp.C) { +fn F(c: Cpp.StaticMethodClass) { //@dump-sem-ir-begin - Cpp.C.bar(); - Cpp.foo(c); + Cpp.StaticMethodClass.bar(); + Cpp.foo_static_method_param(c); //@dump-sem-ir-end } @@ -405,10 +405,10 @@ library "[[@TEST_NAME]]"; import Cpp library "definition_with_static_method.h"; -fn F(c: Cpp.C) { +fn F(c: Cpp.StaticMethodClass) { //@dump-sem-ir-begin - Cpp.foo(c); - Cpp.C.bar(); + Cpp.foo_static_method_param(c); + Cpp.StaticMethodClass.bar(); //@dump-sem-ir-end } @@ -444,9 +444,9 @@ fn F() { // --- decl_pointer_param_type.h -class C; +class DeclPointerParamClass; -auto foo(C* _Nonnull) -> void; +auto foo_decl_pointer_param(DeclPointerParamClass* _Nonnull) -> void; // --- import_decl_pointer_param_type.carbon @@ -454,9 +454,9 @@ library "[[@TEST_NAME]]"; import Cpp library "decl_pointer_param_type.h"; -fn F(c: Cpp.C*) { +fn F(c: Cpp.DeclPointerParamClass*) { //@dump-sem-ir-begin - Cpp.foo(c); + Cpp.foo_decl_pointer_param(c); //@dump-sem-ir-end } @@ -466,9 +466,9 @@ fn F(c: Cpp.C*) { // --- definition_pointer_param_type.h -class C {}; +class DefPointerParamClass {}; -auto foo(C* _Nonnull) -> void; +auto foo_def_pointer_param(DefPointerParamClass* _Nonnull) -> void; // --- import_definition_pointer_param_type.carbon @@ -476,9 +476,9 @@ library "[[@TEST_NAME]]"; import Cpp library "definition_pointer_param_type.h"; -fn F(c: Cpp.C*) { +fn F(c: Cpp.DefPointerParamClass*) { //@dump-sem-ir-begin - Cpp.foo(c); + Cpp.foo_def_pointer_param(c); //@dump-sem-ir-end } @@ -488,46 +488,46 @@ fn F(c: Cpp.C*) { // --- decl_value_return_type.h -class C; +class DeclValueReturnClass; -auto foo() -> C; +auto foo_decl_value_return() -> DeclValueReturnClass; // --- fail_import_decl_value_return_type.carbon library "[[@TEST_NAME]]"; // CHECK:STDERR: fail_import_decl_value_return_type.carbon:[[@LINE+12]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./decl_value_return_type.h:4:6: error: calling 'foo' with incomplete return type 'C' [CppInteropParseError] -// CHECK:STDERR: 4 | auto foo() -> C; -// CHECK:STDERR: | ^~~ +// CHECK:STDERR: ./decl_value_return_type.h:4:6: error: calling 'foo_decl_value_return' with incomplete return type 'DeclValueReturnClass' [CppInteropParseError] +// CHECK:STDERR: 4 | auto foo_decl_value_return() -> DeclValueReturnClass; +// CHECK:STDERR: | ^~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_decl_value_return_type.carbon:[[@LINE+8]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./decl_value_return_type.h:4:6: note: 'foo' declared here [CppInteropParseNote] -// CHECK:STDERR: 4 | auto foo() -> C; +// CHECK:STDERR: ./decl_value_return_type.h:4:6: note: 'foo_decl_value_return' declared here [CppInteropParseNote] +// CHECK:STDERR: 4 | auto foo_decl_value_return() -> DeclValueReturnClass; // CHECK:STDERR: | ^ // CHECK:STDERR: fail_import_decl_value_return_type.carbon:[[@LINE+4]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./decl_value_return_type.h:2:7: note: forward declaration of 'C' [CppInteropParseNote] -// CHECK:STDERR: 2 | class C; +// CHECK:STDERR: ./decl_value_return_type.h:2:7: note: forward declaration of 'DeclValueReturnClass' [CppInteropParseNote] +// CHECK:STDERR: 2 | class DeclValueReturnClass; // CHECK:STDERR: | ^ import Cpp library "decl_value_return_type.h"; fn F() { // CHECK:STDERR: fail_import_decl_value_return_type.carbon:[[@LINE+16]]:3: note: in thunk for C++ function used here [InCppThunk] - // CHECK:STDERR: Cpp.foo(); - // CHECK:STDERR: ^~~~~~~~~ + // CHECK:STDERR: Cpp.foo_decl_value_return(); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - // CHECK:STDERR: fail_import_decl_value_return_type.carbon:[[@LINE+12]]:3: error: function returns incomplete type `Cpp.C` [IncompleteTypeInFunctionReturnType] - // CHECK:STDERR: Cpp.foo(); - // CHECK:STDERR: ^~~~~~~~~ + // CHECK:STDERR: fail_import_decl_value_return_type.carbon:[[@LINE+12]]:3: error: function returns incomplete type `Cpp.DeclValueReturnClass` [IncompleteTypeInFunctionReturnType] + // CHECK:STDERR: Cpp.foo_decl_value_return(); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_decl_value_return_type.carbon:[[@LINE-10]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./decl_value_return_type.h:2:7: note: class was forward declared here [ClassForwardDeclaredHere] - // CHECK:STDERR: class C; + // CHECK:STDERR: class DeclValueReturnClass; // CHECK:STDERR: ^ // CHECK:STDERR: fail_import_decl_value_return_type.carbon:[[@LINE-14]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./decl_value_return_type.h:4:1: note: return type declared here [IncompleteReturnTypeHere] - // CHECK:STDERR: auto foo() -> C; + // CHECK:STDERR: auto foo_decl_value_return() -> DeclValueReturnClass; // CHECK:STDERR: ^ // CHECK:STDERR: - Cpp.foo(); + Cpp.foo_decl_value_return(); } // ============================================================================ @@ -536,9 +536,9 @@ fn F() { // --- definition_value_return_type.h -class C {}; +class DefValueReturnClass {}; -auto foo() -> C; +auto foo_def_value_return() -> DefValueReturnClass; // --- import_definition_value_return_type.carbon @@ -548,7 +548,7 @@ import Cpp library "definition_value_return_type.h"; fn F() { //@dump-sem-ir-begin - Cpp.foo(); + Cpp.foo_def_value_return(); //@dump-sem-ir-end } @@ -558,9 +558,9 @@ fn F() { // --- decl_pointer_return_type.h -class C; +class DeclPointerReturnClass; -auto foo() -> C* _Nonnull; +auto foo_decl_pointer_return() -> DeclPointerReturnClass* _Nonnull; // --- import_decl_pointer_return_type.carbon @@ -570,7 +570,7 @@ import Cpp library "decl_pointer_return_type.h"; fn F() { //@dump-sem-ir-begin - Cpp.foo(); + Cpp.foo_decl_pointer_return(); //@dump-sem-ir-end } @@ -580,9 +580,9 @@ fn F() { // --- definition_pointer_return_type.h -class C {}; +class DefPointerReturnClass {}; -auto foo() -> C* _Nonnull; +auto foo_def_pointer_return() -> DefPointerReturnClass* _Nonnull; // --- import_definition_pointer_return_type.carbon @@ -592,80 +592,80 @@ import Cpp library "definition_pointer_return_type.h"; fn F() { //@dump-sem-ir-begin - Cpp.foo(); + Cpp.foo_def_pointer_return(); //@dump-sem-ir-end } // CHECK:STDOUT: --- import_definition_no_data_members_value_param_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %C: type = class_type @C [concrete] +// CHECK:STDOUT: %EmptyClass: type = class_type @EmptyClass [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] -// CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] -// CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_empty_param.cpp_overload_set.type: type = cpp_overload_set_type @foo_empty_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_empty_param.cpp_overload_set.value: %foo_empty_param.cpp_overload_set.type = cpp_overload_set_value @foo_empty_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.3ee: type = ptr_type %EmptyClass [concrete] +// CHECK:STDOUT: %foo_empty_param__carbon_thunk.type: type = fn_type @foo_empty_param__carbon_thunk [concrete] +// CHECK:STDOUT: %foo_empty_param__carbon_thunk: %foo_empty_param__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .C = %C.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .EmptyClass = %EmptyClass.decl +// CHECK:STDOUT: .foo_empty_param = %foo_empty_param.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { +// CHECK:STDOUT: %EmptyClass.decl: type = class_decl @EmptyClass [concrete = constants.%EmptyClass] {} {} +// CHECK:STDOUT: %foo_empty_param.cpp_overload_set.value: %foo_empty_param.cpp_overload_set.type = cpp_overload_set_value @foo_empty_param.cpp_overload_set [concrete = constants.%foo_empty_param.cpp_overload_set.value] +// CHECK:STDOUT: %foo_empty_param__carbon_thunk.decl: %foo_empty_param__carbon_thunk.type = fn_decl @foo_empty_param__carbon_thunk [concrete = constants.%foo_empty_param__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%c.param: %C) { +// CHECK:STDOUT: fn @F(%c.param: %EmptyClass) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %c.ref: %C = name_ref c, %c -// CHECK:STDOUT: %.loc8: ref %C = value_as_ref %c.ref -// CHECK:STDOUT: %addr: %ptr.0a2 = addr_of %.loc8 -// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) +// CHECK:STDOUT: %foo_empty_param.ref: %foo_empty_param.cpp_overload_set.type = name_ref foo_empty_param, imports.%foo_empty_param.cpp_overload_set.value [concrete = constants.%foo_empty_param.cpp_overload_set.value] +// CHECK:STDOUT: %c.ref: %EmptyClass = name_ref c, %c +// CHECK:STDOUT: %.loc8: ref %EmptyClass = value_as_ref %c.ref +// CHECK:STDOUT: %addr: %ptr.3ee = addr_of %.loc8 +// CHECK:STDOUT: %foo_empty_param__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_empty_param__carbon_thunk.decl(%addr) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_import_non_copyable_param_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %C: type = class_type @C [concrete] +// CHECK:STDOUT: %NonCopyableClass: type = class_type @NonCopyableClass [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_non_copyable_param.cpp_overload_set.type: type = cpp_overload_set_type @foo_non_copyable_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_non_copyable_param.cpp_overload_set.value: %foo_non_copyable_param.cpp_overload_set.type = cpp_overload_set_value @foo_non_copyable_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_non_copyable_param.type: type = fn_type @foo_non_copyable_param [concrete] +// CHECK:STDOUT: %foo_non_copyable_param: %foo_non_copyable_param.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .C = %C.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .NonCopyableClass = %NonCopyableClass.decl +// CHECK:STDOUT: .foo_non_copyable_param = %foo_non_copyable_param.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %NonCopyableClass.decl: type = class_decl @NonCopyableClass [concrete = constants.%NonCopyableClass] {} {} +// CHECK:STDOUT: %foo_non_copyable_param.cpp_overload_set.value: %foo_non_copyable_param.cpp_overload_set.type = cpp_overload_set_value @foo_non_copyable_param.cpp_overload_set [concrete = constants.%foo_non_copyable_param.cpp_overload_set.value] +// CHECK:STDOUT: %foo_non_copyable_param.decl: %foo_non_copyable_param.type = fn_decl @foo_non_copyable_param [concrete = constants.%foo_non_copyable_param] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%c.param: %C) { +// CHECK:STDOUT: fn @F(%c.param: %NonCopyableClass) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc24: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %c.ref: %C = name_ref c, %c -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl(%c.ref) +// CHECK:STDOUT: %foo_non_copyable_param.ref: %foo_non_copyable_param.cpp_overload_set.type = name_ref foo_non_copyable_param, imports.%foo_non_copyable_param.cpp_overload_set.value [concrete = constants.%foo_non_copyable_param.cpp_overload_set.value] +// CHECK:STDOUT: %c.ref: %NonCopyableClass = name_ref c, %c +// CHECK:STDOUT: %foo_non_copyable_param.call: init %empty_tuple.type = call imports.%foo_non_copyable_param.decl(%c.ref) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -673,32 +673,32 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %make.cpp_overload_set.type: type = cpp_overload_set_type @make.cpp_overload_set [concrete] -// CHECK:STDOUT: %make.cpp_overload_set.value: %make.cpp_overload_set.type = cpp_overload_set_value @make.cpp_overload_set [concrete] -// CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] -// CHECK:STDOUT: %make__carbon_thunk.type: type = fn_type @make__carbon_thunk [concrete] -// CHECK:STDOUT: %make__carbon_thunk: %make__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] -// CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_move_only_param.cpp_overload_set.type: type = cpp_overload_set_type @foo_move_only_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_move_only_param.cpp_overload_set.value: %foo_move_only_param.cpp_overload_set.type = cpp_overload_set_value @foo_move_only_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %make_move_only.cpp_overload_set.type: type = cpp_overload_set_type @make_move_only.cpp_overload_set [concrete] +// CHECK:STDOUT: %make_move_only.cpp_overload_set.value: %make_move_only.cpp_overload_set.type = cpp_overload_set_value @make_move_only.cpp_overload_set [concrete] +// CHECK:STDOUT: %MoveOnlyClass: type = class_type @MoveOnlyClass [concrete] +// CHECK:STDOUT: %ptr.a0f: type = ptr_type %MoveOnlyClass [concrete] +// CHECK:STDOUT: %make_move_only__carbon_thunk.type: type = fn_type @make_move_only__carbon_thunk [concrete] +// CHECK:STDOUT: %make_move_only__carbon_thunk: %make_move_only__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_move_only_param__carbon_thunk.type: type = fn_type @foo_move_only_param__carbon_thunk [concrete] +// CHECK:STDOUT: %foo_move_only_param__carbon_thunk: %foo_move_only_param__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value -// CHECK:STDOUT: .make = %make.cpp_overload_set.value +// CHECK:STDOUT: .foo_move_only_param = %foo_move_only_param.cpp_overload_set.value +// CHECK:STDOUT: .make_move_only = %make_move_only.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %make.cpp_overload_set.value: %make.cpp_overload_set.type = cpp_overload_set_value @make.cpp_overload_set [concrete = constants.%make.cpp_overload_set.value] -// CHECK:STDOUT: %make__carbon_thunk.decl: %make__carbon_thunk.type = fn_decl @make__carbon_thunk [concrete = constants.%make__carbon_thunk] { +// CHECK:STDOUT: %foo_move_only_param.cpp_overload_set.value: %foo_move_only_param.cpp_overload_set.type = cpp_overload_set_value @foo_move_only_param.cpp_overload_set [concrete = constants.%foo_move_only_param.cpp_overload_set.value] +// CHECK:STDOUT: %make_move_only.cpp_overload_set.value: %make_move_only.cpp_overload_set.type = cpp_overload_set_value @make_move_only.cpp_overload_set [concrete = constants.%make_move_only.cpp_overload_set.value] +// CHECK:STDOUT: %make_move_only__carbon_thunk.decl: %make_move_only__carbon_thunk.type = fn_decl @make_move_only__carbon_thunk [concrete = constants.%make_move_only__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } -// CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { +// CHECK:STDOUT: %foo_move_only_param__carbon_thunk.decl: %foo_move_only_param__carbon_thunk.type = fn_decl @foo_move_only_param__carbon_thunk [concrete = constants.%foo_move_only_param__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -708,136 +708,136 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8_3: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %Cpp.ref.loc8_11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %make.ref: %make.cpp_overload_set.type = name_ref make, imports.%make.cpp_overload_set.value [concrete = constants.%make.cpp_overload_set.value] +// CHECK:STDOUT: %foo_move_only_param.ref: %foo_move_only_param.cpp_overload_set.type = name_ref foo_move_only_param, imports.%foo_move_only_param.cpp_overload_set.value [concrete = constants.%foo_move_only_param.cpp_overload_set.value] +// CHECK:STDOUT: %Cpp.ref.loc8_27: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %make_move_only.ref: %make_move_only.cpp_overload_set.type = name_ref make_move_only, imports.%make_move_only.cpp_overload_set.value [concrete = constants.%make_move_only.cpp_overload_set.value] // CHECK:STDOUT: -// CHECK:STDOUT: %addr.loc8_20: %ptr.0a2 = addr_of %_.var -// CHECK:STDOUT: %make__carbon_thunk.call: init %empty_tuple.type = call imports.%make__carbon_thunk.decl(%addr.loc8_20) -// CHECK:STDOUT: %.loc8: init %C to %_.var = mark_in_place_init %make__carbon_thunk.call +// CHECK:STDOUT: %addr.loc8_46: %ptr.a0f = addr_of %_.var +// CHECK:STDOUT: %make_move_only__carbon_thunk.call: init %empty_tuple.type = call imports.%make_move_only__carbon_thunk.decl(%addr.loc8_46) +// CHECK:STDOUT: %.loc8: init %MoveOnlyClass to %_.var = mark_in_place_init %make_move_only__carbon_thunk.call // CHECK:STDOUT: -// CHECK:STDOUT: %addr.loc8_21: %ptr.0a2 = addr_of %_.var -// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr.loc8_21) +// CHECK:STDOUT: %addr.loc8_47: %ptr.a0f = addr_of %_.var +// CHECK:STDOUT: %foo_move_only_param__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_move_only_param__carbon_thunk.decl(%addr.loc8_47) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_definition_single_data_member_value_param_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %C: type = class_type @C [concrete] +// CHECK:STDOUT: %SingleMemberClass: type = class_type @SingleMemberClass [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] -// CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] -// CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_single_member_param.cpp_overload_set.type: type = cpp_overload_set_type @foo_single_member_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_single_member_param.cpp_overload_set.value: %foo_single_member_param.cpp_overload_set.type = cpp_overload_set_value @foo_single_member_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.8ba: type = ptr_type %SingleMemberClass [concrete] +// CHECK:STDOUT: %foo_single_member_param__carbon_thunk.type: type = fn_type @foo_single_member_param__carbon_thunk [concrete] +// CHECK:STDOUT: %foo_single_member_param__carbon_thunk: %foo_single_member_param__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .C = %C.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .SingleMemberClass = %SingleMemberClass.decl +// CHECK:STDOUT: .foo_single_member_param = %foo_single_member_param.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { +// CHECK:STDOUT: %SingleMemberClass.decl: type = class_decl @SingleMemberClass [concrete = constants.%SingleMemberClass] {} {} +// CHECK:STDOUT: %foo_single_member_param.cpp_overload_set.value: %foo_single_member_param.cpp_overload_set.type = cpp_overload_set_value @foo_single_member_param.cpp_overload_set [concrete = constants.%foo_single_member_param.cpp_overload_set.value] +// CHECK:STDOUT: %foo_single_member_param__carbon_thunk.decl: %foo_single_member_param__carbon_thunk.type = fn_decl @foo_single_member_param__carbon_thunk [concrete = constants.%foo_single_member_param__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%c.param: %C) { +// CHECK:STDOUT: fn @F(%c.param: %SingleMemberClass) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %c.ref: %C = name_ref c, %c -// CHECK:STDOUT: %.loc8: ref %C = value_as_ref %c.ref -// CHECK:STDOUT: %addr: %ptr.0a2 = addr_of %.loc8 -// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) +// CHECK:STDOUT: %foo_single_member_param.ref: %foo_single_member_param.cpp_overload_set.type = name_ref foo_single_member_param, imports.%foo_single_member_param.cpp_overload_set.value [concrete = constants.%foo_single_member_param.cpp_overload_set.value] +// CHECK:STDOUT: %c.ref: %SingleMemberClass = name_ref c, %c +// CHECK:STDOUT: %.loc8: ref %SingleMemberClass = value_as_ref %c.ref +// CHECK:STDOUT: %addr: %ptr.8ba = addr_of %.loc8 +// CHECK:STDOUT: %foo_single_member_param__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_single_member_param__carbon_thunk.decl(%addr) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_definition_multiple_data_members_value_param_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %C: type = class_type @C [concrete] +// CHECK:STDOUT: %MultipleMembersClass: type = class_type @MultipleMembersClass [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] -// CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] -// CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_multiple_members_param.cpp_overload_set.type: type = cpp_overload_set_type @foo_multiple_members_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_multiple_members_param.cpp_overload_set.value: %foo_multiple_members_param.cpp_overload_set.type = cpp_overload_set_value @foo_multiple_members_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.772: type = ptr_type %MultipleMembersClass [concrete] +// CHECK:STDOUT: %foo_multiple_members_param__carbon_thunk.type: type = fn_type @foo_multiple_members_param__carbon_thunk [concrete] +// CHECK:STDOUT: %foo_multiple_members_param__carbon_thunk: %foo_multiple_members_param__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .C = %C.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .MultipleMembersClass = %MultipleMembersClass.decl +// CHECK:STDOUT: .foo_multiple_members_param = %foo_multiple_members_param.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { +// CHECK:STDOUT: %MultipleMembersClass.decl: type = class_decl @MultipleMembersClass [concrete = constants.%MultipleMembersClass] {} {} +// CHECK:STDOUT: %foo_multiple_members_param.cpp_overload_set.value: %foo_multiple_members_param.cpp_overload_set.type = cpp_overload_set_value @foo_multiple_members_param.cpp_overload_set [concrete = constants.%foo_multiple_members_param.cpp_overload_set.value] +// CHECK:STDOUT: %foo_multiple_members_param__carbon_thunk.decl: %foo_multiple_members_param__carbon_thunk.type = fn_decl @foo_multiple_members_param__carbon_thunk [concrete = constants.%foo_multiple_members_param__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%c.param: %C) { +// CHECK:STDOUT: fn @F(%c.param: %MultipleMembersClass) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %c.ref: %C = name_ref c, %c -// CHECK:STDOUT: %.loc8: ref %C = value_as_ref %c.ref -// CHECK:STDOUT: %addr: %ptr.0a2 = addr_of %.loc8 -// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) +// CHECK:STDOUT: %foo_multiple_members_param.ref: %foo_multiple_members_param.cpp_overload_set.type = name_ref foo_multiple_members_param, imports.%foo_multiple_members_param.cpp_overload_set.value [concrete = constants.%foo_multiple_members_param.cpp_overload_set.value] +// CHECK:STDOUT: %c.ref: %MultipleMembersClass = name_ref c, %c +// CHECK:STDOUT: %.loc8: ref %MultipleMembersClass = value_as_ref %c.ref +// CHECK:STDOUT: %addr: %ptr.772 = addr_of %.loc8 +// CHECK:STDOUT: %foo_multiple_members_param__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_multiple_members_param__carbon_thunk.decl(%addr) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_definition_in_namespace_value_param_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %pattern_type.7cb: type = pattern_type %C [concrete] +// CHECK:STDOUT: %InNamespaceClass: type = class_type @InNamespaceClass [concrete] +// CHECK:STDOUT: %pattern_type.d8e: type = pattern_type %InNamespaceClass [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.f8b: type = ptr_type %C [concrete] -// CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] -// CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.7cb = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.7cb = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %foo_in_namespace_param.cpp_overload_set.type: type = cpp_overload_set_type @foo_in_namespace_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_in_namespace_param.cpp_overload_set.value: %foo_in_namespace_param.cpp_overload_set.type = cpp_overload_set_value @foo_in_namespace_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.b66: type = ptr_type %InNamespaceClass [concrete] +// CHECK:STDOUT: %foo_in_namespace_param__carbon_thunk.type: type = fn_type @foo_in_namespace_param__carbon_thunk [concrete] +// CHECK:STDOUT: %foo_in_namespace_param__carbon_thunk: %foo_in_namespace_param__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.d8e = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.d8e = var_pattern %x.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete] // CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.type.0c9: type = fn_type @T.as_type.as.DefaultOrUnformed.impl.Op, @T.as_type.as.DefaultOrUnformed.impl(%T.b09) [symbolic] // CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.cfe: %T.as_type.as.DefaultOrUnformed.impl.Op.type.0c9 = struct_value () [symbolic] -// CHECK:STDOUT: %C.Op.type: type = fn_type @C.Op [concrete] -// CHECK:STDOUT: %C.Op: %C.Op.type = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.85f: = custom_witness (%C.Op), @Default [concrete] -// CHECK:STDOUT: %Default.facet.338: %Default.type = facet_value %C, (%custom_witness.85f) [concrete] -// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.6a8: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.162, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.338) [concrete] -// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %C, (%DefaultOrUnformed.impl_witness.6a8) [concrete] -// CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] -// CHECK:STDOUT: %C.cpp_destructor: %C.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %InNamespaceClass.Op.type: type = fn_type @InNamespaceClass.Op [concrete] +// CHECK:STDOUT: %InNamespaceClass.Op: %InNamespaceClass.Op.type = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.85f: = custom_witness (%InNamespaceClass.Op), @Default [concrete] +// CHECK:STDOUT: %Default.facet.9a6: %Default.type = facet_value %InNamespaceClass, (%custom_witness.85f) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.4fe: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.162, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.9a6) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %InNamespaceClass, (%DefaultOrUnformed.impl_witness.4fe) [concrete] +// CHECK:STDOUT: %InNamespaceClass.cpp_destructor.type: type = fn_type @InNamespaceClass.cpp_destructor [concrete] +// CHECK:STDOUT: %InNamespaceClass.cpp_destructor: %InNamespaceClass.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { // CHECK:STDOUT: .N = %N -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .foo_in_namespace_param = %foo_in_namespace_param.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: %N: = namespace [concrete] { -// CHECK:STDOUT: .C = %C.decl +// CHECK:STDOUT: .InNamespaceClass = %InNamespaceClass.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { +// CHECK:STDOUT: %InNamespaceClass.decl: type = class_decl @InNamespaceClass [concrete = constants.%InNamespaceClass] {} {} +// CHECK:STDOUT: %foo_in_namespace_param.cpp_overload_set.value: %foo_in_namespace_param.cpp_overload_set.type = cpp_overload_set_value @foo_in_namespace_param.cpp_overload_set [concrete = constants.%foo_in_namespace_param.cpp_overload_set.value] +// CHECK:STDOUT: %foo_in_namespace_param__carbon_thunk.decl: %foo_in_namespace_param__carbon_thunk.type = fn_decl @foo_in_namespace_param__carbon_thunk [concrete = constants.%foo_in_namespace_param__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -846,46 +846,46 @@ fn F() { // CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table.162 = impl_witness_table (%Core.import_ref.c2f), @T.as_type.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%c.param: %C) { +// CHECK:STDOUT: fn @F(%c.param: %InNamespaceClass) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %c.ref: %C = name_ref c, %c -// CHECK:STDOUT: %.loc8: ref %C = value_as_ref %c.ref -// CHECK:STDOUT: %addr: %ptr.f8b = addr_of %.loc8 -// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) -// CHECK:STDOUT: %x.var: ref %C = var_storage %x.var_patt -// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%C, (constants.%DefaultOrUnformed.impl_witness.6a8) [concrete = constants.%DefaultOrUnformed.facet] -// CHECK:STDOUT: %.loc10_24.1: %DefaultOrUnformed.type = converted constants.%C, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] -// CHECK:STDOUT: %as_type: type = facet_access_type %.loc10_24.1 [concrete = constants.%C] -// CHECK:STDOUT: %.loc10_24.2: type = converted %.loc10_24.1, %as_type [concrete = constants.%C] +// CHECK:STDOUT: %foo_in_namespace_param.ref: %foo_in_namespace_param.cpp_overload_set.type = name_ref foo_in_namespace_param, imports.%foo_in_namespace_param.cpp_overload_set.value [concrete = constants.%foo_in_namespace_param.cpp_overload_set.value] +// CHECK:STDOUT: %c.ref: %InNamespaceClass = name_ref c, %c +// CHECK:STDOUT: %.loc8: ref %InNamespaceClass = value_as_ref %c.ref +// CHECK:STDOUT: %addr: %ptr.b66 = addr_of %.loc8 +// CHECK:STDOUT: %foo_in_namespace_param__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_in_namespace_param__carbon_thunk.decl(%addr) +// CHECK:STDOUT: %x.var: ref %InNamespaceClass = var_storage %x.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%InNamespaceClass, (constants.%DefaultOrUnformed.impl_witness.4fe) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc10_39.1: %DefaultOrUnformed.type = converted constants.%InNamespaceClass, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc10_39.1 [concrete = constants.%InNamespaceClass] +// CHECK:STDOUT: %.loc10_39.2: type = converted %.loc10_39.1, %as_type [concrete = constants.%InNamespaceClass] // CHECK:STDOUT: -// CHECK:STDOUT: %.loc10_3: ref %C = splice_block %x.var {} -// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call: init %C to %.loc10_3 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: %.loc10_3: ref %InNamespaceClass = splice_block %x.var {} +// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call: init %InNamespaceClass to %.loc10_3 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn() // CHECK:STDOUT: assign %x.var, %T.as_type.as.DefaultOrUnformed.impl.Op.call -// CHECK:STDOUT: %.loc10_22: type = splice_block %C.ref.loc10 [concrete = constants.%C] { +// CHECK:STDOUT: %.loc10_22: type = splice_block %InNamespaceClass.ref.loc10 [concrete = constants.%InNamespaceClass] { // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N.ref.loc10: = name_ref N, imports.%N [concrete = imports.%N] -// CHECK:STDOUT: %C.ref.loc10: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %InNamespaceClass.ref.loc10: type = name_ref InNamespaceClass, imports.%InNamespaceClass.decl [concrete = constants.%InNamespaceClass] // CHECK:STDOUT: } -// CHECK:STDOUT: %x: ref %C = wrapper_binding x, %x.var +// CHECK:STDOUT: %x: ref %InNamespaceClass = wrapper_binding x, %x.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.7cb = ref_binding_pattern x [concrete = constants.%x.patt] -// CHECK:STDOUT: %x.var_patt: %pattern_type.7cb = var_pattern %x.patt [concrete = constants.%x.var_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.d8e = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.d8e = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %C.cpp_destructor.bound: = bound_method %x.var, constants.%C.cpp_destructor -// CHECK:STDOUT: %C.cpp_destructor.call: init %empty_tuple.type = call %C.cpp_destructor.bound(%x.var) +// CHECK:STDOUT: %InNamespaceClass.cpp_destructor.bound: = bound_method %x.var, constants.%InNamespaceClass.cpp_destructor +// CHECK:STDOUT: %InNamespaceClass.cpp_destructor.call: init %empty_tuple.type = call %InNamespaceClass.cpp_destructor.bound(%x.var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_definition_in_relative_namespace_value_param_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %C: type = class_type @C [concrete] +// CHECK:STDOUT: %InRelativeNamespaceClass: type = class_type @InRelativeNamespaceClass [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.eda: type = ptr_type %C [concrete] +// CHECK:STDOUT: %ptr.e6f: type = ptr_type %InRelativeNamespaceClass [concrete] // CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] // CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -901,10 +901,10 @@ fn F() { // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: %N2: = namespace [concrete] { -// CHECK:STDOUT: .C = %C.decl +// CHECK:STDOUT: .InRelativeNamespaceClass = %InRelativeNamespaceClass.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} +// CHECK:STDOUT: %InRelativeNamespaceClass.decl: type = class_decl @InRelativeNamespaceClass [concrete = constants.%InRelativeNamespaceClass] {} {} // CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] // CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { // CHECK:STDOUT: @@ -913,14 +913,14 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%c.param: %C) { +// CHECK:STDOUT: fn @F(%c.param: %InRelativeNamespaceClass) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N1.ref.loc8: = name_ref N1, imports.%N1 [concrete = imports.%N1] // CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %c.ref: %C = name_ref c, %c -// CHECK:STDOUT: %.loc8: ref %C = value_as_ref %c.ref -// CHECK:STDOUT: %addr: %ptr.eda = addr_of %.loc8 +// CHECK:STDOUT: %c.ref: %InRelativeNamespaceClass = name_ref c, %c +// CHECK:STDOUT: %.loc8: ref %InRelativeNamespaceClass = value_as_ref %c.ref +// CHECK:STDOUT: %addr: %ptr.e6f = addr_of %.loc8 // CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) // CHECK:STDOUT: // CHECK:STDOUT: } @@ -928,41 +928,41 @@ fn F() { // CHECK:STDOUT: --- import_definition_in_outer_definition.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %O: type = class_type @O [concrete] +// CHECK:STDOUT: %OuterClass: type = class_type @OuterClass [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.39f: type = ptr_type %C [concrete] -// CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] -// CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %pattern_type.6eb: type = pattern_type %O [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.6eb = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.6eb = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %InnerClass: type = class_type @InnerClass [concrete] +// CHECK:STDOUT: %foo_in_outer_param.cpp_overload_set.type: type = cpp_overload_set_type @foo_in_outer_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_in_outer_param.cpp_overload_set.value: %foo_in_outer_param.cpp_overload_set.type = cpp_overload_set_value @foo_in_outer_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.5e5: type = ptr_type %InnerClass [concrete] +// CHECK:STDOUT: %foo_in_outer_param__carbon_thunk.type: type = fn_type @foo_in_outer_param__carbon_thunk [concrete] +// CHECK:STDOUT: %foo_in_outer_param__carbon_thunk: %foo_in_outer_param__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.dd5: type = pattern_type %OuterClass [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.dd5 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.dd5 = var_pattern %x.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete] // CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.type.0c9: type = fn_type @T.as_type.as.DefaultOrUnformed.impl.Op, @T.as_type.as.DefaultOrUnformed.impl(%T.b09) [symbolic] // CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.cfe: %T.as_type.as.DefaultOrUnformed.impl.Op.type.0c9 = struct_value () [symbolic] -// CHECK:STDOUT: %O.Op.type: type = fn_type @O.Op [concrete] -// CHECK:STDOUT: %O.Op: %O.Op.type = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.9b4: = custom_witness (%O.Op), @Default [concrete] -// CHECK:STDOUT: %Default.facet.240: %Default.type = facet_value %O, (%custom_witness.9b4) [concrete] -// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.6b8: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.162, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.240) [concrete] -// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %O, (%DefaultOrUnformed.impl_witness.6b8) [concrete] -// CHECK:STDOUT: %O.cpp_destructor.type: type = fn_type @O.cpp_destructor [concrete] -// CHECK:STDOUT: %O.cpp_destructor: %O.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %OuterClass.Op.type: type = fn_type @OuterClass.Op [concrete] +// CHECK:STDOUT: %OuterClass.Op: %OuterClass.Op.type = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.9b4: = custom_witness (%OuterClass.Op), @Default [concrete] +// CHECK:STDOUT: %Default.facet.3fb: %Default.type = facet_value %OuterClass, (%custom_witness.9b4) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.436: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.162, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.3fb) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %OuterClass, (%DefaultOrUnformed.impl_witness.436) [concrete] +// CHECK:STDOUT: %OuterClass.cpp_destructor.type: type = fn_type @OuterClass.cpp_destructor [concrete] +// CHECK:STDOUT: %OuterClass.cpp_destructor: %OuterClass.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .O = %O.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .OuterClass = %OuterClass.decl +// CHECK:STDOUT: .foo_in_outer_param = %foo_in_outer_param.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %O.decl: type = class_decl @O [concrete = constants.%O] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { +// CHECK:STDOUT: %OuterClass.decl: type = class_decl @OuterClass [concrete = constants.%OuterClass] {} {} +// CHECK:STDOUT: %foo_in_outer_param.cpp_overload_set.value: %foo_in_outer_param.cpp_overload_set.type = cpp_overload_set_value @foo_in_outer_param.cpp_overload_set [concrete = constants.%foo_in_outer_param.cpp_overload_set.value] +// CHECK:STDOUT: %foo_in_outer_param__carbon_thunk.decl: %foo_in_outer_param__carbon_thunk.type = fn_decl @foo_in_outer_param__carbon_thunk [concrete = constants.%foo_in_outer_param__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -971,154 +971,154 @@ fn F() { // CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table.162 = impl_witness_table (%Core.import_ref.c2f), @T.as_type.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%c.param: %C) { +// CHECK:STDOUT: fn @F(%c.param: %InnerClass) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %c.ref: %C = name_ref c, %c -// CHECK:STDOUT: %.loc8: ref %C = value_as_ref %c.ref -// CHECK:STDOUT: %addr: %ptr.39f = addr_of %.loc8 -// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) -// CHECK:STDOUT: %x.var: ref %O = var_storage %x.var_patt -// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%O, (constants.%DefaultOrUnformed.impl_witness.6b8) [concrete = constants.%DefaultOrUnformed.facet] -// CHECK:STDOUT: %.loc9_22.1: %DefaultOrUnformed.type = converted constants.%O, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] -// CHECK:STDOUT: %as_type: type = facet_access_type %.loc9_22.1 [concrete = constants.%O] -// CHECK:STDOUT: %.loc9_22.2: type = converted %.loc9_22.1, %as_type [concrete = constants.%O] +// CHECK:STDOUT: %foo_in_outer_param.ref: %foo_in_outer_param.cpp_overload_set.type = name_ref foo_in_outer_param, imports.%foo_in_outer_param.cpp_overload_set.value [concrete = constants.%foo_in_outer_param.cpp_overload_set.value] +// CHECK:STDOUT: %c.ref: %InnerClass = name_ref c, %c +// CHECK:STDOUT: %.loc8: ref %InnerClass = value_as_ref %c.ref +// CHECK:STDOUT: %addr: %ptr.5e5 = addr_of %.loc8 +// CHECK:STDOUT: %foo_in_outer_param__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_in_outer_param__carbon_thunk.decl(%addr) +// CHECK:STDOUT: %x.var: ref %OuterClass = var_storage %x.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%OuterClass, (constants.%DefaultOrUnformed.impl_witness.436) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc9_31.1: %DefaultOrUnformed.type = converted constants.%OuterClass, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc9_31.1 [concrete = constants.%OuterClass] +// CHECK:STDOUT: %.loc9_31.2: type = converted %.loc9_31.1, %as_type [concrete = constants.%OuterClass] // CHECK:STDOUT: -// CHECK:STDOUT: %.loc9_3: ref %O = splice_block %x.var {} -// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call: init %O to %.loc9_3 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: %.loc9_3: ref %OuterClass = splice_block %x.var {} +// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call: init %OuterClass to %.loc9_3 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn() // CHECK:STDOUT: assign %x.var, %T.as_type.as.DefaultOrUnformed.impl.Op.call -// CHECK:STDOUT: %.loc9_20: type = splice_block %O.ref.loc9 [concrete = constants.%O] { +// CHECK:STDOUT: %.loc9_20: type = splice_block %OuterClass.ref.loc9 [concrete = constants.%OuterClass] { // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %O.ref.loc9: type = name_ref O, imports.%O.decl [concrete = constants.%O] +// CHECK:STDOUT: %OuterClass.ref.loc9: type = name_ref OuterClass, imports.%OuterClass.decl [concrete = constants.%OuterClass] // CHECK:STDOUT: } -// CHECK:STDOUT: %x: ref %O = wrapper_binding x, %x.var +// CHECK:STDOUT: %x: ref %OuterClass = wrapper_binding x, %x.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.6eb = ref_binding_pattern x [concrete = constants.%x.patt] -// CHECK:STDOUT: %x.var_patt: %pattern_type.6eb = var_pattern %x.patt [concrete = constants.%x.var_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.dd5 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.dd5 = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %O.cpp_destructor.bound: = bound_method %x.var, constants.%O.cpp_destructor -// CHECK:STDOUT: %O.cpp_destructor.call: init %empty_tuple.type = call %O.cpp_destructor.bound(%x.var) +// CHECK:STDOUT: %OuterClass.cpp_destructor.bound: = bound_method %x.var, constants.%OuterClass.cpp_destructor +// CHECK:STDOUT: %OuterClass.cpp_destructor.call: init %empty_tuple.type = call %OuterClass.cpp_destructor.bound(%x.var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_definition_and_static_method_call_before.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %C: type = class_type @C [concrete] +// CHECK:STDOUT: %StaticMethodClass: type = class_type @StaticMethodClass [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C.bar.cpp_overload_set.type: type = cpp_overload_set_type @C.bar.cpp_overload_set [concrete] -// CHECK:STDOUT: %C.bar.cpp_overload_set.value: %C.bar.cpp_overload_set.type = cpp_overload_set_value @C.bar.cpp_overload_set [concrete] -// CHECK:STDOUT: %C.bar.type: type = fn_type @C.bar [concrete] -// CHECK:STDOUT: %C.bar: %C.bar.type = struct_value () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] -// CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] -// CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %StaticMethodClass.bar.cpp_overload_set.type: type = cpp_overload_set_type @StaticMethodClass.bar.cpp_overload_set [concrete] +// CHECK:STDOUT: %StaticMethodClass.bar.cpp_overload_set.value: %StaticMethodClass.bar.cpp_overload_set.type = cpp_overload_set_value @StaticMethodClass.bar.cpp_overload_set [concrete] +// CHECK:STDOUT: %StaticMethodClass.bar.type: type = fn_type @StaticMethodClass.bar [concrete] +// CHECK:STDOUT: %StaticMethodClass.bar: %StaticMethodClass.bar.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_static_method_param.cpp_overload_set.type: type = cpp_overload_set_type @foo_static_method_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_static_method_param.cpp_overload_set.value: %foo_static_method_param.cpp_overload_set.type = cpp_overload_set_value @foo_static_method_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.d55: type = ptr_type %StaticMethodClass [concrete] +// CHECK:STDOUT: %foo_static_method_param__carbon_thunk.type: type = fn_type @foo_static_method_param__carbon_thunk [concrete] +// CHECK:STDOUT: %foo_static_method_param__carbon_thunk: %foo_static_method_param__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .C = %C.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .StaticMethodClass = %StaticMethodClass.decl +// CHECK:STDOUT: .foo_static_method_param = %foo_static_method_param.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: %C.bar.cpp_overload_set.value: %C.bar.cpp_overload_set.type = cpp_overload_set_value @C.bar.cpp_overload_set [concrete = constants.%C.bar.cpp_overload_set.value] -// CHECK:STDOUT: %C.bar.decl: %C.bar.type = fn_decl @C.bar [concrete = constants.%C.bar] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { +// CHECK:STDOUT: %StaticMethodClass.decl: type = class_decl @StaticMethodClass [concrete = constants.%StaticMethodClass] {} {} +// CHECK:STDOUT: %StaticMethodClass.bar.cpp_overload_set.value: %StaticMethodClass.bar.cpp_overload_set.type = cpp_overload_set_value @StaticMethodClass.bar.cpp_overload_set [concrete = constants.%StaticMethodClass.bar.cpp_overload_set.value] +// CHECK:STDOUT: %StaticMethodClass.bar.decl: %StaticMethodClass.bar.type = fn_decl @StaticMethodClass.bar [concrete = constants.%StaticMethodClass.bar] {} {} +// CHECK:STDOUT: %foo_static_method_param.cpp_overload_set.value: %foo_static_method_param.cpp_overload_set.type = cpp_overload_set_value @foo_static_method_param.cpp_overload_set [concrete = constants.%foo_static_method_param.cpp_overload_set.value] +// CHECK:STDOUT: %foo_static_method_param__carbon_thunk.decl: %foo_static_method_param__carbon_thunk.type = fn_decl @foo_static_method_param__carbon_thunk [concrete = constants.%foo_static_method_param__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%c.param: %C) { +// CHECK:STDOUT: fn @F(%c.param: %StaticMethodClass) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc8: type = name_ref C, imports.%C.decl [concrete = constants.%C] -// CHECK:STDOUT: %bar.ref: %C.bar.cpp_overload_set.type = name_ref bar, imports.%C.bar.cpp_overload_set.value [concrete = constants.%C.bar.cpp_overload_set.value] -// CHECK:STDOUT: %C.bar.call: init %empty_tuple.type = call imports.%C.bar.decl() +// CHECK:STDOUT: %StaticMethodClass.ref.loc8: type = name_ref StaticMethodClass, imports.%StaticMethodClass.decl [concrete = constants.%StaticMethodClass] +// CHECK:STDOUT: %bar.ref: %StaticMethodClass.bar.cpp_overload_set.type = name_ref bar, imports.%StaticMethodClass.bar.cpp_overload_set.value [concrete = constants.%StaticMethodClass.bar.cpp_overload_set.value] +// CHECK:STDOUT: %StaticMethodClass.bar.call: init %empty_tuple.type = call imports.%StaticMethodClass.bar.decl() // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %c.ref: %C = name_ref c, %c -// CHECK:STDOUT: %.loc9: ref %C = value_as_ref %c.ref -// CHECK:STDOUT: %addr: %ptr.0a2 = addr_of %.loc9 -// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) +// CHECK:STDOUT: %foo_static_method_param.ref: %foo_static_method_param.cpp_overload_set.type = name_ref foo_static_method_param, imports.%foo_static_method_param.cpp_overload_set.value [concrete = constants.%foo_static_method_param.cpp_overload_set.value] +// CHECK:STDOUT: %c.ref: %StaticMethodClass = name_ref c, %c +// CHECK:STDOUT: %.loc9: ref %StaticMethodClass = value_as_ref %c.ref +// CHECK:STDOUT: %addr: %ptr.d55 = addr_of %.loc9 +// CHECK:STDOUT: %foo_static_method_param__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_static_method_param__carbon_thunk.decl(%addr) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_definition_and_static_method_call_after.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %C: type = class_type @C [concrete] +// CHECK:STDOUT: %StaticMethodClass: type = class_type @StaticMethodClass [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] -// CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] -// CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %C.bar.cpp_overload_set.type: type = cpp_overload_set_type @C.bar.cpp_overload_set [concrete] -// CHECK:STDOUT: %C.bar.cpp_overload_set.value: %C.bar.cpp_overload_set.type = cpp_overload_set_value @C.bar.cpp_overload_set [concrete] -// CHECK:STDOUT: %C.bar.type: type = fn_type @C.bar [concrete] -// CHECK:STDOUT: %C.bar: %C.bar.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_static_method_param.cpp_overload_set.type: type = cpp_overload_set_type @foo_static_method_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_static_method_param.cpp_overload_set.value: %foo_static_method_param.cpp_overload_set.type = cpp_overload_set_value @foo_static_method_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.d55: type = ptr_type %StaticMethodClass [concrete] +// CHECK:STDOUT: %foo_static_method_param__carbon_thunk.type: type = fn_type @foo_static_method_param__carbon_thunk [concrete] +// CHECK:STDOUT: %foo_static_method_param__carbon_thunk: %foo_static_method_param__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %StaticMethodClass.bar.cpp_overload_set.type: type = cpp_overload_set_type @StaticMethodClass.bar.cpp_overload_set [concrete] +// CHECK:STDOUT: %StaticMethodClass.bar.cpp_overload_set.value: %StaticMethodClass.bar.cpp_overload_set.type = cpp_overload_set_value @StaticMethodClass.bar.cpp_overload_set [concrete] +// CHECK:STDOUT: %StaticMethodClass.bar.type: type = fn_type @StaticMethodClass.bar [concrete] +// CHECK:STDOUT: %StaticMethodClass.bar: %StaticMethodClass.bar.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .C = %C.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .StaticMethodClass = %StaticMethodClass.decl +// CHECK:STDOUT: .foo_static_method_param = %foo_static_method_param.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { +// CHECK:STDOUT: %StaticMethodClass.decl: type = class_decl @StaticMethodClass [concrete = constants.%StaticMethodClass] {} {} +// CHECK:STDOUT: %foo_static_method_param.cpp_overload_set.value: %foo_static_method_param.cpp_overload_set.type = cpp_overload_set_value @foo_static_method_param.cpp_overload_set [concrete = constants.%foo_static_method_param.cpp_overload_set.value] +// CHECK:STDOUT: %foo_static_method_param__carbon_thunk.decl: %foo_static_method_param__carbon_thunk.type = fn_decl @foo_static_method_param__carbon_thunk [concrete = constants.%foo_static_method_param__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } -// CHECK:STDOUT: %C.bar.cpp_overload_set.value: %C.bar.cpp_overload_set.type = cpp_overload_set_value @C.bar.cpp_overload_set [concrete = constants.%C.bar.cpp_overload_set.value] -// CHECK:STDOUT: %C.bar.decl: %C.bar.type = fn_decl @C.bar [concrete = constants.%C.bar] {} {} +// CHECK:STDOUT: %StaticMethodClass.bar.cpp_overload_set.value: %StaticMethodClass.bar.cpp_overload_set.type = cpp_overload_set_value @StaticMethodClass.bar.cpp_overload_set [concrete = constants.%StaticMethodClass.bar.cpp_overload_set.value] +// CHECK:STDOUT: %StaticMethodClass.bar.decl: %StaticMethodClass.bar.type = fn_decl @StaticMethodClass.bar [concrete = constants.%StaticMethodClass.bar] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%c.param: %C) { +// CHECK:STDOUT: fn @F(%c.param: %StaticMethodClass) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %c.ref: %C = name_ref c, %c -// CHECK:STDOUT: %.loc8: ref %C = value_as_ref %c.ref -// CHECK:STDOUT: %addr: %ptr.0a2 = addr_of %.loc8 -// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) +// CHECK:STDOUT: %foo_static_method_param.ref: %foo_static_method_param.cpp_overload_set.type = name_ref foo_static_method_param, imports.%foo_static_method_param.cpp_overload_set.value [concrete = constants.%foo_static_method_param.cpp_overload_set.value] +// CHECK:STDOUT: %c.ref: %StaticMethodClass = name_ref c, %c +// CHECK:STDOUT: %.loc8: ref %StaticMethodClass = value_as_ref %c.ref +// CHECK:STDOUT: %addr: %ptr.d55 = addr_of %.loc8 +// CHECK:STDOUT: %foo_static_method_param__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_static_method_param__carbon_thunk.decl(%addr) // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc9: type = name_ref C, imports.%C.decl [concrete = constants.%C] -// CHECK:STDOUT: %bar.ref: %C.bar.cpp_overload_set.type = name_ref bar, imports.%C.bar.cpp_overload_set.value [concrete = constants.%C.bar.cpp_overload_set.value] -// CHECK:STDOUT: %C.bar.call: init %empty_tuple.type = call imports.%C.bar.decl() +// CHECK:STDOUT: %StaticMethodClass.ref.loc9: type = name_ref StaticMethodClass, imports.%StaticMethodClass.decl [concrete = constants.%StaticMethodClass] +// CHECK:STDOUT: %bar.ref: %StaticMethodClass.bar.cpp_overload_set.type = name_ref bar, imports.%StaticMethodClass.bar.cpp_overload_set.value [concrete = constants.%StaticMethodClass.bar.cpp_overload_set.value] +// CHECK:STDOUT: %StaticMethodClass.bar.call: init %empty_tuple.type = call imports.%StaticMethodClass.bar.decl() // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_decl_pointer_param_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %ptr: type = ptr_type %C [concrete] +// CHECK:STDOUT: %DeclPointerParamClass: type = class_type @DeclPointerParamClass [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %DeclPointerParamClass [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_decl_pointer_param.cpp_overload_set.type: type = cpp_overload_set_type @foo_decl_pointer_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_decl_pointer_param.cpp_overload_set.value: %foo_decl_pointer_param.cpp_overload_set.type = cpp_overload_set_value @foo_decl_pointer_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_decl_pointer_param.type: type = fn_type @foo_decl_pointer_param [concrete] +// CHECK:STDOUT: %foo_decl_pointer_param: %foo_decl_pointer_param.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .C = %C.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .DeclPointerParamClass = %DeclPointerParamClass.decl +// CHECK:STDOUT: .foo_decl_pointer_param = %foo_decl_pointer_param.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %DeclPointerParamClass.decl: type = class_decl @DeclPointerParamClass [concrete = constants.%DeclPointerParamClass] {} {} +// CHECK:STDOUT: %foo_decl_pointer_param.cpp_overload_set.value: %foo_decl_pointer_param.cpp_overload_set.type = cpp_overload_set_value @foo_decl_pointer_param.cpp_overload_set [concrete = constants.%foo_decl_pointer_param.cpp_overload_set.value] +// CHECK:STDOUT: %foo_decl_pointer_param.decl: %foo_decl_pointer_param.type = fn_decl @foo_decl_pointer_param [concrete = constants.%foo_decl_pointer_param] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -1128,33 +1128,33 @@ fn F() { // CHECK:STDOUT: fn @F(%c.param: %ptr) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] +// CHECK:STDOUT: %foo_decl_pointer_param.ref: %foo_decl_pointer_param.cpp_overload_set.type = name_ref foo_decl_pointer_param, imports.%foo_decl_pointer_param.cpp_overload_set.value [concrete = constants.%foo_decl_pointer_param.cpp_overload_set.value] // CHECK:STDOUT: %c.ref: %ptr = name_ref c, %c -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl(%c.ref) +// CHECK:STDOUT: %foo_decl_pointer_param.call: init %empty_tuple.type = call imports.%foo_decl_pointer_param.decl(%c.ref) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_definition_pointer_param_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %ptr: type = ptr_type %C [concrete] +// CHECK:STDOUT: %DefPointerParamClass: type = class_type @DefPointerParamClass [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %DefPointerParamClass [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_def_pointer_param.cpp_overload_set.type: type = cpp_overload_set_type @foo_def_pointer_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_def_pointer_param.cpp_overload_set.value: %foo_def_pointer_param.cpp_overload_set.type = cpp_overload_set_value @foo_def_pointer_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_def_pointer_param.type: type = fn_type @foo_def_pointer_param [concrete] +// CHECK:STDOUT: %foo_def_pointer_param: %foo_def_pointer_param.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .C = %C.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .DefPointerParamClass = %DefPointerParamClass.decl +// CHECK:STDOUT: .foo_def_pointer_param = %foo_def_pointer_param.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %DefPointerParamClass.decl: type = class_decl @DefPointerParamClass [concrete = constants.%DefPointerParamClass] {} {} +// CHECK:STDOUT: %foo_def_pointer_param.cpp_overload_set.value: %foo_def_pointer_param.cpp_overload_set.type = cpp_overload_set_value @foo_def_pointer_param.cpp_overload_set [concrete = constants.%foo_def_pointer_param.cpp_overload_set.value] +// CHECK:STDOUT: %foo_def_pointer_param.decl: %foo_def_pointer_param.type = fn_decl @foo_def_pointer_param [concrete = constants.%foo_def_pointer_param] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -1164,9 +1164,9 @@ fn F() { // CHECK:STDOUT: fn @F(%c.param: %ptr) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] +// CHECK:STDOUT: %foo_def_pointer_param.ref: %foo_def_pointer_param.cpp_overload_set.type = name_ref foo_def_pointer_param, imports.%foo_def_pointer_param.cpp_overload_set.value [concrete = constants.%foo_def_pointer_param.cpp_overload_set.value] // CHECK:STDOUT: %c.ref: %ptr = name_ref c, %c -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl(%c.ref) +// CHECK:STDOUT: %foo_def_pointer_param.call: init %empty_tuple.type = call imports.%foo_def_pointer_param.decl(%c.ref) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1174,23 +1174,23 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] -// CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] -// CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] -// CHECK:STDOUT: %C.cpp_destructor: %C.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_def_value_return.cpp_overload_set.type: type = cpp_overload_set_type @foo_def_value_return.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_def_value_return.cpp_overload_set.value: %foo_def_value_return.cpp_overload_set.type = cpp_overload_set_value @foo_def_value_return.cpp_overload_set [concrete] +// CHECK:STDOUT: %DefValueReturnClass: type = class_type @DefValueReturnClass [concrete] +// CHECK:STDOUT: %ptr.8c3: type = ptr_type %DefValueReturnClass [concrete] +// CHECK:STDOUT: %foo_def_value_return__carbon_thunk.type: type = fn_type @foo_def_value_return__carbon_thunk [concrete] +// CHECK:STDOUT: %foo_def_value_return__carbon_thunk: %foo_def_value_return__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %DefValueReturnClass.cpp_destructor.type: type = fn_type @DefValueReturnClass.cpp_destructor [concrete] +// CHECK:STDOUT: %DefValueReturnClass.cpp_destructor: %DefValueReturnClass.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .foo_def_value_return = %foo_def_value_return.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { +// CHECK:STDOUT: %foo_def_value_return.cpp_overload_set.value: %foo_def_value_return.cpp_overload_set.type = cpp_overload_set_value @foo_def_value_return.cpp_overload_set [concrete = constants.%foo_def_value_return.cpp_overload_set.value] +// CHECK:STDOUT: %foo_def_value_return__carbon_thunk.decl: %foo_def_value_return__carbon_thunk.type = fn_decl @foo_def_value_return__carbon_thunk [concrete = constants.%foo_def_value_return__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -1200,35 +1200,35 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %.loc8_11.1: ref %C = temporary_storage -// CHECK:STDOUT: %addr: %ptr.0a2 = addr_of %.loc8_11.1 -// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) -// CHECK:STDOUT: %.loc8_11.2: init %C to %.loc8_11.1 = mark_in_place_init %foo__carbon_thunk.call -// CHECK:STDOUT: %.loc8_11.3: ref %C = temporary %.loc8_11.1, %.loc8_11.2 -// CHECK:STDOUT: %C.cpp_destructor.bound: = bound_method %.loc8_11.3, constants.%C.cpp_destructor -// CHECK:STDOUT: %C.cpp_destructor.call: init %empty_tuple.type = call %C.cpp_destructor.bound(%.loc8_11.3) +// CHECK:STDOUT: %foo_def_value_return.ref: %foo_def_value_return.cpp_overload_set.type = name_ref foo_def_value_return, imports.%foo_def_value_return.cpp_overload_set.value [concrete = constants.%foo_def_value_return.cpp_overload_set.value] +// CHECK:STDOUT: %.loc8_28.1: ref %DefValueReturnClass = temporary_storage +// CHECK:STDOUT: %addr: %ptr.8c3 = addr_of %.loc8_28.1 +// CHECK:STDOUT: %foo_def_value_return__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_def_value_return__carbon_thunk.decl(%addr) +// CHECK:STDOUT: %.loc8_28.2: init %DefValueReturnClass to %.loc8_28.1 = mark_in_place_init %foo_def_value_return__carbon_thunk.call +// CHECK:STDOUT: %.loc8_28.3: ref %DefValueReturnClass = temporary %.loc8_28.1, %.loc8_28.2 +// CHECK:STDOUT: %DefValueReturnClass.cpp_destructor.bound: = bound_method %.loc8_28.3, constants.%DefValueReturnClass.cpp_destructor +// CHECK:STDOUT: %DefValueReturnClass.cpp_destructor.call: init %empty_tuple.type = call %DefValueReturnClass.cpp_destructor.bound(%.loc8_28.3) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_decl_pointer_return_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %ptr: type = ptr_type %C [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_decl_pointer_return.cpp_overload_set.type: type = cpp_overload_set_type @foo_decl_pointer_return.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_decl_pointer_return.cpp_overload_set.value: %foo_decl_pointer_return.cpp_overload_set.type = cpp_overload_set_value @foo_decl_pointer_return.cpp_overload_set [concrete] +// CHECK:STDOUT: %DeclPointerReturnClass: type = class_type @DeclPointerReturnClass [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %DeclPointerReturnClass [concrete] +// CHECK:STDOUT: %foo_decl_pointer_return.type: type = fn_type @foo_decl_pointer_return [concrete] +// CHECK:STDOUT: %foo_decl_pointer_return: %foo_decl_pointer_return.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .foo_decl_pointer_return = %foo_decl_pointer_return.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %foo_decl_pointer_return.cpp_overload_set.value: %foo_decl_pointer_return.cpp_overload_set.type = cpp_overload_set_value @foo_decl_pointer_return.cpp_overload_set [concrete = constants.%foo_decl_pointer_return.cpp_overload_set.value] +// CHECK:STDOUT: %foo_decl_pointer_return.decl: %foo_decl_pointer_return.type = fn_decl @foo_decl_pointer_return [concrete = constants.%foo_decl_pointer_return] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -1238,29 +1238,29 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.call: init %ptr = call imports.%foo.decl() +// CHECK:STDOUT: %foo_decl_pointer_return.ref: %foo_decl_pointer_return.cpp_overload_set.type = name_ref foo_decl_pointer_return, imports.%foo_decl_pointer_return.cpp_overload_set.value [concrete = constants.%foo_decl_pointer_return.cpp_overload_set.value] +// CHECK:STDOUT: %foo_decl_pointer_return.call: init %ptr = call imports.%foo_decl_pointer_return.decl() // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_definition_pointer_return_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %ptr: type = ptr_type %C [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_def_pointer_return.cpp_overload_set.type: type = cpp_overload_set_type @foo_def_pointer_return.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_def_pointer_return.cpp_overload_set.value: %foo_def_pointer_return.cpp_overload_set.type = cpp_overload_set_value @foo_def_pointer_return.cpp_overload_set [concrete] +// CHECK:STDOUT: %DefPointerReturnClass: type = class_type @DefPointerReturnClass [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %DefPointerReturnClass [concrete] +// CHECK:STDOUT: %foo_def_pointer_return.type: type = fn_type @foo_def_pointer_return [concrete] +// CHECK:STDOUT: %foo_def_pointer_return: %foo_def_pointer_return.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .foo_def_pointer_return = %foo_def_pointer_return.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %foo_def_pointer_return.cpp_overload_set.value: %foo_def_pointer_return.cpp_overload_set.type = cpp_overload_set_value @foo_def_pointer_return.cpp_overload_set [concrete = constants.%foo_def_pointer_return.cpp_overload_set.value] +// CHECK:STDOUT: %foo_def_pointer_return.decl: %foo_def_pointer_return.type = fn_decl @foo_def_pointer_return [concrete = constants.%foo_def_pointer_return] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -1270,8 +1270,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.call: init %ptr = call imports.%foo.decl() +// CHECK:STDOUT: %foo_def_pointer_return.ref: %foo_def_pointer_return.cpp_overload_set.type = name_ref foo_def_pointer_return, imports.%foo_def_pointer_return.cpp_overload_set.value [concrete = constants.%foo_def_pointer_return.cpp_overload_set.value] +// CHECK:STDOUT: %foo_def_pointer_return.call: init %ptr = call imports.%foo_def_pointer_return.decl() // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/function/import/constexpr.carbon b/toolchain/check/testdata/interop/cpp/function/import/constexpr.carbon index 96216c89681c..e2f733b18771 100644 --- a/toolchain/check/testdata/interop/cpp/function/import/constexpr.carbon +++ b/toolchain/check/testdata/interop/cpp/function/import/constexpr.carbon @@ -16,41 +16,41 @@ library "[[@TEST_NAME]]"; import Cpp inline ''' -constexpr int f(int a, int b) { return a + b; } +constexpr int add(int a, int b) { return a + b; } '''; -let a: array(i32, Cpp.f(1, 2)) = (1, 2, 3); +let a: array(i32, Cpp.add(1, 2)) = (1, 2, 3); // --- bool_param.carbon library "[[@TEST_NAME]]"; import Cpp inline ''' -constexpr int f(bool b) { +constexpr int bool_fn(bool b) { return b ? 3 : 0; } '''; -let a: array(i32, Cpp.f(true)) = (1, 2, 3); +let a: array(i32, Cpp.bool_fn(true)) = (1, 2, 3); // --- float_param.carbon library "[[@TEST_NAME]]"; import Cpp inline ''' -constexpr int f(float b) { +constexpr int float_fn(float b) { return static_cast(b); } '''; -let a: array(i32, Cpp.f(3.0)) = (1, 2, 3); +let a: array(i32, Cpp.float_fn(3.0)) = (1, 2, 3); // --- return_bool.carbon library "[[@TEST_NAME]]"; import Cpp inline ''' -constexpr bool f() { +constexpr bool return_bool_fn() { return true; } '''; @@ -59,7 +59,7 @@ musteval fn F(b: bool) -> i32 { return if b then 3 else 0; } -let a: array(i32, F(Cpp.f())) = (1, 2, 3); +let a: array(i32, F(Cpp.return_bool_fn())) = (1, 2, 3); // --- fail_invalid_constant_eval.carbon @@ -67,16 +67,16 @@ library "[[@TEST_NAME]]"; import Cpp inline ''' constexpr int arr[1] = {0}; -constexpr int f(int a) { +constexpr int invalid_const_fn(int a) { return arr[a]; } '''; // CHECK:STDERR: fail_invalid_constant_eval.carbon:[[@LINE+4]]:19: error: array bound is not a constant [InvalidArrayExpr] -// CHECK:STDERR: let a: array(i32, Cpp.f(5)) = (1, 2, 3); -// CHECK:STDERR: ^~~~~~~~ +// CHECK:STDERR: let a: array(i32, Cpp.invalid_const_fn(5)) = (1, 2, 3); +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: -let a: array(i32, Cpp.f(5)) = (1, 2, 3); +let a: array(i32, Cpp.invalid_const_fn(5)) = (1, 2, 3); // --- nonconstant_constexpr_call.carbon @@ -87,11 +87,11 @@ import Cpp; var a: i32 = 0; inline Cpp ''' -constexpr int f(const int &r) { return r; } +constexpr int nonconst_constexpr_fn(const int &r) { return r; } '''; // OK, runtime call. -var b: i32 = Cpp.f(a); +var b: i32 = Cpp.nonconst_constexpr_fn(a); // --- fail_nonconstant_consteval_call.carbon @@ -103,30 +103,30 @@ var a: i32 = 0; // TODO: This is failing when building the thunk, not when calling it. inline Cpp ''' -// CHECK:STDERR: fail_nonconstant_consteval_call.carbon:[[@LINE+9]]:15: error: call to consteval function 'f' is not a constant expression [CppInteropParseError] -// CHECK:STDERR: 19 | consteval int f(const int &r) { return r; } +// CHECK:STDERR: fail_nonconstant_consteval_call.carbon:[[@LINE+9]]:15: error: call to consteval function 'nonconst_consteval_fn' is not a constant expression [CppInteropParseError] +// CHECK:STDERR: 19 | consteval int nonconst_consteval_fn(const int &r) { return r; } // CHECK:STDERR: | ^ // CHECK:STDERR: fail_nonconstant_consteval_call.carbon:[[@LINE+6]]:15: note: function parameter 'r' with unknown value cannot be used in a constant expression [CppInteropParseNote] -// CHECK:STDERR: 19 | consteval int f(const int &r) { return r; } +// CHECK:STDERR: 19 | consteval int nonconst_consteval_fn(const int &r) { return r; } // CHECK:STDERR: | ^ // CHECK:STDERR: fail_nonconstant_consteval_call.carbon:[[@LINE+3]]:15: note: declared here [CppInteropParseNote] -// CHECK:STDERR: 19 | consteval int f(const int &r) { return r; } +// CHECK:STDERR: 19 | consteval int nonconst_consteval_fn(const int &r) { return r; } // CHECK:STDERR: | ^ -consteval int f(const int &r) { return r; } +consteval int nonconst_consteval_fn(const int &r) { return r; } '''; // CHECK:STDERR: fail_nonconstant_consteval_call.carbon:[[@LINE+11]]:14: note: in thunk for C++ function used here [InCppThunk] -// CHECK:STDERR: var b: i32 = Cpp.f(a); -// CHECK:STDERR: ^~~~~~~~ +// CHECK:STDERR: var b: i32 = Cpp.nonconst_consteval_fn(a); +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: // CHECK:STDERR: fail_nonconstant_consteval_call.carbon:[[@LINE+7]]:14: error: non-constant call to compile-time-only function [NonConstantCallToCompTimeOnlyFunction] -// CHECK:STDERR: var b: i32 = Cpp.f(a); -// CHECK:STDERR: ^~~~~~~~ +// CHECK:STDERR: var b: i32 = Cpp.nonconst_consteval_fn(a); +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_nonconstant_consteval_call.carbon:[[@LINE-10]]:15: note: compile-time-only function declared here [CompTimeOnlyFunctionHere] -// CHECK:STDERR: consteval int f(const int &r) { return r; } +// CHECK:STDERR: consteval int nonconst_consteval_fn(const int &r) { return r; } // CHECK:STDERR: ^ // CHECK:STDERR: -var b: i32 = Cpp.f(a); +var b: i32 = Cpp.nonconst_consteval_fn(a); // --- fail_todo_constructor.carbon @@ -135,8 +135,8 @@ library "[[@TEST_NAME]]"; import Cpp; inline Cpp ''' -struct C { - constexpr C(int a) : a(a) {} +struct ConstexprC { + constexpr ConstexprC(int a) : a(a) {} int a; }; '''; @@ -144,10 +144,10 @@ struct C { // TODO: This should probably be allowed. eval fn F() -> i32 { //@dump-sem-ir-begin - // CHECK:STDERR: fail_todo_constructor.carbon:[[@LINE+3]]:18: error: expression is runtime; expected constant [EvalRequiresConstantValue] - // CHECK:STDERR: let c: Cpp.C = 3; - // CHECK:STDERR: ^ - let c: Cpp.C = 3; + // CHECK:STDERR: fail_todo_constructor.carbon:[[@LINE+3]]:27: error: expression is runtime; expected constant [EvalRequiresConstantValue] + // CHECK:STDERR: let c: Cpp.ConstexprC = 3; + // CHECK:STDERR: ^ + let c: Cpp.ConstexprC = 3; return c.a; //@dump-sem-ir-end } @@ -165,14 +165,14 @@ let a: array(i32, F()) = (1, 2, 3); // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] -// CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %i32 [concrete] -// CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] -// CHECK:STDOUT: %c.patt: %pattern_type.bbc = value_binding_pattern c [concrete] +// CHECK:STDOUT: %ConstexprC: type = class_type @ConstexprC [concrete] +// CHECK:STDOUT: %ConstexprC.elem: type = unbound_element_type %ConstexprC, %i32 [concrete] +// CHECK:STDOUT: %pattern_type.3cc: type = pattern_type %ConstexprC [concrete] +// CHECK:STDOUT: %c.patt: %pattern_type.3cc = value_binding_pattern c [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] -// CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] -// CHECK:STDOUT: %C__carbon_thunk.type: type = fn_type @C__carbon_thunk [concrete] -// CHECK:STDOUT: %C__carbon_thunk: %C__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %ptr.0b8: type = ptr_type %ConstexprC [concrete] +// CHECK:STDOUT: %ConstexprC__carbon_thunk.type: type = fn_type @ConstexprC__carbon_thunk [concrete] +// CHECK:STDOUT: %ConstexprC__carbon_thunk: %ConstexprC__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.914: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert, @Core.IntLiteral.as.ImplicitAs.impl.0e9(%To) [symbolic] @@ -197,19 +197,19 @@ let a: array(i32, F()) = (1, 2, 3); // CHECK:STDOUT: %Copy.WithSelf.Op.type.381: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet) [concrete] // CHECK:STDOUT: %.737: type = fn_type_with_self_type %Copy.WithSelf.Op.type.381, %Copy.facet [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.specific_fn: = specific_function %Int.as.Copy.impl.Op.4f6, @Int.as.Copy.impl.Op(%int_32) [concrete] -// CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] -// CHECK:STDOUT: %C.cpp_destructor: %C.cpp_destructor.type = struct_value () [concrete] -// CHECK:STDOUT: %C.Op.type: type = fn_type @C.Op [concrete] -// CHECK:STDOUT: %C.Op: %C.Op.type = struct_value () [concrete] +// CHECK:STDOUT: %ConstexprC.cpp_destructor.type: type = fn_type @ConstexprC.cpp_destructor [concrete] +// CHECK:STDOUT: %ConstexprC.cpp_destructor: %ConstexprC.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %ConstexprC.Op.type: type = fn_type @ConstexprC.Op [concrete] +// CHECK:STDOUT: %ConstexprC.Op: %ConstexprC.Op.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .C = %C.decl +// CHECK:STDOUT: .ConstexprC = %ConstexprC.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: %C__carbon_thunk.decl: %C__carbon_thunk.type = fn_decl @C__carbon_thunk [concrete = constants.%C__carbon_thunk] { +// CHECK:STDOUT: %ConstexprC.decl: type = class_decl @ConstexprC [concrete = constants.%ConstexprC] {} {} +// CHECK:STDOUT: %ConstexprC__carbon_thunk.decl: %ConstexprC__carbon_thunk.type = fn_decl @ConstexprC__carbon_thunk [concrete = constants.%ConstexprC__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -218,7 +218,7 @@ let a: array(i32, F()) = (1, 2, 3); // CHECK:STDOUT: %ImplicitAs.impl_witness_table.1aa = impl_witness_table (%Core.import_ref.edf), @Core.IntLiteral.as.ImplicitAs.impl.0e9 [concrete] // CHECK:STDOUT: %Core.import_ref.cd6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.ac8) = import_ref Core//prelude/types/int, loc{{\d+_\d+}}, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.5e0)] // CHECK:STDOUT: %Copy.impl_witness_table.8d2 = impl_witness_table (%Core.import_ref.cd6), @Int.as.Copy.impl [concrete] -// CHECK:STDOUT: %C.cpp_destructor.decl: %C.cpp_destructor.type = fn_decl @C.cpp_destructor [concrete = constants.%C.cpp_destructor] { +// CHECK:STDOUT: %ConstexprC.cpp_destructor.decl: %ConstexprC.cpp_destructor.type = fn_decl @ConstexprC.cpp_destructor [concrete = constants.%ConstexprC.cpp_destructor] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -228,30 +228,30 @@ let a: array(i32, F()) = (1, 2, 3); // CHECK:STDOUT: fn @F() -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %int_3: Core.IntLiteral = int_value 3 [concrete = constants.%int_3.1ba] -// CHECK:STDOUT: %.loc19_18.1: ref %C = temporary_storage +// CHECK:STDOUT: %.loc19_27.1: ref %ConstexprC = temporary_storage // CHECK:STDOUT: %impl.elem0.loc19: %.b7a = impl_witness_access constants.%ImplicitAs.impl_witness.a2a, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] -// CHECK:STDOUT: %bound_method.loc19_18.1: = bound_method %int_3, %impl.elem0.loc19 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] +// CHECK:STDOUT: %bound_method.loc19_27.1: = bound_method %int_3, %impl.elem0.loc19 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn.loc19: = specific_function %impl.elem0.loc19, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc19_18.2: = bound_method %int_3, %specific_fn.loc19 [concrete = constants.%bound_method] -// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc19_18.2(%int_3) [concrete = constants.%int_3.410] -// CHECK:STDOUT: %.loc19_18.2: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_3.410] -// CHECK:STDOUT: %.loc19_18.3: %i32 = converted %int_3, %.loc19_18.2 [concrete = constants.%int_3.410] -// CHECK:STDOUT: %addr: %ptr.0a2 = addr_of %.loc19_18.1 -// CHECK:STDOUT: %C__carbon_thunk.call: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%.loc19_18.3, %addr) -// CHECK:STDOUT: %.loc19_18.4: init %C to %.loc19_18.1 = mark_in_place_init %C__carbon_thunk.call -// CHECK:STDOUT: %.loc19_18.5: init %C = converted %int_3, %.loc19_18.4 -// CHECK:STDOUT: %.loc19_18.6: ref %C = temporary %.loc19_18.1, %.loc19_18.5 -// CHECK:STDOUT: %.loc19_18.7: %C = acquire_value %.loc19_18.6 -// CHECK:STDOUT: %.loc19_13: type = splice_block %C.ref [concrete = constants.%C] { +// CHECK:STDOUT: %bound_method.loc19_27.2: = bound_method %int_3, %specific_fn.loc19 [concrete = constants.%bound_method] +// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc19_27.2(%int_3) [concrete = constants.%int_3.410] +// CHECK:STDOUT: %.loc19_27.2: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_3.410] +// CHECK:STDOUT: %.loc19_27.3: %i32 = converted %int_3, %.loc19_27.2 [concrete = constants.%int_3.410] +// CHECK:STDOUT: %addr: %ptr.0b8 = addr_of %.loc19_27.1 +// CHECK:STDOUT: %ConstexprC__carbon_thunk.call: init %empty_tuple.type = call imports.%ConstexprC__carbon_thunk.decl(%.loc19_27.3, %addr) +// CHECK:STDOUT: %.loc19_27.4: init %ConstexprC to %.loc19_27.1 = mark_in_place_init %ConstexprC__carbon_thunk.call +// CHECK:STDOUT: %.loc19_27.5: init %ConstexprC = converted %int_3, %.loc19_27.4 +// CHECK:STDOUT: %.loc19_27.6: ref %ConstexprC = temporary %.loc19_27.1, %.loc19_27.5 +// CHECK:STDOUT: %.loc19_27.7: %ConstexprC = acquire_value %.loc19_27.6 +// CHECK:STDOUT: %.loc19_13: type = splice_block %ConstexprC.ref [concrete = constants.%ConstexprC] { // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %ConstexprC.ref: type = name_ref ConstexprC, imports.%ConstexprC.decl [concrete = constants.%ConstexprC] // CHECK:STDOUT: } -// CHECK:STDOUT: %c: %C = wrapper_binding c, %.loc19_18.7 +// CHECK:STDOUT: %c: %ConstexprC = wrapper_binding c, %.loc19_27.7 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c.patt: %pattern_type.bbc = value_binding_pattern c [concrete = constants.%c.patt] +// CHECK:STDOUT: %c.patt: %pattern_type.3cc = value_binding_pattern c [concrete = constants.%c.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c.ref: %C = name_ref c, %c -// CHECK:STDOUT: %a.ref: %C.elem = name_ref a, @C.%.1 [concrete = @C.%.1] +// CHECK:STDOUT: %c.ref: %ConstexprC = name_ref c, %c +// CHECK:STDOUT: %a.ref: %ConstexprC.elem = name_ref a, @ConstexprC.%.1 [concrete = @ConstexprC.%.1] // CHECK:STDOUT: %.loc20_11.1: ref %i32 = class_element_access %c.ref, element0 // CHECK:STDOUT: %.loc20_11.2: %i32 = acquire_value %.loc20_11.1 // CHECK:STDOUT: %impl.elem0.loc20: %.737 = impl_witness_access constants.%Copy.impl_witness.b51, element0 [concrete = constants.%Int.as.Copy.impl.Op.4f6] @@ -260,10 +260,10 @@ let a: array(i32, F()) = (1, 2, 3); // CHECK:STDOUT: %bound_method.loc20_11.2: = bound_method %.loc20_11.2, %specific_fn.loc20 // CHECK:STDOUT: %Int.as.Copy.impl.Op.call: init %i32 = call %bound_method.loc20_11.2(%.loc20_11.2) // CHECK:STDOUT: -// CHECK:STDOUT: %C.Op.bound: = bound_method %.loc19_18.6, constants.%C.Op -// CHECK:STDOUT: %Op.ref: %C.cpp_destructor.type = name_ref Op, imports.%C.cpp_destructor.decl [concrete = constants.%C.cpp_destructor] -// CHECK:STDOUT: %C.cpp_destructor.bound: = bound_method %.loc19_18.6, %Op.ref -// CHECK:STDOUT: %C.cpp_destructor.call: init %empty_tuple.type = call %C.cpp_destructor.bound(%.loc19_18.6) +// CHECK:STDOUT: %ConstexprC.Op.bound: = bound_method %.loc19_27.6, constants.%ConstexprC.Op +// CHECK:STDOUT: %Op.ref: %ConstexprC.cpp_destructor.type = name_ref Op, imports.%ConstexprC.cpp_destructor.decl [concrete = constants.%ConstexprC.cpp_destructor] +// CHECK:STDOUT: %ConstexprC.cpp_destructor.bound: = bound_method %.loc19_27.6, %Op.ref +// CHECK:STDOUT: %ConstexprC.cpp_destructor.call: init %empty_tuple.type = call %ConstexprC.cpp_destructor.bound(%.loc19_27.6) // CHECK:STDOUT: return %Int.as.Copy.impl.Op.call // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/function/import/extern_c.carbon b/toolchain/check/testdata/interop/cpp/function/import/extern_c.carbon index 907f6193443c..83515f3f7c6d 100644 --- a/toolchain/check/testdata/interop/cpp/function/import/extern_c.carbon +++ b/toolchain/check/testdata/interop/cpp/function/import/extern_c.carbon @@ -15,12 +15,12 @@ library "[[@TEST_NAME]]"; import Cpp inline ''' -extern "C" void foo(); +extern "C" void foo_c_fn(); '''; fn MyF() { //@dump-sem-ir-begin - Cpp.foo(); + Cpp.foo_c_fn(); //@dump-sem-ir-end } @@ -29,14 +29,14 @@ fn MyF() { library "[[@TEST_NAME]]"; import Cpp inline ''' -extern "C" void foo(); -void foo(int x); +extern "C" void foo_c_overloaded(); +void foo_c_overloaded(int x); '''; fn MyF() { //@dump-sem-ir-begin - Cpp.foo(); - Cpp.foo(5); + Cpp.foo_c_overloaded(); + Cpp.foo_c_overloaded(5); //@dump-sem-ir-end } @@ -45,12 +45,12 @@ fn MyF() { library "[[@TEST_NAME]]"; import Cpp inline ''' -extern "C" int foo; +extern "C" int foo_c_var; '''; fn MyF() -> i32 { //@dump-sem-ir-begin - return Cpp.foo; + return Cpp.foo_c_var; //@dump-sem-ir-end } @@ -73,26 +73,26 @@ fn MyF(a: Cpp.X, b: Cpp.X) -> Cpp.X { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_c_fn.cpp_overload_set.type: type = cpp_overload_set_type @foo_c_fn.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_c_fn.cpp_overload_set.value: %foo_c_fn.cpp_overload_set.type = cpp_overload_set_value @foo_c_fn.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_c_fn.type: type = fn_type @foo_c_fn [concrete] +// CHECK:STDOUT: %foo_c_fn: %foo_c_fn.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .foo_c_fn = %foo_c_fn.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] {} {} +// CHECK:STDOUT: %foo_c_fn.cpp_overload_set.value: %foo_c_fn.cpp_overload_set.type = cpp_overload_set_value @foo_c_fn.cpp_overload_set [concrete = constants.%foo_c_fn.cpp_overload_set.value] +// CHECK:STDOUT: %foo_c_fn.decl: %foo_c_fn.type = fn_decl @foo_c_fn [concrete = constants.%foo_c_fn] {} {} // 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.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl() +// CHECK:STDOUT: %foo_c_fn.ref: %foo_c_fn.cpp_overload_set.type = name_ref foo_c_fn, imports.%foo_c_fn.cpp_overload_set.value [concrete = constants.%foo_c_fn.cpp_overload_set.value] +// CHECK:STDOUT: %foo_c_fn.call: init %empty_tuple.type = call imports.%foo_c_fn.decl() // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -100,15 +100,15 @@ fn MyF(a: Cpp.X, b: Cpp.X) -> Cpp.X { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.type.6d9caa.1: type = fn_type @foo.1 [concrete] -// CHECK:STDOUT: %foo.627376.1: %foo.type.6d9caa.1 = struct_value () [concrete] +// CHECK:STDOUT: %foo_c_overloaded.cpp_overload_set.type: type = cpp_overload_set_type @foo_c_overloaded.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_c_overloaded.cpp_overload_set.value: %foo_c_overloaded.cpp_overload_set.type = cpp_overload_set_value @foo_c_overloaded.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_c_overloaded.type.7eb664.1: type = fn_type @foo_c_overloaded.1 [concrete] +// CHECK:STDOUT: %foo_c_overloaded.fee3ce.1: %foo_c_overloaded.type.7eb664.1 = struct_value () [concrete] // CHECK:STDOUT: %int_5.64b: Core.IntLiteral = int_value 5 [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] -// CHECK:STDOUT: %foo.type.6d9caa.2: type = fn_type @foo.2 [concrete] -// CHECK:STDOUT: %foo.627376.2: %foo.type.6d9caa.2 = struct_value () [concrete] +// CHECK:STDOUT: %foo_c_overloaded.type.7eb664.2: type = fn_type @foo_c_overloaded.2 [concrete] +// CHECK:STDOUT: %foo_c_overloaded.fee3ce.2: %foo_c_overloaded.type.7eb664.2 = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.914: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74: type = fn_type @Core.IntLiteral.as.ImplicitAs.impl.Convert, @Core.IntLiteral.as.ImplicitAs.impl(%To) [symbolic] @@ -127,12 +127,12 @@ fn MyF(a: Cpp.X, b: Cpp.X) -> Cpp.X { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .foo_c_overloaded = %foo_c_overloaded.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl.6431a3.1: %foo.type.6d9caa.1 = fn_decl @foo.1 [concrete = constants.%foo.627376.1] {} {} -// CHECK:STDOUT: %foo.decl.6431a3.2: %foo.type.6d9caa.2 = fn_decl @foo.2 [concrete = constants.%foo.627376.2] { +// CHECK:STDOUT: %foo_c_overloaded.cpp_overload_set.value: %foo_c_overloaded.cpp_overload_set.type = cpp_overload_set_value @foo_c_overloaded.cpp_overload_set [concrete = constants.%foo_c_overloaded.cpp_overload_set.value] +// CHECK:STDOUT: %foo_c_overloaded.decl.9ccf4c.1: %foo_c_overloaded.type.7eb664.1 = fn_decl @foo_c_overloaded.1 [concrete = constants.%foo_c_overloaded.fee3ce.1] {} {} +// CHECK:STDOUT: %foo_c_overloaded.decl.9ccf4c.2: %foo_c_overloaded.type.7eb664.2 = fn_decl @foo_c_overloaded.2 [concrete = constants.%foo_c_overloaded.fee3ce.2] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -144,19 +144,19 @@ fn MyF(a: Cpp.X, b: Cpp.X) -> Cpp.X { // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref.loc11: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.call.loc11: init %empty_tuple.type = call imports.%foo.decl.6431a3.1() +// CHECK:STDOUT: %foo_c_overloaded.ref.loc11: %foo_c_overloaded.cpp_overload_set.type = name_ref foo_c_overloaded, imports.%foo_c_overloaded.cpp_overload_set.value [concrete = constants.%foo_c_overloaded.cpp_overload_set.value] +// CHECK:STDOUT: %foo_c_overloaded.call.loc11: init %empty_tuple.type = call imports.%foo_c_overloaded.decl.9ccf4c.1() // CHECK:STDOUT: %Cpp.ref.loc12: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref.loc12: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] +// CHECK:STDOUT: %foo_c_overloaded.ref.loc12: %foo_c_overloaded.cpp_overload_set.type = name_ref foo_c_overloaded, imports.%foo_c_overloaded.cpp_overload_set.value [concrete = constants.%foo_c_overloaded.cpp_overload_set.value] // CHECK:STDOUT: %int_5: Core.IntLiteral = int_value 5 [concrete = constants.%int_5.64b] // CHECK:STDOUT: %impl.elem0: %.b7a = impl_witness_access constants.%ImplicitAs.impl_witness.a2a, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] -// CHECK:STDOUT: %bound_method.loc12_11.1: = bound_method %int_5, %impl.elem0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] +// CHECK:STDOUT: %bound_method.loc12_24.1: = bound_method %int_5, %impl.elem0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] // CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc12_11.2: = bound_method %int_5, %specific_fn [concrete = constants.%bound_method] -// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc12_11.2(%int_5) [concrete = constants.%int_5.eef] -// CHECK:STDOUT: %.loc12_11.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_5.eef] -// CHECK:STDOUT: %.loc12_11.2: %i32 = converted %int_5, %.loc12_11.1 [concrete = constants.%int_5.eef] -// CHECK:STDOUT: %foo.call.loc12: init %empty_tuple.type = call imports.%foo.decl.6431a3.2(%.loc12_11.2) +// CHECK:STDOUT: %bound_method.loc12_24.2: = bound_method %int_5, %specific_fn [concrete = constants.%bound_method] +// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call: init %i32 = call %bound_method.loc12_24.2(%int_5) [concrete = constants.%int_5.eef] +// CHECK:STDOUT: %.loc12_24.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call [concrete = constants.%int_5.eef] +// CHECK:STDOUT: %.loc12_24.2: %i32 = converted %int_5, %.loc12_24.1 [concrete = constants.%int_5.eef] +// CHECK:STDOUT: %foo_c_overloaded.call.loc12: init %empty_tuple.type = call imports.%foo_c_overloaded.decl.9ccf4c.2(%.loc12_24.2) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -167,8 +167,8 @@ fn MyF(a: Cpp.X, b: Cpp.X) -> Cpp.X { // CHECK:STDOUT: %N: Core.IntLiteral = symbolic_binding N, 0 [symbolic] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] // CHECK:STDOUT: %pattern_type.6b6: type = pattern_type %i32 [concrete] -// CHECK:STDOUT: %foo.patt: %pattern_type.6b6 = ref_binding_pattern foo [concrete] -// CHECK:STDOUT: %foo.var_patt: %pattern_type.6b6 = var_pattern %foo.patt [concrete] +// CHECK:STDOUT: %foo_c_var.patt: %pattern_type.6b6 = ref_binding_pattern foo_c_var [concrete] +// CHECK:STDOUT: %foo_c_var.var_patt: %pattern_type.6b6 = var_pattern %foo_c_var.patt [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %Int.as.Copy.impl.Op.type.ac8: type = fn_type @Int.as.Copy.impl.Op, @Int.as.Copy.impl(%N) [symbolic] // CHECK:STDOUT: %Int.as.Copy.impl.Op.5e0: %Int.as.Copy.impl.Op.type.ac8 = struct_value () [symbolic] @@ -183,12 +183,12 @@ fn MyF(a: Cpp.X, b: Cpp.X) -> Cpp.X { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .foo = %foo.var +// CHECK:STDOUT: .foo_c_var = %foo_c_var.var // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %foo.patt: %pattern_type.6b6 = ref_binding_pattern foo [concrete = constants.%foo.patt] -// CHECK:STDOUT: %foo.var_patt: %pattern_type.6b6 = var_pattern %foo.patt [concrete = constants.%foo.var_patt] -// CHECK:STDOUT: %foo.var: ref %i32 = var_storage %foo.var_patt [concrete] +// CHECK:STDOUT: %foo_c_var.patt: %pattern_type.6b6 = ref_binding_pattern foo_c_var [concrete = constants.%foo_c_var.patt] +// CHECK:STDOUT: %foo_c_var.var_patt: %pattern_type.6b6 = var_pattern %foo_c_var.patt [concrete = constants.%foo_c_var.var_patt] +// CHECK:STDOUT: %foo_c_var.var: ref %i32 = var_storage %foo_c_var.var_patt [concrete] // CHECK:STDOUT: %Core.import_ref.cd6: @Int.as.Copy.impl.%Int.as.Copy.impl.Op.type (%Int.as.Copy.impl.Op.type.ac8) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Int.as.Copy.impl.%Int.as.Copy.impl.Op (constants.%Int.as.Copy.impl.Op.5e0)] // CHECK:STDOUT: %Copy.impl_witness_table.8d2 = impl_witness_table (%Core.import_ref.cd6), @Int.as.Copy.impl [concrete] // CHECK:STDOUT: } @@ -197,8 +197,8 @@ fn MyF(a: Cpp.X, b: Cpp.X) -> Cpp.X { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: -// CHECK:STDOUT: %foo.ref: ref %i32 = name_ref foo, imports.%foo.var [concrete = imports.%foo.var] -// CHECK:STDOUT: %.loc10: %i32 = acquire_value %foo.ref +// CHECK:STDOUT: %foo_c_var.ref: ref %i32 = name_ref foo_c_var, imports.%foo_c_var.var [concrete = imports.%foo_c_var.var] +// CHECK:STDOUT: %.loc10: %i32 = acquire_value %foo_c_var.ref // CHECK:STDOUT: %impl.elem0: %.737 = impl_witness_access constants.%Copy.impl_witness.b51, element0 [concrete = constants.%Int.as.Copy.impl.Op.4f6] // CHECK:STDOUT: %bound_method.loc10_13.1: = bound_method %.loc10, %impl.elem0 // CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @Int.as.Copy.impl.Op(constants.%int_32) [concrete = constants.%Int.as.Copy.impl.Op.specific_fn] diff --git a/toolchain/check/testdata/interop/cpp/function/import/function.carbon b/toolchain/check/testdata/interop/cpp/function/import/function.carbon index 478d4cf2cf50..28e5d5e56b44 100644 --- a/toolchain/check/testdata/interop/cpp/function/import/function.carbon +++ b/toolchain/check/testdata/interop/cpp/function/import/function.carbon @@ -16,7 +16,7 @@ // --- global.h -auto foo() -> void; +auto global_foo() -> void; // --- import_global.carbon @@ -26,7 +26,7 @@ import Cpp library "global.h"; fn MyF() { //@dump-sem-ir-begin - Cpp.foo(); + Cpp.global_foo(); //@dump-sem-ir-end } @@ -84,8 +84,8 @@ fn MyF() { // --- overloaded.h -auto foo() -> void; -auto foo(int value) -> void; +auto overloaded_foo() -> void; +auto overloaded_foo(int value) -> void; // --- import_overloaded.carbon @@ -95,7 +95,7 @@ import Cpp library "overloaded.h"; fn F() { //@dump-sem-ir-begin - Cpp.foo(); + Cpp.overloaded_foo(); //@dump-sem-ir-end } @@ -105,7 +105,7 @@ fn F() { // --- variadic.h -auto foo(int x, ...) -> void; +auto variadic_foo(int x, ...) -> void; // --- fail_todo_import_variadic.carbon @@ -116,10 +116,10 @@ import Cpp library "variadic.h"; fn F() { //@dump-sem-ir-begin // CHECK:STDERR: fail_todo_import_variadic.carbon:[[@LINE+4]]:3: error: semantics TODO: `Unsupported: Variadic function` [SemanticsTodo] - // CHECK:STDERR: Cpp.foo(8); - // CHECK:STDERR: ^~~~~~~~~~ + // CHECK:STDERR: Cpp.variadic_foo(8); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - Cpp.foo(8); + Cpp.variadic_foo(8); //@dump-sem-ir-end } @@ -130,10 +130,10 @@ fn F() { // --- static.h // TODO: Promote this warning to an error by default. -// CHECK:STDERR: ./static.h:[[@LINE+3]]:13: warning: function 'foo' has internal linkage but is not defined [CppInteropParseWarning] -// CHECK:STDERR: 6 | static auto foo() -> void; +// CHECK:STDERR: ./static.h:[[@LINE+3]]:13: warning: function 'static_foo' has internal linkage but is not defined [CppInteropParseWarning] +// CHECK:STDERR: 6 | static auto static_foo() -> void; // CHECK:STDERR: | ^ -static auto foo() -> void; +static auto static_foo() -> void; // --- todo_fail_import_static.carbon @@ -143,21 +143,21 @@ import Cpp library "static.h"; fn F() { //@dump-sem-ir-begin - // CHECK:STDERR: todo_fail_import_static.carbon:[[@LINE+4]]:11: note: used here [CppInteropParseNote] - // CHECK:STDERR: 12 | Cpp.foo(); - // CHECK:STDERR: | ^ + // CHECK:STDERR: todo_fail_import_static.carbon:[[@LINE+4]]:18: note: used here [CppInteropParseNote] + // CHECK:STDERR: 12 | Cpp.static_foo(); + // CHECK:STDERR: | ^ // CHECK:STDERR: - Cpp.foo(); + Cpp.static_foo(); //@dump-sem-ir-end } // --- template_function.h template -auto foo(T a) -> void; +auto template_foo(T a) -> void; template -auto bar(T a) -> T; +auto template_bar(T a) -> T; // --- import_template_function.carbon @@ -167,13 +167,13 @@ import Cpp library "template_function.h"; fn F() { //@dump-sem-ir-begin - Cpp.foo(1 as i32); + Cpp.template_foo(1 as i32); //@dump-sem-ir-end } fn G() -> i32 { //@dump-sem-ir-begin - return Cpp.bar(1 as i32); + return Cpp.template_bar(1 as i32); //@dump-sem-ir-end } @@ -185,26 +185,26 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %global_foo.cpp_overload_set.type: type = cpp_overload_set_type @global_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %global_foo.cpp_overload_set.value: %global_foo.cpp_overload_set.type = cpp_overload_set_value @global_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %global_foo.type: type = fn_type @global_foo [concrete] +// CHECK:STDOUT: %global_foo: %global_foo.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .global_foo = %global_foo.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] {} {} +// CHECK:STDOUT: %global_foo.cpp_overload_set.value: %global_foo.cpp_overload_set.type = cpp_overload_set_value @global_foo.cpp_overload_set [concrete = constants.%global_foo.cpp_overload_set.value] +// CHECK:STDOUT: %global_foo.decl: %global_foo.type = fn_decl @global_foo [concrete = constants.%global_foo] {} {} // 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.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl() +// CHECK:STDOUT: %global_foo.ref: %global_foo.cpp_overload_set.type = name_ref global_foo, imports.%global_foo.cpp_overload_set.value [concrete = constants.%global_foo.cpp_overload_set.value] +// CHECK:STDOUT: %global_foo.call: init %empty_tuple.type = call imports.%global_foo.decl() // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -239,49 +239,49 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %overloaded_foo.cpp_overload_set.type: type = cpp_overload_set_type @overloaded_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %overloaded_foo.cpp_overload_set.value: %overloaded_foo.cpp_overload_set.type = cpp_overload_set_value @overloaded_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %overloaded_foo.type: type = fn_type @overloaded_foo [concrete] +// CHECK:STDOUT: %overloaded_foo: %overloaded_foo.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .overloaded_foo = %overloaded_foo.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] {} {} +// CHECK:STDOUT: %overloaded_foo.cpp_overload_set.value: %overloaded_foo.cpp_overload_set.type = cpp_overload_set_value @overloaded_foo.cpp_overload_set [concrete = constants.%overloaded_foo.cpp_overload_set.value] +// CHECK:STDOUT: %overloaded_foo.decl: %overloaded_foo.type = fn_decl @overloaded_foo [concrete = constants.%overloaded_foo] {} {} // 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: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl() +// CHECK:STDOUT: %overloaded_foo.ref: %overloaded_foo.cpp_overload_set.type = name_ref overloaded_foo, imports.%overloaded_foo.cpp_overload_set.value [concrete = constants.%overloaded_foo.cpp_overload_set.value] +// CHECK:STDOUT: %overloaded_foo.call: init %empty_tuple.type = call imports.%overloaded_foo.decl() // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_import_variadic.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %variadic_foo.cpp_overload_set.type: type = cpp_overload_set_type @variadic_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %variadic_foo.cpp_overload_set.value: %variadic_foo.cpp_overload_set.type = cpp_overload_set_value @variadic_foo.cpp_overload_set [concrete] // CHECK:STDOUT: %int_8: Core.IntLiteral = int_value 8 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .variadic_foo = %variadic_foo.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] +// CHECK:STDOUT: %variadic_foo.cpp_overload_set.value: %variadic_foo.cpp_overload_set.type = cpp_overload_set_value @variadic_foo.cpp_overload_set [concrete = constants.%variadic_foo.cpp_overload_set.value] // 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: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] +// CHECK:STDOUT: %variadic_foo.ref: %variadic_foo.cpp_overload_set.type = name_ref variadic_foo, imports.%variadic_foo.cpp_overload_set.value [concrete = constants.%variadic_foo.cpp_overload_set.value] // CHECK:STDOUT: %int_8: Core.IntLiteral = int_value 8 [concrete = constants.%int_8] // CHECK:STDOUT: // CHECK:STDOUT: } @@ -290,26 +290,26 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %static_foo.cpp_overload_set.type: type = cpp_overload_set_type @static_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %static_foo.cpp_overload_set.value: %static_foo.cpp_overload_set.type = cpp_overload_set_value @static_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %static_foo.type: type = fn_type @static_foo [concrete] +// CHECK:STDOUT: %static_foo: %static_foo.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .static_foo = %static_foo.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] {} {} +// CHECK:STDOUT: %static_foo.cpp_overload_set.value: %static_foo.cpp_overload_set.type = cpp_overload_set_value @static_foo.cpp_overload_set [concrete = constants.%static_foo.cpp_overload_set.value] +// CHECK:STDOUT: %static_foo.decl: %static_foo.type = fn_decl @static_foo [concrete = constants.%static_foo] {} {} // 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: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl() +// CHECK:STDOUT: %static_foo.ref: %static_foo.cpp_overload_set.type = name_ref static_foo, imports.%static_foo.cpp_overload_set.value [concrete = constants.%static_foo.cpp_overload_set.value] +// CHECK:STDOUT: %static_foo.call: init %empty_tuple.type = call imports.%static_foo.decl() // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -317,8 +317,8 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %template_foo.cpp_overload_set.type: type = cpp_overload_set_type @template_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %template_foo.cpp_overload_set.value: %template_foo.cpp_overload_set.type = cpp_overload_set_value @template_foo.cpp_overload_set [concrete] // CHECK:STDOUT: %int_1.5b8: Core.IntLiteral = int_value 1 [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] @@ -336,30 +336,30 @@ fn G() -> i32 { // CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.As.impl.Convert.8a4, @Core.IntLiteral.as.As.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method: = bound_method %int_1.5b8, %Core.IntLiteral.as.As.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_1.0c6: %i32 = int_value 1 [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] -// CHECK:STDOUT: %bar.cpp_overload_set.type: type = cpp_overload_set_type @bar.cpp_overload_set [concrete] -// CHECK:STDOUT: %bar.cpp_overload_set.value: %bar.cpp_overload_set.type = cpp_overload_set_value @bar.cpp_overload_set [concrete] -// CHECK:STDOUT: %bar.type: type = fn_type @bar [concrete] -// CHECK:STDOUT: %bar: %bar.type = struct_value () [concrete] +// CHECK:STDOUT: %template_foo.type: type = fn_type @template_foo [concrete] +// CHECK:STDOUT: %template_foo: %template_foo.type = struct_value () [concrete] +// CHECK:STDOUT: %template_bar.cpp_overload_set.type: type = cpp_overload_set_type @template_bar.cpp_overload_set [concrete] +// CHECK:STDOUT: %template_bar.cpp_overload_set.value: %template_bar.cpp_overload_set.type = cpp_overload_set_value @template_bar.cpp_overload_set [concrete] +// CHECK:STDOUT: %template_bar.type: type = fn_type @template_bar [concrete] +// CHECK:STDOUT: %template_bar: %template_bar.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value -// CHECK:STDOUT: .bar = %bar.cpp_overload_set.value +// CHECK:STDOUT: .template_foo = %template_foo.cpp_overload_set.value +// CHECK:STDOUT: .template_bar = %template_bar.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] +// CHECK:STDOUT: %template_foo.cpp_overload_set.value: %template_foo.cpp_overload_set.type = cpp_overload_set_value @template_foo.cpp_overload_set [concrete = constants.%template_foo.cpp_overload_set.value] // CHECK:STDOUT: %Core.import_ref.64b: @Core.IntLiteral.as.As.impl.%Core.IntLiteral.as.As.impl.Convert.type (%Core.IntLiteral.as.As.impl.Convert.type.c5d) = import_ref Core//prelude/parts/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.As.impl.%Core.IntLiteral.as.As.impl.Convert (constants.%Core.IntLiteral.as.As.impl.Convert.6ee)] // CHECK:STDOUT: %As.impl_witness_table.d22 = impl_witness_table (%Core.import_ref.64b), @Core.IntLiteral.as.As.impl [concrete] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %template_foo.decl: %template_foo.type = fn_decl @template_foo [concrete = constants.%template_foo] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } -// CHECK:STDOUT: %bar.cpp_overload_set.value: %bar.cpp_overload_set.type = cpp_overload_set_value @bar.cpp_overload_set [concrete = constants.%bar.cpp_overload_set.value] -// CHECK:STDOUT: %bar.decl: %bar.type = fn_decl @bar [concrete = constants.%bar] { +// CHECK:STDOUT: %template_bar.cpp_overload_set.value: %template_bar.cpp_overload_set.type = cpp_overload_set_value @template_bar.cpp_overload_set [concrete = constants.%template_bar.cpp_overload_set.value] +// CHECK:STDOUT: %template_bar.decl: %template_bar.type = fn_decl @template_bar [concrete = constants.%template_bar] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -369,34 +369,34 @@ fn G() -> i32 { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] +// CHECK:STDOUT: %template_foo.ref: %template_foo.cpp_overload_set.type = name_ref template_foo, imports.%template_foo.cpp_overload_set.value [concrete = constants.%template_foo.cpp_overload_set.value] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %impl.elem0: %.453 = impl_witness_access constants.%As.impl_witness.e7f, element0 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.8a4] -// CHECK:STDOUT: %bound_method.loc8_13.1: = bound_method %int_1, %impl.elem0 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.bound] +// CHECK:STDOUT: %bound_method.loc8_22.1: = bound_method %int_1, %impl.elem0 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.bound] // CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @Core.IntLiteral.as.As.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc8_13.2: = bound_method %int_1, %specific_fn [concrete = constants.%bound_method] -// CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.call: init %i32 = call %bound_method.loc8_13.2(%int_1) [concrete = constants.%int_1.0c6] -// CHECK:STDOUT: %.loc8_13.1: %i32 = value_of_initializer %Core.IntLiteral.as.As.impl.Convert.call [concrete = constants.%int_1.0c6] -// CHECK:STDOUT: %.loc8_13.2: %i32 = converted %int_1, %.loc8_13.1 [concrete = constants.%int_1.0c6] -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl(%.loc8_13.2) +// CHECK:STDOUT: %bound_method.loc8_22.2: = bound_method %int_1, %specific_fn [concrete = constants.%bound_method] +// CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.call: init %i32 = call %bound_method.loc8_22.2(%int_1) [concrete = constants.%int_1.0c6] +// CHECK:STDOUT: %.loc8_22.1: %i32 = value_of_initializer %Core.IntLiteral.as.As.impl.Convert.call [concrete = constants.%int_1.0c6] +// CHECK:STDOUT: %.loc8_22.2: %i32 = converted %int_1, %.loc8_22.1 [concrete = constants.%int_1.0c6] +// CHECK:STDOUT: %template_foo.call: init %empty_tuple.type = call imports.%template_foo.decl(%.loc8_22.2) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @G() -> out %return.param: %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %bar.ref: %bar.cpp_overload_set.type = name_ref bar, imports.%bar.cpp_overload_set.value [concrete = constants.%bar.cpp_overload_set.value] +// CHECK:STDOUT: %template_bar.ref: %template_bar.cpp_overload_set.type = name_ref template_bar, imports.%template_bar.cpp_overload_set.value [concrete = constants.%template_bar.cpp_overload_set.value] // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %i32.loc14: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %impl.elem0: %.453 = impl_witness_access constants.%As.impl_witness.e7f, element0 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.8a4] -// CHECK:STDOUT: %bound_method.loc14_20.1: = bound_method %int_1, %impl.elem0 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.bound] +// CHECK:STDOUT: %bound_method.loc14_29.1: = bound_method %int_1, %impl.elem0 [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.bound] // CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @Core.IntLiteral.as.As.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.As.impl.Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc14_20.2: = bound_method %int_1, %specific_fn [concrete = constants.%bound_method] -// CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.call: init %i32 = call %bound_method.loc14_20.2(%int_1) [concrete = constants.%int_1.0c6] -// CHECK:STDOUT: %.loc14_20.1: %i32 = value_of_initializer %Core.IntLiteral.as.As.impl.Convert.call [concrete = constants.%int_1.0c6] -// CHECK:STDOUT: %.loc14_20.2: %i32 = converted %int_1, %.loc14_20.1 [concrete = constants.%int_1.0c6] -// CHECK:STDOUT: %bar.call: init %i32 = call imports.%bar.decl(%.loc14_20.2) -// CHECK:STDOUT: return %bar.call +// CHECK:STDOUT: %bound_method.loc14_29.2: = bound_method %int_1, %specific_fn [concrete = constants.%bound_method] +// CHECK:STDOUT: %Core.IntLiteral.as.As.impl.Convert.call: init %i32 = call %bound_method.loc14_29.2(%int_1) [concrete = constants.%int_1.0c6] +// CHECK:STDOUT: %.loc14_29.1: %i32 = value_of_initializer %Core.IntLiteral.as.As.impl.Convert.call [concrete = constants.%int_1.0c6] +// CHECK:STDOUT: %.loc14_29.2: %i32 = converted %int_1, %.loc14_29.1 [concrete = constants.%int_1.0c6] +// CHECK:STDOUT: %template_bar.call: init %i32 = call imports.%template_bar.decl(%.loc14_29.2) +// CHECK:STDOUT: return %template_bar.call // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/function/import/inline.carbon b/toolchain/check/testdata/interop/cpp/function/import/inline.carbon index 36e5a98705fa..f156275e9b4d 100644 --- a/toolchain/check/testdata/interop/cpp/function/import/inline.carbon +++ b/toolchain/check/testdata/interop/cpp/function/import/inline.carbon @@ -16,7 +16,7 @@ // --- with_definition.h -inline void foo() {} +inline void inline_with_def() {} // --- import_with_definition.carbon @@ -26,7 +26,7 @@ import Cpp library "with_definition.h"; fn MyF() { //@dump-sem-ir-begin - Cpp.foo(); + Cpp.inline_with_def(); //@dump-sem-ir-end } @@ -37,10 +37,10 @@ fn MyF() { // --- without_definition.h // TODO: Promote this warning to an error by default. -// CHECK:STDERR: ./without_definition.h:[[@LINE+3]]:13: warning: inline function 'foo' is not defined [CppInteropParseWarning] -// CHECK:STDERR: 6 | inline void foo(); +// CHECK:STDERR: ./without_definition.h:[[@LINE+3]]:13: warning: inline function 'inline_without_def' is not defined [CppInteropParseWarning] +// CHECK:STDERR: 6 | inline void inline_without_def(); // CHECK:STDERR: | ^ -inline void foo(); +inline void inline_without_def(); // --- todo_fail_import_without_definition.carbon @@ -50,14 +50,14 @@ import Cpp library "without_definition.h"; fn MyF() { //@dump-sem-ir-begin - // CHECK:STDERR: todo_fail_import_without_definition.carbon:[[@LINE+4]]:11: note: used here [CppInteropParseNote] - // CHECK:STDERR: 12 | Cpp.foo(); - // CHECK:STDERR: | ^ + // CHECK:STDERR: todo_fail_import_without_definition.carbon:[[@LINE+4]]:26: note: used here [CppInteropParseNote] + // CHECK:STDERR: 12 | Cpp.inline_without_def(); + // CHECK:STDERR: | ^ // CHECK:STDERR: - Cpp.foo(); + Cpp.inline_without_def(); // Don't error on repeated calls. - Cpp.foo(); + Cpp.inline_without_def(); //@dump-sem-ir-end } @@ -89,26 +89,26 @@ fn MyF() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %inline_with_def.cpp_overload_set.type: type = cpp_overload_set_type @inline_with_def.cpp_overload_set [concrete] +// CHECK:STDOUT: %inline_with_def.cpp_overload_set.value: %inline_with_def.cpp_overload_set.type = cpp_overload_set_value @inline_with_def.cpp_overload_set [concrete] +// CHECK:STDOUT: %inline_with_def.type: type = fn_type @inline_with_def [concrete] +// CHECK:STDOUT: %inline_with_def: %inline_with_def.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .inline_with_def = %inline_with_def.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] {} {} +// CHECK:STDOUT: %inline_with_def.cpp_overload_set.value: %inline_with_def.cpp_overload_set.type = cpp_overload_set_value @inline_with_def.cpp_overload_set [concrete = constants.%inline_with_def.cpp_overload_set.value] +// CHECK:STDOUT: %inline_with_def.decl: %inline_with_def.type = fn_decl @inline_with_def [concrete = constants.%inline_with_def] {} {} // 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.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl() +// CHECK:STDOUT: %inline_with_def.ref: %inline_with_def.cpp_overload_set.type = name_ref inline_with_def, imports.%inline_with_def.cpp_overload_set.value [concrete = constants.%inline_with_def.cpp_overload_set.value] +// CHECK:STDOUT: %inline_with_def.call: init %empty_tuple.type = call imports.%inline_with_def.decl() // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -116,29 +116,29 @@ fn MyF() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %inline_without_def.cpp_overload_set.type: type = cpp_overload_set_type @inline_without_def.cpp_overload_set [concrete] +// CHECK:STDOUT: %inline_without_def.cpp_overload_set.value: %inline_without_def.cpp_overload_set.type = cpp_overload_set_value @inline_without_def.cpp_overload_set [concrete] +// CHECK:STDOUT: %inline_without_def.type: type = fn_type @inline_without_def [concrete] +// CHECK:STDOUT: %inline_without_def: %inline_without_def.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .inline_without_def = %inline_without_def.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] {} {} +// CHECK:STDOUT: %inline_without_def.cpp_overload_set.value: %inline_without_def.cpp_overload_set.type = cpp_overload_set_value @inline_without_def.cpp_overload_set [concrete = constants.%inline_without_def.cpp_overload_set.value] +// CHECK:STDOUT: %inline_without_def.decl: %inline_without_def.type = fn_decl @inline_without_def [concrete = constants.%inline_without_def] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc12: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref.loc12: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.call.loc12: init %empty_tuple.type = call imports.%foo.decl() +// CHECK:STDOUT: %inline_without_def.ref.loc12: %inline_without_def.cpp_overload_set.type = name_ref inline_without_def, imports.%inline_without_def.cpp_overload_set.value [concrete = constants.%inline_without_def.cpp_overload_set.value] +// CHECK:STDOUT: %inline_without_def.call.loc12: init %empty_tuple.type = call imports.%inline_without_def.decl() // CHECK:STDOUT: %Cpp.ref.loc15: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref.loc15: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.call.loc15: init %empty_tuple.type = call imports.%foo.decl() +// CHECK:STDOUT: %inline_without_def.ref.loc15: %inline_without_def.cpp_overload_set.type = name_ref inline_without_def, imports.%inline_without_def.cpp_overload_set.value [concrete = constants.%inline_without_def.cpp_overload_set.value] +// CHECK:STDOUT: %inline_without_def.call.loc15: init %empty_tuple.type = call imports.%inline_without_def.decl() // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/function/import/overloads.carbon b/toolchain/check/testdata/interop/cpp/function/import/overloads.carbon index e9fe196b7e62..b8c503d54df9 100644 --- a/toolchain/check/testdata/interop/cpp/function/import/overloads.carbon +++ b/toolchain/check/testdata/interop/cpp/function/import/overloads.carbon @@ -16,8 +16,8 @@ // --- multiple_functions_no_overloads.h -auto foo(short a) -> void; -auto bar(short a) -> void; +auto no_overloads_foo(short a) -> void; +auto no_overloads_bar(short a) -> void; // --- import_multiple_functions_no_overloads.carbon @@ -26,13 +26,13 @@ library "[[@TEST_NAME]]"; import Cpp library "multiple_functions_no_overloads.h"; fn F() { - Cpp.bar(1 as i16); + Cpp.no_overloads_bar(1 as i16); } // --- overloaded_functions.h -auto foo(short a) -> void; -auto foo(int a) -> void; +auto overloaded_foo(short a) -> void; +auto overloaded_foo(int a) -> void; // --- import_overloaded_functions.carbon @@ -41,13 +41,13 @@ library "[[@TEST_NAME]]"; import Cpp library "overloaded_functions.h"; fn F() { - Cpp.foo(1 as i32); + Cpp.overloaded_foo(1 as i32); } // --- both_overloaded_functions_called.h -auto foo(short a) -> void; -auto foo(int a) -> void; +auto both_called_foo(short a) -> void; +auto both_called_foo(int a) -> void; // --- import_both_overloaded_functions_called.carbon @@ -56,17 +56,17 @@ library "[[@TEST_NAME]]"; import Cpp library "both_overloaded_functions_called.h"; fn F() { - Cpp.foo(1 as i32); - Cpp.foo(1 as i16); + Cpp.both_called_foo(1 as i32); + Cpp.both_called_foo(1 as i16); } // --- multiple_overloaded_sets.h -auto foo(short a) -> void; -auto foo(int a) -> void; +auto multi_set_foo(short a) -> void; +auto multi_set_foo(int a) -> void; -auto bar(long a) -> void; -auto bar(int a) -> void; +auto multi_set_bar(long a) -> void; +auto multi_set_bar(int a) -> void; // --- import_multiple_overloaded_sets.carbon @@ -75,8 +75,8 @@ library "[[@TEST_NAME]]"; import Cpp library "multiple_overloaded_sets.h"; fn F() { - Cpp.foo(1 as i32); - Cpp.bar(1 as i32); + Cpp.multi_set_foo(1 as i32); + Cpp.multi_set_bar(1 as i32); } // ============================================================================ @@ -85,17 +85,17 @@ fn F() { // --- int_literal.h -auto foo(int a) -> int; -auto foo(unsigned int a) -> unsigned int; +auto int_literal_foo(int a) -> int; +auto int_literal_foo(unsigned int a) -> unsigned int; -auto foo(long a) -> long; -auto foo(unsigned long a) -> unsigned long; +auto int_literal_foo(long a) -> long; +auto int_literal_foo(unsigned long a) -> unsigned long; -auto foo(long long a) -> long long; -auto foo(unsigned long long a) -> unsigned long long; +auto int_literal_foo(long long a) -> long long; +auto int_literal_foo(unsigned long long a) -> unsigned long long; -auto foo(__int128 a) -> __int128; -auto foo(unsigned __int128 a) -> unsigned __int128; +auto int_literal_foo(__int128 a) -> __int128; +auto int_literal_foo(unsigned __int128 a) -> unsigned __int128; // --- import_int_literal.carbon @@ -105,30 +105,30 @@ import Cpp library "int_literal.h"; fn F() { // i32_max - let unused a: i32 = Cpp.foo(2147483647); + let unused a: i32 = Cpp.int_literal_foo(2147483647); // i32_max + 1 // It could fit to unsigned int, but only signed integers are considered, so assigned to long. // Decimal, hexadecimal and binary integer literals are treated the same when assigning a C++ type. - let unused b: i64 = Cpp.foo(2147483648); - let unused b_hexa: i64 = Cpp.foo(0x8000_0000); - let unused b_binary: i64 = Cpp.foo(0b1000_0000_0000_0000_0000_0000_0000_0000); + let unused b: i64 = Cpp.int_literal_foo(2147483648); + let unused b_hexa: i64 = Cpp.int_literal_foo(0x8000_0000); + let unused b_binary: i64 = Cpp.int_literal_foo(0b1000_0000_0000_0000_0000_0000_0000_0000); // i64_max - let unused c: i64 = Cpp.foo(9223372036854775807); + let unused c: i64 = Cpp.int_literal_foo(9223372036854775807); // i64_max + 1 // Could fit to unsigned long, but only signed integers are considered, so fitted to _int128. - let unused d: i128 = Cpp.foo(9223372036854775808); + let unused d: i128 = Cpp.int_literal_foo(9223372036854775808); // u64_max - let unused e: i128 = Cpp.foo(18446744073709551615); + let unused e: i128 = Cpp.int_literal_foo(18446744073709551615); // u64_max + 1 - let unused f: i128 = Cpp.foo(18446744073709551616); + let unused f: i128 = Cpp.int_literal_foo(18446744073709551616); // i128_max - let unused g: i128 = Cpp.foo(170141183460469231731687303715884105727); + let unused g: i128 = Cpp.int_literal_foo(170141183460469231731687303715884105727); } // --- fail_import_large_int_literal.carbon @@ -140,21 +140,21 @@ import Cpp library "int_literal.h"; fn F() { // TODO: get rid of the second error message here. // i128_max + 1 - // CHECK:STDERR: fail_import_large_int_literal.carbon:[[@LINE+8]]:32: error: integer value 170141183460469231731687303715884105728 too large to fit in a signed C++ integer type; requires 129 bits, but max is 128 [IntTooLargeForCppType] - // CHECK:STDERR: let unused h: i128 = Cpp.foo(170141183460469231731687303715884105728); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_import_large_int_literal.carbon:[[@LINE+8]]:44: error: integer value 170141183460469231731687303715884105728 too large to fit in a signed C++ integer type; requires 129 bits, but max is 128 [IntTooLargeForCppType] + // CHECK:STDERR: let unused h: i128 = Cpp.int_literal_foo(170141183460469231731687303715884105728); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - // CHECK:STDERR: fail_import_large_int_literal.carbon:[[@LINE+4]]:32: error: call argument of type `Core.IntLiteral` is not supported [CppCallArgTypeNotSupported] - // CHECK:STDERR: let unused h: i128 = Cpp.foo(170141183460469231731687303715884105728); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_import_large_int_literal.carbon:[[@LINE+4]]:44: error: call argument of type `Core.IntLiteral` is not supported [CppCallArgTypeNotSupported] + // CHECK:STDERR: let unused h: i128 = Cpp.int_literal_foo(170141183460469231731687303715884105728); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - let unused h: i128 = Cpp.foo(170141183460469231731687303715884105728); + let unused h: i128 = Cpp.int_literal_foo(170141183460469231731687303715884105728); } // --- negative_int_literal.h -auto foo(long a) -> void; -auto foo(int a) -> void; +auto neg_literal_foo(long a) -> void; +auto neg_literal_foo(int a) -> void; // --- import_negative_int_literal.carbon @@ -163,13 +163,13 @@ library "[[@TEST_NAME]]"; import Cpp library "negative_int_literal.h"; fn F() { - // selects `auto foo(int a) -> void;` - Cpp.foo(-1); + // selects `auto neg_literal_foo(int a) -> void;` + Cpp.neg_literal_foo(-1); } // --- negative_literal_passed_to_unsigned.h -auto foo(unsigned int a) -> void; +auto neg_to_unsigned_foo(unsigned int a) -> void; // --- fail_import_negative_literal_passed_to_unsigned.carbon @@ -178,21 +178,21 @@ library "[[@TEST_NAME]]"; import Cpp library "negative_literal_passed_to_unsigned.h"; fn F() { - // CHECK:STDERR: fail_import_negative_literal_passed_to_unsigned.carbon:[[@LINE+8]]:11: error: negative integer value -1 converted to unsigned type `u32` [NegativeIntInUnsignedType] - // CHECK:STDERR: Cpp.foo(-1); - // CHECK:STDERR: ^~ + // CHECK:STDERR: fail_import_negative_literal_passed_to_unsigned.carbon:[[@LINE+8]]:27: error: negative integer value -1 converted to unsigned type `u32` [NegativeIntInUnsignedType] + // CHECK:STDERR: Cpp.neg_to_unsigned_foo(-1); + // CHECK:STDERR: ^~ // CHECK:STDERR: fail_import_negative_literal_passed_to_unsigned.carbon:[[@LINE-6]]:10: in file included here [InCppInclude] - // CHECK:STDERR: ./negative_literal_passed_to_unsigned.h:2:23: note: initializing function parameter [InCallToFunctionParam] - // CHECK:STDERR: auto foo(unsigned int a) -> void; - // CHECK:STDERR: ^ + // CHECK:STDERR: ./negative_literal_passed_to_unsigned.h:2:39: note: initializing function parameter [InCallToFunctionParam] + // CHECK:STDERR: auto neg_to_unsigned_foo(unsigned int a) -> void; + // CHECK:STDERR: ^ // CHECK:STDERR: - Cpp.foo(-1); + Cpp.neg_to_unsigned_foo(-1); } // --- floating_point_literal.h -auto foo(float a) -> float; -auto foo(double a) -> double; +auto float_literal_foo(float a) -> float; +auto float_literal_foo(double a) -> double; // --- import_floating_point_literal.carbon @@ -201,7 +201,7 @@ library "[[@TEST_NAME]]"; import Cpp library "floating_point_literal.h"; fn F() { - let unused d: f64 = Cpp.foo(1.0); + let unused d: f64 = Cpp.float_literal_foo(1.0); } // --- fail_import_large_floating_point_literal.carbon @@ -211,15 +211,15 @@ library "[[@TEST_NAME]]"; import Cpp library "floating_point_literal.h"; fn F() { - // CHECK:STDERR: fail_import_large_floating_point_literal.carbon:[[@LINE+8]]:11: error: value 18*10^307 too large for floating-point type `f64` [FloatLiteralTooLargeForType] - // CHECK:STDERR: Cpp.foo(1.8e+308); - // CHECK:STDERR: ^~~~~~~~ + // CHECK:STDERR: fail_import_large_floating_point_literal.carbon:[[@LINE+8]]:25: error: value 18*10^307 too large for floating-point type `f64` [FloatLiteralTooLargeForType] + // CHECK:STDERR: Cpp.float_literal_foo(1.8e+308); + // CHECK:STDERR: ^~~~~~~~ // CHECK:STDERR: fail_import_large_floating_point_literal.carbon:[[@LINE-6]]:10: in file included here [InCppInclude] - // CHECK:STDERR: ./floating_point_literal.h:3:17: note: initializing function parameter [InCallToFunctionParam] - // CHECK:STDERR: auto foo(double a) -> double; - // CHECK:STDERR: ^ + // CHECK:STDERR: ./floating_point_literal.h:3:31: note: initializing function parameter [InCallToFunctionParam] + // CHECK:STDERR: auto float_literal_foo(double a) -> double; + // CHECK:STDERR: ^ // CHECK:STDERR: - Cpp.foo(1.8e+308); + Cpp.float_literal_foo(1.8e+308); } // --- struct_init.h @@ -630,7 +630,7 @@ fn F() { // --- upsizing.h -auto foo(int a) -> void; +auto upsizing_foo(int a) -> void; // --- upsizing.carbon @@ -639,12 +639,12 @@ library "[[@TEST_NAME]]"; import Cpp library "upsizing.h"; fn F() { - Cpp.foo(1 as i16); + Cpp.upsizing_foo(1 as i16); } // --- signedness_change.h -auto foo(unsigned int a) -> void; +auto signedness_foo(unsigned int a) -> void; // --- fail_signedness_change_rejected.carbon @@ -653,23 +653,23 @@ library "[[@TEST_NAME]]"; import Cpp library "signedness_change.h"; fn F() { - // CHECK:STDERR: fail_signedness_change_rejected.carbon:[[@LINE+11]]:11: error: cannot implicitly convert expression of type `i32` to `u32` [ConversionFailure] - // CHECK:STDERR: Cpp.foo(1 as i32); - // CHECK:STDERR: ^~~~~~~~ - // CHECK:STDERR: fail_signedness_change_rejected.carbon:[[@LINE+8]]:11: note: type `i32` does not implement interface `Core.ImplicitAs(u32)` [MissingImplInMemberAccessInContext] - // CHECK:STDERR: Cpp.foo(1 as i32); - // CHECK:STDERR: ^~~~~~~~ + // CHECK:STDERR: fail_signedness_change_rejected.carbon:[[@LINE+11]]:22: error: cannot implicitly convert expression of type `i32` to `u32` [ConversionFailure] + // CHECK:STDERR: Cpp.signedness_foo(1 as i32); + // CHECK:STDERR: ^~~~~~~~ + // CHECK:STDERR: fail_signedness_change_rejected.carbon:[[@LINE+8]]:22: note: type `i32` does not implement interface `Core.ImplicitAs(u32)` [MissingImplInMemberAccessInContext] + // CHECK:STDERR: Cpp.signedness_foo(1 as i32); + // CHECK:STDERR: ^~~~~~~~ // CHECK:STDERR: fail_signedness_change_rejected.carbon:[[@LINE-9]]:10: in file included here [InCppInclude] - // CHECK:STDERR: ./signedness_change.h:2:23: note: initializing function parameter [InCallToFunctionParam] - // CHECK:STDERR: auto foo(unsigned int a) -> void; - // CHECK:STDERR: ^ + // CHECK:STDERR: ./signedness_change.h:2:34: note: initializing function parameter [InCallToFunctionParam] + // CHECK:STDERR: auto signedness_foo(unsigned int a) -> void; + // CHECK:STDERR: ^ // CHECK:STDERR: - Cpp.foo(1 as i32); + Cpp.signedness_foo(1 as i32); } // --- downsizing_rejected.h -auto foo(short a) -> void; +auto downsizing_foo(short a) -> void; // --- fail_import_downsizing_rejected.carbon @@ -678,18 +678,18 @@ library "[[@TEST_NAME]]"; import Cpp library "downsizing_rejected.h"; fn F() { - // CHECK:STDERR: fail_import_downsizing_rejected.carbon:[[@LINE+11]]:11: error: cannot implicitly convert expression of type `i32` to `i16` [ConversionFailure] - // CHECK:STDERR: Cpp.foo(1 as i32); - // CHECK:STDERR: ^~~~~~~~ - // CHECK:STDERR: fail_import_downsizing_rejected.carbon:[[@LINE+8]]:11: note: type `i32` does not implement interface `Core.ImplicitAs(i16)` [MissingImplInMemberAccessInContext] - // CHECK:STDERR: Cpp.foo(1 as i32); - // CHECK:STDERR: ^~~~~~~~ + // CHECK:STDERR: fail_import_downsizing_rejected.carbon:[[@LINE+11]]:22: error: cannot implicitly convert expression of type `i32` to `i16` [ConversionFailure] + // CHECK:STDERR: Cpp.downsizing_foo(1 as i32); + // CHECK:STDERR: ^~~~~~~~ + // CHECK:STDERR: fail_import_downsizing_rejected.carbon:[[@LINE+8]]:22: note: type `i32` does not implement interface `Core.ImplicitAs(i16)` [MissingImplInMemberAccessInContext] + // CHECK:STDERR: Cpp.downsizing_foo(1 as i32); + // CHECK:STDERR: ^~~~~~~~ // CHECK:STDERR: fail_import_downsizing_rejected.carbon:[[@LINE-9]]:10: in file included here [InCppInclude] - // CHECK:STDERR: ./downsizing_rejected.h:2:16: note: initializing function parameter [InCallToFunctionParam] - // CHECK:STDERR: auto foo(short a) -> void; - // CHECK:STDERR: ^ + // CHECK:STDERR: ./downsizing_rejected.h:2:27: note: initializing function parameter [InCallToFunctionParam] + // CHECK:STDERR: auto downsizing_foo(short a) -> void; + // CHECK:STDERR: ^ // CHECK:STDERR: - Cpp.foo(1 as i32); + Cpp.downsizing_foo(1 as i32); } // ============================================================================ @@ -698,7 +698,7 @@ fn F() { // --- no_viable_function.h -auto foo(short a, int b) -> void; +auto no_viable_foo(short a, int b) -> void; // --- fail_import_no_viable_function.carbon @@ -707,15 +707,15 @@ library "[[@TEST_NAME]]"; import Cpp library "no_viable_function.h"; fn F() { - // CHECK:STDERR: fail_import_no_viable_function.carbon:[[@LINE+8]]:19: error: no matching function for call to 'foo' [CppInteropParseError] - // CHECK:STDERR: 15 | Cpp.foo(1 as i64); - // CHECK:STDERR: | ^ + // CHECK:STDERR: fail_import_no_viable_function.carbon:[[@LINE+8]]:29: error: no matching function for call to 'no_viable_foo' [CppInteropParseError] + // CHECK:STDERR: 15 | Cpp.no_viable_foo(1 as i64); + // CHECK:STDERR: | ^ // CHECK:STDERR: fail_import_no_viable_function.carbon:[[@LINE-6]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./no_viable_function.h:2:6: note: candidate function not viable: requires 2 arguments, but 1 was provided [CppInteropParseNote] - // CHECK:STDERR: 2 | auto foo(short a, int b) -> void; - // CHECK:STDERR: | ^ ~~~~~~~~~~~~~~ + // CHECK:STDERR: 2 | auto no_viable_foo(short a, int b) -> void; + // CHECK:STDERR: | ^ ~~~~~~~~~~~~~~ // CHECK:STDERR: - Cpp.foo(1 as i64); + Cpp.no_viable_foo(1 as i64); } // ============================================================================ @@ -724,8 +724,8 @@ fn F() { // --- ambiguous_overload.h -auto foo(short a) -> void; -auto foo(int a) -> void; +auto ambiguous_foo(short a) -> void; +auto ambiguous_foo(int a) -> void; // --- fail_import_ambiguous_overload.carbon @@ -734,19 +734,19 @@ library "[[@TEST_NAME]]"; import Cpp library "ambiguous_overload.h"; fn F() { - // CHECK:STDERR: fail_import_ambiguous_overload.carbon:[[@LINE+12]]:19: error: call to 'foo' is ambiguous [CppInteropParseError] - // CHECK:STDERR: 19 | Cpp.foo(1 as i64); - // CHECK:STDERR: | ^ + // CHECK:STDERR: fail_import_ambiguous_overload.carbon:[[@LINE+12]]:29: error: call to 'ambiguous_foo' is ambiguous [CppInteropParseError] + // CHECK:STDERR: 19 | Cpp.ambiguous_foo(1 as i64); + // CHECK:STDERR: | ^ // CHECK:STDERR: fail_import_ambiguous_overload.carbon:[[@LINE-6]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./ambiguous_overload.h:2:6: note: candidate function [CppInteropParseNote] - // CHECK:STDERR: 2 | auto foo(short a) -> void; + // CHECK:STDERR: 2 | auto ambiguous_foo(short a) -> void; // CHECK:STDERR: | ^ // CHECK:STDERR: fail_import_ambiguous_overload.carbon:[[@LINE-10]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./ambiguous_overload.h:3:6: note: candidate function [CppInteropParseNote] - // CHECK:STDERR: 3 | auto foo(int a) -> void; + // CHECK:STDERR: 3 | auto ambiguous_foo(int a) -> void; // CHECK:STDERR: | ^ // CHECK:STDERR: - Cpp.foo(1 as i64); + Cpp.ambiguous_foo(1 as i64); } // ============================================================================ @@ -755,8 +755,8 @@ fn F() { // --- deleted_function.h -auto foo(short a) -> void; -auto foo(int a) -> void = delete; +auto deleted_foo(short a) -> void; +auto deleted_foo(int a) -> void = delete; // --- fail_import_deleted_function.carbon @@ -765,27 +765,27 @@ library "[[@TEST_NAME]]"; import Cpp library "deleted_function.h"; fn F() { - // CHECK:STDERR: fail_import_deleted_function.carbon:[[@LINE+12]]:19: error: call to deleted function 'foo' [CppInteropParseError] - // CHECK:STDERR: 19 | Cpp.foo(1 as i32); - // CHECK:STDERR: | ^ + // CHECK:STDERR: fail_import_deleted_function.carbon:[[@LINE+12]]:27: error: call to deleted function 'deleted_foo' [CppInteropParseError] + // CHECK:STDERR: 19 | Cpp.deleted_foo(1 as i32); + // CHECK:STDERR: | ^ // CHECK:STDERR: fail_import_deleted_function.carbon:[[@LINE-6]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./deleted_function.h:3:6: note: candidate function has been explicitly deleted [CppInteropParseNote] - // CHECK:STDERR: 3 | auto foo(int a) -> void = delete; + // CHECK:STDERR: 3 | auto deleted_foo(int a) -> void = delete; // CHECK:STDERR: | ^ // CHECK:STDERR: fail_import_deleted_function.carbon:[[@LINE-10]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./deleted_function.h:2:6: note: candidate function [CppInteropParseNote] - // CHECK:STDERR: 2 | auto foo(short a) -> void; + // CHECK:STDERR: 2 | auto deleted_foo(short a) -> void; // CHECK:STDERR: | ^ // CHECK:STDERR: - Cpp.foo(1 as i32); + Cpp.deleted_foo(1 as i32); } // --- fail_missing_impl.carbon library "[[@TEST_NAME]]"; import Cpp inline ''' - void foo(); - void foo(int); + void missing_impl_foo(); + void missing_impl_foo(int); '''; interface I {} @@ -793,12 +793,12 @@ interface I {} fn EchoValue[ValueT: I](unused generic value: ValueT) {} fn F() { - // CHECK:STDERR: fail_missing_impl.carbon:[[@LINE+7]]:3: error: cannot convert type `` into type implementing `I` [ConversionFailureTypeToFacet] - // CHECK:STDERR: EchoValue(Cpp.foo); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_missing_impl.carbon:[[@LINE+7]]:3: error: cannot convert type `` into type implementing `I` [ConversionFailureTypeToFacet] + // CHECK:STDERR: EchoValue(Cpp.missing_impl_foo); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_missing_impl.carbon:[[@LINE-6]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere] // CHECK:STDERR: fn EchoValue[ValueT: I](unused generic value: ValueT) {} // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - EchoValue(Cpp.foo); + EchoValue(Cpp.missing_impl_foo); } diff --git a/toolchain/check/testdata/interop/cpp/function/import/pointer.carbon b/toolchain/check/testdata/interop/cpp/function/import/pointer.carbon index c4be3b266eed..03e71c5a2192 100644 --- a/toolchain/check/testdata/interop/cpp/function/import/pointer.carbon +++ b/toolchain/check/testdata/interop/cpp/function/import/pointer.carbon @@ -16,9 +16,9 @@ // --- non_nullable_pointer_param.h -struct S {}; +struct NonNullableParamS {}; -auto foo(S* _Nonnull) -> void; +auto non_nullable_param_foo(NonNullableParamS* _Nonnull) -> void; // --- import_non_nullable_pointer_param.carbon @@ -28,8 +28,8 @@ import Cpp library "non_nullable_pointer_param.h"; fn F() { //@dump-sem-ir-begin - var s: Cpp.S = {}; - Cpp.foo(&s); + var s: Cpp.NonNullableParamS = {}; + Cpp.non_nullable_param_foo(&s); //@dump-sem-ir-end } @@ -39,19 +39,19 @@ library "[[@TEST_NAME]]"; import Cpp library "non_nullable_pointer_param.h"; -fn G() -> const Cpp.S; +fn G() -> const Cpp.NonNullableParamS; fn F() { - var s: const Cpp.S = G(); - // CHECK:STDERR: fail_import_non_nullable_pointer_param_using_const_value.carbon:[[@LINE+8]]:13: error: no matching function for call to 'foo' [CppInteropParseError] - // CHECK:STDERR: 18 | Cpp.foo(&s); - // CHECK:STDERR: | ^ + var s: const Cpp.NonNullableParamS = G(); + // CHECK:STDERR: fail_import_non_nullable_pointer_param_using_const_value.carbon:[[@LINE+8]]:32: error: no matching function for call to 'non_nullable_param_foo' [CppInteropParseError] + // CHECK:STDERR: 18 | Cpp.non_nullable_param_foo(&s); + // CHECK:STDERR: | ^ // CHECK:STDERR: fail_import_non_nullable_pointer_param_using_const_value.carbon:[[@LINE-9]]:10: in file included here [InCppInclude] - // CHECK:STDERR: ./non_nullable_pointer_param.h:4:6: note: candidate function not viable: 1st argument ('const S * _Nonnull') would lose const qualifier [CppInteropParseNote] - // CHECK:STDERR: 4 | auto foo(S* _Nonnull) -> void; - // CHECK:STDERR: | ^ ~~~~~~~~~~~ + // CHECK:STDERR: ./non_nullable_pointer_param.h:4:6: note: candidate function not viable: 1st argument ('const NonNullableParamS * _Nonnull') would lose const qualifier [CppInteropParseNote] + // CHECK:STDERR: 4 | auto non_nullable_param_foo(NonNullableParamS* _Nonnull) -> void; + // CHECK:STDERR: | ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - Cpp.foo(&s); + Cpp.non_nullable_param_foo(&s); } // --- import_non_nullable_pointer_param_using_const_pointer.carbon @@ -60,12 +60,12 @@ library "[[@TEST_NAME]]"; import Cpp library "non_nullable_pointer_param.h"; -fn G() -> const (Cpp.S*); +fn G() -> const (Cpp.NonNullableParamS*); fn F() { //@dump-sem-ir-begin - var p: const (Cpp.S*) = G(); - Cpp.foo(p); + var p: const (Cpp.NonNullableParamS*) = G(); + Cpp.non_nullable_param_foo(p); //@dump-sem-ir-end } @@ -75,9 +75,9 @@ fn F() { // --- double_non_nullable_pointer_param.h -struct S {}; +struct DoubleNonNullableParamS {}; -auto foo(S* _Nonnull * _Nonnull) -> void; +auto double_non_nullable_param_foo(DoubleNonNullableParamS* _Nonnull * _Nonnull) -> void; // --- import_double_non_nullable_pointer_param.carbon @@ -87,9 +87,9 @@ import Cpp library "double_non_nullable_pointer_param.h"; fn F() { //@dump-sem-ir-begin - var s: Cpp.S = {}; - var p: Cpp.S* = &s; - Cpp.foo(&p); + var s: Cpp.DoubleNonNullableParamS = {}; + var p: Cpp.DoubleNonNullableParamS* = &s; + Cpp.double_non_nullable_param_foo(&p); //@dump-sem-ir-end } @@ -99,9 +99,9 @@ fn F() { // --- non_nullable_pointer_to_const_param.h -struct S {}; +struct NonNullablePointerToConstParamS {}; -auto foo(const S* _Nonnull) -> void; +auto non_nullable_to_const_foo(const NonNullablePointerToConstParamS* _Nonnull) -> void; // --- import_non_nullable_pointer_to_const_param_using_const.carbon @@ -109,12 +109,12 @@ library "[[@TEST_NAME]]"; import Cpp library "non_nullable_pointer_to_const_param.h"; -fn G() -> const Cpp.S; +fn G() -> const Cpp.NonNullablePointerToConstParamS; fn F() { //@dump-sem-ir-begin - var s: const Cpp.S = G(); - Cpp.foo(&s); + var s: const Cpp.NonNullablePointerToConstParamS = G(); + Cpp.non_nullable_to_const_foo(&s); //@dump-sem-ir-end } @@ -122,12 +122,12 @@ fn F() { import Cpp library "non_nullable_pointer_to_const_param.h"; -fn G() -> Cpp.S; +fn G() -> Cpp.NonNullablePointerToConstParamS; fn F() { //@dump-sem-ir-begin - var s: Cpp.S = G(); - Cpp.foo(&s); + var s: Cpp.NonNullablePointerToConstParamS = G(); + Cpp.non_nullable_to_const_foo(&s); //@dump-sem-ir-end } @@ -137,9 +137,9 @@ fn F() { // --- const_non_nullable_pointer_param.h -struct S {}; +struct ConstNonNullableParamS {}; -auto foo(S* _Nonnull const) -> void; +auto const_non_nullable_foo(ConstNonNullableParamS* _Nonnull const) -> void; // --- import_const_non_nullable_pointer_param_using_const.carbon @@ -147,12 +147,12 @@ library "[[@TEST_NAME]]"; import Cpp library "const_non_nullable_pointer_param.h"; -fn G() -> const (Cpp.S*); +fn G() -> const (Cpp.ConstNonNullableParamS*); fn F() { //@dump-sem-ir-begin - var p: const (Cpp.S*) = G(); - Cpp.foo(p); + var p: const (Cpp.ConstNonNullableParamS*) = G(); + Cpp.const_non_nullable_foo(p); //@dump-sem-ir-end } @@ -162,12 +162,12 @@ library "[[@TEST_NAME]]"; import Cpp library "const_non_nullable_pointer_param.h"; -fn G() -> Cpp.S*; +fn G() -> Cpp.ConstNonNullableParamS*; fn F() { //@dump-sem-ir-begin - var p: Cpp.S* = G(); - Cpp.foo(p); + var p: Cpp.ConstNonNullableParamS* = G(); + Cpp.const_non_nullable_foo(p); //@dump-sem-ir-end } @@ -177,9 +177,9 @@ fn F() { // --- const_nullable_pointer_param.h -struct S {}; +struct ConstNullableParamS {}; -auto foo(S* const) -> void; +auto const_nullable_foo(ConstNullableParamS* const) -> void; // --- import_const_nullable_pointer_param_using_const.carbon @@ -187,12 +187,12 @@ library "[[@TEST_NAME]]"; import Cpp library "const_nullable_pointer_param.h"; -fn G() -> const (Cpp.S*); +fn G() -> const (Cpp.ConstNullableParamS*); fn F() { //@dump-sem-ir-begin - var p: const (Cpp.S*) = G(); - Cpp.foo(p); + var p: const (Cpp.ConstNullableParamS*) = G(); + Cpp.const_nullable_foo(p); //@dump-sem-ir-end } @@ -202,12 +202,12 @@ library "[[@TEST_NAME]]"; import Cpp library "const_nullable_pointer_param.h"; -fn G() -> Cpp.S*; +fn G() -> Cpp.ConstNullableParamS*; fn F() { //@dump-sem-ir-begin - var p: Cpp.S* = G(); - Cpp.foo(p); + var p: Cpp.ConstNullableParamS* = G(); + Cpp.const_nullable_foo(p); //@dump-sem-ir-end } @@ -217,9 +217,9 @@ fn F() { // --- non_nullable_pointer_return.h -struct S {}; +struct NonNullableReturnS {}; -auto foo() -> S* _Nonnull; +auto non_nullable_return_foo() -> NonNullableReturnS* _Nonnull; // --- import_non_nullable_pointer_return.carbon @@ -227,12 +227,12 @@ library "[[@TEST_NAME]]"; import Cpp library "non_nullable_pointer_return.h"; -fn IngestDoublePointer(s: Cpp.S*); +fn IngestDoublePointer(s: Cpp.NonNullableReturnS*); fn F() { //@dump-sem-ir-begin - IngestDoublePointer(Cpp.foo()); - Cpp.foo(); + IngestDoublePointer(Cpp.non_nullable_return_foo()); + Cpp.non_nullable_return_foo(); //@dump-sem-ir-end } @@ -242,9 +242,9 @@ fn F() { // --- double_non_nullable_pointer_return.h -struct S {}; +struct DoubleNonNullableReturnS {}; -auto foo() -> S* _Nonnull * _Nonnull; +auto double_non_nullable_return_foo() -> DoubleNonNullableReturnS* _Nonnull * _Nonnull; // --- import_double_pointer_return.carbon @@ -252,12 +252,12 @@ library "[[@TEST_NAME]]"; import Cpp library "double_non_nullable_pointer_return.h"; -fn IngestDoublePointer(s: Cpp.S**); +fn IngestDoublePointer(s: Cpp.DoubleNonNullableReturnS**); fn F() { //@dump-sem-ir-begin - IngestDoublePointer(Cpp.foo()); - Cpp.foo(); + IngestDoublePointer(Cpp.double_non_nullable_return_foo()); + Cpp.double_non_nullable_return_foo(); //@dump-sem-ir-end } @@ -267,9 +267,9 @@ fn F() { // --- const_non_nullable_pointer_return.h -struct S {}; +struct ConstNonNullableReturnS {}; -auto foo() -> const S* _Nonnull; +auto const_non_nullable_return_foo() -> const ConstNonNullableReturnS* _Nonnull; // --- import_const_non_nullable_pointer_return.carbon @@ -277,12 +277,12 @@ library "[[@TEST_NAME]]"; import Cpp library "const_non_nullable_pointer_return.h"; -fn IngestConstPointer(s: const Cpp.S*); +fn IngestConstPointer(s: const Cpp.ConstNonNullableReturnS*); fn F() { //@dump-sem-ir-begin - IngestConstPointer(Cpp.foo()); - Cpp.foo(); + IngestConstPointer(Cpp.const_non_nullable_return_foo()); + Cpp.const_non_nullable_return_foo(); //@dump-sem-ir-end } @@ -292,11 +292,11 @@ fn F() { // --- nullable_pointer_param.h -struct S {}; +struct NullableParamS {}; -auto foo(S*) -> void; +auto nullable_param_foo(NullableParamS*) -> void; -auto get() -> S*; +auto nullable_param_get() -> NullableParamS*; // --- non_nullable_pointer_arg_to_pointer_param.carbon @@ -306,8 +306,8 @@ import Cpp library "nullable_pointer_param.h"; fn F() { //@dump-sem-ir-begin - var s: Cpp.S = {}; - Cpp.foo(&s); + var s: Cpp.NullableParamS = {}; + Cpp.nullable_param_foo(&s); //@dump-sem-ir-end } @@ -319,7 +319,7 @@ import Cpp library "nullable_pointer_param.h"; fn F() { //@dump-sem-ir-begin - Cpp.foo(Core.Optional(Cpp.S*).None()); + Cpp.nullable_param_foo(Core.Optional(Cpp.NullableParamS*).None()); //@dump-sem-ir-end } @@ -331,8 +331,8 @@ import Cpp library "nullable_pointer_param.h"; fn F() { //@dump-sem-ir-begin - var s: Cpp.S = {}; - Cpp.foo(Core.Optional(Cpp.S*).Some(&s)); + var s: Cpp.NullableParamS = {}; + Cpp.nullable_param_foo(Core.Optional(Cpp.NullableParamS*).Some(&s)); //@dump-sem-ir-end } @@ -344,7 +344,7 @@ import Cpp library "nullable_pointer_param.h"; fn F() { //@dump-sem-ir-begin - Cpp.foo(Cpp.get()); + Cpp.nullable_param_foo(Cpp.nullable_param_get()); //@dump-sem-ir-end } @@ -354,10 +354,10 @@ fn F() { // --- deduced_any_param.h -struct S {}; +struct DeducedAnyS {}; template -auto foo(T) -> T; +auto deduced_any_foo(T) -> T; // --- import_deduced_any_param_as_pointer.carbon @@ -367,18 +367,18 @@ import Cpp library "deduced_any_param.h"; fn F() { //@dump-sem-ir-begin - var s: Cpp.S = {}; + var s: Cpp.DeducedAnyS = {}; // We assume that this cannot return a null pointer, because the function is // generic in the type `T`. // TODO: This isn't guaranteed; is this the behavior we want? - let unused p: Cpp.S* = Cpp.foo(&s); + let unused p: Cpp.DeducedAnyS* = Cpp.deduced_any_foo(&s); //@dump-sem-ir-end } // --- deduced_pointer_param.h -struct S {}; +struct DeducedPointerS {}; template auto Direct(T*) -> T*; @@ -399,13 +399,13 @@ library "[[@TEST_NAME]]"; import Cpp library "deduced_pointer_param.h"; fn F() { - // These pass or return an Optional(S*) instead of an S*. + // These pass or return an Optional(DeducedPointerS*), not a DeducedPointerS*. //@dump-sem-ir-begin - var s: Cpp.S = {}; + var s: Cpp.DeducedPointerS = {}; Cpp.Direct(&s); - let unused a: Core.Optional(Cpp.S*) = Cpp.Indirect({} as Cpp.S); + let unused a: Core.Optional(Cpp.DeducedPointerS*) = Cpp.Indirect({} as Cpp.DeducedPointerS); //@dump-sem-ir-end } @@ -416,46 +416,46 @@ library "[[@TEST_NAME]]"; import Cpp library "deduced_pointer_param.h"; fn F() { - // This could return a null pointer, so should not be given the type `Cpp.S*`. - // CHECK:STDERR: fail_import_deduced_pointer_param_as_optional_pointer.carbon:[[@LINE+7]]:26: error: cannot implicitly convert expression of type `Core.Optional(Cpp.S* as Core.OptionalStorage)` to `Cpp.S*` [ConversionFailure] - // CHECK:STDERR: let unused a: Cpp.S* = Cpp.Indirect({} as Cpp.S); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~ - // CHECK:STDERR: fail_import_deduced_pointer_param_as_optional_pointer.carbon:[[@LINE+4]]:26: note: type `Core.Optional(Cpp.S* as Core.OptionalStorage)` does not implement interface `Core.ImplicitAs(Cpp.S*)` [MissingImplInMemberAccessInContext] - // CHECK:STDERR: let unused a: Cpp.S* = Cpp.Indirect({} as Cpp.S); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~ + // This could return a null pointer, so should not be given the type `Cpp.DeducedPointerS*`. + // CHECK:STDERR: fail_import_deduced_pointer_param_as_optional_pointer.carbon:[[@LINE+7]]:40: error: cannot implicitly convert expression of type `Core.Optional(Cpp.DeducedPointerS* as Core.OptionalStorage)` to `Cpp.DeducedPointerS*` [ConversionFailure] + // CHECK:STDERR: let unused a: Cpp.DeducedPointerS* = Cpp.Indirect({} as Cpp.DeducedPointerS); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_import_deduced_pointer_param_as_optional_pointer.carbon:[[@LINE+4]]:40: note: type `Core.Optional(Cpp.DeducedPointerS* as Core.OptionalStorage)` does not implement interface `Core.ImplicitAs(Cpp.DeducedPointerS*)` [MissingImplInMemberAccessInContext] + // CHECK:STDERR: let unused a: Cpp.DeducedPointerS* = Cpp.Indirect({} as Cpp.DeducedPointerS); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - let unused a: Cpp.S* = Cpp.Indirect({} as Cpp.S); + let unused a: Cpp.DeducedPointerS* = Cpp.Indirect({} as Cpp.DeducedPointerS); } // CHECK:STDOUT: --- import_non_nullable_pointer_param.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %S: type = class_type @S [concrete] +// CHECK:STDOUT: %NonNullableParamS: type = class_type @NonNullableParamS [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %pattern_type.0f5: type = pattern_type %S [concrete] -// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] -// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] +// CHECK:STDOUT: %pattern_type.3b5: type = pattern_type %NonNullableParamS [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.3b5 = ref_binding_pattern s [concrete] +// CHECK:STDOUT: %s.var_patt: %pattern_type.3b5 = var_pattern %s.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] -// CHECK:STDOUT: %S.val: %S = struct_value () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.037: type = ptr_type %S [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] -// CHECK:STDOUT: %S.cpp_destructor.type: type = fn_type @S.cpp_destructor [concrete] -// CHECK:STDOUT: %S.cpp_destructor: %S.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %NonNullableParamS.val: %NonNullableParamS = struct_value () [concrete] +// CHECK:STDOUT: %non_nullable_param_foo.cpp_overload_set.type: type = cpp_overload_set_type @non_nullable_param_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %non_nullable_param_foo.cpp_overload_set.value: %non_nullable_param_foo.cpp_overload_set.type = cpp_overload_set_value @non_nullable_param_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.1dc: type = ptr_type %NonNullableParamS [concrete] +// CHECK:STDOUT: %non_nullable_param_foo.type: type = fn_type @non_nullable_param_foo [concrete] +// CHECK:STDOUT: %non_nullable_param_foo: %non_nullable_param_foo.type = struct_value () [concrete] +// CHECK:STDOUT: %NonNullableParamS.cpp_destructor.type: type = fn_type @NonNullableParamS.cpp_destructor [concrete] +// CHECK:STDOUT: %NonNullableParamS.cpp_destructor: %NonNullableParamS.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .S = %S.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .NonNullableParamS = %NonNullableParamS.decl +// CHECK:STDOUT: .non_nullable_param_foo = %non_nullable_param_foo.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %NonNullableParamS.decl: type = class_decl @NonNullableParamS [concrete = constants.%NonNullableParamS] {} {} +// CHECK:STDOUT: %non_nullable_param_foo.cpp_overload_set.value: %non_nullable_param_foo.cpp_overload_set.type = cpp_overload_set_value @non_nullable_param_foo.cpp_overload_set [concrete = constants.%non_nullable_param_foo.cpp_overload_set.value] +// CHECK:STDOUT: %non_nullable_param_foo.decl: %non_nullable_param_foo.type = fn_decl @non_nullable_param_foo [concrete = constants.%non_nullable_param_foo] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -464,59 +464,59 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %s.var: ref %S = var_storage %s.var_patt -// CHECK:STDOUT: %.loc8_19.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] -// CHECK:STDOUT: %.loc8_19.2: init %S to %s.var = class_init () [concrete = constants.%S.val] -// CHECK:STDOUT: %.loc8_3: init %S = converted %.loc8_19.1, %.loc8_19.2 [concrete = constants.%S.val] +// CHECK:STDOUT: %s.var: ref %NonNullableParamS = var_storage %s.var_patt +// CHECK:STDOUT: %.loc8_35.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc8_35.2: init %NonNullableParamS to %s.var = class_init () [concrete = constants.%NonNullableParamS.val] +// CHECK:STDOUT: %.loc8_3: init %NonNullableParamS = converted %.loc8_35.1, %.loc8_35.2 [concrete = constants.%NonNullableParamS.val] // CHECK:STDOUT: assign %s.var, %.loc8_3 -// CHECK:STDOUT: %.loc8_13: type = splice_block %S.ref [concrete = constants.%S] { +// CHECK:STDOUT: %.loc8_13: type = splice_block %NonNullableParamS.ref [concrete = constants.%NonNullableParamS] { // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %S.ref: type = name_ref S, imports.%S.decl [concrete = constants.%S] +// CHECK:STDOUT: %NonNullableParamS.ref: type = name_ref NonNullableParamS, imports.%NonNullableParamS.decl [concrete = constants.%NonNullableParamS] // CHECK:STDOUT: } -// CHECK:STDOUT: %s: ref %S = wrapper_binding s, %s.var +// CHECK:STDOUT: %s: ref %NonNullableParamS = wrapper_binding s, %s.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete = constants.%s.patt] -// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete = constants.%s.var_patt] +// CHECK:STDOUT: %s.patt: %pattern_type.3b5 = ref_binding_pattern s [concrete = constants.%s.patt] +// CHECK:STDOUT: %s.var_patt: %pattern_type.3b5 = var_pattern %s.patt [concrete = constants.%s.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %s.ref: ref %S = name_ref s, %s -// CHECK:STDOUT: %addr: %ptr.037 = addr_of %s.ref -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl(%addr) -// CHECK:STDOUT: %S.cpp_destructor.bound: = bound_method %s.var, constants.%S.cpp_destructor -// CHECK:STDOUT: %S.cpp_destructor.call: init %empty_tuple.type = call %S.cpp_destructor.bound(%s.var) +// CHECK:STDOUT: %non_nullable_param_foo.ref: %non_nullable_param_foo.cpp_overload_set.type = name_ref non_nullable_param_foo, imports.%non_nullable_param_foo.cpp_overload_set.value [concrete = constants.%non_nullable_param_foo.cpp_overload_set.value] +// CHECK:STDOUT: %s.ref: ref %NonNullableParamS = name_ref s, %s +// CHECK:STDOUT: %addr: %ptr.1dc = addr_of %s.ref +// CHECK:STDOUT: %non_nullable_param_foo.call: init %empty_tuple.type = call imports.%non_nullable_param_foo.decl(%addr) +// CHECK:STDOUT: %NonNullableParamS.cpp_destructor.bound: = bound_method %s.var, constants.%NonNullableParamS.cpp_destructor +// CHECK:STDOUT: %NonNullableParamS.cpp_destructor.call: init %empty_tuple.type = call %NonNullableParamS.cpp_destructor.bound(%s.var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_non_nullable_pointer_param_using_const_pointer.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %S: type = class_type @S [concrete] -// CHECK:STDOUT: %ptr: type = ptr_type %S [concrete] +// CHECK:STDOUT: %NonNullableParamS: type = class_type @NonNullableParamS [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %NonNullableParamS [concrete] // CHECK:STDOUT: %const: type = const_type %ptr [concrete] -// CHECK:STDOUT: %pattern_type.282: type = pattern_type %const [concrete] +// CHECK:STDOUT: %pattern_type.937: type = pattern_type %const [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.282 = ref_binding_pattern p [concrete] -// CHECK:STDOUT: %p.var_patt: %pattern_type.282 = var_pattern %p.patt [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.937 = ref_binding_pattern p [concrete] +// CHECK:STDOUT: %p.var_patt: %pattern_type.937 = var_pattern %p.patt [concrete] +// CHECK:STDOUT: %non_nullable_param_foo.cpp_overload_set.type: type = cpp_overload_set_type @non_nullable_param_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %non_nullable_param_foo.cpp_overload_set.value: %non_nullable_param_foo.cpp_overload_set.type = cpp_overload_set_value @non_nullable_param_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %non_nullable_param_foo.type: type = fn_type @non_nullable_param_foo [concrete] +// CHECK:STDOUT: %non_nullable_param_foo: %non_nullable_param_foo.type = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc10_3.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .S = %S.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .NonNullableParamS = %NonNullableParamS.decl +// CHECK:STDOUT: .non_nullable_param_foo = %non_nullable_param_foo.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %NonNullableParamS.decl: type = class_decl @NonNullableParamS [concrete = constants.%NonNullableParamS] {} {} +// CHECK:STDOUT: %non_nullable_param_foo.cpp_overload_set.value: %non_nullable_param_foo.cpp_overload_set.type = cpp_overload_set_value @non_nullable_param_foo.cpp_overload_set [concrete = constants.%non_nullable_param_foo.cpp_overload_set.value] +// CHECK:STDOUT: %non_nullable_param_foo.decl: %non_nullable_param_foo.type = fn_decl @non_nullable_param_foo [concrete = constants.%non_nullable_param_foo] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -531,22 +531,22 @@ fn F() { // CHECK:STDOUT: assign %p.var, %G.call // CHECK:STDOUT: %.loc10: type = splice_block %const [concrete = constants.%const] { // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %S.ref: type = name_ref S, imports.%S.decl [concrete = constants.%S] -// CHECK:STDOUT: %ptr: type = ptr_type %S.ref [concrete = constants.%ptr] +// CHECK:STDOUT: %NonNullableParamS.ref: type = name_ref NonNullableParamS, imports.%NonNullableParamS.decl [concrete = constants.%NonNullableParamS] +// CHECK:STDOUT: %ptr: type = ptr_type %NonNullableParamS.ref [concrete = constants.%ptr] // CHECK:STDOUT: %const: type = const_type %ptr [concrete = constants.%const] // CHECK:STDOUT: } // CHECK:STDOUT: %p: ref %const = wrapper_binding p, %p.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type.282 = ref_binding_pattern p [concrete = constants.%p.patt] -// CHECK:STDOUT: %p.var_patt: %pattern_type.282 = var_pattern %p.patt [concrete = constants.%p.var_patt] +// CHECK:STDOUT: %p.patt: %pattern_type.937 = ref_binding_pattern p [concrete = constants.%p.patt] +// CHECK:STDOUT: %p.var_patt: %pattern_type.937 = var_pattern %p.patt [concrete = constants.%p.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] +// CHECK:STDOUT: %non_nullable_param_foo.ref: %non_nullable_param_foo.cpp_overload_set.type = name_ref non_nullable_param_foo, imports.%non_nullable_param_foo.cpp_overload_set.value [concrete = constants.%non_nullable_param_foo.cpp_overload_set.value] // CHECK:STDOUT: %p.ref: ref %const = name_ref p, %p -// CHECK:STDOUT: %.loc11_11.1: ref %ptr = as_compatible %p.ref -// CHECK:STDOUT: %.loc11_11.2: ref %ptr = converted %p.ref, %.loc11_11.1 -// CHECK:STDOUT: %.loc11_11.3: %ptr = acquire_value %.loc11_11.2 -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl(%.loc11_11.3) +// CHECK:STDOUT: %.loc11_30.1: ref %ptr = as_compatible %p.ref +// CHECK:STDOUT: %.loc11_30.2: ref %ptr = converted %p.ref, %.loc11_30.1 +// CHECK:STDOUT: %.loc11_30.3: %ptr = acquire_value %.loc11_30.2 +// CHECK:STDOUT: %non_nullable_param_foo.call: init %empty_tuple.type = call imports.%non_nullable_param_foo.decl(%.loc11_30.3) // CHECK:STDOUT: %Destroy.Op.bound: = bound_method %p.var, constants.%Destroy.Op.1a2547.2 // CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%p.var) // CHECK:STDOUT: @@ -563,50 +563,50 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %S: type = class_type @S [concrete] +// CHECK:STDOUT: %DoubleNonNullableParamS: type = class_type @DoubleNonNullableParamS [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %pattern_type.0f5: type = pattern_type %S [concrete] -// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] -// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] +// CHECK:STDOUT: %pattern_type.cb1: type = pattern_type %DoubleNonNullableParamS [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.cb1 = ref_binding_pattern s [concrete] +// CHECK:STDOUT: %s.var_patt: %pattern_type.cb1 = var_pattern %s.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] -// CHECK:STDOUT: %S.val: %S = struct_value () [concrete] -// CHECK:STDOUT: %ptr.037: type = ptr_type %S [concrete] -// CHECK:STDOUT: %pattern_type.de6: type = pattern_type %ptr.037 [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.de6 = ref_binding_pattern p [concrete] -// CHECK:STDOUT: %p.var_patt: %pattern_type.de6 = var_pattern %p.patt [concrete] +// CHECK:STDOUT: %DoubleNonNullableParamS.val: %DoubleNonNullableParamS = struct_value () [concrete] +// CHECK:STDOUT: %ptr.40d: type = ptr_type %DoubleNonNullableParamS [concrete] +// CHECK:STDOUT: %pattern_type.4da: type = pattern_type %ptr.40d [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.4da = ref_binding_pattern p [concrete] +// CHECK:STDOUT: %p.var_patt: %pattern_type.4da = var_pattern %p.patt [concrete] // CHECK:STDOUT: %Copy.type: type = facet_type <@Copy> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.ff5: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%T.67d) [symbolic] // CHECK:STDOUT: %ptr.as.Copy.impl.Op.ce9: %ptr.as.Copy.impl.Op.type.ff5 = struct_value () [symbolic] -// CHECK:STDOUT: %Copy.impl_witness.7d5: = impl_witness imports.%Copy.impl_witness_table.fb0, @ptr.as.Copy.impl(%S) [concrete] -// CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.048: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%S) [concrete] -// CHECK:STDOUT: %ptr.as.Copy.impl.Op.def: %ptr.as.Copy.impl.Op.type.048 = struct_value () [concrete] -// CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value %ptr.037, (%Copy.impl_witness.7d5) [concrete] -// CHECK:STDOUT: %Copy.WithSelf.Op.type.346: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet) [concrete] -// CHECK:STDOUT: %.c39: type = fn_type_with_self_type %Copy.WithSelf.Op.type.346, %Copy.facet [concrete] -// CHECK:STDOUT: %ptr.as.Copy.impl.Op.specific_fn: = specific_function %ptr.as.Copy.impl.Op.def, @ptr.as.Copy.impl.Op(%S) [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.65c: type = ptr_type %ptr.037 [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %Copy.impl_witness.59f: = impl_witness imports.%Copy.impl_witness_table.fb0, @ptr.as.Copy.impl(%DoubleNonNullableParamS) [concrete] +// CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.390: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%DoubleNonNullableParamS) [concrete] +// CHECK:STDOUT: %ptr.as.Copy.impl.Op.a1c: %ptr.as.Copy.impl.Op.type.390 = struct_value () [concrete] +// CHECK:STDOUT: %Copy.facet: %Copy.type = facet_value %ptr.40d, (%Copy.impl_witness.59f) [concrete] +// CHECK:STDOUT: %Copy.WithSelf.Op.type.744: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet) [concrete] +// CHECK:STDOUT: %.3f1: type = fn_type_with_self_type %Copy.WithSelf.Op.type.744, %Copy.facet [concrete] +// CHECK:STDOUT: %ptr.as.Copy.impl.Op.specific_fn: = specific_function %ptr.as.Copy.impl.Op.a1c, @ptr.as.Copy.impl.Op(%DoubleNonNullableParamS) [concrete] +// CHECK:STDOUT: %double_non_nullable_param_foo.cpp_overload_set.type: type = cpp_overload_set_type @double_non_nullable_param_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %double_non_nullable_param_foo.cpp_overload_set.value: %double_non_nullable_param_foo.cpp_overload_set.type = cpp_overload_set_value @double_non_nullable_param_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.2a5: type = ptr_type %ptr.40d [concrete] +// CHECK:STDOUT: %double_non_nullable_param_foo.type: type = fn_type @double_non_nullable_param_foo [concrete] +// CHECK:STDOUT: %double_non_nullable_param_foo: %double_non_nullable_param_foo.type = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] -// CHECK:STDOUT: %S.cpp_destructor.type: type = fn_type @S.cpp_destructor [concrete] -// CHECK:STDOUT: %S.cpp_destructor: %S.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %DoubleNonNullableParamS.cpp_destructor.type: type = fn_type @DoubleNonNullableParamS.cpp_destructor [concrete] +// CHECK:STDOUT: %DoubleNonNullableParamS.cpp_destructor: %DoubleNonNullableParamS.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .S = %S.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .DoubleNonNullableParamS = %DoubleNonNullableParamS.decl +// CHECK:STDOUT: .double_non_nullable_param_foo = %double_non_nullable_param_foo.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} +// CHECK:STDOUT: %DoubleNonNullableParamS.decl: type = class_decl @DoubleNonNullableParamS [concrete = constants.%DoubleNonNullableParamS] {} {} // CHECK:STDOUT: %Core.import_ref.e5f: @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op.type (%ptr.as.Copy.impl.Op.type.ff5) = import_ref Core//prelude/copy, loc{{\d+_\d+}}, loaded [symbolic = @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op (constants.%ptr.as.Copy.impl.Op.ce9)] // CHECK:STDOUT: %Copy.impl_witness_table.fb0 = impl_witness_table (%Core.import_ref.e5f), @ptr.as.Copy.impl [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %double_non_nullable_param_foo.cpp_overload_set.value: %double_non_nullable_param_foo.cpp_overload_set.type = cpp_overload_set_value @double_non_nullable_param_foo.cpp_overload_set [concrete = constants.%double_non_nullable_param_foo.cpp_overload_set.value] +// CHECK:STDOUT: %double_non_nullable_param_foo.decl: %double_non_nullable_param_foo.type = fn_decl @double_non_nullable_param_foo [concrete = constants.%double_non_nullable_param_foo] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -615,82 +615,82 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %s.var: ref %S = var_storage %s.var_patt -// CHECK:STDOUT: %.loc8_19.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] -// CHECK:STDOUT: %.loc8_19.2: init %S to %s.var = class_init () [concrete = constants.%S.val] -// CHECK:STDOUT: %.loc8_3: init %S = converted %.loc8_19.1, %.loc8_19.2 [concrete = constants.%S.val] +// CHECK:STDOUT: %s.var: ref %DoubleNonNullableParamS = var_storage %s.var_patt +// CHECK:STDOUT: %.loc8_41.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc8_41.2: init %DoubleNonNullableParamS to %s.var = class_init () [concrete = constants.%DoubleNonNullableParamS.val] +// CHECK:STDOUT: %.loc8_3: init %DoubleNonNullableParamS = converted %.loc8_41.1, %.loc8_41.2 [concrete = constants.%DoubleNonNullableParamS.val] // CHECK:STDOUT: assign %s.var, %.loc8_3 -// CHECK:STDOUT: %.loc8_13: type = splice_block %S.ref.loc8 [concrete = constants.%S] { +// CHECK:STDOUT: %.loc8_13: type = splice_block %DoubleNonNullableParamS.ref.loc8 [concrete = constants.%DoubleNonNullableParamS] { // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %S.ref.loc8: type = name_ref S, imports.%S.decl [concrete = constants.%S] +// CHECK:STDOUT: %DoubleNonNullableParamS.ref.loc8: type = name_ref DoubleNonNullableParamS, imports.%DoubleNonNullableParamS.decl [concrete = constants.%DoubleNonNullableParamS] // CHECK:STDOUT: } -// CHECK:STDOUT: %s: ref %S = wrapper_binding s, %s.var +// CHECK:STDOUT: %s: ref %DoubleNonNullableParamS = wrapper_binding s, %s.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete = constants.%s.patt] -// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete = constants.%s.var_patt] +// CHECK:STDOUT: %s.patt: %pattern_type.cb1 = ref_binding_pattern s [concrete = constants.%s.patt] +// CHECK:STDOUT: %s.var_patt: %pattern_type.cb1 = var_pattern %s.patt [concrete = constants.%s.var_patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %p.var: ref %ptr.037 = var_storage %p.var_patt -// CHECK:STDOUT: %s.ref: ref %S = name_ref s, %s -// CHECK:STDOUT: %addr.loc9: %ptr.037 = addr_of %s.ref -// CHECK:STDOUT: %impl.elem0: %.c39 = impl_witness_access constants.%Copy.impl_witness.7d5, element0 [concrete = constants.%ptr.as.Copy.impl.Op.def] -// CHECK:STDOUT: %bound_method.loc9_19.1: = bound_method %addr.loc9, %impl.elem0 -// CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @ptr.as.Copy.impl.Op(constants.%S) [concrete = constants.%ptr.as.Copy.impl.Op.specific_fn] -// CHECK:STDOUT: %bound_method.loc9_19.2: = bound_method %addr.loc9, %specific_fn -// CHECK:STDOUT: %ptr.as.Copy.impl.Op.call: init %ptr.037 = call %bound_method.loc9_19.2(%addr.loc9) +// CHECK:STDOUT: %p.var: ref %ptr.40d = var_storage %p.var_patt +// CHECK:STDOUT: %s.ref: ref %DoubleNonNullableParamS = name_ref s, %s +// CHECK:STDOUT: %addr.loc9: %ptr.40d = addr_of %s.ref +// CHECK:STDOUT: %impl.elem0: %.3f1 = impl_witness_access constants.%Copy.impl_witness.59f, element0 [concrete = constants.%ptr.as.Copy.impl.Op.a1c] +// CHECK:STDOUT: %bound_method.loc9_41.1: = bound_method %addr.loc9, %impl.elem0 +// CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @ptr.as.Copy.impl.Op(constants.%DoubleNonNullableParamS) [concrete = constants.%ptr.as.Copy.impl.Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc9_41.2: = bound_method %addr.loc9, %specific_fn +// CHECK:STDOUT: %ptr.as.Copy.impl.Op.call: init %ptr.40d = call %bound_method.loc9_41.2(%addr.loc9) // CHECK:STDOUT: assign %p.var, %ptr.as.Copy.impl.Op.call -// CHECK:STDOUT: %.loc9: type = splice_block %ptr [concrete = constants.%ptr.037] { +// CHECK:STDOUT: %.loc9: type = splice_block %ptr [concrete = constants.%ptr.40d] { // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %S.ref.loc9: type = name_ref S, imports.%S.decl [concrete = constants.%S] -// CHECK:STDOUT: %ptr: type = ptr_type %S.ref.loc9 [concrete = constants.%ptr.037] +// CHECK:STDOUT: %DoubleNonNullableParamS.ref.loc9: type = name_ref DoubleNonNullableParamS, imports.%DoubleNonNullableParamS.decl [concrete = constants.%DoubleNonNullableParamS] +// CHECK:STDOUT: %ptr: type = ptr_type %DoubleNonNullableParamS.ref.loc9 [concrete = constants.%ptr.40d] // CHECK:STDOUT: } -// CHECK:STDOUT: %p: ref %ptr.037 = wrapper_binding p, %p.var +// CHECK:STDOUT: %p: ref %ptr.40d = wrapper_binding p, %p.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type.de6 = ref_binding_pattern p [concrete = constants.%p.patt] -// CHECK:STDOUT: %p.var_patt: %pattern_type.de6 = var_pattern %p.patt [concrete = constants.%p.var_patt] +// CHECK:STDOUT: %p.patt: %pattern_type.4da = ref_binding_pattern p [concrete = constants.%p.patt] +// CHECK:STDOUT: %p.var_patt: %pattern_type.4da = var_pattern %p.patt [concrete = constants.%p.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %p.ref: ref %ptr.037 = name_ref p, %p -// CHECK:STDOUT: %addr.loc10: %ptr.65c = addr_of %p.ref -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl(%addr.loc10) +// CHECK:STDOUT: %double_non_nullable_param_foo.ref: %double_non_nullable_param_foo.cpp_overload_set.type = name_ref double_non_nullable_param_foo, imports.%double_non_nullable_param_foo.cpp_overload_set.value [concrete = constants.%double_non_nullable_param_foo.cpp_overload_set.value] +// CHECK:STDOUT: %p.ref: ref %ptr.40d = name_ref p, %p +// CHECK:STDOUT: %addr.loc10: %ptr.2a5 = addr_of %p.ref +// CHECK:STDOUT: %double_non_nullable_param_foo.call: init %empty_tuple.type = call imports.%double_non_nullable_param_foo.decl(%addr.loc10) // CHECK:STDOUT: %Destroy.Op.bound: = bound_method %p.var, constants.%Destroy.Op // CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%p.var) -// CHECK:STDOUT: %S.cpp_destructor.bound: = bound_method %s.var, constants.%S.cpp_destructor -// CHECK:STDOUT: %S.cpp_destructor.call: init %empty_tuple.type = call %S.cpp_destructor.bound(%s.var) +// CHECK:STDOUT: %DoubleNonNullableParamS.cpp_destructor.bound: = bound_method %s.var, constants.%DoubleNonNullableParamS.cpp_destructor +// CHECK:STDOUT: %DoubleNonNullableParamS.cpp_destructor.call: init %empty_tuple.type = call %DoubleNonNullableParamS.cpp_destructor.bound(%s.var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op(%self.param: ref %ptr.037) = "no_op"; +// CHECK:STDOUT: fn @Destroy.Op(%self.param: ref %ptr.40d) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: --- import_non_nullable_pointer_to_const_param_using_const.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %S: type = class_type @S [concrete] -// CHECK:STDOUT: %const: type = const_type %S [concrete] -// CHECK:STDOUT: %pattern_type.914: type = pattern_type %const [concrete] +// CHECK:STDOUT: %NonNullablePointerToConstParamS: type = class_type @NonNullablePointerToConstParamS [concrete] +// CHECK:STDOUT: %const: type = const_type %NonNullablePointerToConstParamS [concrete] +// CHECK:STDOUT: %pattern_type.291: type = pattern_type %const [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] -// CHECK:STDOUT: %s.patt: %pattern_type.914 = ref_binding_pattern s [concrete] -// CHECK:STDOUT: %s.var_patt: %pattern_type.914 = var_pattern %s.patt [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.711: type = ptr_type %const [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.291 = ref_binding_pattern s [concrete] +// CHECK:STDOUT: %s.var_patt: %pattern_type.291 = var_pattern %s.patt [concrete] +// CHECK:STDOUT: %non_nullable_to_const_foo.cpp_overload_set.type: type = cpp_overload_set_type @non_nullable_to_const_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %non_nullable_to_const_foo.cpp_overload_set.value: %non_nullable_to_const_foo.cpp_overload_set.type = cpp_overload_set_value @non_nullable_to_const_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.62c: type = ptr_type %const [concrete] +// CHECK:STDOUT: %non_nullable_to_const_foo.type: type = fn_type @non_nullable_to_const_foo [concrete] +// CHECK:STDOUT: %non_nullable_to_const_foo: %non_nullable_to_const_foo.type = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .S = %S.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .NonNullablePointerToConstParamS = %NonNullablePointerToConstParamS.decl +// CHECK:STDOUT: .non_nullable_to_const_foo = %non_nullable_to_const_foo.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %NonNullablePointerToConstParamS.decl: type = class_decl @NonNullablePointerToConstParamS [concrete = constants.%NonNullablePointerToConstParamS] {} {} +// CHECK:STDOUT: %non_nullable_to_const_foo.cpp_overload_set.value: %non_nullable_to_const_foo.cpp_overload_set.type = cpp_overload_set_value @non_nullable_to_const_foo.cpp_overload_set [concrete = constants.%non_nullable_to_const_foo.cpp_overload_set.value] +// CHECK:STDOUT: %non_nullable_to_const_foo.decl: %non_nullable_to_const_foo.type = fn_decl @non_nullable_to_const_foo [concrete = constants.%non_nullable_to_const_foo] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -706,19 +706,19 @@ fn F() { // CHECK:STDOUT: assign %s.var, %G.call // CHECK:STDOUT: %.loc10_10: type = splice_block %const [concrete = constants.%const] { // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %S.ref: type = name_ref S, imports.%S.decl [concrete = constants.%S] -// CHECK:STDOUT: %const: type = const_type %S.ref [concrete = constants.%const] +// CHECK:STDOUT: %NonNullablePointerToConstParamS.ref: type = name_ref NonNullablePointerToConstParamS, imports.%NonNullablePointerToConstParamS.decl [concrete = constants.%NonNullablePointerToConstParamS] +// CHECK:STDOUT: %const: type = const_type %NonNullablePointerToConstParamS.ref [concrete = constants.%const] // CHECK:STDOUT: } // CHECK:STDOUT: %s: ref %const = wrapper_binding s, %s.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.914 = ref_binding_pattern s [concrete = constants.%s.patt] -// CHECK:STDOUT: %s.var_patt: %pattern_type.914 = var_pattern %s.patt [concrete = constants.%s.var_patt] +// CHECK:STDOUT: %s.patt: %pattern_type.291 = ref_binding_pattern s [concrete = constants.%s.patt] +// CHECK:STDOUT: %s.var_patt: %pattern_type.291 = var_pattern %s.patt [concrete = constants.%s.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] +// CHECK:STDOUT: %non_nullable_to_const_foo.ref: %non_nullable_to_const_foo.cpp_overload_set.type = name_ref non_nullable_to_const_foo, imports.%non_nullable_to_const_foo.cpp_overload_set.value [concrete = constants.%non_nullable_to_const_foo.cpp_overload_set.value] // CHECK:STDOUT: %s.ref: ref %const = name_ref s, %s -// CHECK:STDOUT: %addr: %ptr.711 = addr_of %s.ref -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl(%addr) +// CHECK:STDOUT: %addr: %ptr.62c = addr_of %s.ref +// CHECK:STDOUT: %non_nullable_to_const_foo.call: init %empty_tuple.type = call imports.%non_nullable_to_const_foo.decl(%addr) // CHECK:STDOUT: %Destroy.Op.bound: = bound_method %s.var, constants.%Destroy.Op // CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%s.var) // CHECK:STDOUT: @@ -732,33 +732,33 @@ fn F() { // CHECK:STDOUT: --- import_non_nullable_pointer_to_const_param_using_non_const.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %S: type = class_type @S [concrete] -// CHECK:STDOUT: %pattern_type.0f5: type = pattern_type %S [concrete] +// CHECK:STDOUT: %NonNullablePointerToConstParamS: type = class_type @NonNullablePointerToConstParamS [concrete] +// CHECK:STDOUT: %pattern_type.2f7: type = pattern_type %NonNullablePointerToConstParamS [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] -// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] -// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.037: type = ptr_type %S [concrete] -// CHECK:STDOUT: %const: type = const_type %S [concrete] -// CHECK:STDOUT: %ptr.711: type = ptr_type %const [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] -// CHECK:STDOUT: %S.cpp_destructor.type: type = fn_type @S.cpp_destructor [concrete] -// CHECK:STDOUT: %S.cpp_destructor: %S.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.2f7 = ref_binding_pattern s [concrete] +// CHECK:STDOUT: %s.var_patt: %pattern_type.2f7 = var_pattern %s.patt [concrete] +// CHECK:STDOUT: %non_nullable_to_const_foo.cpp_overload_set.type: type = cpp_overload_set_type @non_nullable_to_const_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %non_nullable_to_const_foo.cpp_overload_set.value: %non_nullable_to_const_foo.cpp_overload_set.type = cpp_overload_set_value @non_nullable_to_const_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.faa: type = ptr_type %NonNullablePointerToConstParamS [concrete] +// CHECK:STDOUT: %const: type = const_type %NonNullablePointerToConstParamS [concrete] +// CHECK:STDOUT: %ptr.62c: type = ptr_type %const [concrete] +// CHECK:STDOUT: %non_nullable_to_const_foo.type: type = fn_type @non_nullable_to_const_foo [concrete] +// CHECK:STDOUT: %non_nullable_to_const_foo: %non_nullable_to_const_foo.type = struct_value () [concrete] +// CHECK:STDOUT: %NonNullablePointerToConstParamS.cpp_destructor.type: type = fn_type @NonNullablePointerToConstParamS.cpp_destructor [concrete] +// CHECK:STDOUT: %NonNullablePointerToConstParamS.cpp_destructor: %NonNullablePointerToConstParamS.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .S = %S.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .NonNullablePointerToConstParamS = %NonNullablePointerToConstParamS.decl +// CHECK:STDOUT: .non_nullable_to_const_foo = %non_nullable_to_const_foo.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %NonNullablePointerToConstParamS.decl: type = class_decl @NonNullablePointerToConstParamS [concrete = constants.%NonNullablePointerToConstParamS] {} {} +// CHECK:STDOUT: %non_nullable_to_const_foo.cpp_overload_set.value: %non_nullable_to_const_foo.cpp_overload_set.type = cpp_overload_set_value @non_nullable_to_const_foo.cpp_overload_set [concrete = constants.%non_nullable_to_const_foo.cpp_overload_set.value] +// CHECK:STDOUT: %non_nullable_to_const_foo.decl: %non_nullable_to_const_foo.type = fn_decl @non_nullable_to_const_foo [concrete = constants.%non_nullable_to_const_foo] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -767,61 +767,61 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %s.var: ref %S = var_storage %s.var_patt +// CHECK:STDOUT: %s.var: ref %NonNullablePointerToConstParamS = var_storage %s.var_patt // CHECK:STDOUT: %G.ref: %G.type = name_ref G, file.%G.decl [concrete = constants.%G] -// CHECK:STDOUT: %.loc8_3: ref %S = splice_block %s.var {} -// CHECK:STDOUT: %G.call: init %S to %.loc8_3 = call %G.ref() +// CHECK:STDOUT: %.loc8_3: ref %NonNullablePointerToConstParamS = splice_block %s.var {} +// CHECK:STDOUT: %G.call: init %NonNullablePointerToConstParamS to %.loc8_3 = call %G.ref() // CHECK:STDOUT: assign %s.var, %G.call -// CHECK:STDOUT: %.loc8_13: type = splice_block %S.ref [concrete = constants.%S] { +// CHECK:STDOUT: %.loc8_13: type = splice_block %NonNullablePointerToConstParamS.ref [concrete = constants.%NonNullablePointerToConstParamS] { // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %S.ref: type = name_ref S, imports.%S.decl [concrete = constants.%S] +// CHECK:STDOUT: %NonNullablePointerToConstParamS.ref: type = name_ref NonNullablePointerToConstParamS, imports.%NonNullablePointerToConstParamS.decl [concrete = constants.%NonNullablePointerToConstParamS] // CHECK:STDOUT: } -// CHECK:STDOUT: %s: ref %S = wrapper_binding s, %s.var +// CHECK:STDOUT: %s: ref %NonNullablePointerToConstParamS = wrapper_binding s, %s.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete = constants.%s.patt] -// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete = constants.%s.var_patt] +// CHECK:STDOUT: %s.patt: %pattern_type.2f7 = ref_binding_pattern s [concrete = constants.%s.patt] +// CHECK:STDOUT: %s.var_patt: %pattern_type.2f7 = var_pattern %s.patt [concrete = constants.%s.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %s.ref: ref %S = name_ref s, %s -// CHECK:STDOUT: %addr: %ptr.037 = addr_of %s.ref -// CHECK:STDOUT: %.loc9_11.1: %ptr.711 = as_compatible %addr -// CHECK:STDOUT: %.loc9_11.2: %ptr.711 = converted %addr, %.loc9_11.1 -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl(%.loc9_11.2) -// CHECK:STDOUT: %S.cpp_destructor.bound: = bound_method %s.var, constants.%S.cpp_destructor -// CHECK:STDOUT: %S.cpp_destructor.call: init %empty_tuple.type = call %S.cpp_destructor.bound(%s.var) +// CHECK:STDOUT: %non_nullable_to_const_foo.ref: %non_nullable_to_const_foo.cpp_overload_set.type = name_ref non_nullable_to_const_foo, imports.%non_nullable_to_const_foo.cpp_overload_set.value [concrete = constants.%non_nullable_to_const_foo.cpp_overload_set.value] +// CHECK:STDOUT: %s.ref: ref %NonNullablePointerToConstParamS = name_ref s, %s +// CHECK:STDOUT: %addr: %ptr.faa = addr_of %s.ref +// CHECK:STDOUT: %.loc9_33.1: %ptr.62c = as_compatible %addr +// CHECK:STDOUT: %.loc9_33.2: %ptr.62c = converted %addr, %.loc9_33.1 +// CHECK:STDOUT: %non_nullable_to_const_foo.call: init %empty_tuple.type = call imports.%non_nullable_to_const_foo.decl(%.loc9_33.2) +// CHECK:STDOUT: %NonNullablePointerToConstParamS.cpp_destructor.bound: = bound_method %s.var, constants.%NonNullablePointerToConstParamS.cpp_destructor +// CHECK:STDOUT: %NonNullablePointerToConstParamS.cpp_destructor.call: init %empty_tuple.type = call %NonNullablePointerToConstParamS.cpp_destructor.bound(%s.var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_const_non_nullable_pointer_param_using_const.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %S: type = class_type @S [concrete] -// CHECK:STDOUT: %ptr: type = ptr_type %S [concrete] +// CHECK:STDOUT: %ConstNonNullableParamS: type = class_type @ConstNonNullableParamS [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %ConstNonNullableParamS [concrete] // CHECK:STDOUT: %const: type = const_type %ptr [concrete] -// CHECK:STDOUT: %pattern_type.282: type = pattern_type %const [concrete] +// CHECK:STDOUT: %pattern_type.6b4: type = pattern_type %const [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.282 = ref_binding_pattern p [concrete] -// CHECK:STDOUT: %p.var_patt: %pattern_type.282 = var_pattern %p.patt [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.6b4 = ref_binding_pattern p [concrete] +// CHECK:STDOUT: %p.var_patt: %pattern_type.6b4 = var_pattern %p.patt [concrete] +// CHECK:STDOUT: %const_non_nullable_foo.cpp_overload_set.type: type = cpp_overload_set_type @const_non_nullable_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %const_non_nullable_foo.cpp_overload_set.value: %const_non_nullable_foo.cpp_overload_set.type = cpp_overload_set_value @const_non_nullable_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %const_non_nullable_foo.type: type = fn_type @const_non_nullable_foo [concrete] +// CHECK:STDOUT: %const_non_nullable_foo: %const_non_nullable_foo.type = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.2: type = fn_type @Destroy.Op.loc10_3.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.2: %Destroy.Op.type.1d8f74.2 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .S = %S.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .ConstNonNullableParamS = %ConstNonNullableParamS.decl +// CHECK:STDOUT: .const_non_nullable_foo = %const_non_nullable_foo.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %ConstNonNullableParamS.decl: type = class_decl @ConstNonNullableParamS [concrete = constants.%ConstNonNullableParamS] {} {} +// CHECK:STDOUT: %const_non_nullable_foo.cpp_overload_set.value: %const_non_nullable_foo.cpp_overload_set.type = cpp_overload_set_value @const_non_nullable_foo.cpp_overload_set [concrete = constants.%const_non_nullable_foo.cpp_overload_set.value] +// CHECK:STDOUT: %const_non_nullable_foo.decl: %const_non_nullable_foo.type = fn_decl @const_non_nullable_foo [concrete = constants.%const_non_nullable_foo] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -836,22 +836,22 @@ fn F() { // CHECK:STDOUT: assign %p.var, %G.call // CHECK:STDOUT: %.loc10: type = splice_block %const [concrete = constants.%const] { // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %S.ref: type = name_ref S, imports.%S.decl [concrete = constants.%S] -// CHECK:STDOUT: %ptr: type = ptr_type %S.ref [concrete = constants.%ptr] +// CHECK:STDOUT: %ConstNonNullableParamS.ref: type = name_ref ConstNonNullableParamS, imports.%ConstNonNullableParamS.decl [concrete = constants.%ConstNonNullableParamS] +// CHECK:STDOUT: %ptr: type = ptr_type %ConstNonNullableParamS.ref [concrete = constants.%ptr] // CHECK:STDOUT: %const: type = const_type %ptr [concrete = constants.%const] // CHECK:STDOUT: } // CHECK:STDOUT: %p: ref %const = wrapper_binding p, %p.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type.282 = ref_binding_pattern p [concrete = constants.%p.patt] -// CHECK:STDOUT: %p.var_patt: %pattern_type.282 = var_pattern %p.patt [concrete = constants.%p.var_patt] +// CHECK:STDOUT: %p.patt: %pattern_type.6b4 = ref_binding_pattern p [concrete = constants.%p.patt] +// CHECK:STDOUT: %p.var_patt: %pattern_type.6b4 = var_pattern %p.patt [concrete = constants.%p.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] +// CHECK:STDOUT: %const_non_nullable_foo.ref: %const_non_nullable_foo.cpp_overload_set.type = name_ref const_non_nullable_foo, imports.%const_non_nullable_foo.cpp_overload_set.value [concrete = constants.%const_non_nullable_foo.cpp_overload_set.value] // CHECK:STDOUT: %p.ref: ref %const = name_ref p, %p -// CHECK:STDOUT: %.loc11_11.1: ref %ptr = as_compatible %p.ref -// CHECK:STDOUT: %.loc11_11.2: ref %ptr = converted %p.ref, %.loc11_11.1 -// CHECK:STDOUT: %.loc11_11.3: %ptr = acquire_value %.loc11_11.2 -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl(%.loc11_11.3) +// CHECK:STDOUT: %.loc11_30.1: ref %ptr = as_compatible %p.ref +// CHECK:STDOUT: %.loc11_30.2: ref %ptr = converted %p.ref, %.loc11_30.1 +// CHECK:STDOUT: %.loc11_30.3: %ptr = acquire_value %.loc11_30.2 +// CHECK:STDOUT: %const_non_nullable_foo.call: init %empty_tuple.type = call imports.%const_non_nullable_foo.decl(%.loc11_30.3) // CHECK:STDOUT: %Destroy.Op.bound: = bound_method %p.var, constants.%Destroy.Op.1a2547.2 // CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%p.var) // CHECK:STDOUT: @@ -867,31 +867,31 @@ fn F() { // CHECK:STDOUT: --- import_const_non_nullable_pointer_param_using_non_const.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %S: type = class_type @S [concrete] -// CHECK:STDOUT: %ptr: type = ptr_type %S [concrete] -// CHECK:STDOUT: %pattern_type.de6: type = pattern_type %ptr [concrete] +// CHECK:STDOUT: %ConstNonNullableParamS: type = class_type @ConstNonNullableParamS [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %ConstNonNullableParamS [concrete] +// CHECK:STDOUT: %pattern_type.c28: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.de6 = ref_binding_pattern p [concrete] -// CHECK:STDOUT: %p.var_patt: %pattern_type.de6 = var_pattern %p.patt [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.c28 = ref_binding_pattern p [concrete] +// CHECK:STDOUT: %p.var_patt: %pattern_type.c28 = var_pattern %p.patt [concrete] +// CHECK:STDOUT: %const_non_nullable_foo.cpp_overload_set.type: type = cpp_overload_set_type @const_non_nullable_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %const_non_nullable_foo.cpp_overload_set.value: %const_non_nullable_foo.cpp_overload_set.type = cpp_overload_set_value @const_non_nullable_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %const_non_nullable_foo.type: type = fn_type @const_non_nullable_foo [concrete] +// CHECK:STDOUT: %const_non_nullable_foo: %const_non_nullable_foo.type = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .S = %S.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .ConstNonNullableParamS = %ConstNonNullableParamS.decl +// CHECK:STDOUT: .const_non_nullable_foo = %const_non_nullable_foo.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %ConstNonNullableParamS.decl: type = class_decl @ConstNonNullableParamS [concrete = constants.%ConstNonNullableParamS] {} {} +// CHECK:STDOUT: %const_non_nullable_foo.cpp_overload_set.value: %const_non_nullable_foo.cpp_overload_set.type = cpp_overload_set_value @const_non_nullable_foo.cpp_overload_set [concrete = constants.%const_non_nullable_foo.cpp_overload_set.value] +// CHECK:STDOUT: %const_non_nullable_foo.decl: %const_non_nullable_foo.type = fn_decl @const_non_nullable_foo [concrete = constants.%const_non_nullable_foo] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -906,19 +906,19 @@ fn F() { // CHECK:STDOUT: assign %p.var, %G.call // CHECK:STDOUT: %.loc10: type = splice_block %ptr [concrete = constants.%ptr] { // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %S.ref: type = name_ref S, imports.%S.decl [concrete = constants.%S] -// CHECK:STDOUT: %ptr: type = ptr_type %S.ref [concrete = constants.%ptr] +// CHECK:STDOUT: %ConstNonNullableParamS.ref: type = name_ref ConstNonNullableParamS, imports.%ConstNonNullableParamS.decl [concrete = constants.%ConstNonNullableParamS] +// CHECK:STDOUT: %ptr: type = ptr_type %ConstNonNullableParamS.ref [concrete = constants.%ptr] // CHECK:STDOUT: } // CHECK:STDOUT: %p: ref %ptr = wrapper_binding p, %p.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type.de6 = ref_binding_pattern p [concrete = constants.%p.patt] -// CHECK:STDOUT: %p.var_patt: %pattern_type.de6 = var_pattern %p.patt [concrete = constants.%p.var_patt] +// CHECK:STDOUT: %p.patt: %pattern_type.c28 = ref_binding_pattern p [concrete = constants.%p.patt] +// CHECK:STDOUT: %p.var_patt: %pattern_type.c28 = var_pattern %p.patt [concrete = constants.%p.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] +// CHECK:STDOUT: %const_non_nullable_foo.ref: %const_non_nullable_foo.cpp_overload_set.type = name_ref const_non_nullable_foo, imports.%const_non_nullable_foo.cpp_overload_set.value [concrete = constants.%const_non_nullable_foo.cpp_overload_set.value] // CHECK:STDOUT: %p.ref: ref %ptr = name_ref p, %p // CHECK:STDOUT: %.loc11: %ptr = acquire_value %p.ref -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl(%.loc11) +// CHECK:STDOUT: %const_non_nullable_foo.call: init %empty_tuple.type = call imports.%const_non_nullable_foo.decl(%.loc11) // CHECK:STDOUT: %Destroy.Op.bound: = bound_method %p.var, constants.%Destroy.Op // CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%p.var) // CHECK:STDOUT: @@ -929,17 +929,17 @@ fn F() { // CHECK:STDOUT: --- import_const_nullable_pointer_param_using_const.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %S: type = class_type @S [concrete] -// CHECK:STDOUT: %ptr.037: type = ptr_type %S [concrete] -// CHECK:STDOUT: %const.f96: type = const_type %ptr.037 [concrete] -// CHECK:STDOUT: %pattern_type.282: type = pattern_type %const.f96 [concrete] +// CHECK:STDOUT: %ConstNullableParamS: type = class_type @ConstNullableParamS [concrete] +// CHECK:STDOUT: %ptr.13b: type = ptr_type %ConstNullableParamS [concrete] +// CHECK:STDOUT: %const.2f4: type = const_type %ptr.13b [concrete] +// CHECK:STDOUT: %pattern_type.170: type = pattern_type %const.2f4 [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.282 = ref_binding_pattern p [concrete] -// CHECK:STDOUT: %p.var_patt: %pattern_type.282 = var_pattern %p.patt [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.170 = ref_binding_pattern p [concrete] +// CHECK:STDOUT: %p.var_patt: %pattern_type.170 = var_pattern %p.patt [concrete] +// CHECK:STDOUT: %const_nullable_foo.cpp_overload_set.type: type = cpp_overload_set_type @const_nullable_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %const_nullable_foo.cpp_overload_set.value: %const_nullable_foo.cpp_overload_set.type = cpp_overload_set_value @const_nullable_foo.cpp_overload_set [concrete] // CHECK:STDOUT: %OptionalStorage.type: type = facet_type <@OptionalStorage> [concrete] // CHECK:STDOUT: %T.220: %OptionalStorage.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] @@ -953,15 +953,15 @@ fn F() { // CHECK:STDOUT: %Destroy.Op.type.1d8f74.1: type = fn_type @Destroy.Op.1 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.1: %Destroy.Op.type.1d8f74.1 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.df9cc1.1: = custom_witness (%Destroy.Op.1a2547.1), @Destroy [concrete] -// CHECK:STDOUT: %Destroy.facet.5b4: %Destroy.type = facet_value %ptr.037, (%custom_witness.df9cc1.1) [concrete] -// CHECK:STDOUT: %MaybeUnformed.9f2: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.5b4) [concrete] -// CHECK:STDOUT: %OptionalStorage.impl_witness.00e: = impl_witness imports.%OptionalStorage.impl_witness_table.110, @ptr.as.OptionalStorage.impl(%S) [concrete] -// CHECK:STDOUT: %.08a0: type = maybe_unformed_type %ptr.037 [concrete] -// CHECK:STDOUT: %OptionalStorage.facet.97d: %OptionalStorage.type = facet_value %ptr.037, (%OptionalStorage.impl_witness.00e) [concrete] -// CHECK:STDOUT: %Optional.d06: type = class_type @Optional, @Optional(%OptionalStorage.facet.97d) [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] -// CHECK:STDOUT: %ImplicitAs.type.e9e: type = facet_type <@ImplicitAs, @ImplicitAs(%Optional.d06)> [concrete] +// CHECK:STDOUT: %Destroy.facet.504: %Destroy.type = facet_value %ptr.13b, (%custom_witness.df9cc1.1) [concrete] +// CHECK:STDOUT: %MaybeUnformed.c09: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.504) [concrete] +// CHECK:STDOUT: %OptionalStorage.impl_witness.cb6: = impl_witness imports.%OptionalStorage.impl_witness_table.110, @ptr.as.OptionalStorage.impl(%ConstNullableParamS) [concrete] +// CHECK:STDOUT: %.c5e2: type = maybe_unformed_type %ptr.13b [concrete] +// CHECK:STDOUT: %OptionalStorage.facet.f04: %OptionalStorage.type = facet_value %ptr.13b, (%OptionalStorage.impl_witness.cb6) [concrete] +// CHECK:STDOUT: %Optional.7c0: type = class_type @Optional, @Optional(%OptionalStorage.facet.f04) [concrete] +// CHECK:STDOUT: %const_nullable_foo.type: type = fn_type @const_nullable_foo [concrete] +// CHECK:STDOUT: %const_nullable_foo: %const_nullable_foo.type = struct_value () [concrete] +// CHECK:STDOUT: %ImplicitAs.type.3dc: type = facet_type <@ImplicitAs, @ImplicitAs(%Optional.7c0)> [concrete] // CHECK:STDOUT: %ImplicitAs.type.3aa489.2: type = facet_type <@ImplicitAs, @ImplicitAs(%T.67d)> [symbolic] // CHECK:STDOUT: %U.294: %ImplicitAs.type.3aa489.2 = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %const.as.ImplicitAs.impl.Convert.type.f7e: type = fn_type @const.as.ImplicitAs.impl.Convert, @const.as.ImplicitAs.impl(%T.67d, %U.294) [symbolic] @@ -970,21 +970,21 @@ fn F() { // CHECK:STDOUT: %U.042: %OptionalAs.type.3b8 = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.type.ad5: type = fn_type @U.as_type.as.ImplicitAs.impl.Convert.2, @U.as_type.as.ImplicitAs.impl.167(%T.220, %U.042) [symbolic] // CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.331: %U.as_type.as.ImplicitAs.impl.Convert.type.ad5 = struct_value () [symbolic] -// CHECK:STDOUT: %OptionalAs.type.0c0: type = facet_type <@OptionalAs, @OptionalAs(%OptionalStorage.facet.97d)> [concrete] +// CHECK:STDOUT: %OptionalAs.type.cda: type = facet_type <@OptionalAs, @OptionalAs(%OptionalStorage.facet.f04)> [concrete] // CHECK:STDOUT: %T.as_type.as.OptionalAs.impl.Convert.type.774: type = fn_type @T.as_type.as.OptionalAs.impl.Convert, @T.as_type.as.OptionalAs.impl(%T.220) [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalAs.impl.Convert.5f9: %T.as_type.as.OptionalAs.impl.Convert.type.774 = struct_value () [symbolic] -// CHECK:STDOUT: %OptionalAs.impl_witness.55e: = impl_witness imports.%OptionalAs.impl_witness_table.2e9, @T.as_type.as.OptionalAs.impl(%OptionalStorage.facet.97d) [concrete] -// CHECK:STDOUT: %OptionalAs.facet: %OptionalAs.type.0c0 = facet_value %ptr.037, (%OptionalAs.impl_witness.55e) [concrete] -// CHECK:STDOUT: %ImplicitAs.impl_witness.3df: = impl_witness imports.%ImplicitAs.impl_witness_table.bb5, @U.as_type.as.ImplicitAs.impl.167(%OptionalStorage.facet.97d, %OptionalAs.facet) [concrete] -// CHECK:STDOUT: %ImplicitAs.facet.494: %ImplicitAs.type.e9e = facet_value %ptr.037, (%ImplicitAs.impl_witness.3df) [concrete] -// CHECK:STDOUT: %ImplicitAs.impl_witness.cab: = impl_witness imports.%ImplicitAs.impl_witness_table.5de, @const.as.ImplicitAs.impl(%Optional.d06, %ImplicitAs.facet.494) [concrete] -// CHECK:STDOUT: %const.as.ImplicitAs.impl.Convert.type.6ae: type = fn_type @const.as.ImplicitAs.impl.Convert, @const.as.ImplicitAs.impl(%Optional.d06, %ImplicitAs.facet.494) [concrete] -// CHECK:STDOUT: %const.as.ImplicitAs.impl.Convert.32c: %const.as.ImplicitAs.impl.Convert.type.6ae = struct_value () [concrete] -// CHECK:STDOUT: %ImplicitAs.facet.df3: %ImplicitAs.type.e9e = facet_value %const.f96, (%ImplicitAs.impl_witness.cab) [concrete] -// CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.22e: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%Optional.d06, %ImplicitAs.facet.df3) [concrete] -// CHECK:STDOUT: %.edd: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.22e, %ImplicitAs.facet.df3 [concrete] -// CHECK:STDOUT: %const.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %const.as.ImplicitAs.impl.Convert.32c, @const.as.ImplicitAs.impl.Convert(%Optional.d06, %ImplicitAs.facet.494) [concrete] -// CHECK:STDOUT: %Destroy.Op.type.1d8f74.4: type = fn_type @Destroy.Op.loc11_11.3 [concrete] +// CHECK:STDOUT: %OptionalAs.impl_witness.f8a: = impl_witness imports.%OptionalAs.impl_witness_table.2e9, @T.as_type.as.OptionalAs.impl(%OptionalStorage.facet.f04) [concrete] +// CHECK:STDOUT: %OptionalAs.facet: %OptionalAs.type.cda = facet_value %ptr.13b, (%OptionalAs.impl_witness.f8a) [concrete] +// CHECK:STDOUT: %ImplicitAs.impl_witness.855: = impl_witness imports.%ImplicitAs.impl_witness_table.bb5, @U.as_type.as.ImplicitAs.impl.167(%OptionalStorage.facet.f04, %OptionalAs.facet) [concrete] +// CHECK:STDOUT: %ImplicitAs.facet.464: %ImplicitAs.type.3dc = facet_value %ptr.13b, (%ImplicitAs.impl_witness.855) [concrete] +// CHECK:STDOUT: %ImplicitAs.impl_witness.4fe: = impl_witness imports.%ImplicitAs.impl_witness_table.5de, @const.as.ImplicitAs.impl(%Optional.7c0, %ImplicitAs.facet.464) [concrete] +// CHECK:STDOUT: %const.as.ImplicitAs.impl.Convert.type.129: type = fn_type @const.as.ImplicitAs.impl.Convert, @const.as.ImplicitAs.impl(%Optional.7c0, %ImplicitAs.facet.464) [concrete] +// CHECK:STDOUT: %const.as.ImplicitAs.impl.Convert.7ef: %const.as.ImplicitAs.impl.Convert.type.129 = struct_value () [concrete] +// CHECK:STDOUT: %ImplicitAs.facet.7f0: %ImplicitAs.type.3dc = facet_value %const.2f4, (%ImplicitAs.impl_witness.4fe) [concrete] +// CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.25f: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%Optional.7c0, %ImplicitAs.facet.7f0) [concrete] +// CHECK:STDOUT: %.a05: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.25f, %ImplicitAs.facet.7f0 [concrete] +// CHECK:STDOUT: %const.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %const.as.ImplicitAs.impl.Convert.7ef, @const.as.ImplicitAs.impl.Convert(%Optional.7c0, %ImplicitAs.facet.464) [concrete] +// CHECK:STDOUT: %Destroy.Op.type.1d8f74.4: type = fn_type @Destroy.Op.loc11_26.3 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.4: %Destroy.Op.type.1d8f74.4 = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.5: type = fn_type @Destroy.Op.loc10 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.5: %Destroy.Op.type.1d8f74.5 = struct_value () [concrete] @@ -992,12 +992,12 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .S = %S.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .ConstNullableParamS = %ConstNullableParamS.decl +// CHECK:STDOUT: .const_nullable_foo = %const_nullable_foo.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] +// CHECK:STDOUT: %ConstNullableParamS.decl: type = class_decl @ConstNullableParamS [concrete = constants.%ConstNullableParamS] {} {} +// CHECK:STDOUT: %const_nullable_foo.cpp_overload_set.value: %const_nullable_foo.cpp_overload_set.type = cpp_overload_set_value @const_nullable_foo.cpp_overload_set [concrete = constants.%const_nullable_foo.cpp_overload_set.value] // CHECK:STDOUT: %Core.import_ref.509: type = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @ptr.as.OptionalStorage.impl.%MaybeUnformed (constants.%MaybeUnformed.ddb)] // CHECK:STDOUT: %Core.import_ref.105 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %Core.import_ref.fa7: @ptr.as.OptionalStorage.impl.%ptr.as.OptionalStorage.impl.Some.type (%ptr.as.OptionalStorage.impl.Some.type.71e) = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @ptr.as.OptionalStorage.impl.%ptr.as.OptionalStorage.impl.Some (constants.%ptr.as.OptionalStorage.impl.Some.caa)] @@ -1005,14 +1005,14 @@ fn F() { // CHECK:STDOUT: %Core.import_ref.306 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %Core.import_ref.3e3 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %OptionalStorage.impl_witness_table.110 = impl_witness_table (%Core.import_ref.509, %Core.import_ref.105, %Core.import_ref.fa7, %Core.import_ref.a90, %Core.import_ref.306, %Core.import_ref.3e3), @ptr.as.OptionalStorage.impl [concrete] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %const_nullable_foo.decl: %const_nullable_foo.type = fn_decl @const_nullable_foo [concrete = constants.%const_nullable_foo] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: -// CHECK:STDOUT: %.loc11_12.1: type = splice_block %Optional [concrete = constants.%Optional.d06] { -// CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value constants.%ptr.037, (constants.%OptionalStorage.impl_witness.00e) [concrete = constants.%OptionalStorage.facet.97d] -// CHECK:STDOUT: %.loc11_12.2: %OptionalStorage.type = converted constants.%ptr.037, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet.97d] -// CHECK:STDOUT: %Optional: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet.97d) [concrete = constants.%Optional.d06] +// CHECK:STDOUT: %.loc11_27.1: type = splice_block %Optional [concrete = constants.%Optional.7c0] { +// CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value constants.%ptr.13b, (constants.%OptionalStorage.impl_witness.cb6) [concrete = constants.%OptionalStorage.facet.f04] +// CHECK:STDOUT: %.loc11_27.2: %OptionalStorage.type = converted constants.%ptr.13b, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet.f04] +// CHECK:STDOUT: %Optional: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet.f04) [concrete = constants.%Optional.7c0] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: } @@ -1026,58 +1026,58 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %p.var: ref %const.f96 = var_storage %p.var_patt +// CHECK:STDOUT: %p.var: ref %const.2f4 = var_storage %p.var_patt // CHECK:STDOUT: %G.ref: %G.type = name_ref G, file.%G.decl [concrete = constants.%G] -// CHECK:STDOUT: %G.call: init %const.f96 = call %G.ref() +// CHECK:STDOUT: %G.call: init %const.2f4 = call %G.ref() // CHECK:STDOUT: assign %p.var, %G.call -// CHECK:STDOUT: %.loc10: type = splice_block %const [concrete = constants.%const.f96] { +// CHECK:STDOUT: %.loc10: type = splice_block %const [concrete = constants.%const.2f4] { // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %S.ref: type = name_ref S, imports.%S.decl [concrete = constants.%S] -// CHECK:STDOUT: %ptr: type = ptr_type %S.ref [concrete = constants.%ptr.037] -// CHECK:STDOUT: %const: type = const_type %ptr [concrete = constants.%const.f96] +// CHECK:STDOUT: %ConstNullableParamS.ref: type = name_ref ConstNullableParamS, imports.%ConstNullableParamS.decl [concrete = constants.%ConstNullableParamS] +// CHECK:STDOUT: %ptr: type = ptr_type %ConstNullableParamS.ref [concrete = constants.%ptr.13b] +// CHECK:STDOUT: %const: type = const_type %ptr [concrete = constants.%const.2f4] // CHECK:STDOUT: } -// CHECK:STDOUT: %p: ref %const.f96 = wrapper_binding p, %p.var +// CHECK:STDOUT: %p: ref %const.2f4 = wrapper_binding p, %p.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type.282 = ref_binding_pattern p [concrete = constants.%p.patt] -// CHECK:STDOUT: %p.var_patt: %pattern_type.282 = var_pattern %p.patt [concrete = constants.%p.var_patt] +// CHECK:STDOUT: %p.patt: %pattern_type.170 = ref_binding_pattern p [concrete = constants.%p.patt] +// CHECK:STDOUT: %p.var_patt: %pattern_type.170 = var_pattern %p.patt [concrete = constants.%p.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %p.ref: ref %const.f96 = name_ref p, %p -// CHECK:STDOUT: %impl.elem0: %.edd = impl_witness_access constants.%ImplicitAs.impl_witness.cab, element0 [concrete = constants.%const.as.ImplicitAs.impl.Convert.32c] -// CHECK:STDOUT: %bound_method.loc11_11.1: = bound_method %p.ref, %impl.elem0 -// CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @const.as.ImplicitAs.impl.Convert(constants.%Optional.d06, constants.%ImplicitAs.facet.494) [concrete = constants.%const.as.ImplicitAs.impl.Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc11_11.2: = bound_method %p.ref, %specific_fn -// CHECK:STDOUT: %.loc11_11.1: %const.f96 = acquire_value %p.ref -// CHECK:STDOUT: %const.as.ImplicitAs.impl.Convert.call: init %Optional.d06 = call %bound_method.loc11_11.2(%.loc11_11.1) -// CHECK:STDOUT: %.loc11_11.2: init %Optional.d06 = converted %p.ref, %const.as.ImplicitAs.impl.Convert.call -// CHECK:STDOUT: %.loc11_11.3: ref %Optional.d06 = temporary_storage -// CHECK:STDOUT: %.loc11_11.4: ref %Optional.d06 = temporary %.loc11_11.3, %.loc11_11.2 -// CHECK:STDOUT: %.loc11_11.5: %Optional.d06 = acquire_value %.loc11_11.4 -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl(%.loc11_11.5) -// CHECK:STDOUT: %Destroy.Op.bound.loc11: = bound_method %.loc11_11.4, constants.%Destroy.Op.1a2547.4 -// CHECK:STDOUT: %Destroy.Op.call.loc11: init %empty_tuple.type = call %Destroy.Op.bound.loc11(%.loc11_11.4) +// CHECK:STDOUT: %const_nullable_foo.ref: %const_nullable_foo.cpp_overload_set.type = name_ref const_nullable_foo, imports.%const_nullable_foo.cpp_overload_set.value [concrete = constants.%const_nullable_foo.cpp_overload_set.value] +// CHECK:STDOUT: %p.ref: ref %const.2f4 = name_ref p, %p +// CHECK:STDOUT: %impl.elem0: %.a05 = impl_witness_access constants.%ImplicitAs.impl_witness.4fe, element0 [concrete = constants.%const.as.ImplicitAs.impl.Convert.7ef] +// CHECK:STDOUT: %bound_method.loc11_26.1: = bound_method %p.ref, %impl.elem0 +// CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @const.as.ImplicitAs.impl.Convert(constants.%Optional.7c0, constants.%ImplicitAs.facet.464) [concrete = constants.%const.as.ImplicitAs.impl.Convert.specific_fn] +// CHECK:STDOUT: %bound_method.loc11_26.2: = bound_method %p.ref, %specific_fn +// CHECK:STDOUT: %.loc11_26.1: %const.2f4 = acquire_value %p.ref +// CHECK:STDOUT: %const.as.ImplicitAs.impl.Convert.call: init %Optional.7c0 = call %bound_method.loc11_26.2(%.loc11_26.1) +// CHECK:STDOUT: %.loc11_26.2: init %Optional.7c0 = converted %p.ref, %const.as.ImplicitAs.impl.Convert.call +// CHECK:STDOUT: %.loc11_26.3: ref %Optional.7c0 = temporary_storage +// CHECK:STDOUT: %.loc11_26.4: ref %Optional.7c0 = temporary %.loc11_26.3, %.loc11_26.2 +// CHECK:STDOUT: %.loc11_26.5: %Optional.7c0 = acquire_value %.loc11_26.4 +// CHECK:STDOUT: %const_nullable_foo.call: init %empty_tuple.type = call imports.%const_nullable_foo.decl(%.loc11_26.5) +// CHECK:STDOUT: %Destroy.Op.bound.loc11: = bound_method %.loc11_26.4, constants.%Destroy.Op.1a2547.4 +// CHECK:STDOUT: %Destroy.Op.call.loc11: init %empty_tuple.type = call %Destroy.Op.bound.loc11(%.loc11_26.4) // CHECK:STDOUT: %Destroy.Op.bound.loc10: = bound_method %p.var, constants.%Destroy.Op.1a2547.5 // CHECK:STDOUT: %Destroy.Op.call.loc10: init %empty_tuple.type = call %Destroy.Op.bound.loc10(%p.var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc11_11.1(%self.param: ref %.08a0) { +// CHECK:STDOUT: fn @Destroy.Op.loc11_26.1(%self.param: ref %.c5e2) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc11_11.2(%self.param: ref %MaybeUnformed.9f2) { +// CHECK:STDOUT: fn @Destroy.Op.loc11_26.2(%self.param: ref %MaybeUnformed.c09) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc11_11.3(%self.param: ref %Optional.d06) { +// CHECK:STDOUT: fn @Destroy.Op.loc11_26.3(%self.param: ref %Optional.7c0) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc10(%self.param: ref %const.f96) { +// CHECK:STDOUT: fn @Destroy.Op.loc10(%self.param: ref %const.2f4) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } @@ -1085,16 +1085,16 @@ fn F() { // CHECK:STDOUT: --- import_const_nullable_pointer_param_using_non_const.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %S: type = class_type @S [concrete] -// CHECK:STDOUT: %ptr.037: type = ptr_type %S [concrete] -// CHECK:STDOUT: %pattern_type.de6: type = pattern_type %ptr.037 [concrete] +// CHECK:STDOUT: %ConstNullableParamS: type = class_type @ConstNullableParamS [concrete] +// CHECK:STDOUT: %ptr.13b: type = ptr_type %ConstNullableParamS [concrete] +// CHECK:STDOUT: %pattern_type.550: type = pattern_type %ptr.13b [concrete] // CHECK:STDOUT: %G.type: type = fn_type @G [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %G: %G.type = struct_value () [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.de6 = ref_binding_pattern p [concrete] -// CHECK:STDOUT: %p.var_patt: %pattern_type.de6 = var_pattern %p.patt [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.550 = ref_binding_pattern p [concrete] +// CHECK:STDOUT: %p.var_patt: %pattern_type.550 = var_pattern %p.patt [concrete] +// CHECK:STDOUT: %const_nullable_foo.cpp_overload_set.type: type = cpp_overload_set_type @const_nullable_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %const_nullable_foo.cpp_overload_set.value: %const_nullable_foo.cpp_overload_set.type = cpp_overload_set_value @const_nullable_foo.cpp_overload_set [concrete] // CHECK:STDOUT: %OptionalStorage.type: type = facet_type <@OptionalStorage> [concrete] // CHECK:STDOUT: %T.220: %OptionalStorage.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] @@ -1108,43 +1108,43 @@ fn F() { // CHECK:STDOUT: %Destroy.Op.type.1d8f74.1: type = fn_type @Destroy.Op.1 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.1: %Destroy.Op.type.1d8f74.1 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.df9cc1.1: = custom_witness (%Destroy.Op.1a2547.1), @Destroy [concrete] -// CHECK:STDOUT: %Destroy.facet.5b4: %Destroy.type = facet_value %ptr.037, (%custom_witness.df9cc1.1) [concrete] -// CHECK:STDOUT: %MaybeUnformed.9f2: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.5b4) [concrete] -// CHECK:STDOUT: %OptionalStorage.impl_witness.00e: = impl_witness imports.%OptionalStorage.impl_witness_table.110, @ptr.as.OptionalStorage.impl(%S) [concrete] -// CHECK:STDOUT: %.08a0: type = maybe_unformed_type %ptr.037 [concrete] -// CHECK:STDOUT: %OptionalStorage.facet.97d: %OptionalStorage.type = facet_value %ptr.037, (%OptionalStorage.impl_witness.00e) [concrete] -// CHECK:STDOUT: %Optional.d06: type = class_type @Optional, @Optional(%OptionalStorage.facet.97d) [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] -// CHECK:STDOUT: %ImplicitAs.type.e9e: type = facet_type <@ImplicitAs, @ImplicitAs(%Optional.d06)> [concrete] +// CHECK:STDOUT: %Destroy.facet.504: %Destroy.type = facet_value %ptr.13b, (%custom_witness.df9cc1.1) [concrete] +// CHECK:STDOUT: %MaybeUnformed.c09: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.504) [concrete] +// CHECK:STDOUT: %OptionalStorage.impl_witness.cb6: = impl_witness imports.%OptionalStorage.impl_witness_table.110, @ptr.as.OptionalStorage.impl(%ConstNullableParamS) [concrete] +// CHECK:STDOUT: %.c5e2: type = maybe_unformed_type %ptr.13b [concrete] +// CHECK:STDOUT: %OptionalStorage.facet.f04: %OptionalStorage.type = facet_value %ptr.13b, (%OptionalStorage.impl_witness.cb6) [concrete] +// CHECK:STDOUT: %Optional.7c0: type = class_type @Optional, @Optional(%OptionalStorage.facet.f04) [concrete] +// CHECK:STDOUT: %const_nullable_foo.type: type = fn_type @const_nullable_foo [concrete] +// CHECK:STDOUT: %const_nullable_foo: %const_nullable_foo.type = struct_value () [concrete] +// CHECK:STDOUT: %ImplicitAs.type.3dc: type = facet_type <@ImplicitAs, @ImplicitAs(%Optional.7c0)> [concrete] // CHECK:STDOUT: %OptionalAs.type.3b8: type = facet_type <@OptionalAs, @OptionalAs(%T.220)> [symbolic] // CHECK:STDOUT: %U.042: %OptionalAs.type.3b8 = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.type.ad5: type = fn_type @U.as_type.as.ImplicitAs.impl.Convert.2, @U.as_type.as.ImplicitAs.impl.167(%T.220, %U.042) [symbolic] // CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.331: %U.as_type.as.ImplicitAs.impl.Convert.type.ad5 = struct_value () [symbolic] -// CHECK:STDOUT: %OptionalAs.type.0c0: type = facet_type <@OptionalAs, @OptionalAs(%OptionalStorage.facet.97d)> [concrete] +// CHECK:STDOUT: %OptionalAs.type.cda: type = facet_type <@OptionalAs, @OptionalAs(%OptionalStorage.facet.f04)> [concrete] // CHECK:STDOUT: %T.as_type.as.OptionalAs.impl.Convert.type.774: type = fn_type @T.as_type.as.OptionalAs.impl.Convert, @T.as_type.as.OptionalAs.impl(%T.220) [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalAs.impl.Convert.5f9: %T.as_type.as.OptionalAs.impl.Convert.type.774 = struct_value () [symbolic] -// CHECK:STDOUT: %OptionalAs.impl_witness.55e: = impl_witness imports.%OptionalAs.impl_witness_table.2e9, @T.as_type.as.OptionalAs.impl(%OptionalStorage.facet.97d) [concrete] -// CHECK:STDOUT: %OptionalAs.facet: %OptionalAs.type.0c0 = facet_value %ptr.037, (%OptionalAs.impl_witness.55e) [concrete] -// CHECK:STDOUT: %ImplicitAs.impl_witness.3df: = impl_witness imports.%ImplicitAs.impl_witness_table.bb5, @U.as_type.as.ImplicitAs.impl.167(%OptionalStorage.facet.97d, %OptionalAs.facet) [concrete] -// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.type.261: type = fn_type @U.as_type.as.ImplicitAs.impl.Convert.2, @U.as_type.as.ImplicitAs.impl.167(%OptionalStorage.facet.97d, %OptionalAs.facet) [concrete] -// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.d50: %U.as_type.as.ImplicitAs.impl.Convert.type.261 = struct_value () [concrete] -// CHECK:STDOUT: %ImplicitAs.facet.494: %ImplicitAs.type.e9e = facet_value %ptr.037, (%ImplicitAs.impl_witness.3df) [concrete] -// CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.088: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%Optional.d06, %ImplicitAs.facet.494) [concrete] -// CHECK:STDOUT: %.343: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.088, %ImplicitAs.facet.494 [concrete] -// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %U.as_type.as.ImplicitAs.impl.Convert.d50, @U.as_type.as.ImplicitAs.impl.Convert.2(%OptionalStorage.facet.97d, %OptionalAs.facet) [concrete] -// CHECK:STDOUT: %Destroy.Op.type.1d8f74.4: type = fn_type @Destroy.Op.loc11_11.3 [concrete] +// CHECK:STDOUT: %OptionalAs.impl_witness.f8a: = impl_witness imports.%OptionalAs.impl_witness_table.2e9, @T.as_type.as.OptionalAs.impl(%OptionalStorage.facet.f04) [concrete] +// CHECK:STDOUT: %OptionalAs.facet: %OptionalAs.type.cda = facet_value %ptr.13b, (%OptionalAs.impl_witness.f8a) [concrete] +// CHECK:STDOUT: %ImplicitAs.impl_witness.855: = impl_witness imports.%ImplicitAs.impl_witness_table.bb5, @U.as_type.as.ImplicitAs.impl.167(%OptionalStorage.facet.f04, %OptionalAs.facet) [concrete] +// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.type.217: type = fn_type @U.as_type.as.ImplicitAs.impl.Convert.2, @U.as_type.as.ImplicitAs.impl.167(%OptionalStorage.facet.f04, %OptionalAs.facet) [concrete] +// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.a46: %U.as_type.as.ImplicitAs.impl.Convert.type.217 = struct_value () [concrete] +// CHECK:STDOUT: %ImplicitAs.facet.464: %ImplicitAs.type.3dc = facet_value %ptr.13b, (%ImplicitAs.impl_witness.855) [concrete] +// CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.34b: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%Optional.7c0, %ImplicitAs.facet.464) [concrete] +// CHECK:STDOUT: %.f82: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.34b, %ImplicitAs.facet.464 [concrete] +// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %U.as_type.as.ImplicitAs.impl.Convert.a46, @U.as_type.as.ImplicitAs.impl.Convert.2(%OptionalStorage.facet.f04, %OptionalAs.facet) [concrete] +// CHECK:STDOUT: %Destroy.Op.type.1d8f74.4: type = fn_type @Destroy.Op.loc11_26.3 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.4: %Destroy.Op.type.1d8f74.4 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .S = %S.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .ConstNullableParamS = %ConstNullableParamS.decl +// CHECK:STDOUT: .const_nullable_foo = %const_nullable_foo.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] +// CHECK:STDOUT: %ConstNullableParamS.decl: type = class_decl @ConstNullableParamS [concrete = constants.%ConstNullableParamS] {} {} +// CHECK:STDOUT: %const_nullable_foo.cpp_overload_set.value: %const_nullable_foo.cpp_overload_set.type = cpp_overload_set_value @const_nullable_foo.cpp_overload_set [concrete = constants.%const_nullable_foo.cpp_overload_set.value] // CHECK:STDOUT: %Core.import_ref.509: type = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @ptr.as.OptionalStorage.impl.%MaybeUnformed (constants.%MaybeUnformed.ddb)] // CHECK:STDOUT: %Core.import_ref.105 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %Core.import_ref.fa7: @ptr.as.OptionalStorage.impl.%ptr.as.OptionalStorage.impl.Some.type (%ptr.as.OptionalStorage.impl.Some.type.71e) = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @ptr.as.OptionalStorage.impl.%ptr.as.OptionalStorage.impl.Some (constants.%ptr.as.OptionalStorage.impl.Some.caa)] @@ -1152,14 +1152,14 @@ fn F() { // CHECK:STDOUT: %Core.import_ref.306 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %Core.import_ref.3e3 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %OptionalStorage.impl_witness_table.110 = impl_witness_table (%Core.import_ref.509, %Core.import_ref.105, %Core.import_ref.fa7, %Core.import_ref.a90, %Core.import_ref.306, %Core.import_ref.3e3), @ptr.as.OptionalStorage.impl [concrete] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %const_nullable_foo.decl: %const_nullable_foo.type = fn_decl @const_nullable_foo [concrete = constants.%const_nullable_foo] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: -// CHECK:STDOUT: %.loc11_12.1: type = splice_block %Optional [concrete = constants.%Optional.d06] { -// CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value constants.%ptr.037, (constants.%OptionalStorage.impl_witness.00e) [concrete = constants.%OptionalStorage.facet.97d] -// CHECK:STDOUT: %.loc11_12.2: %OptionalStorage.type = converted constants.%ptr.037, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet.97d] -// CHECK:STDOUT: %Optional: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet.97d) [concrete = constants.%Optional.d06] +// CHECK:STDOUT: %.loc11_27.1: type = splice_block %Optional [concrete = constants.%Optional.7c0] { +// CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value constants.%ptr.13b, (constants.%OptionalStorage.impl_witness.cb6) [concrete = constants.%OptionalStorage.facet.f04] +// CHECK:STDOUT: %.loc11_27.2: %OptionalStorage.type = converted constants.%ptr.13b, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet.f04] +// CHECK:STDOUT: %Optional: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet.f04) [concrete = constants.%Optional.7c0] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: } @@ -1171,52 +1171,52 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %p.var: ref %ptr.037 = var_storage %p.var_patt +// CHECK:STDOUT: %p.var: ref %ptr.13b = var_storage %p.var_patt // CHECK:STDOUT: %G.ref: %G.type = name_ref G, file.%G.decl [concrete = constants.%G] -// CHECK:STDOUT: %G.call: init %ptr.037 = call %G.ref() +// CHECK:STDOUT: %G.call: init %ptr.13b = call %G.ref() // CHECK:STDOUT: assign %p.var, %G.call -// CHECK:STDOUT: %.loc10: type = splice_block %ptr [concrete = constants.%ptr.037] { +// CHECK:STDOUT: %.loc10: type = splice_block %ptr [concrete = constants.%ptr.13b] { // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %S.ref: type = name_ref S, imports.%S.decl [concrete = constants.%S] -// CHECK:STDOUT: %ptr: type = ptr_type %S.ref [concrete = constants.%ptr.037] +// CHECK:STDOUT: %ConstNullableParamS.ref: type = name_ref ConstNullableParamS, imports.%ConstNullableParamS.decl [concrete = constants.%ConstNullableParamS] +// CHECK:STDOUT: %ptr: type = ptr_type %ConstNullableParamS.ref [concrete = constants.%ptr.13b] // CHECK:STDOUT: } -// CHECK:STDOUT: %p: ref %ptr.037 = wrapper_binding p, %p.var +// CHECK:STDOUT: %p: ref %ptr.13b = wrapper_binding p, %p.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type.de6 = ref_binding_pattern p [concrete = constants.%p.patt] -// CHECK:STDOUT: %p.var_patt: %pattern_type.de6 = var_pattern %p.patt [concrete = constants.%p.var_patt] +// CHECK:STDOUT: %p.patt: %pattern_type.550 = ref_binding_pattern p [concrete = constants.%p.patt] +// CHECK:STDOUT: %p.var_patt: %pattern_type.550 = var_pattern %p.patt [concrete = constants.%p.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %p.ref: ref %ptr.037 = name_ref p, %p -// CHECK:STDOUT: %impl.elem0: %.343 = impl_witness_access constants.%ImplicitAs.impl_witness.3df, element0 [concrete = constants.%U.as_type.as.ImplicitAs.impl.Convert.d50] -// CHECK:STDOUT: %bound_method.loc11_11.1: = bound_method %p.ref, %impl.elem0 -// CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @U.as_type.as.ImplicitAs.impl.Convert.2(constants.%OptionalStorage.facet.97d, constants.%OptionalAs.facet) [concrete = constants.%U.as_type.as.ImplicitAs.impl.Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc11_11.2: = bound_method %p.ref, %specific_fn -// CHECK:STDOUT: %.loc11_11.1: %ptr.037 = acquire_value %p.ref -// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.call: init %Optional.d06 = call %bound_method.loc11_11.2(%.loc11_11.1) -// CHECK:STDOUT: %.loc11_11.2: init %Optional.d06 = converted %p.ref, %U.as_type.as.ImplicitAs.impl.Convert.call -// CHECK:STDOUT: %.loc11_11.3: ref %Optional.d06 = temporary_storage -// CHECK:STDOUT: %.loc11_11.4: ref %Optional.d06 = temporary %.loc11_11.3, %.loc11_11.2 -// CHECK:STDOUT: %.loc11_11.5: %Optional.d06 = acquire_value %.loc11_11.4 -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl(%.loc11_11.5) -// CHECK:STDOUT: %Destroy.Op.bound.loc11: = bound_method %.loc11_11.4, constants.%Destroy.Op.1a2547.4 -// CHECK:STDOUT: %Destroy.Op.call.loc11: init %empty_tuple.type = call %Destroy.Op.bound.loc11(%.loc11_11.4) +// CHECK:STDOUT: %const_nullable_foo.ref: %const_nullable_foo.cpp_overload_set.type = name_ref const_nullable_foo, imports.%const_nullable_foo.cpp_overload_set.value [concrete = constants.%const_nullable_foo.cpp_overload_set.value] +// CHECK:STDOUT: %p.ref: ref %ptr.13b = name_ref p, %p +// CHECK:STDOUT: %impl.elem0: %.f82 = impl_witness_access constants.%ImplicitAs.impl_witness.855, element0 [concrete = constants.%U.as_type.as.ImplicitAs.impl.Convert.a46] +// CHECK:STDOUT: %bound_method.loc11_26.1: = bound_method %p.ref, %impl.elem0 +// CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @U.as_type.as.ImplicitAs.impl.Convert.2(constants.%OptionalStorage.facet.f04, constants.%OptionalAs.facet) [concrete = constants.%U.as_type.as.ImplicitAs.impl.Convert.specific_fn] +// CHECK:STDOUT: %bound_method.loc11_26.2: = bound_method %p.ref, %specific_fn +// CHECK:STDOUT: %.loc11_26.1: %ptr.13b = acquire_value %p.ref +// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.call: init %Optional.7c0 = call %bound_method.loc11_26.2(%.loc11_26.1) +// CHECK:STDOUT: %.loc11_26.2: init %Optional.7c0 = converted %p.ref, %U.as_type.as.ImplicitAs.impl.Convert.call +// CHECK:STDOUT: %.loc11_26.3: ref %Optional.7c0 = temporary_storage +// CHECK:STDOUT: %.loc11_26.4: ref %Optional.7c0 = temporary %.loc11_26.3, %.loc11_26.2 +// CHECK:STDOUT: %.loc11_26.5: %Optional.7c0 = acquire_value %.loc11_26.4 +// CHECK:STDOUT: %const_nullable_foo.call: init %empty_tuple.type = call imports.%const_nullable_foo.decl(%.loc11_26.5) +// CHECK:STDOUT: %Destroy.Op.bound.loc11: = bound_method %.loc11_26.4, constants.%Destroy.Op.1a2547.4 +// CHECK:STDOUT: %Destroy.Op.call.loc11: init %empty_tuple.type = call %Destroy.Op.bound.loc11(%.loc11_26.4) // CHECK:STDOUT: %Destroy.Op.bound.loc10: = bound_method %p.var, constants.%Destroy.Op.1a2547.1 // CHECK:STDOUT: %Destroy.Op.call.loc10: init %empty_tuple.type = call %Destroy.Op.bound.loc10(%p.var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc11_11.1(%self.param: ref %.08a0) { +// CHECK:STDOUT: fn @Destroy.Op.loc11_26.1(%self.param: ref %.c5e2) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc11_11.2(%self.param: ref %MaybeUnformed.9f2) { +// CHECK:STDOUT: fn @Destroy.Op.loc11_26.2(%self.param: ref %MaybeUnformed.c09) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc11_11.3(%self.param: ref %Optional.d06) { +// CHECK:STDOUT: fn @Destroy.Op.loc11_26.3(%self.param: ref %Optional.7c0) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } @@ -1224,26 +1224,26 @@ fn F() { // CHECK:STDOUT: --- import_non_nullable_pointer_return.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %S: type = class_type @S [concrete] -// CHECK:STDOUT: %ptr: type = ptr_type %S [concrete] +// CHECK:STDOUT: %NonNullableReturnS: type = class_type @NonNullableReturnS [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %NonNullableReturnS [concrete] // CHECK:STDOUT: %IngestDoublePointer.type: type = fn_type @IngestDoublePointer [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %IngestDoublePointer: %IngestDoublePointer.type = struct_value () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %non_nullable_return_foo.cpp_overload_set.type: type = cpp_overload_set_type @non_nullable_return_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %non_nullable_return_foo.cpp_overload_set.value: %non_nullable_return_foo.cpp_overload_set.type = cpp_overload_set_value @non_nullable_return_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %non_nullable_return_foo.type: type = fn_type @non_nullable_return_foo [concrete] +// CHECK:STDOUT: %non_nullable_return_foo: %non_nullable_return_foo.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .S = %S.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .NonNullableReturnS = %NonNullableReturnS.decl +// CHECK:STDOUT: .non_nullable_return_foo = %non_nullable_return_foo.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %NonNullableReturnS.decl: type = class_decl @NonNullableReturnS [concrete = constants.%NonNullableReturnS] {} {} +// CHECK:STDOUT: %non_nullable_return_foo.cpp_overload_set.value: %non_nullable_return_foo.cpp_overload_set.type = cpp_overload_set_value @non_nullable_return_foo.cpp_overload_set [concrete = constants.%non_nullable_return_foo.cpp_overload_set.value] +// CHECK:STDOUT: %non_nullable_return_foo.decl: %non_nullable_return_foo.type = fn_decl @non_nullable_return_foo [concrete = constants.%non_nullable_return_foo] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -1254,41 +1254,41 @@ fn F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %IngestDoublePointer.ref: %IngestDoublePointer.type = name_ref IngestDoublePointer, file.%IngestDoublePointer.decl [concrete = constants.%IngestDoublePointer] // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref.loc10: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.call.loc10: init %ptr = call imports.%foo.decl() -// CHECK:STDOUT: %.loc10_31.1: %ptr = value_of_initializer %foo.call.loc10 -// CHECK:STDOUT: %.loc10_31.2: %ptr = converted %foo.call.loc10, %.loc10_31.1 -// CHECK:STDOUT: %IngestDoublePointer.call: init %empty_tuple.type = call %IngestDoublePointer.ref(%.loc10_31.2) +// CHECK:STDOUT: %non_nullable_return_foo.ref.loc10: %non_nullable_return_foo.cpp_overload_set.type = name_ref non_nullable_return_foo, imports.%non_nullable_return_foo.cpp_overload_set.value [concrete = constants.%non_nullable_return_foo.cpp_overload_set.value] +// CHECK:STDOUT: %non_nullable_return_foo.call.loc10: init %ptr = call imports.%non_nullable_return_foo.decl() +// CHECK:STDOUT: %.loc10_51.1: %ptr = value_of_initializer %non_nullable_return_foo.call.loc10 +// CHECK:STDOUT: %.loc10_51.2: %ptr = converted %non_nullable_return_foo.call.loc10, %.loc10_51.1 +// CHECK:STDOUT: %IngestDoublePointer.call: init %empty_tuple.type = call %IngestDoublePointer.ref(%.loc10_51.2) // CHECK:STDOUT: %Cpp.ref.loc11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref.loc11: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.call.loc11: init %ptr = call imports.%foo.decl() +// CHECK:STDOUT: %non_nullable_return_foo.ref.loc11: %non_nullable_return_foo.cpp_overload_set.type = name_ref non_nullable_return_foo, imports.%non_nullable_return_foo.cpp_overload_set.value [concrete = constants.%non_nullable_return_foo.cpp_overload_set.value] +// CHECK:STDOUT: %non_nullable_return_foo.call.loc11: init %ptr = call imports.%non_nullable_return_foo.decl() // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_double_pointer_return.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %S: type = class_type @S [concrete] -// CHECK:STDOUT: %ptr.037: type = ptr_type %S [concrete] -// CHECK:STDOUT: %ptr.65c: type = ptr_type %ptr.037 [concrete] +// CHECK:STDOUT: %DoubleNonNullableReturnS: type = class_type @DoubleNonNullableReturnS [concrete] +// CHECK:STDOUT: %ptr.33a: type = ptr_type %DoubleNonNullableReturnS [concrete] +// CHECK:STDOUT: %ptr.297: type = ptr_type %ptr.33a [concrete] // CHECK:STDOUT: %IngestDoublePointer.type: type = fn_type @IngestDoublePointer [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %IngestDoublePointer: %IngestDoublePointer.type = struct_value () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %double_non_nullable_return_foo.cpp_overload_set.type: type = cpp_overload_set_type @double_non_nullable_return_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %double_non_nullable_return_foo.cpp_overload_set.value: %double_non_nullable_return_foo.cpp_overload_set.type = cpp_overload_set_value @double_non_nullable_return_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %double_non_nullable_return_foo.type: type = fn_type @double_non_nullable_return_foo [concrete] +// CHECK:STDOUT: %double_non_nullable_return_foo: %double_non_nullable_return_foo.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .S = %S.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .DoubleNonNullableReturnS = %DoubleNonNullableReturnS.decl +// CHECK:STDOUT: .double_non_nullable_return_foo = %double_non_nullable_return_foo.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %DoubleNonNullableReturnS.decl: type = class_decl @DoubleNonNullableReturnS [concrete = constants.%DoubleNonNullableReturnS] {} {} +// CHECK:STDOUT: %double_non_nullable_return_foo.cpp_overload_set.value: %double_non_nullable_return_foo.cpp_overload_set.type = cpp_overload_set_value @double_non_nullable_return_foo.cpp_overload_set [concrete = constants.%double_non_nullable_return_foo.cpp_overload_set.value] +// CHECK:STDOUT: %double_non_nullable_return_foo.decl: %double_non_nullable_return_foo.type = fn_decl @double_non_nullable_return_foo [concrete = constants.%double_non_nullable_return_foo] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -1299,41 +1299,41 @@ fn F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %IngestDoublePointer.ref: %IngestDoublePointer.type = name_ref IngestDoublePointer, file.%IngestDoublePointer.decl [concrete = constants.%IngestDoublePointer] // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref.loc10: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.call.loc10: init %ptr.65c = call imports.%foo.decl() -// CHECK:STDOUT: %.loc10_31.1: %ptr.65c = value_of_initializer %foo.call.loc10 -// CHECK:STDOUT: %.loc10_31.2: %ptr.65c = converted %foo.call.loc10, %.loc10_31.1 -// CHECK:STDOUT: %IngestDoublePointer.call: init %empty_tuple.type = call %IngestDoublePointer.ref(%.loc10_31.2) +// CHECK:STDOUT: %double_non_nullable_return_foo.ref.loc10: %double_non_nullable_return_foo.cpp_overload_set.type = name_ref double_non_nullable_return_foo, imports.%double_non_nullable_return_foo.cpp_overload_set.value [concrete = constants.%double_non_nullable_return_foo.cpp_overload_set.value] +// CHECK:STDOUT: %double_non_nullable_return_foo.call.loc10: init %ptr.297 = call imports.%double_non_nullable_return_foo.decl() +// CHECK:STDOUT: %.loc10_58.1: %ptr.297 = value_of_initializer %double_non_nullable_return_foo.call.loc10 +// CHECK:STDOUT: %.loc10_58.2: %ptr.297 = converted %double_non_nullable_return_foo.call.loc10, %.loc10_58.1 +// CHECK:STDOUT: %IngestDoublePointer.call: init %empty_tuple.type = call %IngestDoublePointer.ref(%.loc10_58.2) // CHECK:STDOUT: %Cpp.ref.loc11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref.loc11: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.call.loc11: init %ptr.65c = call imports.%foo.decl() +// CHECK:STDOUT: %double_non_nullable_return_foo.ref.loc11: %double_non_nullable_return_foo.cpp_overload_set.type = name_ref double_non_nullable_return_foo, imports.%double_non_nullable_return_foo.cpp_overload_set.value [concrete = constants.%double_non_nullable_return_foo.cpp_overload_set.value] +// CHECK:STDOUT: %double_non_nullable_return_foo.call.loc11: init %ptr.297 = call imports.%double_non_nullable_return_foo.decl() // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_const_non_nullable_pointer_return.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %S: type = class_type @S [concrete] -// CHECK:STDOUT: %const: type = const_type %S [concrete] +// CHECK:STDOUT: %ConstNonNullableReturnS: type = class_type @ConstNonNullableReturnS [concrete] +// CHECK:STDOUT: %const: type = const_type %ConstNonNullableReturnS [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %const [concrete] // CHECK:STDOUT: %IngestConstPointer.type: type = fn_type @IngestConstPointer [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %IngestConstPointer: %IngestConstPointer.type = struct_value () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %const_non_nullable_return_foo.cpp_overload_set.type: type = cpp_overload_set_type @const_non_nullable_return_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %const_non_nullable_return_foo.cpp_overload_set.value: %const_non_nullable_return_foo.cpp_overload_set.type = cpp_overload_set_value @const_non_nullable_return_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %const_non_nullable_return_foo.type: type = fn_type @const_non_nullable_return_foo [concrete] +// CHECK:STDOUT: %const_non_nullable_return_foo: %const_non_nullable_return_foo.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .S = %S.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .ConstNonNullableReturnS = %ConstNonNullableReturnS.decl +// CHECK:STDOUT: .const_non_nullable_return_foo = %const_non_nullable_return_foo.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %ConstNonNullableReturnS.decl: type = class_decl @ConstNonNullableReturnS [concrete = constants.%ConstNonNullableReturnS] {} {} +// CHECK:STDOUT: %const_non_nullable_return_foo.cpp_overload_set.value: %const_non_nullable_return_foo.cpp_overload_set.type = cpp_overload_set_value @const_non_nullable_return_foo.cpp_overload_set [concrete = constants.%const_non_nullable_return_foo.cpp_overload_set.value] +// CHECK:STDOUT: %const_non_nullable_return_foo.decl: %const_non_nullable_return_foo.type = fn_decl @const_non_nullable_return_foo [concrete = constants.%const_non_nullable_return_foo] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -1344,14 +1344,14 @@ fn F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %IngestConstPointer.ref: %IngestConstPointer.type = name_ref IngestConstPointer, file.%IngestConstPointer.decl [concrete = constants.%IngestConstPointer] // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref.loc10: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.call.loc10: init %ptr = call imports.%foo.decl() -// CHECK:STDOUT: %.loc10_30.1: %ptr = value_of_initializer %foo.call.loc10 -// CHECK:STDOUT: %.loc10_30.2: %ptr = converted %foo.call.loc10, %.loc10_30.1 -// CHECK:STDOUT: %IngestConstPointer.call: init %empty_tuple.type = call %IngestConstPointer.ref(%.loc10_30.2) +// CHECK:STDOUT: %const_non_nullable_return_foo.ref.loc10: %const_non_nullable_return_foo.cpp_overload_set.type = name_ref const_non_nullable_return_foo, imports.%const_non_nullable_return_foo.cpp_overload_set.value [concrete = constants.%const_non_nullable_return_foo.cpp_overload_set.value] +// CHECK:STDOUT: %const_non_nullable_return_foo.call.loc10: init %ptr = call imports.%const_non_nullable_return_foo.decl() +// CHECK:STDOUT: %.loc10_56.1: %ptr = value_of_initializer %const_non_nullable_return_foo.call.loc10 +// CHECK:STDOUT: %.loc10_56.2: %ptr = converted %const_non_nullable_return_foo.call.loc10, %.loc10_56.1 +// CHECK:STDOUT: %IngestConstPointer.call: init %empty_tuple.type = call %IngestConstPointer.ref(%.loc10_56.2) // CHECK:STDOUT: %Cpp.ref.loc11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref.loc11: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.call.loc11: init %ptr = call imports.%foo.decl() +// CHECK:STDOUT: %const_non_nullable_return_foo.ref.loc11: %const_non_nullable_return_foo.cpp_overload_set.type = name_ref const_non_nullable_return_foo, imports.%const_non_nullable_return_foo.cpp_overload_set.value [concrete = constants.%const_non_nullable_return_foo.cpp_overload_set.value] +// CHECK:STDOUT: %const_non_nullable_return_foo.call.loc11: init %ptr = call imports.%const_non_nullable_return_foo.decl() // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1359,16 +1359,16 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %S: type = class_type @S [concrete] +// CHECK:STDOUT: %NullableParamS: type = class_type @NullableParamS [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %pattern_type.0f5: type = pattern_type %S [concrete] -// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] -// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] +// CHECK:STDOUT: %pattern_type.c3f: type = pattern_type %NullableParamS [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.c3f = ref_binding_pattern s [concrete] +// CHECK:STDOUT: %s.var_patt: %pattern_type.c3f = var_pattern %s.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] -// CHECK:STDOUT: %S.val: %S = struct_value () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.037: type = ptr_type %S [concrete] +// CHECK:STDOUT: %NullableParamS.val: %NullableParamS = struct_value () [concrete] +// CHECK:STDOUT: %nullable_param_foo.cpp_overload_set.type: type = cpp_overload_set_type @nullable_param_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %nullable_param_foo.cpp_overload_set.value: %nullable_param_foo.cpp_overload_set.type = cpp_overload_set_value @nullable_param_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.1f0: type = ptr_type %NullableParamS [concrete] // CHECK:STDOUT: %OptionalStorage.type: type = facet_type <@OptionalStorage> [concrete] // CHECK:STDOUT: %T.220: %OptionalStorage.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] @@ -1382,45 +1382,45 @@ fn F() { // CHECK:STDOUT: %Destroy.Op.type.1d8f74.1: type = fn_type @Destroy.Op.1 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.1: %Destroy.Op.type.1d8f74.1 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.df9cc1.1: = custom_witness (%Destroy.Op.1a2547.1), @Destroy [concrete] -// CHECK:STDOUT: %Destroy.facet.5b4: %Destroy.type = facet_value %ptr.037, (%custom_witness.df9cc1.1) [concrete] -// CHECK:STDOUT: %MaybeUnformed.9f2: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.5b4) [concrete] -// CHECK:STDOUT: %OptionalStorage.impl_witness.00e: = impl_witness imports.%OptionalStorage.impl_witness_table.110, @ptr.as.OptionalStorage.impl(%S) [concrete] -// CHECK:STDOUT: %.08a0: type = maybe_unformed_type %ptr.037 [concrete] -// CHECK:STDOUT: %OptionalStorage.facet.97d: %OptionalStorage.type = facet_value %ptr.037, (%OptionalStorage.impl_witness.00e) [concrete] -// CHECK:STDOUT: %Optional.d06: type = class_type @Optional, @Optional(%OptionalStorage.facet.97d) [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] -// CHECK:STDOUT: %ImplicitAs.type.e9e: type = facet_type <@ImplicitAs, @ImplicitAs(%Optional.d06)> [concrete] -// CHECK:STDOUT: %OptionalAs.type.3b8: type = facet_type <@OptionalAs, @OptionalAs(%T.220)> [symbolic] -// CHECK:STDOUT: %U.042: %OptionalAs.type.3b8 = symbolic_binding U, 1 [symbolic] +// CHECK:STDOUT: %Destroy.facet.8f0: %Destroy.type = facet_value %ptr.1f0, (%custom_witness.df9cc1.1) [concrete] +// CHECK:STDOUT: %MaybeUnformed.2d7: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.8f0) [concrete] +// CHECK:STDOUT: %OptionalStorage.impl_witness.0df: = impl_witness imports.%OptionalStorage.impl_witness_table.110, @ptr.as.OptionalStorage.impl(%NullableParamS) [concrete] +// CHECK:STDOUT: %.280: type = maybe_unformed_type %ptr.1f0 [concrete] +// CHECK:STDOUT: %OptionalStorage.facet.8bf: %OptionalStorage.type = facet_value %ptr.1f0, (%OptionalStorage.impl_witness.0df) [concrete] +// CHECK:STDOUT: %Optional.e08: type = class_type @Optional, @Optional(%OptionalStorage.facet.8bf) [concrete] +// CHECK:STDOUT: %nullable_param_foo.type: type = fn_type @nullable_param_foo [concrete] +// CHECK:STDOUT: %nullable_param_foo: %nullable_param_foo.type = struct_value () [concrete] +// CHECK:STDOUT: %ImplicitAs.type.f6b: type = facet_type <@ImplicitAs, @ImplicitAs(%Optional.e08)> [concrete] +// CHECK:STDOUT: %OptionalAs.type.3b8d: type = facet_type <@OptionalAs, @OptionalAs(%T.220)> [symbolic] +// CHECK:STDOUT: %U.042: %OptionalAs.type.3b8d = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.type.ad5: type = fn_type @U.as_type.as.ImplicitAs.impl.Convert.2, @U.as_type.as.ImplicitAs.impl.167(%T.220, %U.042) [symbolic] // CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.331: %U.as_type.as.ImplicitAs.impl.Convert.type.ad5 = struct_value () [symbolic] -// CHECK:STDOUT: %OptionalAs.type.0c0: type = facet_type <@OptionalAs, @OptionalAs(%OptionalStorage.facet.97d)> [concrete] +// CHECK:STDOUT: %OptionalAs.type.3b80: type = facet_type <@OptionalAs, @OptionalAs(%OptionalStorage.facet.8bf)> [concrete] // CHECK:STDOUT: %T.as_type.as.OptionalAs.impl.Convert.type.774: type = fn_type @T.as_type.as.OptionalAs.impl.Convert, @T.as_type.as.OptionalAs.impl(%T.220) [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalAs.impl.Convert.5f9: %T.as_type.as.OptionalAs.impl.Convert.type.774 = struct_value () [symbolic] -// CHECK:STDOUT: %OptionalAs.impl_witness.55e: = impl_witness imports.%OptionalAs.impl_witness_table.2e9, @T.as_type.as.OptionalAs.impl(%OptionalStorage.facet.97d) [concrete] -// CHECK:STDOUT: %OptionalAs.facet: %OptionalAs.type.0c0 = facet_value %ptr.037, (%OptionalAs.impl_witness.55e) [concrete] -// CHECK:STDOUT: %ImplicitAs.impl_witness.3df: = impl_witness imports.%ImplicitAs.impl_witness_table.bb5, @U.as_type.as.ImplicitAs.impl.167(%OptionalStorage.facet.97d, %OptionalAs.facet) [concrete] -// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.type.261: type = fn_type @U.as_type.as.ImplicitAs.impl.Convert.2, @U.as_type.as.ImplicitAs.impl.167(%OptionalStorage.facet.97d, %OptionalAs.facet) [concrete] -// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.d50: %U.as_type.as.ImplicitAs.impl.Convert.type.261 = struct_value () [concrete] -// CHECK:STDOUT: %ImplicitAs.facet.494: %ImplicitAs.type.e9e = facet_value %ptr.037, (%ImplicitAs.impl_witness.3df) [concrete] -// CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.088: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%Optional.d06, %ImplicitAs.facet.494) [concrete] -// CHECK:STDOUT: %.343: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.088, %ImplicitAs.facet.494 [concrete] -// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %U.as_type.as.ImplicitAs.impl.Convert.d50, @U.as_type.as.ImplicitAs.impl.Convert.2(%OptionalStorage.facet.97d, %OptionalAs.facet) [concrete] -// CHECK:STDOUT: %Destroy.Op.type.1d8f74.4: type = fn_type @Destroy.Op.loc9_11.3 [concrete] +// CHECK:STDOUT: %OptionalAs.impl_witness.f31: = impl_witness imports.%OptionalAs.impl_witness_table.2e9, @T.as_type.as.OptionalAs.impl(%OptionalStorage.facet.8bf) [concrete] +// CHECK:STDOUT: %OptionalAs.facet: %OptionalAs.type.3b80 = facet_value %ptr.1f0, (%OptionalAs.impl_witness.f31) [concrete] +// CHECK:STDOUT: %ImplicitAs.impl_witness.7a9: = impl_witness imports.%ImplicitAs.impl_witness_table.bb5, @U.as_type.as.ImplicitAs.impl.167(%OptionalStorage.facet.8bf, %OptionalAs.facet) [concrete] +// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.type.27b: type = fn_type @U.as_type.as.ImplicitAs.impl.Convert.2, @U.as_type.as.ImplicitAs.impl.167(%OptionalStorage.facet.8bf, %OptionalAs.facet) [concrete] +// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.2e2: %U.as_type.as.ImplicitAs.impl.Convert.type.27b = struct_value () [concrete] +// CHECK:STDOUT: %ImplicitAs.facet.2d4: %ImplicitAs.type.f6b = facet_value %ptr.1f0, (%ImplicitAs.impl_witness.7a9) [concrete] +// CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.767: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%Optional.e08, %ImplicitAs.facet.2d4) [concrete] +// CHECK:STDOUT: %.642: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.767, %ImplicitAs.facet.2d4 [concrete] +// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %U.as_type.as.ImplicitAs.impl.Convert.2e2, @U.as_type.as.ImplicitAs.impl.Convert.2(%OptionalStorage.facet.8bf, %OptionalAs.facet) [concrete] +// CHECK:STDOUT: %Destroy.Op.type.1d8f74.4: type = fn_type @Destroy.Op.loc9_26.3 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.4: %Destroy.Op.type.1d8f74.4 = struct_value () [concrete] -// CHECK:STDOUT: %S.cpp_destructor.type: type = fn_type @S.cpp_destructor [concrete] -// CHECK:STDOUT: %S.cpp_destructor: %S.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %NullableParamS.cpp_destructor.type: type = fn_type @NullableParamS.cpp_destructor [concrete] +// CHECK:STDOUT: %NullableParamS.cpp_destructor: %NullableParamS.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .S = %S.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .NullableParamS = %NullableParamS.decl +// CHECK:STDOUT: .nullable_param_foo = %nullable_param_foo.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] +// CHECK:STDOUT: %NullableParamS.decl: type = class_decl @NullableParamS [concrete = constants.%NullableParamS] {} {} +// CHECK:STDOUT: %nullable_param_foo.cpp_overload_set.value: %nullable_param_foo.cpp_overload_set.type = cpp_overload_set_value @nullable_param_foo.cpp_overload_set [concrete = constants.%nullable_param_foo.cpp_overload_set.value] // CHECK:STDOUT: %Core.import_ref.509: type = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @ptr.as.OptionalStorage.impl.%MaybeUnformed (constants.%MaybeUnformed.ddb)] // CHECK:STDOUT: %Core.import_ref.105 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %Core.import_ref.fa7: @ptr.as.OptionalStorage.impl.%ptr.as.OptionalStorage.impl.Some.type (%ptr.as.OptionalStorage.impl.Some.type.71e) = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @ptr.as.OptionalStorage.impl.%ptr.as.OptionalStorage.impl.Some (constants.%ptr.as.OptionalStorage.impl.Some.caa)] @@ -1428,14 +1428,14 @@ fn F() { // CHECK:STDOUT: %Core.import_ref.306 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %Core.import_ref.3e3 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %OptionalStorage.impl_witness_table.110 = impl_witness_table (%Core.import_ref.509, %Core.import_ref.105, %Core.import_ref.fa7, %Core.import_ref.a90, %Core.import_ref.306, %Core.import_ref.3e3), @ptr.as.OptionalStorage.impl [concrete] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %nullable_param_foo.decl: %nullable_param_foo.type = fn_decl @nullable_param_foo [concrete = constants.%nullable_param_foo] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: -// CHECK:STDOUT: %.loc9_13.1: type = splice_block %Optional [concrete = constants.%Optional.d06] { -// CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value constants.%ptr.037, (constants.%OptionalStorage.impl_witness.00e) [concrete = constants.%OptionalStorage.facet.97d] -// CHECK:STDOUT: %.loc9_13.2: %OptionalStorage.type = converted constants.%ptr.037, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet.97d] -// CHECK:STDOUT: %Optional: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet.97d) [concrete = constants.%Optional.d06] +// CHECK:STDOUT: %.loc9_28.1: type = splice_block %Optional [concrete = constants.%Optional.e08] { +// CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value constants.%ptr.1f0, (constants.%OptionalStorage.impl_witness.0df) [concrete = constants.%OptionalStorage.facet.8bf] +// CHECK:STDOUT: %.loc9_28.2: %OptionalStorage.type = converted constants.%ptr.1f0, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet.8bf] +// CHECK:STDOUT: %Optional: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet.8bf) [concrete = constants.%Optional.e08] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: } @@ -1447,52 +1447,52 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %s.var: ref %S = var_storage %s.var_patt -// CHECK:STDOUT: %.loc8_19.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] -// CHECK:STDOUT: %.loc8_19.2: init %S to %s.var = class_init () [concrete = constants.%S.val] -// CHECK:STDOUT: %.loc8_3: init %S = converted %.loc8_19.1, %.loc8_19.2 [concrete = constants.%S.val] +// CHECK:STDOUT: %s.var: ref %NullableParamS = var_storage %s.var_patt +// CHECK:STDOUT: %.loc8_32.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc8_32.2: init %NullableParamS to %s.var = class_init () [concrete = constants.%NullableParamS.val] +// CHECK:STDOUT: %.loc8_3: init %NullableParamS = converted %.loc8_32.1, %.loc8_32.2 [concrete = constants.%NullableParamS.val] // CHECK:STDOUT: assign %s.var, %.loc8_3 -// CHECK:STDOUT: %.loc8_13: type = splice_block %S.ref [concrete = constants.%S] { +// CHECK:STDOUT: %.loc8_13: type = splice_block %NullableParamS.ref [concrete = constants.%NullableParamS] { // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %S.ref: type = name_ref S, imports.%S.decl [concrete = constants.%S] +// CHECK:STDOUT: %NullableParamS.ref: type = name_ref NullableParamS, imports.%NullableParamS.decl [concrete = constants.%NullableParamS] // CHECK:STDOUT: } -// CHECK:STDOUT: %s: ref %S = wrapper_binding s, %s.var +// CHECK:STDOUT: %s: ref %NullableParamS = wrapper_binding s, %s.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete = constants.%s.patt] -// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete = constants.%s.var_patt] +// CHECK:STDOUT: %s.patt: %pattern_type.c3f = ref_binding_pattern s [concrete = constants.%s.patt] +// CHECK:STDOUT: %s.var_patt: %pattern_type.c3f = var_pattern %s.patt [concrete = constants.%s.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %s.ref: ref %S = name_ref s, %s -// CHECK:STDOUT: %addr: %ptr.037 = addr_of %s.ref -// CHECK:STDOUT: %impl.elem0: %.343 = impl_witness_access constants.%ImplicitAs.impl_witness.3df, element0 [concrete = constants.%U.as_type.as.ImplicitAs.impl.Convert.d50] -// CHECK:STDOUT: %bound_method.loc9_11.1: = bound_method %addr, %impl.elem0 -// CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @U.as_type.as.ImplicitAs.impl.Convert.2(constants.%OptionalStorage.facet.97d, constants.%OptionalAs.facet) [concrete = constants.%U.as_type.as.ImplicitAs.impl.Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc9_11.2: = bound_method %addr, %specific_fn -// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.call: init %Optional.d06 = call %bound_method.loc9_11.2(%addr) -// CHECK:STDOUT: %.loc9_11.1: init %Optional.d06 = converted %addr, %U.as_type.as.ImplicitAs.impl.Convert.call -// CHECK:STDOUT: %.loc9_11.2: ref %Optional.d06 = temporary_storage -// CHECK:STDOUT: %.loc9_11.3: ref %Optional.d06 = temporary %.loc9_11.2, %.loc9_11.1 -// CHECK:STDOUT: %.loc9_11.4: %Optional.d06 = acquire_value %.loc9_11.3 -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl(%.loc9_11.4) -// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc9_11.3, constants.%Destroy.Op.1a2547.4 -// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc9_11.3) -// CHECK:STDOUT: %S.cpp_destructor.bound: = bound_method %s.var, constants.%S.cpp_destructor -// CHECK:STDOUT: %S.cpp_destructor.call: init %empty_tuple.type = call %S.cpp_destructor.bound(%s.var) +// CHECK:STDOUT: %nullable_param_foo.ref: %nullable_param_foo.cpp_overload_set.type = name_ref nullable_param_foo, imports.%nullable_param_foo.cpp_overload_set.value [concrete = constants.%nullable_param_foo.cpp_overload_set.value] +// CHECK:STDOUT: %s.ref: ref %NullableParamS = name_ref s, %s +// CHECK:STDOUT: %addr: %ptr.1f0 = addr_of %s.ref +// CHECK:STDOUT: %impl.elem0: %.642 = impl_witness_access constants.%ImplicitAs.impl_witness.7a9, element0 [concrete = constants.%U.as_type.as.ImplicitAs.impl.Convert.2e2] +// CHECK:STDOUT: %bound_method.loc9_26.1: = bound_method %addr, %impl.elem0 +// CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @U.as_type.as.ImplicitAs.impl.Convert.2(constants.%OptionalStorage.facet.8bf, constants.%OptionalAs.facet) [concrete = constants.%U.as_type.as.ImplicitAs.impl.Convert.specific_fn] +// CHECK:STDOUT: %bound_method.loc9_26.2: = bound_method %addr, %specific_fn +// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.call: init %Optional.e08 = call %bound_method.loc9_26.2(%addr) +// CHECK:STDOUT: %.loc9_26.1: init %Optional.e08 = converted %addr, %U.as_type.as.ImplicitAs.impl.Convert.call +// CHECK:STDOUT: %.loc9_26.2: ref %Optional.e08 = temporary_storage +// CHECK:STDOUT: %.loc9_26.3: ref %Optional.e08 = temporary %.loc9_26.2, %.loc9_26.1 +// CHECK:STDOUT: %.loc9_26.4: %Optional.e08 = acquire_value %.loc9_26.3 +// CHECK:STDOUT: %nullable_param_foo.call: init %empty_tuple.type = call imports.%nullable_param_foo.decl(%.loc9_26.4) +// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc9_26.3, constants.%Destroy.Op.1a2547.4 +// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc9_26.3) +// CHECK:STDOUT: %NullableParamS.cpp_destructor.bound: = bound_method %s.var, constants.%NullableParamS.cpp_destructor +// CHECK:STDOUT: %NullableParamS.cpp_destructor.call: init %empty_tuple.type = call %NullableParamS.cpp_destructor.bound(%s.var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc9_11.1(%self.param: ref %.08a0) { +// CHECK:STDOUT: fn @Destroy.Op.loc9_26.1(%self.param: ref %.280) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc9_11.2(%self.param: ref %MaybeUnformed.9f2) { +// CHECK:STDOUT: fn @Destroy.Op.loc9_26.2(%self.param: ref %MaybeUnformed.2d7) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc9_11.3(%self.param: ref %Optional.d06) { +// CHECK:STDOUT: fn @Destroy.Op.loc9_26.3(%self.param: ref %Optional.e08) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } @@ -1501,16 +1501,16 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %nullable_param_foo.cpp_overload_set.type: type = cpp_overload_set_type @nullable_param_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %nullable_param_foo.cpp_overload_set.value: %nullable_param_foo.cpp_overload_set.type = cpp_overload_set_value @nullable_param_foo.cpp_overload_set [concrete] // CHECK:STDOUT: %Optional.type: type = generic_class_type @Optional [concrete] // CHECK:STDOUT: %Optional.generic: %Optional.type = struct_value () [concrete] // CHECK:STDOUT: %OptionalStorage.type: type = facet_type <@OptionalStorage> [concrete] // CHECK:STDOUT: %T.220: %OptionalStorage.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Optional.None.type.bdc: type = fn_type @Optional.None, @Optional(%T.220) [symbolic] // CHECK:STDOUT: %Optional.None.01e: %Optional.None.type.bdc = struct_value () [symbolic] -// CHECK:STDOUT: %S: type = class_type @S [concrete] -// CHECK:STDOUT: %ptr.037: type = ptr_type %S [concrete] +// CHECK:STDOUT: %NullableParamS: type = class_type @NullableParamS [concrete] +// CHECK:STDOUT: %ptr.1f0: type = ptr_type %NullableParamS [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %ptr.e8f: type = ptr_type %T.67d [symbolic] @@ -1522,18 +1522,18 @@ fn F() { // CHECK:STDOUT: %Destroy.Op.type.1d8f74.1: type = fn_type @Destroy.Op.1 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.1: %Destroy.Op.type.1d8f74.1 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.df9cc1.1: = custom_witness (%Destroy.Op.1a2547.1), @Destroy [concrete] -// CHECK:STDOUT: %Destroy.facet.5b4: %Destroy.type = facet_value %ptr.037, (%custom_witness.df9cc1.1) [concrete] -// CHECK:STDOUT: %MaybeUnformed.9f2: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.5b4) [concrete] -// CHECK:STDOUT: %OptionalStorage.impl_witness.00e: = impl_witness imports.%OptionalStorage.impl_witness_table.110, @ptr.as.OptionalStorage.impl(%S) [concrete] -// CHECK:STDOUT: %.08a: type = maybe_unformed_type %ptr.037 [concrete] -// CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value %ptr.037, (%OptionalStorage.impl_witness.00e) [concrete] -// CHECK:STDOUT: %Optional.d06: type = class_type @Optional, @Optional(%OptionalStorage.facet) [concrete] -// CHECK:STDOUT: %Optional.None.type.428: type = fn_type @Optional.None, @Optional(%OptionalStorage.facet) [concrete] -// CHECK:STDOUT: %Optional.None.0dc: %Optional.None.type.428 = struct_value () [concrete] -// CHECK:STDOUT: %Optional.None.specific_fn: = specific_function %Optional.None.0dc, @Optional.None(%OptionalStorage.facet) [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.Op.type.1d8f74.4: type = fn_type @Destroy.Op.loc8_38.3 [concrete] +// CHECK:STDOUT: %Destroy.facet.8f0: %Destroy.type = facet_value %ptr.1f0, (%custom_witness.df9cc1.1) [concrete] +// CHECK:STDOUT: %MaybeUnformed.2d7: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.8f0) [concrete] +// CHECK:STDOUT: %OptionalStorage.impl_witness.0df: = impl_witness imports.%OptionalStorage.impl_witness_table.110, @ptr.as.OptionalStorage.impl(%NullableParamS) [concrete] +// CHECK:STDOUT: %.280: type = maybe_unformed_type %ptr.1f0 [concrete] +// CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value %ptr.1f0, (%OptionalStorage.impl_witness.0df) [concrete] +// CHECK:STDOUT: %Optional.e08: type = class_type @Optional, @Optional(%OptionalStorage.facet) [concrete] +// CHECK:STDOUT: %Optional.None.type.12d: type = fn_type @Optional.None, @Optional(%OptionalStorage.facet) [concrete] +// CHECK:STDOUT: %Optional.None.82d: %Optional.None.type.12d = struct_value () [concrete] +// CHECK:STDOUT: %Optional.None.specific_fn: = specific_function %Optional.None.82d, @Optional.None(%OptionalStorage.facet) [concrete] +// CHECK:STDOUT: %nullable_param_foo.type: type = fn_type @nullable_param_foo [concrete] +// CHECK:STDOUT: %nullable_param_foo: %nullable_param_foo.type = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.Op.type.1d8f74.4: type = fn_type @Destroy.Op.loc8_66.3 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.4: %Destroy.Op.type.1d8f74.4 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1545,14 +1545,14 @@ fn F() { // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value -// CHECK:STDOUT: .S = %S.decl +// CHECK:STDOUT: .nullable_param_foo = %nullable_param_foo.cpp_overload_set.value +// CHECK:STDOUT: .NullableParamS = %NullableParamS.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] +// CHECK:STDOUT: %nullable_param_foo.cpp_overload_set.value: %nullable_param_foo.cpp_overload_set.type = cpp_overload_set_value @nullable_param_foo.cpp_overload_set [concrete = constants.%nullable_param_foo.cpp_overload_set.value] // CHECK:STDOUT: %Core.Optional: %Optional.type = import_ref Core//prelude/types/optional, Optional, loaded [concrete = constants.%Optional.generic] // CHECK:STDOUT: %Core.import_ref.e9f: @Optional.%Optional.None.type (%Optional.None.type.bdc) = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @Optional.%Optional.None (constants.%Optional.None.01e)] -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} +// CHECK:STDOUT: %NullableParamS.decl: type = class_decl @NullableParamS [concrete = constants.%NullableParamS] {} {} // CHECK:STDOUT: %Core.import_ref.509: type = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @ptr.as.OptionalStorage.impl.%MaybeUnformed (constants.%MaybeUnformed.ddb)] // CHECK:STDOUT: %Core.import_ref.307: @ptr.as.OptionalStorage.impl.%ptr.as.OptionalStorage.impl.None.type (%ptr.as.OptionalStorage.impl.None.type.2a7) = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @ptr.as.OptionalStorage.impl.%ptr.as.OptionalStorage.impl.None (constants.%ptr.as.OptionalStorage.impl.None.c23)] // CHECK:STDOUT: %Core.import_ref.c9a = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded @@ -1560,14 +1560,14 @@ fn F() { // CHECK:STDOUT: %Core.import_ref.306 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %Core.import_ref.3e3 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %OptionalStorage.impl_witness_table.110 = impl_witness_table (%Core.import_ref.509, %Core.import_ref.307, %Core.import_ref.c9a, %Core.import_ref.a90, %Core.import_ref.306, %Core.import_ref.3e3), @ptr.as.OptionalStorage.impl [concrete] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %nullable_param_foo.decl: %nullable_param_foo.type = fn_decl @nullable_param_foo [concrete = constants.%nullable_param_foo] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: -// CHECK:STDOUT: %.loc8_39.1: type = splice_block %Optional [concrete = constants.%Optional.d06] { -// CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value constants.%ptr.037, (constants.%OptionalStorage.impl_witness.00e) [concrete = constants.%OptionalStorage.facet] -// CHECK:STDOUT: %.loc8_39.2: %OptionalStorage.type = converted constants.%ptr.037, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet] -// CHECK:STDOUT: %Optional: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet) [concrete = constants.%Optional.d06] +// CHECK:STDOUT: %.loc8_67.1: type = splice_block %Optional [concrete = constants.%Optional.e08] { +// CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value constants.%ptr.1f0, (constants.%OptionalStorage.impl_witness.0df) [concrete = constants.%OptionalStorage.facet] +// CHECK:STDOUT: %.loc8_67.2: %OptionalStorage.type = converted constants.%ptr.1f0, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet] +// CHECK:STDOUT: %Optional: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet) [concrete = constants.%Optional.e08] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: } @@ -1577,39 +1577,39 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8_3: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] +// CHECK:STDOUT: %nullable_param_foo.ref: %nullable_param_foo.cpp_overload_set.type = name_ref nullable_param_foo, imports.%nullable_param_foo.cpp_overload_set.value [concrete = constants.%nullable_param_foo.cpp_overload_set.value] // CHECK:STDOUT: %Core.ref: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %Optional.ref: %Optional.type = name_ref Optional, imports.%Core.Optional [concrete = constants.%Optional.generic] -// CHECK:STDOUT: %Cpp.ref.loc8_25: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %S.ref: type = name_ref S, imports.%S.decl [concrete = constants.%S] -// CHECK:STDOUT: %ptr: type = ptr_type %S.ref [concrete = constants.%ptr.037] -// CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value %ptr, (constants.%OptionalStorage.impl_witness.00e) [concrete = constants.%OptionalStorage.facet] -// CHECK:STDOUT: %.loc8_31: %OptionalStorage.type = converted %ptr, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet] -// CHECK:STDOUT: %Optional: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet) [concrete = constants.%Optional.d06] -// CHECK:STDOUT: %.loc8_32: %Optional.None.type.428 = specific_constant imports.%Core.import_ref.e9f, @Optional(constants.%OptionalStorage.facet) [concrete = constants.%Optional.None.0dc] -// CHECK:STDOUT: %None.ref: %Optional.None.type.428 = name_ref None, %.loc8_32 [concrete = constants.%Optional.None.0dc] +// CHECK:STDOUT: %Cpp.ref.loc8_40: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %NullableParamS.ref: type = name_ref NullableParamS, imports.%NullableParamS.decl [concrete = constants.%NullableParamS] +// CHECK:STDOUT: %ptr: type = ptr_type %NullableParamS.ref [concrete = constants.%ptr.1f0] +// CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value %ptr, (constants.%OptionalStorage.impl_witness.0df) [concrete = constants.%OptionalStorage.facet] +// CHECK:STDOUT: %.loc8_59: %OptionalStorage.type = converted %ptr, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet] +// CHECK:STDOUT: %Optional: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet) [concrete = constants.%Optional.e08] +// CHECK:STDOUT: %.loc8_60: %Optional.None.type.12d = specific_constant imports.%Core.import_ref.e9f, @Optional(constants.%OptionalStorage.facet) [concrete = constants.%Optional.None.82d] +// CHECK:STDOUT: %None.ref: %Optional.None.type.12d = name_ref None, %.loc8_60 [concrete = constants.%Optional.None.82d] // CHECK:STDOUT: %Optional.None.specific_fn: = specific_function %None.ref, @Optional.None(constants.%OptionalStorage.facet) [concrete = constants.%Optional.None.specific_fn] -// CHECK:STDOUT: %Optional.None.call: init %Optional.d06 = call %Optional.None.specific_fn() -// CHECK:STDOUT: %.loc8_38.1: ref %Optional.d06 = temporary_storage -// CHECK:STDOUT: %.loc8_38.2: ref %Optional.d06 = temporary %.loc8_38.1, %Optional.None.call -// CHECK:STDOUT: %.loc8_38.3: %Optional.d06 = acquire_value %.loc8_38.2 -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl(%.loc8_38.3) -// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc8_38.2, constants.%Destroy.Op.1a2547.4 -// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc8_38.2) +// CHECK:STDOUT: %Optional.None.call: init %Optional.e08 = call %Optional.None.specific_fn() +// CHECK:STDOUT: %.loc8_66.1: ref %Optional.e08 = temporary_storage +// CHECK:STDOUT: %.loc8_66.2: ref %Optional.e08 = temporary %.loc8_66.1, %Optional.None.call +// CHECK:STDOUT: %.loc8_66.3: %Optional.e08 = acquire_value %.loc8_66.2 +// CHECK:STDOUT: %nullable_param_foo.call: init %empty_tuple.type = call imports.%nullable_param_foo.decl(%.loc8_66.3) +// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc8_66.2, constants.%Destroy.Op.1a2547.4 +// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc8_66.2) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc8_38.1(%self.param: ref %.08a) { +// CHECK:STDOUT: fn @Destroy.Op.loc8_66.1(%self.param: ref %.280) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc8_38.2(%self.param: ref %MaybeUnformed.9f2) { +// CHECK:STDOUT: fn @Destroy.Op.loc8_66.2(%self.param: ref %MaybeUnformed.2d7) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc8_38.3(%self.param: ref %Optional.d06) { +// CHECK:STDOUT: fn @Destroy.Op.loc8_66.3(%self.param: ref %Optional.e08) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } @@ -1618,22 +1618,22 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %S: type = class_type @S [concrete] +// CHECK:STDOUT: %NullableParamS: type = class_type @NullableParamS [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %pattern_type.0f5: type = pattern_type %S [concrete] -// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] -// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] +// CHECK:STDOUT: %pattern_type.c3f: type = pattern_type %NullableParamS [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.c3f = ref_binding_pattern s [concrete] +// CHECK:STDOUT: %s.var_patt: %pattern_type.c3f = var_pattern %s.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] -// CHECK:STDOUT: %S.val: %S = struct_value () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %NullableParamS.val: %NullableParamS = struct_value () [concrete] +// CHECK:STDOUT: %nullable_param_foo.cpp_overload_set.type: type = cpp_overload_set_type @nullable_param_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %nullable_param_foo.cpp_overload_set.value: %nullable_param_foo.cpp_overload_set.type = cpp_overload_set_value @nullable_param_foo.cpp_overload_set [concrete] // CHECK:STDOUT: %Optional.type: type = generic_class_type @Optional [concrete] // CHECK:STDOUT: %Optional.generic: %Optional.type = struct_value () [concrete] // CHECK:STDOUT: %OptionalStorage.type: type = facet_type <@OptionalStorage> [concrete] // CHECK:STDOUT: %T.220: %OptionalStorage.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Optional.Some.type.304: type = fn_type @Optional.Some, @Optional(%T.220) [symbolic] // CHECK:STDOUT: %Optional.Some.2a0: %Optional.Some.type.304 = struct_value () [symbolic] -// CHECK:STDOUT: %ptr.037: type = ptr_type %S [concrete] +// CHECK:STDOUT: %ptr.1f0: type = ptr_type %NullableParamS [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %ptr.e8f: type = ptr_type %T.67d [symbolic] @@ -1645,21 +1645,21 @@ fn F() { // CHECK:STDOUT: %Destroy.Op.type.1d8f74.1: type = fn_type @Destroy.Op.1 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.1: %Destroy.Op.type.1d8f74.1 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.df9cc1.1: = custom_witness (%Destroy.Op.1a2547.1), @Destroy [concrete] -// CHECK:STDOUT: %Destroy.facet.5b4: %Destroy.type = facet_value %ptr.037, (%custom_witness.df9cc1.1) [concrete] -// CHECK:STDOUT: %MaybeUnformed.9f2: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.5b4) [concrete] -// CHECK:STDOUT: %OptionalStorage.impl_witness.00e: = impl_witness imports.%OptionalStorage.impl_witness_table.110, @ptr.as.OptionalStorage.impl(%S) [concrete] -// CHECK:STDOUT: %.08a0: type = maybe_unformed_type %ptr.037 [concrete] -// CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value %ptr.037, (%OptionalStorage.impl_witness.00e) [concrete] -// CHECK:STDOUT: %Optional.d06: type = class_type @Optional, @Optional(%OptionalStorage.facet) [concrete] -// CHECK:STDOUT: %Optional.Some.type.874: type = fn_type @Optional.Some, @Optional(%OptionalStorage.facet) [concrete] -// CHECK:STDOUT: %Optional.Some.44b: %Optional.Some.type.874 = struct_value () [concrete] -// CHECK:STDOUT: %Optional.Some.specific_fn: = specific_function %Optional.Some.44b, @Optional.Some(%OptionalStorage.facet) [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.Op.type.1d8f74.4: type = fn_type @Destroy.Op.loc9_40.3 [concrete] +// CHECK:STDOUT: %Destroy.facet.8f0: %Destroy.type = facet_value %ptr.1f0, (%custom_witness.df9cc1.1) [concrete] +// CHECK:STDOUT: %MaybeUnformed.2d7: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.8f0) [concrete] +// CHECK:STDOUT: %OptionalStorage.impl_witness.0df: = impl_witness imports.%OptionalStorage.impl_witness_table.110, @ptr.as.OptionalStorage.impl(%NullableParamS) [concrete] +// CHECK:STDOUT: %.280: type = maybe_unformed_type %ptr.1f0 [concrete] +// CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value %ptr.1f0, (%OptionalStorage.impl_witness.0df) [concrete] +// CHECK:STDOUT: %Optional.e08: type = class_type @Optional, @Optional(%OptionalStorage.facet) [concrete] +// CHECK:STDOUT: %Optional.Some.type.129: type = fn_type @Optional.Some, @Optional(%OptionalStorage.facet) [concrete] +// CHECK:STDOUT: %Optional.Some.399: %Optional.Some.type.129 = struct_value () [concrete] +// CHECK:STDOUT: %Optional.Some.specific_fn: = specific_function %Optional.Some.399, @Optional.Some(%OptionalStorage.facet) [concrete] +// CHECK:STDOUT: %nullable_param_foo.type: type = fn_type @nullable_param_foo [concrete] +// CHECK:STDOUT: %nullable_param_foo: %nullable_param_foo.type = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.Op.type.1d8f74.4: type = fn_type @Destroy.Op.loc9_68.3 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.4: %Destroy.Op.type.1d8f74.4 = struct_value () [concrete] -// CHECK:STDOUT: %S.cpp_destructor.type: type = fn_type @S.cpp_destructor [concrete] -// CHECK:STDOUT: %S.cpp_destructor: %S.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %NullableParamS.cpp_destructor.type: type = fn_type @NullableParamS.cpp_destructor [concrete] +// CHECK:STDOUT: %NullableParamS.cpp_destructor: %NullableParamS.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -1670,12 +1670,12 @@ fn F() { // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .S = %S.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .NullableParamS = %NullableParamS.decl +// CHECK:STDOUT: .nullable_param_foo = %nullable_param_foo.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] +// CHECK:STDOUT: %NullableParamS.decl: type = class_decl @NullableParamS [concrete = constants.%NullableParamS] {} {} +// CHECK:STDOUT: %nullable_param_foo.cpp_overload_set.value: %nullable_param_foo.cpp_overload_set.type = cpp_overload_set_value @nullable_param_foo.cpp_overload_set [concrete = constants.%nullable_param_foo.cpp_overload_set.value] // CHECK:STDOUT: %Core.Optional: %Optional.type = import_ref Core//prelude/types/optional, Optional, loaded [concrete = constants.%Optional.generic] // CHECK:STDOUT: %Core.import_ref.48e: @Optional.%Optional.Some.type (%Optional.Some.type.304) = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @Optional.%Optional.Some (constants.%Optional.Some.2a0)] // CHECK:STDOUT: %Core.import_ref.509: type = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @ptr.as.OptionalStorage.impl.%MaybeUnformed (constants.%MaybeUnformed.ddb)] @@ -1685,14 +1685,14 @@ fn F() { // CHECK:STDOUT: %Core.import_ref.306 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %Core.import_ref.3e3 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %OptionalStorage.impl_witness_table.110 = impl_witness_table (%Core.import_ref.509, %Core.import_ref.105, %Core.import_ref.fa7, %Core.import_ref.a90, %Core.import_ref.306, %Core.import_ref.3e3), @ptr.as.OptionalStorage.impl [concrete] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %nullable_param_foo.decl: %nullable_param_foo.type = fn_decl @nullable_param_foo [concrete = constants.%nullable_param_foo] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: -// CHECK:STDOUT: %.loc9_41.1: type = splice_block %Optional [concrete = constants.%Optional.d06] { -// CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value constants.%ptr.037, (constants.%OptionalStorage.impl_witness.00e) [concrete = constants.%OptionalStorage.facet] -// CHECK:STDOUT: %.loc9_41.2: %OptionalStorage.type = converted constants.%ptr.037, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet] -// CHECK:STDOUT: %Optional: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet) [concrete = constants.%Optional.d06] +// CHECK:STDOUT: %.loc9_69.1: type = splice_block %Optional [concrete = constants.%Optional.e08] { +// CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value constants.%ptr.1f0, (constants.%OptionalStorage.impl_witness.0df) [concrete = constants.%OptionalStorage.facet] +// CHECK:STDOUT: %.loc9_69.2: %OptionalStorage.type = converted constants.%ptr.1f0, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet] +// CHECK:STDOUT: %Optional: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet) [concrete = constants.%Optional.e08] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: } @@ -1701,62 +1701,62 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %s.var: ref %S = var_storage %s.var_patt -// CHECK:STDOUT: %.loc8_19.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] -// CHECK:STDOUT: %.loc8_19.2: init %S to %s.var = class_init () [concrete = constants.%S.val] -// CHECK:STDOUT: %.loc8_3: init %S = converted %.loc8_19.1, %.loc8_19.2 [concrete = constants.%S.val] +// CHECK:STDOUT: %s.var: ref %NullableParamS = var_storage %s.var_patt +// CHECK:STDOUT: %.loc8_32.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc8_32.2: init %NullableParamS to %s.var = class_init () [concrete = constants.%NullableParamS.val] +// CHECK:STDOUT: %.loc8_3: init %NullableParamS = converted %.loc8_32.1, %.loc8_32.2 [concrete = constants.%NullableParamS.val] // CHECK:STDOUT: assign %s.var, %.loc8_3 -// CHECK:STDOUT: %.loc8_13: type = splice_block %S.ref.loc8 [concrete = constants.%S] { +// CHECK:STDOUT: %.loc8_13: type = splice_block %NullableParamS.ref.loc8 [concrete = constants.%NullableParamS] { // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %S.ref.loc8: type = name_ref S, imports.%S.decl [concrete = constants.%S] +// CHECK:STDOUT: %NullableParamS.ref.loc8: type = name_ref NullableParamS, imports.%NullableParamS.decl [concrete = constants.%NullableParamS] // CHECK:STDOUT: } -// CHECK:STDOUT: %s: ref %S = wrapper_binding s, %s.var +// CHECK:STDOUT: %s: ref %NullableParamS = wrapper_binding s, %s.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete = constants.%s.patt] -// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete = constants.%s.var_patt] +// CHECK:STDOUT: %s.patt: %pattern_type.c3f = ref_binding_pattern s [concrete = constants.%s.patt] +// CHECK:STDOUT: %s.var_patt: %pattern_type.c3f = var_pattern %s.patt [concrete = constants.%s.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc9_3: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] +// CHECK:STDOUT: %nullable_param_foo.ref: %nullable_param_foo.cpp_overload_set.type = name_ref nullable_param_foo, imports.%nullable_param_foo.cpp_overload_set.value [concrete = constants.%nullable_param_foo.cpp_overload_set.value] // CHECK:STDOUT: %Core.ref: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %Optional.ref: %Optional.type = name_ref Optional, imports.%Core.Optional [concrete = constants.%Optional.generic] -// CHECK:STDOUT: %Cpp.ref.loc9_25: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %S.ref.loc9: type = name_ref S, imports.%S.decl [concrete = constants.%S] -// CHECK:STDOUT: %ptr: type = ptr_type %S.ref.loc9 [concrete = constants.%ptr.037] -// CHECK:STDOUT: %OptionalStorage.facet.loc9_31: %OptionalStorage.type = facet_value %ptr, (constants.%OptionalStorage.impl_witness.00e) [concrete = constants.%OptionalStorage.facet] -// CHECK:STDOUT: %.loc9_31: %OptionalStorage.type = converted %ptr, %OptionalStorage.facet.loc9_31 [concrete = constants.%OptionalStorage.facet] -// CHECK:STDOUT: %Optional: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet) [concrete = constants.%Optional.d06] -// CHECK:STDOUT: %.loc9_32: %Optional.Some.type.874 = specific_constant imports.%Core.import_ref.48e, @Optional(constants.%OptionalStorage.facet) [concrete = constants.%Optional.Some.44b] -// CHECK:STDOUT: %Some.ref: %Optional.Some.type.874 = name_ref Some, %.loc9_32 [concrete = constants.%Optional.Some.44b] -// CHECK:STDOUT: %s.ref: ref %S = name_ref s, %s -// CHECK:STDOUT: %addr: %ptr.037 = addr_of %s.ref -// CHECK:STDOUT: %OptionalStorage.facet.loc9_40.1: %OptionalStorage.type = facet_value constants.%ptr.037, (constants.%OptionalStorage.impl_witness.00e) [concrete = constants.%OptionalStorage.facet] -// CHECK:STDOUT: %.loc9_40.1: %OptionalStorage.type = converted constants.%ptr.037, %OptionalStorage.facet.loc9_40.1 [concrete = constants.%OptionalStorage.facet] -// CHECK:STDOUT: %OptionalStorage.facet.loc9_40.2: %OptionalStorage.type = facet_value constants.%ptr.037, (constants.%OptionalStorage.impl_witness.00e) [concrete = constants.%OptionalStorage.facet] -// CHECK:STDOUT: %.loc9_40.2: %OptionalStorage.type = converted constants.%ptr.037, %OptionalStorage.facet.loc9_40.2 [concrete = constants.%OptionalStorage.facet] +// CHECK:STDOUT: %Cpp.ref.loc9_40: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %NullableParamS.ref.loc9: type = name_ref NullableParamS, imports.%NullableParamS.decl [concrete = constants.%NullableParamS] +// CHECK:STDOUT: %ptr: type = ptr_type %NullableParamS.ref.loc9 [concrete = constants.%ptr.1f0] +// CHECK:STDOUT: %OptionalStorage.facet.loc9_59: %OptionalStorage.type = facet_value %ptr, (constants.%OptionalStorage.impl_witness.0df) [concrete = constants.%OptionalStorage.facet] +// CHECK:STDOUT: %.loc9_59: %OptionalStorage.type = converted %ptr, %OptionalStorage.facet.loc9_59 [concrete = constants.%OptionalStorage.facet] +// CHECK:STDOUT: %Optional: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet) [concrete = constants.%Optional.e08] +// CHECK:STDOUT: %.loc9_60: %Optional.Some.type.129 = specific_constant imports.%Core.import_ref.48e, @Optional(constants.%OptionalStorage.facet) [concrete = constants.%Optional.Some.399] +// CHECK:STDOUT: %Some.ref: %Optional.Some.type.129 = name_ref Some, %.loc9_60 [concrete = constants.%Optional.Some.399] +// CHECK:STDOUT: %s.ref: ref %NullableParamS = name_ref s, %s +// CHECK:STDOUT: %addr: %ptr.1f0 = addr_of %s.ref +// CHECK:STDOUT: %OptionalStorage.facet.loc9_68.1: %OptionalStorage.type = facet_value constants.%ptr.1f0, (constants.%OptionalStorage.impl_witness.0df) [concrete = constants.%OptionalStorage.facet] +// CHECK:STDOUT: %.loc9_68.1: %OptionalStorage.type = converted constants.%ptr.1f0, %OptionalStorage.facet.loc9_68.1 [concrete = constants.%OptionalStorage.facet] +// CHECK:STDOUT: %OptionalStorage.facet.loc9_68.2: %OptionalStorage.type = facet_value constants.%ptr.1f0, (constants.%OptionalStorage.impl_witness.0df) [concrete = constants.%OptionalStorage.facet] +// CHECK:STDOUT: %.loc9_68.2: %OptionalStorage.type = converted constants.%ptr.1f0, %OptionalStorage.facet.loc9_68.2 [concrete = constants.%OptionalStorage.facet] // CHECK:STDOUT: %Optional.Some.specific_fn: = specific_function %Some.ref, @Optional.Some(constants.%OptionalStorage.facet) [concrete = constants.%Optional.Some.specific_fn] -// CHECK:STDOUT: %Optional.Some.call: init %Optional.d06 = call %Optional.Some.specific_fn(%addr) -// CHECK:STDOUT: %.loc9_40.3: ref %Optional.d06 = temporary_storage -// CHECK:STDOUT: %.loc9_40.4: ref %Optional.d06 = temporary %.loc9_40.3, %Optional.Some.call -// CHECK:STDOUT: %.loc9_40.5: %Optional.d06 = acquire_value %.loc9_40.4 -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl(%.loc9_40.5) -// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc9_40.4, constants.%Destroy.Op.1a2547.4 -// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc9_40.4) -// CHECK:STDOUT: %S.cpp_destructor.bound: = bound_method %s.var, constants.%S.cpp_destructor -// CHECK:STDOUT: %S.cpp_destructor.call: init %empty_tuple.type = call %S.cpp_destructor.bound(%s.var) +// CHECK:STDOUT: %Optional.Some.call: init %Optional.e08 = call %Optional.Some.specific_fn(%addr) +// CHECK:STDOUT: %.loc9_68.3: ref %Optional.e08 = temporary_storage +// CHECK:STDOUT: %.loc9_68.4: ref %Optional.e08 = temporary %.loc9_68.3, %Optional.Some.call +// CHECK:STDOUT: %.loc9_68.5: %Optional.e08 = acquire_value %.loc9_68.4 +// CHECK:STDOUT: %nullable_param_foo.call: init %empty_tuple.type = call imports.%nullable_param_foo.decl(%.loc9_68.5) +// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc9_68.4, constants.%Destroy.Op.1a2547.4 +// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc9_68.4) +// CHECK:STDOUT: %NullableParamS.cpp_destructor.bound: = bound_method %s.var, constants.%NullableParamS.cpp_destructor +// CHECK:STDOUT: %NullableParamS.cpp_destructor.call: init %empty_tuple.type = call %NullableParamS.cpp_destructor.bound(%s.var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc9_40.1(%self.param: ref %.08a0) { +// CHECK:STDOUT: fn @Destroy.Op.loc9_68.1(%self.param: ref %.280) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc9_40.2(%self.param: ref %MaybeUnformed.9f2) { +// CHECK:STDOUT: fn @Destroy.Op.loc9_68.2(%self.param: ref %MaybeUnformed.2d7) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc9_40.3(%self.param: ref %Optional.d06) { +// CHECK:STDOUT: fn @Destroy.Op.loc9_68.3(%self.param: ref %Optional.e08) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } @@ -1765,12 +1765,12 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %get.cpp_overload_set.type: type = cpp_overload_set_type @get.cpp_overload_set [concrete] -// CHECK:STDOUT: %get.cpp_overload_set.value: %get.cpp_overload_set.type = cpp_overload_set_value @get.cpp_overload_set [concrete] -// CHECK:STDOUT: %S: type = class_type @S [concrete] -// CHECK:STDOUT: %ptr.037: type = ptr_type %S [concrete] +// CHECK:STDOUT: %nullable_param_foo.cpp_overload_set.type: type = cpp_overload_set_type @nullable_param_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %nullable_param_foo.cpp_overload_set.value: %nullable_param_foo.cpp_overload_set.type = cpp_overload_set_value @nullable_param_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %nullable_param_get.cpp_overload_set.type: type = cpp_overload_set_type @nullable_param_get.cpp_overload_set [concrete] +// CHECK:STDOUT: %nullable_param_get.cpp_overload_set.value: %nullable_param_get.cpp_overload_set.type = cpp_overload_set_value @nullable_param_get.cpp_overload_set [concrete] +// CHECK:STDOUT: %NullableParamS: type = class_type @NullableParamS [concrete] +// CHECK:STDOUT: %ptr.1f0: type = ptr_type %NullableParamS [concrete] // CHECK:STDOUT: %OptionalStorage.type: type = facet_type <@OptionalStorage> [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %T.67d: type = symbolic_binding T, 0 [symbolic] @@ -1781,28 +1781,28 @@ fn F() { // CHECK:STDOUT: %Destroy.Op.type.1d8f74.1: type = fn_type @Destroy.Op.1 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.1: %Destroy.Op.type.1d8f74.1 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.df9cc1.1: = custom_witness (%Destroy.Op.1a2547.1), @Destroy [concrete] -// CHECK:STDOUT: %Destroy.facet.5b4: %Destroy.type = facet_value %ptr.037, (%custom_witness.df9cc1.1) [concrete] -// CHECK:STDOUT: %MaybeUnformed.9f2: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.5b4) [concrete] -// CHECK:STDOUT: %OptionalStorage.impl_witness.00e: = impl_witness imports.%OptionalStorage.impl_witness_table.110, @ptr.as.OptionalStorage.impl(%S) [concrete] -// CHECK:STDOUT: %.08a: type = maybe_unformed_type %ptr.037 [concrete] -// CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value %ptr.037, (%OptionalStorage.impl_witness.00e) [concrete] -// CHECK:STDOUT: %Optional.d06: type = class_type @Optional, @Optional(%OptionalStorage.facet) [concrete] -// CHECK:STDOUT: %get.type: type = fn_type @get [concrete] -// CHECK:STDOUT: %get: %get.type = struct_value () [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.Op.type.1d8f74.4: type = fn_type @Destroy.Op.loc8_19.3 [concrete] +// CHECK:STDOUT: %Destroy.facet.8f0: %Destroy.type = facet_value %ptr.1f0, (%custom_witness.df9cc1.1) [concrete] +// CHECK:STDOUT: %MaybeUnformed.2d7: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.8f0) [concrete] +// CHECK:STDOUT: %OptionalStorage.impl_witness.0df: = impl_witness imports.%OptionalStorage.impl_witness_table.110, @ptr.as.OptionalStorage.impl(%NullableParamS) [concrete] +// CHECK:STDOUT: %.280: type = maybe_unformed_type %ptr.1f0 [concrete] +// CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value %ptr.1f0, (%OptionalStorage.impl_witness.0df) [concrete] +// CHECK:STDOUT: %Optional.e08: type = class_type @Optional, @Optional(%OptionalStorage.facet) [concrete] +// CHECK:STDOUT: %nullable_param_get.type: type = fn_type @nullable_param_get [concrete] +// CHECK:STDOUT: %nullable_param_get: %nullable_param_get.type = struct_value () [concrete] +// CHECK:STDOUT: %nullable_param_foo.type: type = fn_type @nullable_param_foo [concrete] +// CHECK:STDOUT: %nullable_param_foo: %nullable_param_foo.type = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.Op.type.1d8f74.4: type = fn_type @Destroy.Op.loc8_49.3 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.4: %Destroy.Op.type.1d8f74.4 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value -// CHECK:STDOUT: .get = %get.cpp_overload_set.value +// CHECK:STDOUT: .nullable_param_foo = %nullable_param_foo.cpp_overload_set.value +// CHECK:STDOUT: .nullable_param_get = %nullable_param_get.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %get.cpp_overload_set.value: %get.cpp_overload_set.type = cpp_overload_set_value @get.cpp_overload_set [concrete = constants.%get.cpp_overload_set.value] +// CHECK:STDOUT: %nullable_param_foo.cpp_overload_set.value: %nullable_param_foo.cpp_overload_set.type = cpp_overload_set_value @nullable_param_foo.cpp_overload_set [concrete = constants.%nullable_param_foo.cpp_overload_set.value] +// CHECK:STDOUT: %nullable_param_get.cpp_overload_set.value: %nullable_param_get.cpp_overload_set.type = cpp_overload_set_value @nullable_param_get.cpp_overload_set [concrete = constants.%nullable_param_get.cpp_overload_set.value] // CHECK:STDOUT: %Core.import_ref.509: type = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @ptr.as.OptionalStorage.impl.%MaybeUnformed (constants.%MaybeUnformed.ddb)] // CHECK:STDOUT: %Core.import_ref.105 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %Core.import_ref.c9a = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded @@ -1810,22 +1810,22 @@ fn F() { // CHECK:STDOUT: %Core.import_ref.306 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %Core.import_ref.3e3 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %OptionalStorage.impl_witness_table.110 = impl_witness_table (%Core.import_ref.509, %Core.import_ref.105, %Core.import_ref.c9a, %Core.import_ref.a90, %Core.import_ref.306, %Core.import_ref.3e3), @ptr.as.OptionalStorage.impl [concrete] -// CHECK:STDOUT: %get.decl: %get.type = fn_decl @get [concrete = constants.%get] { +// CHECK:STDOUT: %nullable_param_get.decl: %nullable_param_get.type = fn_decl @nullable_param_get [concrete = constants.%nullable_param_get] { // CHECK:STDOUT: // CHECK:STDOUT: } { -// CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value constants.%ptr.037, (constants.%OptionalStorage.impl_witness.00e) [concrete = constants.%OptionalStorage.facet] -// CHECK:STDOUT: %.loc8: %OptionalStorage.type = converted constants.%ptr.037, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet] -// CHECK:STDOUT: %Optional: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet) [concrete = constants.%Optional.d06] +// CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value constants.%ptr.1f0, (constants.%OptionalStorage.impl_witness.0df) [concrete = constants.%OptionalStorage.facet] +// CHECK:STDOUT: %.loc8: %OptionalStorage.type = converted constants.%ptr.1f0, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet] +// CHECK:STDOUT: %Optional: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet) [concrete = constants.%Optional.e08] // CHECK:STDOUT: // CHECK:STDOUT: } -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %nullable_param_foo.decl: %nullable_param_foo.type = fn_decl @nullable_param_foo [concrete = constants.%nullable_param_foo] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: -// CHECK:STDOUT: %.loc8_20.1: type = splice_block %Optional [concrete = constants.%Optional.d06] { -// CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value constants.%ptr.037, (constants.%OptionalStorage.impl_witness.00e) [concrete = constants.%OptionalStorage.facet] -// CHECK:STDOUT: %.loc8_20.2: %OptionalStorage.type = converted constants.%ptr.037, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet] -// CHECK:STDOUT: %Optional: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet) [concrete = constants.%Optional.d06] +// CHECK:STDOUT: %.loc8_50.1: type = splice_block %Optional [concrete = constants.%Optional.e08] { +// CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value constants.%ptr.1f0, (constants.%OptionalStorage.impl_witness.0df) [concrete = constants.%OptionalStorage.facet] +// CHECK:STDOUT: %.loc8_50.2: %OptionalStorage.type = converted constants.%ptr.1f0, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet] +// CHECK:STDOUT: %Optional: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet) [concrete = constants.%Optional.e08] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: } @@ -1834,30 +1834,30 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8_3: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %Cpp.ref.loc8_11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %get.ref: %get.cpp_overload_set.type = name_ref get, imports.%get.cpp_overload_set.value [concrete = constants.%get.cpp_overload_set.value] -// CHECK:STDOUT: %get.call: init %Optional.d06 = call imports.%get.decl() -// CHECK:STDOUT: %.loc8_19.1: ref %Optional.d06 = temporary_storage -// CHECK:STDOUT: %.loc8_19.2: ref %Optional.d06 = temporary %.loc8_19.1, %get.call -// CHECK:STDOUT: %.loc8_19.3: %Optional.d06 = acquire_value %.loc8_19.2 -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl(%.loc8_19.3) -// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc8_19.2, constants.%Destroy.Op.1a2547.4 -// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc8_19.2) +// CHECK:STDOUT: %nullable_param_foo.ref: %nullable_param_foo.cpp_overload_set.type = name_ref nullable_param_foo, imports.%nullable_param_foo.cpp_overload_set.value [concrete = constants.%nullable_param_foo.cpp_overload_set.value] +// CHECK:STDOUT: %Cpp.ref.loc8_26: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %nullable_param_get.ref: %nullable_param_get.cpp_overload_set.type = name_ref nullable_param_get, imports.%nullable_param_get.cpp_overload_set.value [concrete = constants.%nullable_param_get.cpp_overload_set.value] +// CHECK:STDOUT: %nullable_param_get.call: init %Optional.e08 = call imports.%nullable_param_get.decl() +// CHECK:STDOUT: %.loc8_49.1: ref %Optional.e08 = temporary_storage +// CHECK:STDOUT: %.loc8_49.2: ref %Optional.e08 = temporary %.loc8_49.1, %nullable_param_get.call +// CHECK:STDOUT: %.loc8_49.3: %Optional.e08 = acquire_value %.loc8_49.2 +// CHECK:STDOUT: %nullable_param_foo.call: init %empty_tuple.type = call imports.%nullable_param_foo.decl(%.loc8_49.3) +// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc8_49.2, constants.%Destroy.Op.1a2547.4 +// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc8_49.2) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc8_19.1(%self.param: ref %.08a) { +// CHECK:STDOUT: fn @Destroy.Op.loc8_49.1(%self.param: ref %.280) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc8_19.2(%self.param: ref %MaybeUnformed.9f2) { +// CHECK:STDOUT: fn @Destroy.Op.loc8_49.2(%self.param: ref %MaybeUnformed.2d7) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc8_19.3(%self.param: ref %Optional.d06) { +// CHECK:STDOUT: fn @Destroy.Op.loc8_49.3(%self.param: ref %Optional.e08) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } @@ -1866,33 +1866,33 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %S: type = class_type @S [concrete] +// CHECK:STDOUT: %DeducedAnyS: type = class_type @DeducedAnyS [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %pattern_type.0f5: type = pattern_type %S [concrete] -// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] -// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] +// CHECK:STDOUT: %pattern_type.1ad: type = pattern_type %DeducedAnyS [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.1ad = ref_binding_pattern s [concrete] +// CHECK:STDOUT: %s.var_patt: %pattern_type.1ad = var_pattern %s.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] -// CHECK:STDOUT: %S.val: %S = struct_value () [concrete] -// CHECK:STDOUT: %ptr.037: type = ptr_type %S [concrete] -// CHECK:STDOUT: %pattern_type.de6: type = pattern_type %ptr.037 [concrete] -// CHECK:STDOUT: %p.patt: %pattern_type.de6 = value_binding_pattern p [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] -// CHECK:STDOUT: %S.cpp_destructor.type: type = fn_type @S.cpp_destructor [concrete] -// CHECK:STDOUT: %S.cpp_destructor: %S.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %DeducedAnyS.val: %DeducedAnyS = struct_value () [concrete] +// CHECK:STDOUT: %ptr.7e6: type = ptr_type %DeducedAnyS [concrete] +// CHECK:STDOUT: %pattern_type.060: type = pattern_type %ptr.7e6 [concrete] +// CHECK:STDOUT: %p.patt: %pattern_type.060 = value_binding_pattern p [concrete] +// CHECK:STDOUT: %deduced_any_foo.cpp_overload_set.type: type = cpp_overload_set_type @deduced_any_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %deduced_any_foo.cpp_overload_set.value: %deduced_any_foo.cpp_overload_set.type = cpp_overload_set_value @deduced_any_foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %deduced_any_foo.type: type = fn_type @deduced_any_foo [concrete] +// CHECK:STDOUT: %deduced_any_foo: %deduced_any_foo.type = struct_value () [concrete] +// CHECK:STDOUT: %DeducedAnyS.cpp_destructor.type: type = fn_type @DeducedAnyS.cpp_destructor [concrete] +// CHECK:STDOUT: %DeducedAnyS.cpp_destructor: %DeducedAnyS.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .S = %S.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .DeducedAnyS = %DeducedAnyS.decl +// CHECK:STDOUT: .deduced_any_foo = %deduced_any_foo.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %DeducedAnyS.decl: type = class_decl @DeducedAnyS [concrete = constants.%DeducedAnyS] {} {} +// CHECK:STDOUT: %deduced_any_foo.cpp_overload_set.value: %deduced_any_foo.cpp_overload_set.type = cpp_overload_set_value @deduced_any_foo.cpp_overload_set [concrete = constants.%deduced_any_foo.cpp_overload_set.value] +// CHECK:STDOUT: %deduced_any_foo.decl: %deduced_any_foo.type = fn_decl @deduced_any_foo [concrete = constants.%deduced_any_foo] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -1901,38 +1901,38 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %s.var: ref %S = var_storage %s.var_patt -// CHECK:STDOUT: %.loc8_19.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] -// CHECK:STDOUT: %.loc8_19.2: init %S to %s.var = class_init () [concrete = constants.%S.val] -// CHECK:STDOUT: %.loc8_3: init %S = converted %.loc8_19.1, %.loc8_19.2 [concrete = constants.%S.val] +// CHECK:STDOUT: %s.var: ref %DeducedAnyS = var_storage %s.var_patt +// CHECK:STDOUT: %.loc8_29.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc8_29.2: init %DeducedAnyS to %s.var = class_init () [concrete = constants.%DeducedAnyS.val] +// CHECK:STDOUT: %.loc8_3: init %DeducedAnyS = converted %.loc8_29.1, %.loc8_29.2 [concrete = constants.%DeducedAnyS.val] // CHECK:STDOUT: assign %s.var, %.loc8_3 -// CHECK:STDOUT: %.loc8_13: type = splice_block %S.ref.loc8 [concrete = constants.%S] { +// CHECK:STDOUT: %.loc8_13: type = splice_block %DeducedAnyS.ref.loc8 [concrete = constants.%DeducedAnyS] { // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %S.ref.loc8: type = name_ref S, imports.%S.decl [concrete = constants.%S] +// CHECK:STDOUT: %DeducedAnyS.ref.loc8: type = name_ref DeducedAnyS, imports.%DeducedAnyS.decl [concrete = constants.%DeducedAnyS] // CHECK:STDOUT: } -// CHECK:STDOUT: %s: ref %S = wrapper_binding s, %s.var +// CHECK:STDOUT: %s: ref %DeducedAnyS = wrapper_binding s, %s.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete = constants.%s.patt] -// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete = constants.%s.var_patt] +// CHECK:STDOUT: %s.patt: %pattern_type.1ad = ref_binding_pattern s [concrete = constants.%s.patt] +// CHECK:STDOUT: %s.var_patt: %pattern_type.1ad = var_pattern %s.patt [concrete = constants.%s.var_patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.ref.loc13_26: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %s.ref: ref %S = name_ref s, %s -// CHECK:STDOUT: %addr: %ptr.037 = addr_of %s.ref -// CHECK:STDOUT: %foo.call: init %ptr.037 = call imports.%foo.decl(%addr) -// CHECK:STDOUT: %.loc13_36.1: %ptr.037 = value_of_initializer %foo.call -// CHECK:STDOUT: %.loc13_36.2: %ptr.037 = converted %foo.call, %.loc13_36.1 -// CHECK:STDOUT: %.loc13_22: type = splice_block %ptr [concrete = constants.%ptr.037] { +// CHECK:STDOUT: %Cpp.ref.loc13_36: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %deduced_any_foo.ref: %deduced_any_foo.cpp_overload_set.type = name_ref deduced_any_foo, imports.%deduced_any_foo.cpp_overload_set.value [concrete = constants.%deduced_any_foo.cpp_overload_set.value] +// CHECK:STDOUT: %s.ref: ref %DeducedAnyS = name_ref s, %s +// CHECK:STDOUT: %addr: %ptr.7e6 = addr_of %s.ref +// CHECK:STDOUT: %deduced_any_foo.call: init %ptr.7e6 = call imports.%deduced_any_foo.decl(%addr) +// CHECK:STDOUT: %.loc13_58.1: %ptr.7e6 = value_of_initializer %deduced_any_foo.call +// CHECK:STDOUT: %.loc13_58.2: %ptr.7e6 = converted %deduced_any_foo.call, %.loc13_58.1 +// CHECK:STDOUT: %.loc13_32: type = splice_block %ptr [concrete = constants.%ptr.7e6] { // CHECK:STDOUT: %Cpp.ref.loc13_17: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %S.ref.loc13: type = name_ref S, imports.%S.decl [concrete = constants.%S] -// CHECK:STDOUT: %ptr: type = ptr_type %S.ref.loc13 [concrete = constants.%ptr.037] +// CHECK:STDOUT: %DeducedAnyS.ref.loc13: type = name_ref DeducedAnyS, imports.%DeducedAnyS.decl [concrete = constants.%DeducedAnyS] +// CHECK:STDOUT: %ptr: type = ptr_type %DeducedAnyS.ref.loc13 [concrete = constants.%ptr.7e6] // CHECK:STDOUT: } -// CHECK:STDOUT: %p: %ptr.037 = wrapper_binding p, %.loc13_36.2 +// CHECK:STDOUT: %p: %ptr.7e6 = wrapper_binding p, %.loc13_58.2 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %p.patt: %pattern_type.de6 = value_binding_pattern p [concrete = constants.%p.patt] +// CHECK:STDOUT: %p.patt: %pattern_type.060 = value_binding_pattern p [concrete = constants.%p.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %S.cpp_destructor.bound: = bound_method %s.var, constants.%S.cpp_destructor -// CHECK:STDOUT: %S.cpp_destructor.call: init %empty_tuple.type = call %S.cpp_destructor.bound(%s.var) +// CHECK:STDOUT: %DeducedAnyS.cpp_destructor.bound: = bound_method %s.var, constants.%DeducedAnyS.cpp_destructor +// CHECK:STDOUT: %DeducedAnyS.cpp_destructor.call: init %empty_tuple.type = call %DeducedAnyS.cpp_destructor.bound(%s.var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1940,16 +1940,16 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %S: type = class_type @S [concrete] +// CHECK:STDOUT: %DeducedPointerS: type = class_type @DeducedPointerS [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %pattern_type.0f5: type = pattern_type %S [concrete] -// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete] -// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete] +// CHECK:STDOUT: %pattern_type.36d: type = pattern_type %DeducedPointerS [concrete] +// CHECK:STDOUT: %s.patt: %pattern_type.36d = ref_binding_pattern s [concrete] +// CHECK:STDOUT: %s.var_patt: %pattern_type.36d = var_pattern %s.patt [concrete] // CHECK:STDOUT: %empty_struct: %empty_struct_type = struct_value () [concrete] -// CHECK:STDOUT: %S.val: %S = struct_value () [concrete] +// CHECK:STDOUT: %DeducedPointerS.val: %DeducedPointerS = struct_value () [concrete] // CHECK:STDOUT: %Direct.cpp_overload_set.type: type = cpp_overload_set_type @Direct.cpp_overload_set [concrete] // CHECK:STDOUT: %Direct.cpp_overload_set.value: %Direct.cpp_overload_set.type = cpp_overload_set_value @Direct.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.037: type = ptr_type %S [concrete] +// CHECK:STDOUT: %ptr.6cb: type = ptr_type %DeducedPointerS [concrete] // CHECK:STDOUT: %Optional.type: type = generic_class_type @Optional [concrete] // CHECK:STDOUT: %Optional.generic: %Optional.type = struct_value () [concrete] // CHECK:STDOUT: %OptionalStorage.type: type = facet_type <@OptionalStorage> [concrete] @@ -1965,44 +1965,44 @@ fn F() { // CHECK:STDOUT: %Destroy.Op.type.1d8f74.1: type = fn_type @Destroy.Op.1 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.1: %Destroy.Op.type.1d8f74.1 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.df9cc1.1: = custom_witness (%Destroy.Op.1a2547.1), @Destroy [concrete] -// CHECK:STDOUT: %Destroy.facet.5b4: %Destroy.type = facet_value %ptr.037, (%custom_witness.df9cc1.1) [concrete] -// CHECK:STDOUT: %MaybeUnformed.9f2: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.5b4) [concrete] -// CHECK:STDOUT: %OptionalStorage.impl_witness.00e: = impl_witness imports.%OptionalStorage.impl_witness_table.110, @ptr.as.OptionalStorage.impl(%S) [concrete] -// CHECK:STDOUT: %.08a0: type = maybe_unformed_type %ptr.037 [concrete] -// CHECK:STDOUT: %OptionalStorage.facet.97d: %OptionalStorage.type = facet_value %ptr.037, (%OptionalStorage.impl_witness.00e) [concrete] -// CHECK:STDOUT: %Optional.d06: type = class_type @Optional, @Optional(%OptionalStorage.facet.97d) [concrete] -// CHECK:STDOUT: %pattern_type.399: type = pattern_type %Optional.d06 [concrete] +// CHECK:STDOUT: %Destroy.facet.25b: %Destroy.type = facet_value %ptr.6cb, (%custom_witness.df9cc1.1) [concrete] +// CHECK:STDOUT: %MaybeUnformed.dcc: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.25b) [concrete] +// CHECK:STDOUT: %OptionalStorage.impl_witness.5d7: = impl_witness imports.%OptionalStorage.impl_witness_table.110, @ptr.as.OptionalStorage.impl(%DeducedPointerS) [concrete] +// CHECK:STDOUT: %.fb1: type = maybe_unformed_type %ptr.6cb [concrete] +// CHECK:STDOUT: %OptionalStorage.facet.822: %OptionalStorage.type = facet_value %ptr.6cb, (%OptionalStorage.impl_witness.5d7) [concrete] +// CHECK:STDOUT: %Optional.1ac: type = class_type @Optional, @Optional(%OptionalStorage.facet.822) [concrete] +// CHECK:STDOUT: %pattern_type.548: type = pattern_type %Optional.1ac [concrete] // CHECK:STDOUT: %Direct.type: type = fn_type @Direct [concrete] // CHECK:STDOUT: %Direct: %Direct.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.0ff: type = generic_interface_type @ImplicitAs [concrete] // CHECK:STDOUT: %ImplicitAs.generic: %ImplicitAs.type.0ff = struct_value () [concrete] -// CHECK:STDOUT: %ImplicitAs.type.e9e: type = facet_type <@ImplicitAs, @ImplicitAs(%Optional.d06)> [concrete] +// CHECK:STDOUT: %ImplicitAs.type.a33: type = facet_type <@ImplicitAs, @ImplicitAs(%Optional.1ac)> [concrete] // CHECK:STDOUT: %OptionalAs.type.3b8: type = facet_type <@OptionalAs, @OptionalAs(%T.220)> [symbolic] // CHECK:STDOUT: %U.042: %OptionalAs.type.3b8 = symbolic_binding U, 1 [symbolic] // CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.type.ad5: type = fn_type @U.as_type.as.ImplicitAs.impl.Convert.2, @U.as_type.as.ImplicitAs.impl.167(%T.220, %U.042) [symbolic] // CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.331: %U.as_type.as.ImplicitAs.impl.Convert.type.ad5 = struct_value () [symbolic] -// CHECK:STDOUT: %OptionalAs.type.0c0: type = facet_type <@OptionalAs, @OptionalAs(%OptionalStorage.facet.97d)> [concrete] +// CHECK:STDOUT: %OptionalAs.type.345: type = facet_type <@OptionalAs, @OptionalAs(%OptionalStorage.facet.822)> [concrete] // CHECK:STDOUT: %T.as_type.as.OptionalAs.impl.Convert.type.774: type = fn_type @T.as_type.as.OptionalAs.impl.Convert, @T.as_type.as.OptionalAs.impl(%T.220) [symbolic] // CHECK:STDOUT: %T.as_type.as.OptionalAs.impl.Convert.5f9: %T.as_type.as.OptionalAs.impl.Convert.type.774 = struct_value () [symbolic] -// CHECK:STDOUT: %OptionalAs.impl_witness.55e: = impl_witness imports.%OptionalAs.impl_witness_table.2e9, @T.as_type.as.OptionalAs.impl(%OptionalStorage.facet.97d) [concrete] -// CHECK:STDOUT: %OptionalAs.facet: %OptionalAs.type.0c0 = facet_value %ptr.037, (%OptionalAs.impl_witness.55e) [concrete] -// CHECK:STDOUT: %ImplicitAs.impl_witness.3df: = impl_witness imports.%ImplicitAs.impl_witness_table.bb5, @U.as_type.as.ImplicitAs.impl.167(%OptionalStorage.facet.97d, %OptionalAs.facet) [concrete] -// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.type.261: type = fn_type @U.as_type.as.ImplicitAs.impl.Convert.2, @U.as_type.as.ImplicitAs.impl.167(%OptionalStorage.facet.97d, %OptionalAs.facet) [concrete] -// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.d50: %U.as_type.as.ImplicitAs.impl.Convert.type.261 = struct_value () [concrete] -// CHECK:STDOUT: %ImplicitAs.facet.494: %ImplicitAs.type.e9e = facet_value %ptr.037, (%ImplicitAs.impl_witness.3df) [concrete] -// CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.088: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%Optional.d06, %ImplicitAs.facet.494) [concrete] -// CHECK:STDOUT: %.343: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.088, %ImplicitAs.facet.494 [concrete] -// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %U.as_type.as.ImplicitAs.impl.Convert.d50, @U.as_type.as.ImplicitAs.impl.Convert.2(%OptionalStorage.facet.97d, %OptionalAs.facet) [concrete] +// CHECK:STDOUT: %OptionalAs.impl_witness.fd1: = impl_witness imports.%OptionalAs.impl_witness_table.2e9, @T.as_type.as.OptionalAs.impl(%OptionalStorage.facet.822) [concrete] +// CHECK:STDOUT: %OptionalAs.facet: %OptionalAs.type.345 = facet_value %ptr.6cb, (%OptionalAs.impl_witness.fd1) [concrete] +// CHECK:STDOUT: %ImplicitAs.impl_witness.913: = impl_witness imports.%ImplicitAs.impl_witness_table.bb5, @U.as_type.as.ImplicitAs.impl.167(%OptionalStorage.facet.822, %OptionalAs.facet) [concrete] +// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.type.abb: type = fn_type @U.as_type.as.ImplicitAs.impl.Convert.2, @U.as_type.as.ImplicitAs.impl.167(%OptionalStorage.facet.822, %OptionalAs.facet) [concrete] +// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.8c6: %U.as_type.as.ImplicitAs.impl.Convert.type.abb = struct_value () [concrete] +// CHECK:STDOUT: %ImplicitAs.facet.032: %ImplicitAs.type.a33 = facet_value %ptr.6cb, (%ImplicitAs.impl_witness.913) [concrete] +// CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.8a9: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%Optional.1ac, %ImplicitAs.facet.032) [concrete] +// CHECK:STDOUT: %.96f: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.8a9, %ImplicitAs.facet.032 [concrete] +// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %U.as_type.as.ImplicitAs.impl.Convert.8c6, @U.as_type.as.ImplicitAs.impl.Convert.2(%OptionalStorage.facet.822, %OptionalAs.facet) [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.4: type = fn_type @Destroy.Op.loc11_14.3 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.4: %Destroy.Op.type.1d8f74.4 = struct_value () [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.399 = value_binding_pattern a [concrete] +// CHECK:STDOUT: %a.patt: %pattern_type.548 = value_binding_pattern a [concrete] // CHECK:STDOUT: %Indirect.cpp_overload_set.type: type = cpp_overload_set_type @Indirect.cpp_overload_set [concrete] // CHECK:STDOUT: %Indirect.cpp_overload_set.value: %Indirect.cpp_overload_set.type = cpp_overload_set_value @Indirect.cpp_overload_set [concrete] // CHECK:STDOUT: %Indirect__carbon_thunk.type: type = fn_type @Indirect__carbon_thunk [concrete] // CHECK:STDOUT: %Indirect__carbon_thunk: %Indirect__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %.a94: ref %S = temporary invalid, %S.val [concrete] -// CHECK:STDOUT: %S.cpp_destructor.type: type = fn_type @S.cpp_destructor [concrete] -// CHECK:STDOUT: %S.cpp_destructor: %S.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %.dc4: ref %DeducedPointerS = temporary invalid, %DeducedPointerS.val [concrete] +// CHECK:STDOUT: %DeducedPointerS.cpp_destructor.type: type = fn_type @DeducedPointerS.cpp_destructor [concrete] +// CHECK:STDOUT: %DeducedPointerS.cpp_destructor: %DeducedPointerS.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -2014,12 +2014,12 @@ fn F() { // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .S = %S.decl +// CHECK:STDOUT: .DeducedPointerS = %DeducedPointerS.decl // CHECK:STDOUT: .Direct = %Direct.cpp_overload_set.value // CHECK:STDOUT: .Indirect = %Indirect.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} +// CHECK:STDOUT: %DeducedPointerS.decl: type = class_decl @DeducedPointerS [concrete = constants.%DeducedPointerS] {} {} // CHECK:STDOUT: %Direct.cpp_overload_set.value: %Direct.cpp_overload_set.type = cpp_overload_set_value @Direct.cpp_overload_set [concrete = constants.%Direct.cpp_overload_set.value] // CHECK:STDOUT: %Core.Optional: %Optional.type = import_ref Core//prelude/types/optional, Optional, loaded [concrete = constants.%Optional.generic] // CHECK:STDOUT: %Core.import_ref.509: type = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @ptr.as.OptionalStorage.impl.%MaybeUnformed (constants.%MaybeUnformed.ddb)] @@ -2032,14 +2032,14 @@ fn F() { // CHECK:STDOUT: %Direct.decl: %Direct.type = fn_decl @Direct [concrete = constants.%Direct] { // CHECK:STDOUT: // CHECK:STDOUT: } { -// CHECK:STDOUT: %OptionalStorage.facet.loc11_16.1: %OptionalStorage.type = facet_value constants.%ptr.037, (constants.%OptionalStorage.impl_witness.00e) [concrete = constants.%OptionalStorage.facet.97d] -// CHECK:STDOUT: %.loc11_16.1: %OptionalStorage.type = converted constants.%ptr.037, %OptionalStorage.facet.loc11_16.1 [concrete = constants.%OptionalStorage.facet.97d] -// CHECK:STDOUT: %Optional.loc11_16.1: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet.97d) [concrete = constants.%Optional.d06] +// CHECK:STDOUT: %OptionalStorage.facet.loc11_16.1: %OptionalStorage.type = facet_value constants.%ptr.6cb, (constants.%OptionalStorage.impl_witness.5d7) [concrete = constants.%OptionalStorage.facet.822] +// CHECK:STDOUT: %.loc11_16.1: %OptionalStorage.type = converted constants.%ptr.6cb, %OptionalStorage.facet.loc11_16.1 [concrete = constants.%OptionalStorage.facet.822] +// CHECK:STDOUT: %Optional.loc11_16.1: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet.822) [concrete = constants.%Optional.1ac] // CHECK:STDOUT: -// CHECK:STDOUT: %.loc11_16.2: type = splice_block %Optional.loc11_16.2 [concrete = constants.%Optional.d06] { -// CHECK:STDOUT: %OptionalStorage.facet.loc11_16.2: %OptionalStorage.type = facet_value constants.%ptr.037, (constants.%OptionalStorage.impl_witness.00e) [concrete = constants.%OptionalStorage.facet.97d] -// CHECK:STDOUT: %.loc11_16.3: %OptionalStorage.type = converted constants.%ptr.037, %OptionalStorage.facet.loc11_16.2 [concrete = constants.%OptionalStorage.facet.97d] -// CHECK:STDOUT: %Optional.loc11_16.2: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet.97d) [concrete = constants.%Optional.d06] +// CHECK:STDOUT: %.loc11_16.2: type = splice_block %Optional.loc11_16.2 [concrete = constants.%Optional.1ac] { +// CHECK:STDOUT: %OptionalStorage.facet.loc11_16.2: %OptionalStorage.type = facet_value constants.%ptr.6cb, (constants.%OptionalStorage.impl_witness.5d7) [concrete = constants.%OptionalStorage.facet.822] +// CHECK:STDOUT: %.loc11_16.3: %OptionalStorage.type = converted constants.%ptr.6cb, %OptionalStorage.facet.loc11_16.2 [concrete = constants.%OptionalStorage.facet.822] +// CHECK:STDOUT: %Optional.loc11_16.2: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet.822) [concrete = constants.%Optional.1ac] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: } @@ -2053,93 +2053,93 @@ fn F() { // CHECK:STDOUT: %Indirect__carbon_thunk.decl: %Indirect__carbon_thunk.type = fn_decl @Indirect__carbon_thunk [concrete = constants.%Indirect__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { -// CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value constants.%ptr.037, (constants.%OptionalStorage.impl_witness.00e) [concrete = constants.%OptionalStorage.facet.97d] -// CHECK:STDOUT: %.loc13: %OptionalStorage.type = converted constants.%ptr.037, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet.97d] -// CHECK:STDOUT: %Optional: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet.97d) [concrete = constants.%Optional.d06] +// CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value constants.%ptr.6cb, (constants.%OptionalStorage.impl_witness.5d7) [concrete = constants.%OptionalStorage.facet.822] +// CHECK:STDOUT: %.loc13: %OptionalStorage.type = converted constants.%ptr.6cb, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet.822] +// CHECK:STDOUT: %Optional: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet.822) [concrete = constants.%Optional.1ac] // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %s.var: ref %S = var_storage %s.var_patt -// CHECK:STDOUT: %.loc10_19.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] -// CHECK:STDOUT: %.loc10_19.2: init %S to %s.var = class_init () [concrete = constants.%S.val] -// CHECK:STDOUT: %.loc10_3: init %S = converted %.loc10_19.1, %.loc10_19.2 [concrete = constants.%S.val] +// CHECK:STDOUT: %s.var: ref %DeducedPointerS = var_storage %s.var_patt +// CHECK:STDOUT: %.loc10_33.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %.loc10_33.2: init %DeducedPointerS to %s.var = class_init () [concrete = constants.%DeducedPointerS.val] +// CHECK:STDOUT: %.loc10_3: init %DeducedPointerS = converted %.loc10_33.1, %.loc10_33.2 [concrete = constants.%DeducedPointerS.val] // CHECK:STDOUT: assign %s.var, %.loc10_3 -// CHECK:STDOUT: %.loc10_13: type = splice_block %S.ref.loc10 [concrete = constants.%S] { +// CHECK:STDOUT: %.loc10_13: type = splice_block %DeducedPointerS.ref.loc10 [concrete = constants.%DeducedPointerS] { // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %S.ref.loc10: type = name_ref S, imports.%S.decl [concrete = constants.%S] +// CHECK:STDOUT: %DeducedPointerS.ref.loc10: type = name_ref DeducedPointerS, imports.%DeducedPointerS.decl [concrete = constants.%DeducedPointerS] // CHECK:STDOUT: } -// CHECK:STDOUT: %s: ref %S = wrapper_binding s, %s.var +// CHECK:STDOUT: %s: ref %DeducedPointerS = wrapper_binding s, %s.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %s.patt: %pattern_type.0f5 = ref_binding_pattern s [concrete = constants.%s.patt] -// CHECK:STDOUT: %s.var_patt: %pattern_type.0f5 = var_pattern %s.patt [concrete = constants.%s.var_patt] +// CHECK:STDOUT: %s.patt: %pattern_type.36d = ref_binding_pattern s [concrete = constants.%s.patt] +// CHECK:STDOUT: %s.var_patt: %pattern_type.36d = var_pattern %s.patt [concrete = constants.%s.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Direct.ref: %Direct.cpp_overload_set.type = name_ref Direct, imports.%Direct.cpp_overload_set.value [concrete = constants.%Direct.cpp_overload_set.value] -// CHECK:STDOUT: %s.ref: ref %S = name_ref s, %s -// CHECK:STDOUT: %addr.loc11: %ptr.037 = addr_of %s.ref -// CHECK:STDOUT: %impl.elem0: %.343 = impl_witness_access constants.%ImplicitAs.impl_witness.3df, element0 [concrete = constants.%U.as_type.as.ImplicitAs.impl.Convert.d50] +// CHECK:STDOUT: %s.ref: ref %DeducedPointerS = name_ref s, %s +// CHECK:STDOUT: %addr.loc11: %ptr.6cb = addr_of %s.ref +// CHECK:STDOUT: %impl.elem0: %.96f = impl_witness_access constants.%ImplicitAs.impl_witness.913, element0 [concrete = constants.%U.as_type.as.ImplicitAs.impl.Convert.8c6] // CHECK:STDOUT: %bound_method.loc11_14.1: = bound_method %addr.loc11, %impl.elem0 -// CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @U.as_type.as.ImplicitAs.impl.Convert.2(constants.%OptionalStorage.facet.97d, constants.%OptionalAs.facet) [concrete = constants.%U.as_type.as.ImplicitAs.impl.Convert.specific_fn] +// CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @U.as_type.as.ImplicitAs.impl.Convert.2(constants.%OptionalStorage.facet.822, constants.%OptionalAs.facet) [concrete = constants.%U.as_type.as.ImplicitAs.impl.Convert.specific_fn] // CHECK:STDOUT: %bound_method.loc11_14.2: = bound_method %addr.loc11, %specific_fn -// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.call: init %Optional.d06 = call %bound_method.loc11_14.2(%addr.loc11) -// CHECK:STDOUT: %.loc11_14.1: init %Optional.d06 = converted %addr.loc11, %U.as_type.as.ImplicitAs.impl.Convert.call -// CHECK:STDOUT: %.loc11_14.2: ref %Optional.d06 = temporary_storage -// CHECK:STDOUT: %.loc11_14.3: ref %Optional.d06 = temporary %.loc11_14.2, %.loc11_14.1 -// CHECK:STDOUT: %.loc11_14.4: %Optional.d06 = acquire_value %.loc11_14.3 -// CHECK:STDOUT: %Direct.call: init %Optional.d06 = call imports.%Direct.decl(%.loc11_14.4) +// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.call: init %Optional.1ac = call %bound_method.loc11_14.2(%addr.loc11) +// CHECK:STDOUT: %.loc11_14.1: init %Optional.1ac = converted %addr.loc11, %U.as_type.as.ImplicitAs.impl.Convert.call +// CHECK:STDOUT: %.loc11_14.2: ref %Optional.1ac = temporary_storage +// CHECK:STDOUT: %.loc11_14.3: ref %Optional.1ac = temporary %.loc11_14.2, %.loc11_14.1 +// CHECK:STDOUT: %.loc11_14.4: %Optional.1ac = acquire_value %.loc11_14.3 +// CHECK:STDOUT: %Direct.call: init %Optional.1ac = call imports.%Direct.decl(%.loc11_14.4) // CHECK:STDOUT: %Destroy.Op.bound.loc11: = bound_method %.loc11_14.3, constants.%Destroy.Op.1a2547.4 // CHECK:STDOUT: %Destroy.Op.call.loc11: init %empty_tuple.type = call %Destroy.Op.bound.loc11(%.loc11_14.3) -// CHECK:STDOUT: %Cpp.ref.loc13_41: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %Cpp.ref.loc13_55: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %Indirect.ref: %Indirect.cpp_overload_set.type = name_ref Indirect, imports.%Indirect.cpp_overload_set.value [concrete = constants.%Indirect.cpp_overload_set.value] -// CHECK:STDOUT: %.loc13_55.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] -// CHECK:STDOUT: %Cpp.ref.loc13_60: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %S.ref.loc13_63: type = name_ref S, imports.%S.decl [concrete = constants.%S] -// CHECK:STDOUT: %.loc13_55.2: ref %S = temporary_storage -// CHECK:STDOUT: %.loc13_55.3: init %S to %.loc13_55.2 = class_init () [concrete = constants.%S.val] -// CHECK:STDOUT: %.loc13_57.1: init %S = converted %.loc13_55.1, %.loc13_55.3 [concrete = constants.%S.val] -// CHECK:STDOUT: %.loc13_57.2: ref %S = temporary %.loc13_55.2, %.loc13_57.1 [concrete = constants.%.a94] -// CHECK:STDOUT: %.loc13_57.3: %S = acquire_value %.loc13_57.2 [concrete = constants.%S.val] -// CHECK:STDOUT: %.loc13_57.4: ref %S = value_as_ref %.loc13_57.3 -// CHECK:STDOUT: %addr.loc13: %ptr.037 = addr_of %.loc13_57.4 -// CHECK:STDOUT: %Indirect__carbon_thunk.call: init %Optional.d06 = call imports.%Indirect__carbon_thunk.decl(%addr.loc13) -// CHECK:STDOUT: %.loc13_65.1: ref %Optional.d06 = temporary_storage -// CHECK:STDOUT: %.loc13_65.2: ref %Optional.d06 = temporary %.loc13_65.1, %Indirect__carbon_thunk.call -// CHECK:STDOUT: %.loc13_65.3: %Optional.d06 = acquire_value %.loc13_65.2 -// CHECK:STDOUT: %.loc13_37.1: type = splice_block %Optional [concrete = constants.%Optional.d06] { +// CHECK:STDOUT: %.loc13_69.1: %empty_struct_type = struct_literal () [concrete = constants.%empty_struct] +// CHECK:STDOUT: %Cpp.ref.loc13_74: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %DeducedPointerS.ref.loc13_77: type = name_ref DeducedPointerS, imports.%DeducedPointerS.decl [concrete = constants.%DeducedPointerS] +// CHECK:STDOUT: %.loc13_69.2: ref %DeducedPointerS = temporary_storage +// CHECK:STDOUT: %.loc13_69.3: init %DeducedPointerS to %.loc13_69.2 = class_init () [concrete = constants.%DeducedPointerS.val] +// CHECK:STDOUT: %.loc13_71.1: init %DeducedPointerS = converted %.loc13_69.1, %.loc13_69.3 [concrete = constants.%DeducedPointerS.val] +// CHECK:STDOUT: %.loc13_71.2: ref %DeducedPointerS = temporary %.loc13_69.2, %.loc13_71.1 [concrete = constants.%.dc4] +// CHECK:STDOUT: %.loc13_71.3: %DeducedPointerS = acquire_value %.loc13_71.2 [concrete = constants.%DeducedPointerS.val] +// CHECK:STDOUT: %.loc13_71.4: ref %DeducedPointerS = value_as_ref %.loc13_71.3 +// CHECK:STDOUT: %addr.loc13: %ptr.6cb = addr_of %.loc13_71.4 +// CHECK:STDOUT: %Indirect__carbon_thunk.call: init %Optional.1ac = call imports.%Indirect__carbon_thunk.decl(%addr.loc13) +// CHECK:STDOUT: %.loc13_93.1: ref %Optional.1ac = temporary_storage +// CHECK:STDOUT: %.loc13_93.2: ref %Optional.1ac = temporary %.loc13_93.1, %Indirect__carbon_thunk.call +// CHECK:STDOUT: %.loc13_93.3: %Optional.1ac = acquire_value %.loc13_93.2 +// CHECK:STDOUT: %.loc13_51.1: type = splice_block %Optional [concrete = constants.%Optional.1ac] { // CHECK:STDOUT: %Core.ref: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %Optional.ref: %Optional.type = name_ref Optional, imports.%Core.Optional [concrete = constants.%Optional.generic] // CHECK:STDOUT: %Cpp.ref.loc13_31: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %S.ref.loc13_34: type = name_ref S, imports.%S.decl [concrete = constants.%S] -// CHECK:STDOUT: %ptr: type = ptr_type %S.ref.loc13_34 [concrete = constants.%ptr.037] -// CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value %ptr, (constants.%OptionalStorage.impl_witness.00e) [concrete = constants.%OptionalStorage.facet.97d] -// CHECK:STDOUT: %.loc13_37.2: %OptionalStorage.type = converted %ptr, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet.97d] -// CHECK:STDOUT: %Optional: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet.97d) [concrete = constants.%Optional.d06] +// CHECK:STDOUT: %DeducedPointerS.ref.loc13_34: type = name_ref DeducedPointerS, imports.%DeducedPointerS.decl [concrete = constants.%DeducedPointerS] +// CHECK:STDOUT: %ptr: type = ptr_type %DeducedPointerS.ref.loc13_34 [concrete = constants.%ptr.6cb] +// CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value %ptr, (constants.%OptionalStorage.impl_witness.5d7) [concrete = constants.%OptionalStorage.facet.822] +// CHECK:STDOUT: %.loc13_51.2: %OptionalStorage.type = converted %ptr, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet.822] +// CHECK:STDOUT: %Optional: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet.822) [concrete = constants.%Optional.1ac] // CHECK:STDOUT: } -// CHECK:STDOUT: %a: %Optional.d06 = wrapper_binding a, %.loc13_65.3 +// CHECK:STDOUT: %a: %Optional.1ac = wrapper_binding a, %.loc13_93.3 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %a.patt: %pattern_type.399 = value_binding_pattern a [concrete = constants.%a.patt] +// CHECK:STDOUT: %a.patt: %pattern_type.548 = value_binding_pattern a [concrete = constants.%a.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %Destroy.Op.bound.loc13: = bound_method %.loc13_65.2, constants.%Destroy.Op.1a2547.4 -// CHECK:STDOUT: %Destroy.Op.call.loc13: init %empty_tuple.type = call %Destroy.Op.bound.loc13(%.loc13_65.2) -// CHECK:STDOUT: %S.cpp_destructor.bound: = bound_method %s.var, constants.%S.cpp_destructor -// CHECK:STDOUT: %S.cpp_destructor.call: init %empty_tuple.type = call %S.cpp_destructor.bound(%s.var) +// CHECK:STDOUT: %Destroy.Op.bound.loc13: = bound_method %.loc13_93.2, constants.%Destroy.Op.1a2547.4 +// CHECK:STDOUT: %Destroy.Op.call.loc13: init %empty_tuple.type = call %Destroy.Op.bound.loc13(%.loc13_93.2) +// CHECK:STDOUT: %DeducedPointerS.cpp_destructor.bound: = bound_method %s.var, constants.%DeducedPointerS.cpp_destructor +// CHECK:STDOUT: %DeducedPointerS.cpp_destructor.call: init %empty_tuple.type = call %DeducedPointerS.cpp_destructor.bound(%s.var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc11_14.1(%self.param: ref %.08a0) { +// CHECK:STDOUT: fn @Destroy.Op.loc11_14.1(%self.param: ref %.fb1) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc11_14.2(%self.param: ref %MaybeUnformed.9f2) { +// CHECK:STDOUT: fn @Destroy.Op.loc11_14.2(%self.param: ref %MaybeUnformed.dcc) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc11_14.3(%self.param: ref %Optional.d06) { +// CHECK:STDOUT: fn @Destroy.Op.loc11_14.3(%self.param: ref %Optional.1ac) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/interop/cpp/function/import/reference.carbon b/toolchain/check/testdata/interop/cpp/function/import/reference.carbon index 5d9a50365e04..d32ef5917e3f 100644 --- a/toolchain/check/testdata/interop/cpp/function/import/reference.carbon +++ b/toolchain/check/testdata/interop/cpp/function/import/reference.carbon @@ -462,23 +462,23 @@ library "[[@TEST_NAME]]"; import Cpp; -class X {} +class XByRef {} inline Cpp '''c++ -template void TakeAnything_ExpectConstLRef(T&&) { - static_assert(__is_same(T, const Carbon::X&)); +template void TakeAnything_ExpectConstLRef_ByRef(T&&) { + static_assert(__is_same(T, const Carbon::XByRef&)); } '''; -fn PassConstRef(ref x: const X) { - // CHECK:STDERR: fail_todo_forwarding_reference_by_ref.carbon:[[@LINE+7]]:36: error: `ref` tag is not an argument to a `ref` parameter [RefTagNoRefParam] - // CHECK:STDERR: Cpp.TakeAnything_ExpectConstLRef(ref x); - // CHECK:STDERR: ^~~~~ - // CHECK:STDERR: fail_todo_forwarding_reference_by_ref.carbon:[[@LINE-9]]:59: note: initializing function parameter [InCallToFunctionParam] - // CHECK:STDERR: template void TakeAnything_ExpectConstLRef(T&&) { - // CHECK:STDERR: ^ +fn PassConstRef(ref x: const XByRef) { + // CHECK:STDERR: fail_todo_forwarding_reference_by_ref.carbon:[[@LINE+7]]:42: error: `ref` tag is not an argument to a `ref` parameter [RefTagNoRefParam] + // CHECK:STDERR: Cpp.TakeAnything_ExpectConstLRef_ByRef(ref x); + // CHECK:STDERR: ^~~~~ + // CHECK:STDERR: fail_todo_forwarding_reference_by_ref.carbon:[[@LINE-9]]:65: note: initializing function parameter [InCallToFunctionParam] + // CHECK:STDERR: template void TakeAnything_ExpectConstLRef_ByRef(T&&) { + // CHECK:STDERR: ^ // CHECK:STDERR: - Cpp.TakeAnything_ExpectConstLRef(ref x); + Cpp.TakeAnything_ExpectConstLRef_ByRef(ref x); } diff --git a/toolchain/check/testdata/interop/cpp/function/import/struct.carbon b/toolchain/check/testdata/interop/cpp/function/import/struct.carbon index a9d1a4d24b04..ed736d2d16a4 100644 --- a/toolchain/check/testdata/interop/cpp/function/import/struct.carbon +++ b/toolchain/check/testdata/interop/cpp/function/import/struct.carbon @@ -16,66 +16,66 @@ // --- decl_value_param_type.h -struct S; +struct ForwardDeclaredStruct; -auto foo1(S) -> void; -auto foo2(S) -> void; +auto foo1(ForwardDeclaredStruct) -> void; +auto foo2(ForwardDeclaredStruct) -> void; // --- fail_import_decl_value_param_type.carbon library "[[@TEST_NAME]]"; // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE+8]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./decl_value_param_type.h:4:6: error: argument type 'S' is incomplete [CppInteropParseError] -// CHECK:STDERR: 4 | auto foo1(S) -> void; +// CHECK:STDERR: ./decl_value_param_type.h:4:6: error: argument type 'ForwardDeclaredStruct' is incomplete [CppInteropParseError] +// CHECK:STDERR: 4 | auto foo1(ForwardDeclaredStruct) -> void; // CHECK:STDERR: | ^~~~ // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE+4]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./decl_value_param_type.h:2:8: note: forward declaration of 'S' [CppInteropParseNote] -// CHECK:STDERR: 2 | struct S; +// CHECK:STDERR: ./decl_value_param_type.h:2:8: note: forward declaration of 'ForwardDeclaredStruct' [CppInteropParseNote] +// CHECK:STDERR: 2 | struct ForwardDeclaredStruct; // CHECK:STDERR: | ^ import Cpp library "decl_value_param_type.h"; -fn F(p: Cpp.S*) { +fn F(p: Cpp.ForwardDeclaredStruct*) { // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE+12]]:3: note: in thunk for C++ function used here [InCppThunk] // CHECK:STDERR: Cpp.foo1(*p); // CHECK:STDERR: ^~~~~~~~~~~~ // CHECK:STDERR: // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE-7]]:10: in file included here [InCppInclude] - // CHECK:STDERR: ./decl_value_param_type.h:5:6: error: argument type 'S' is incomplete [CppInteropParseError] - // CHECK:STDERR: 5 | auto foo2(S) -> void; + // CHECK:STDERR: ./decl_value_param_type.h:5:6: error: argument type 'ForwardDeclaredStruct' is incomplete [CppInteropParseError] + // CHECK:STDERR: 5 | auto foo2(ForwardDeclaredStruct) -> void; // CHECK:STDERR: | ^~~~ // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE-11]]:10: in file included here [InCppInclude] - // CHECK:STDERR: ./decl_value_param_type.h:2:8: note: forward declaration of 'S' [CppInteropParseNote] - // CHECK:STDERR: 2 | struct S; + // CHECK:STDERR: ./decl_value_param_type.h:2:8: note: forward declaration of 'ForwardDeclaredStruct' [CppInteropParseNote] + // CHECK:STDERR: 2 | struct ForwardDeclaredStruct; // CHECK:STDERR: | ^ Cpp.foo1(*p); // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE+28]]:3: note: in thunk for C++ function used here [InCppThunk] // CHECK:STDERR: Cpp.foo2(*p); // CHECK:STDERR: ^~~~~~~~~~~~ // CHECK:STDERR: - // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE-5]]:12: error: forming value of incomplete type `Cpp.S` [IncompleteTypeInValueConversion] + // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE-5]]:12: error: forming value of incomplete type `Cpp.ForwardDeclaredStruct` [IncompleteTypeInValueConversion] // CHECK:STDERR: Cpp.foo1(*p); // CHECK:STDERR: ^~ // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE-23]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./decl_value_param_type.h:2:8: note: class was forward declared here [ClassForwardDeclaredHere] - // CHECK:STDERR: struct S; + // CHECK:STDERR: struct ForwardDeclaredStruct; // CHECK:STDERR: ^ // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE-27]]:10: in file included here [InCppInclude] - // CHECK:STDERR: ./decl_value_param_type.h:4:12: note: initializing function parameter [InCallToFunctionParam] - // CHECK:STDERR: auto foo1(S) -> void; - // CHECK:STDERR: ^ + // CHECK:STDERR: ./decl_value_param_type.h:4:32: note: initializing function parameter [InCallToFunctionParam] + // CHECK:STDERR: auto foo1(ForwardDeclaredStruct) -> void; + // CHECK:STDERR: ^ // CHECK:STDERR: - // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE+12]]:12: error: forming value of incomplete type `Cpp.S` [IncompleteTypeInValueConversion] + // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE+12]]:12: error: forming value of incomplete type `Cpp.ForwardDeclaredStruct` [IncompleteTypeInValueConversion] // CHECK:STDERR: Cpp.foo2(*p); // CHECK:STDERR: ^~ // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE-35]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./decl_value_param_type.h:2:8: note: class was forward declared here [ClassForwardDeclaredHere] - // CHECK:STDERR: struct S; + // CHECK:STDERR: struct ForwardDeclaredStruct; // CHECK:STDERR: ^ // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE-39]]:10: in file included here [InCppInclude] - // CHECK:STDERR: ./decl_value_param_type.h:5:12: note: initializing function parameter [InCallToFunctionParam] - // CHECK:STDERR: auto foo2(S) -> void; - // CHECK:STDERR: ^ + // CHECK:STDERR: ./decl_value_param_type.h:5:32: note: initializing function parameter [InCallToFunctionParam] + // CHECK:STDERR: auto foo2(ForwardDeclaredStruct) -> void; + // CHECK:STDERR: ^ // CHECK:STDERR: Cpp.foo2(*p); } @@ -86,9 +86,9 @@ fn F(p: Cpp.S*) { // --- definition_no_data_members_value_param_type.h -struct S {}; +struct EmptyStruct {}; -auto foo(S) -> void; +auto foo_empty(EmptyStruct) -> void; // --- import_definition_no_data_members_value_param_type.carbon @@ -96,9 +96,9 @@ library "[[@TEST_NAME]]"; import Cpp library "definition_no_data_members_value_param_type.h"; -fn F(s: Cpp.S) { +fn F(s: Cpp.EmptyStruct) { //@dump-sem-ir-begin - Cpp.foo(s); + Cpp.foo_empty(s); //@dump-sem-ir-end } @@ -108,37 +108,37 @@ fn F(s: Cpp.S) { // --- non_copyable_param_type.h -struct S { - S(const S&) = delete; +struct NonCopyableStruct { + NonCopyableStruct(const NonCopyableStruct&) = delete; }; -auto foo(S) -> void; +auto foo_non_copyable(NonCopyableStruct) -> void; // --- fail_import_non_copyable_param_type.carbon library "[[@TEST_NAME]]"; // CHECK:STDERR: fail_import_non_copyable_param_type.carbon:[[@LINE+12]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./non_copyable_param_type.h:6:6: error: call to deleted constructor of 'S' [CppInteropParseError] -// CHECK:STDERR: 6 | auto foo(S) -> void; -// CHECK:STDERR: | ^~~ +// CHECK:STDERR: ./non_copyable_param_type.h:6:6: error: call to deleted constructor of 'NonCopyableStruct' [CppInteropParseError] +// CHECK:STDERR: 6 | auto foo_non_copyable(NonCopyableStruct) -> void; +// CHECK:STDERR: | ^~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_non_copyable_param_type.carbon:[[@LINE+8]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./non_copyable_param_type.h:3:3: note: 'S' has been explicitly marked deleted here [CppInteropParseNote] -// CHECK:STDERR: 3 | S(const S&) = delete; +// CHECK:STDERR: ./non_copyable_param_type.h:3:3: note: 'NonCopyableStruct' has been explicitly marked deleted here [CppInteropParseNote] +// CHECK:STDERR: 3 | NonCopyableStruct(const NonCopyableStruct&) = delete; // CHECK:STDERR: | ^ // CHECK:STDERR: fail_import_non_copyable_param_type.carbon:[[@LINE+4]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./non_copyable_param_type.h:6:11: note: passing argument to parameter here [CppInteropParseNote] -// CHECK:STDERR: 6 | auto foo(S) -> void; -// CHECK:STDERR: | ^ +// CHECK:STDERR: ./non_copyable_param_type.h:6:40: note: passing argument to parameter here [CppInteropParseNote] +// CHECK:STDERR: 6 | auto foo_non_copyable(NonCopyableStruct) -> void; +// CHECK:STDERR: | ^ import Cpp library "non_copyable_param_type.h"; -fn F(s: Cpp.S) { +fn F(s: Cpp.NonCopyableStruct) { //@dump-sem-ir-begin // CHECK:STDERR: fail_import_non_copyable_param_type.carbon:[[@LINE+4]]:3: note: in thunk for C++ function used here [InCppThunk] - // CHECK:STDERR: Cpp.foo(s); - // CHECK:STDERR: ^~~~~~~~~~ + // CHECK:STDERR: Cpp.foo_non_copyable(s); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - Cpp.foo(s); + Cpp.foo_non_copyable(s); //@dump-sem-ir-end } @@ -148,13 +148,13 @@ fn F(s: Cpp.S) { // --- definition_single_data_member_value_param_type.h -struct D {}; +struct SingleMemberD {}; -struct S { - D d; +struct SingleMemberStruct { + SingleMemberD d; }; -auto foo(S) -> void; +auto foo_single_member(SingleMemberStruct) -> void; // --- definition_single_data_member_value_param_type.carbon @@ -162,9 +162,9 @@ library "[[@TEST_NAME]]"; import Cpp library "definition_single_data_member_value_param_type.h"; -fn F(s: Cpp.S) { +fn F(s: Cpp.SingleMemberStruct) { //@dump-sem-ir-begin - Cpp.foo(s); + Cpp.foo_single_member(s); //@dump-sem-ir-end } @@ -174,15 +174,15 @@ fn F(s: Cpp.S) { // --- definition_multiple_data_members_value_param_type.h -struct D {}; +struct MultipleMembersD {}; -struct S { - D d1; - D d2; - D d3; +struct MultipleMembersStruct { + MultipleMembersD d1; + MultipleMembersD d2; + MultipleMembersD d3; }; -auto foo(S) -> void; +auto foo_multiple_members(MultipleMembersStruct) -> void; // --- definition_multiple_data_members_value_param_type.carbon @@ -190,9 +190,9 @@ library "[[@TEST_NAME]]"; import Cpp library "definition_multiple_data_members_value_param_type.h"; -fn F(s: Cpp.S) { +fn F(s: Cpp.MultipleMembersStruct) { //@dump-sem-ir-begin - Cpp.foo(s); + Cpp.foo_multiple_members(s); //@dump-sem-ir-end } @@ -202,9 +202,9 @@ fn F(s: Cpp.S) { // --- definition_in_namespace_value_param_type.h -namespace N { struct S {}; } +namespace N { struct InNamespaceStruct {}; } -auto foo(N::S) -> void; +auto foo_in_namespace(N::InNamespaceStruct) -> void; // --- import_definition_in_namespace_value_param_type.carbon @@ -212,11 +212,11 @@ library "[[@TEST_NAME]]"; import Cpp library "definition_in_namespace_value_param_type.h"; -fn F(s: Cpp.N.S) { +fn F(s: Cpp.N.InNamespaceStruct) { //@dump-sem-ir-begin - Cpp.foo(s); + Cpp.foo_in_namespace(s); // Check that the parameter type was imported correctly. - var unused x: Cpp.N.S; + var unused x: Cpp.N.InNamespaceStruct; //@dump-sem-ir-end } @@ -227,8 +227,8 @@ fn F(s: Cpp.N.S) { // --- definition_in_relative_namespace_value_param_type.h namespace N1 { - namespace N2 { struct S {}; } - auto foo(N2::S) -> void; + namespace N2 { struct InRelativeNamespaceStruct {}; } + auto foo(N2::InRelativeNamespaceStruct) -> void; } // --- import_definition_in_relative_namespace_value_param_type.carbon @@ -237,7 +237,7 @@ library "[[@TEST_NAME]]"; import Cpp library "definition_in_relative_namespace_value_param_type.h"; -fn F(s: Cpp.N1.N2.S) { +fn F(s: Cpp.N1.N2.InRelativeNamespaceStruct) { //@dump-sem-ir-begin Cpp.N1.foo(s); //@dump-sem-ir-end @@ -249,11 +249,11 @@ fn F(s: Cpp.N1.N2.S) { // --- definition_in_outer_definition.h -struct O { - struct S {}; +struct OuterStruct { + struct InnerStruct {}; }; -auto foo(O::S) -> void; +auto foo_in_outer(OuterStruct::InnerStruct) -> void; // --- import_definition_in_outer_definition.carbon @@ -261,10 +261,10 @@ library "[[@TEST_NAME]]"; import Cpp library "definition_in_outer_definition.h"; -fn F(s: Cpp.O.S) { +fn F(s: Cpp.OuterStruct.InnerStruct) { //@dump-sem-ir-begin - Cpp.foo(s); - var unused x: Cpp.O; + Cpp.foo_in_outer(s); + var unused x: Cpp.OuterStruct; //@dump-sem-ir-end } @@ -274,11 +274,11 @@ fn F(s: Cpp.O.S) { // --- definition_with_static_method.h -struct S { +struct StaticMethodStruct { static void bar(); }; -auto foo(S) -> void; +auto foo_static_method(StaticMethodStruct) -> void; // --- import_definition_and_static_method_call_before.carbon @@ -286,10 +286,10 @@ library "[[@TEST_NAME]]"; import Cpp library "definition_with_static_method.h"; -fn F(s: Cpp.S) { +fn F(s: Cpp.StaticMethodStruct) { //@dump-sem-ir-begin - Cpp.S.bar(); - Cpp.foo(s); + Cpp.StaticMethodStruct.bar(); + Cpp.foo_static_method(s); //@dump-sem-ir-end } @@ -299,10 +299,10 @@ library "[[@TEST_NAME]]"; import Cpp library "definition_with_static_method.h"; -fn F(s: Cpp.S) { +fn F(s: Cpp.StaticMethodStruct) { //@dump-sem-ir-begin - Cpp.foo(s); - Cpp.S.bar(); + Cpp.foo_static_method(s); + Cpp.StaticMethodStruct.bar(); //@dump-sem-ir-end } @@ -312,7 +312,7 @@ fn F(s: Cpp.S) { // --- incomplete.h -struct Incomplete; +struct IncompleteStruct; // --- fail_import_incomplete.carbon @@ -321,15 +321,15 @@ library "[[@TEST_NAME]]"; import Cpp library "incomplete.h"; fn F() { - // CHECK:STDERR: fail_import_incomplete.carbon:[[@LINE+8]]:3: error: member access into incomplete class `Cpp.Incomplete` [QualifiedExprInIncompleteClassScope] - // CHECK:STDERR: Cpp.Incomplete.foo(); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_import_incomplete.carbon:[[@LINE+8]]:3: error: member access into incomplete class `Cpp.IncompleteStruct` [QualifiedExprInIncompleteClassScope] + // CHECK:STDERR: Cpp.IncompleteStruct.foo(); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_incomplete.carbon:[[@LINE-6]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./incomplete.h:2:8: note: class was forward declared here [ClassForwardDeclaredHere] - // CHECK:STDERR: struct Incomplete; + // CHECK:STDERR: struct IncompleteStruct; // CHECK:STDERR: ^ // CHECK:STDERR: - Cpp.Incomplete.foo(); + Cpp.IncompleteStruct.foo(); } // ============================================================================ @@ -338,9 +338,9 @@ fn F() { // --- decl_pointer_param_type.h -struct S; +struct DeclPointerParamStruct; -auto foo(S* _Nonnull) -> void; +auto foo_decl_pointer_param(DeclPointerParamStruct* _Nonnull) -> void; // --- import_decl_pointer_param_type.carbon @@ -348,9 +348,9 @@ library "[[@TEST_NAME]]"; import Cpp library "decl_pointer_param_type.h"; -fn F(s: Cpp.S*) { +fn F(s: Cpp.DeclPointerParamStruct*) { //@dump-sem-ir-begin - Cpp.foo(s); + Cpp.foo_decl_pointer_param(s); //@dump-sem-ir-end } @@ -360,9 +360,9 @@ fn F(s: Cpp.S*) { // --- definition_pointer_param_type.h -struct S {}; +struct DefPointerParamStruct {}; -auto foo(S* _Nonnull) -> void; +auto foo_def_pointer_param(DefPointerParamStruct* _Nonnull) -> void; // --- import_definition_pointer_param_type.carbon @@ -370,9 +370,9 @@ library "[[@TEST_NAME]]"; import Cpp library "definition_pointer_param_type.h"; -fn F(s: Cpp.S*) { +fn F(s: Cpp.DefPointerParamStruct*) { //@dump-sem-ir-begin - Cpp.foo(s); + Cpp.foo_def_pointer_param(s); //@dump-sem-ir-end } @@ -382,9 +382,9 @@ fn F(s: Cpp.S*) { // --- decl_value_return_type.h -struct S; +struct DeclValueReturnStruct; -auto foo() -> S; +auto foo_decl_value_return() -> DeclValueReturnStruct; // --- fail_import_decl_value_return_type.carbon @@ -392,37 +392,37 @@ library "[[@TEST_NAME]]"; // TODO: We should only produce one error here. // CHECK:STDERR: fail_import_decl_value_return_type.carbon:[[@LINE+12]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./decl_value_return_type.h:4:6: error: calling 'foo' with incomplete return type 'S' [CppInteropParseError] -// CHECK:STDERR: 4 | auto foo() -> S; -// CHECK:STDERR: | ^~~ +// CHECK:STDERR: ./decl_value_return_type.h:4:6: error: calling 'foo_decl_value_return' with incomplete return type 'DeclValueReturnStruct' [CppInteropParseError] +// CHECK:STDERR: 4 | auto foo_decl_value_return() -> DeclValueReturnStruct; +// CHECK:STDERR: | ^~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_decl_value_return_type.carbon:[[@LINE+8]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./decl_value_return_type.h:4:6: note: 'foo' declared here [CppInteropParseNote] -// CHECK:STDERR: 4 | auto foo() -> S; +// CHECK:STDERR: ./decl_value_return_type.h:4:6: note: 'foo_decl_value_return' declared here [CppInteropParseNote] +// CHECK:STDERR: 4 | auto foo_decl_value_return() -> DeclValueReturnStruct; // CHECK:STDERR: | ^ // CHECK:STDERR: fail_import_decl_value_return_type.carbon:[[@LINE+4]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./decl_value_return_type.h:2:8: note: forward declaration of 'S' [CppInteropParseNote] -// CHECK:STDERR: 2 | struct S; +// CHECK:STDERR: ./decl_value_return_type.h:2:8: note: forward declaration of 'DeclValueReturnStruct' [CppInteropParseNote] +// CHECK:STDERR: 2 | struct DeclValueReturnStruct; // CHECK:STDERR: | ^ import Cpp library "decl_value_return_type.h"; fn F() { // CHECK:STDERR: fail_import_decl_value_return_type.carbon:[[@LINE+16]]:3: note: in thunk for C++ function used here [InCppThunk] - // CHECK:STDERR: Cpp.foo(); - // CHECK:STDERR: ^~~~~~~~~ + // CHECK:STDERR: Cpp.foo_decl_value_return(); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - // CHECK:STDERR: fail_import_decl_value_return_type.carbon:[[@LINE+12]]:3: error: function returns incomplete type `Cpp.S` [IncompleteTypeInFunctionReturnType] - // CHECK:STDERR: Cpp.foo(); - // CHECK:STDERR: ^~~~~~~~~ + // CHECK:STDERR: fail_import_decl_value_return_type.carbon:[[@LINE+12]]:3: error: function returns incomplete type `Cpp.DeclValueReturnStruct` [IncompleteTypeInFunctionReturnType] + // CHECK:STDERR: Cpp.foo_decl_value_return(); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_decl_value_return_type.carbon:[[@LINE-10]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./decl_value_return_type.h:2:8: note: class was forward declared here [ClassForwardDeclaredHere] - // CHECK:STDERR: struct S; + // CHECK:STDERR: struct DeclValueReturnStruct; // CHECK:STDERR: ^ // CHECK:STDERR: fail_import_decl_value_return_type.carbon:[[@LINE-14]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./decl_value_return_type.h:4:1: note: return type declared here [IncompleteReturnTypeHere] - // CHECK:STDERR: auto foo() -> S; + // CHECK:STDERR: auto foo_decl_value_return() -> DeclValueReturnStruct; // CHECK:STDERR: ^ // CHECK:STDERR: - Cpp.foo(); + Cpp.foo_decl_value_return(); } // ============================================================================ @@ -431,9 +431,9 @@ fn F() { // --- definition_value_return_type.h -struct S {}; +struct DefValueReturnStruct {}; -auto foo() -> S; +auto foo_def_value_return() -> DefValueReturnStruct; // --- import_definition_value_return_type.carbon @@ -443,7 +443,7 @@ import Cpp library "definition_value_return_type.h"; fn F() { //@dump-sem-ir-begin - Cpp.foo(); + Cpp.foo_def_value_return(); //@dump-sem-ir-end } @@ -453,9 +453,9 @@ fn F() { // --- decl_pointer_return_type.h -struct S; +struct DeclPointerReturnStruct; -auto foo() -> S* _Nonnull; +auto foo_decl_pointer_return() -> DeclPointerReturnStruct* _Nonnull; // --- import_decl_pointer_return_type.carbon @@ -465,7 +465,7 @@ import Cpp library "decl_pointer_return_type.h"; fn F() { //@dump-sem-ir-begin - Cpp.foo(); + Cpp.foo_decl_pointer_return(); //@dump-sem-ir-end } @@ -475,9 +475,9 @@ fn F() { // --- definition_pointer_return_type.h -struct S {}; +struct DefPointerReturnStruct {}; -auto foo() -> S* _Nonnull; +auto foo_def_pointer_return() -> DefPointerReturnStruct* _Nonnull; // --- import_definition_pointer_return_type.carbon @@ -487,200 +487,200 @@ import Cpp library "definition_pointer_return_type.h"; fn F() { //@dump-sem-ir-begin - Cpp.foo(); + Cpp.foo_def_pointer_return(); //@dump-sem-ir-end } // CHECK:STDOUT: --- import_definition_no_data_members_value_param_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %S: type = class_type @S [concrete] +// CHECK:STDOUT: %EmptyStruct: type = class_type @EmptyStruct [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.037: type = ptr_type %S [concrete] -// CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] -// CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_empty.cpp_overload_set.type: type = cpp_overload_set_type @foo_empty.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_empty.cpp_overload_set.value: %foo_empty.cpp_overload_set.type = cpp_overload_set_value @foo_empty.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.9e5: type = ptr_type %EmptyStruct [concrete] +// CHECK:STDOUT: %foo_empty__carbon_thunk.type: type = fn_type @foo_empty__carbon_thunk [concrete] +// CHECK:STDOUT: %foo_empty__carbon_thunk: %foo_empty__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .S = %S.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .EmptyStruct = %EmptyStruct.decl +// CHECK:STDOUT: .foo_empty = %foo_empty.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { +// CHECK:STDOUT: %EmptyStruct.decl: type = class_decl @EmptyStruct [concrete = constants.%EmptyStruct] {} {} +// CHECK:STDOUT: %foo_empty.cpp_overload_set.value: %foo_empty.cpp_overload_set.type = cpp_overload_set_value @foo_empty.cpp_overload_set [concrete = constants.%foo_empty.cpp_overload_set.value] +// CHECK:STDOUT: %foo_empty__carbon_thunk.decl: %foo_empty__carbon_thunk.type = fn_decl @foo_empty__carbon_thunk [concrete = constants.%foo_empty__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%s.param: %S) { +// CHECK:STDOUT: fn @F(%s.param: %EmptyStruct) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %s.ref: %S = name_ref s, %s -// CHECK:STDOUT: %.loc8: ref %S = value_as_ref %s.ref -// CHECK:STDOUT: %addr: %ptr.037 = addr_of %.loc8 -// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) +// CHECK:STDOUT: %foo_empty.ref: %foo_empty.cpp_overload_set.type = name_ref foo_empty, imports.%foo_empty.cpp_overload_set.value [concrete = constants.%foo_empty.cpp_overload_set.value] +// CHECK:STDOUT: %s.ref: %EmptyStruct = name_ref s, %s +// CHECK:STDOUT: %.loc8: ref %EmptyStruct = value_as_ref %s.ref +// CHECK:STDOUT: %addr: %ptr.9e5 = addr_of %.loc8 +// CHECK:STDOUT: %foo_empty__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_empty__carbon_thunk.decl(%addr) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_import_non_copyable_param_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %S: type = class_type @S [concrete] +// CHECK:STDOUT: %NonCopyableStruct: type = class_type @NonCopyableStruct [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_non_copyable.cpp_overload_set.type: type = cpp_overload_set_type @foo_non_copyable.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_non_copyable.cpp_overload_set.value: %foo_non_copyable.cpp_overload_set.type = cpp_overload_set_value @foo_non_copyable.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_non_copyable.type: type = fn_type @foo_non_copyable [concrete] +// CHECK:STDOUT: %foo_non_copyable: %foo_non_copyable.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .S = %S.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .NonCopyableStruct = %NonCopyableStruct.decl +// CHECK:STDOUT: .foo_non_copyable = %foo_non_copyable.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %NonCopyableStruct.decl: type = class_decl @NonCopyableStruct [concrete = constants.%NonCopyableStruct] {} {} +// CHECK:STDOUT: %foo_non_copyable.cpp_overload_set.value: %foo_non_copyable.cpp_overload_set.type = cpp_overload_set_value @foo_non_copyable.cpp_overload_set [concrete = constants.%foo_non_copyable.cpp_overload_set.value] +// CHECK:STDOUT: %foo_non_copyable.decl: %foo_non_copyable.type = fn_decl @foo_non_copyable [concrete = constants.%foo_non_copyable] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%s.param: %S) { +// CHECK:STDOUT: fn @F(%s.param: %NonCopyableStruct) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc24: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %s.ref: %S = name_ref s, %s -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl(%s.ref) +// CHECK:STDOUT: %foo_non_copyable.ref: %foo_non_copyable.cpp_overload_set.type = name_ref foo_non_copyable, imports.%foo_non_copyable.cpp_overload_set.value [concrete = constants.%foo_non_copyable.cpp_overload_set.value] +// CHECK:STDOUT: %s.ref: %NonCopyableStruct = name_ref s, %s +// CHECK:STDOUT: %foo_non_copyable.call: init %empty_tuple.type = call imports.%foo_non_copyable.decl(%s.ref) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- definition_single_data_member_value_param_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %S: type = class_type @S [concrete] +// CHECK:STDOUT: %SingleMemberStruct: type = class_type @SingleMemberStruct [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.037: type = ptr_type %S [concrete] -// CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] -// CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_single_member.cpp_overload_set.type: type = cpp_overload_set_type @foo_single_member.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_single_member.cpp_overload_set.value: %foo_single_member.cpp_overload_set.type = cpp_overload_set_value @foo_single_member.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.3c4: type = ptr_type %SingleMemberStruct [concrete] +// CHECK:STDOUT: %foo_single_member__carbon_thunk.type: type = fn_type @foo_single_member__carbon_thunk [concrete] +// CHECK:STDOUT: %foo_single_member__carbon_thunk: %foo_single_member__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .S = %S.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .SingleMemberStruct = %SingleMemberStruct.decl +// CHECK:STDOUT: .foo_single_member = %foo_single_member.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { +// CHECK:STDOUT: %SingleMemberStruct.decl: type = class_decl @SingleMemberStruct [concrete = constants.%SingleMemberStruct] {} {} +// CHECK:STDOUT: %foo_single_member.cpp_overload_set.value: %foo_single_member.cpp_overload_set.type = cpp_overload_set_value @foo_single_member.cpp_overload_set [concrete = constants.%foo_single_member.cpp_overload_set.value] +// CHECK:STDOUT: %foo_single_member__carbon_thunk.decl: %foo_single_member__carbon_thunk.type = fn_decl @foo_single_member__carbon_thunk [concrete = constants.%foo_single_member__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%s.param: %S) { +// CHECK:STDOUT: fn @F(%s.param: %SingleMemberStruct) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %s.ref: %S = name_ref s, %s -// CHECK:STDOUT: %.loc8: ref %S = value_as_ref %s.ref -// CHECK:STDOUT: %addr: %ptr.037 = addr_of %.loc8 -// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) +// CHECK:STDOUT: %foo_single_member.ref: %foo_single_member.cpp_overload_set.type = name_ref foo_single_member, imports.%foo_single_member.cpp_overload_set.value [concrete = constants.%foo_single_member.cpp_overload_set.value] +// CHECK:STDOUT: %s.ref: %SingleMemberStruct = name_ref s, %s +// CHECK:STDOUT: %.loc8: ref %SingleMemberStruct = value_as_ref %s.ref +// CHECK:STDOUT: %addr: %ptr.3c4 = addr_of %.loc8 +// CHECK:STDOUT: %foo_single_member__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_single_member__carbon_thunk.decl(%addr) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- definition_multiple_data_members_value_param_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %S: type = class_type @S [concrete] +// CHECK:STDOUT: %MultipleMembersStruct: type = class_type @MultipleMembersStruct [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.037: type = ptr_type %S [concrete] -// CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] -// CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_multiple_members.cpp_overload_set.type: type = cpp_overload_set_type @foo_multiple_members.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_multiple_members.cpp_overload_set.value: %foo_multiple_members.cpp_overload_set.type = cpp_overload_set_value @foo_multiple_members.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.f92: type = ptr_type %MultipleMembersStruct [concrete] +// CHECK:STDOUT: %foo_multiple_members__carbon_thunk.type: type = fn_type @foo_multiple_members__carbon_thunk [concrete] +// CHECK:STDOUT: %foo_multiple_members__carbon_thunk: %foo_multiple_members__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .S = %S.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .MultipleMembersStruct = %MultipleMembersStruct.decl +// CHECK:STDOUT: .foo_multiple_members = %foo_multiple_members.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { +// CHECK:STDOUT: %MultipleMembersStruct.decl: type = class_decl @MultipleMembersStruct [concrete = constants.%MultipleMembersStruct] {} {} +// CHECK:STDOUT: %foo_multiple_members.cpp_overload_set.value: %foo_multiple_members.cpp_overload_set.type = cpp_overload_set_value @foo_multiple_members.cpp_overload_set [concrete = constants.%foo_multiple_members.cpp_overload_set.value] +// CHECK:STDOUT: %foo_multiple_members__carbon_thunk.decl: %foo_multiple_members__carbon_thunk.type = fn_decl @foo_multiple_members__carbon_thunk [concrete = constants.%foo_multiple_members__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%s.param: %S) { +// CHECK:STDOUT: fn @F(%s.param: %MultipleMembersStruct) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %s.ref: %S = name_ref s, %s -// CHECK:STDOUT: %.loc8: ref %S = value_as_ref %s.ref -// CHECK:STDOUT: %addr: %ptr.037 = addr_of %.loc8 -// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) +// CHECK:STDOUT: %foo_multiple_members.ref: %foo_multiple_members.cpp_overload_set.type = name_ref foo_multiple_members, imports.%foo_multiple_members.cpp_overload_set.value [concrete = constants.%foo_multiple_members.cpp_overload_set.value] +// CHECK:STDOUT: %s.ref: %MultipleMembersStruct = name_ref s, %s +// CHECK:STDOUT: %.loc8: ref %MultipleMembersStruct = value_as_ref %s.ref +// CHECK:STDOUT: %addr: %ptr.f92 = addr_of %.loc8 +// CHECK:STDOUT: %foo_multiple_members__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_multiple_members__carbon_thunk.decl(%addr) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_definition_in_namespace_value_param_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %S: type = class_type @S [concrete] -// CHECK:STDOUT: %pattern_type.bc1: type = pattern_type %S [concrete] +// CHECK:STDOUT: %InNamespaceStruct: type = class_type @InNamespaceStruct [concrete] +// CHECK:STDOUT: %pattern_type.d3e: type = pattern_type %InNamespaceStruct [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.237: type = ptr_type %S [concrete] -// CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] -// CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.bc1 = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.bc1 = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %foo_in_namespace.cpp_overload_set.type: type = cpp_overload_set_type @foo_in_namespace.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_in_namespace.cpp_overload_set.value: %foo_in_namespace.cpp_overload_set.type = cpp_overload_set_value @foo_in_namespace.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.f55: type = ptr_type %InNamespaceStruct [concrete] +// CHECK:STDOUT: %foo_in_namespace__carbon_thunk.type: type = fn_type @foo_in_namespace__carbon_thunk [concrete] +// CHECK:STDOUT: %foo_in_namespace__carbon_thunk: %foo_in_namespace__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.d3e = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.d3e = var_pattern %x.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete] // CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.type.0c9: type = fn_type @T.as_type.as.DefaultOrUnformed.impl.Op, @T.as_type.as.DefaultOrUnformed.impl(%T.b09) [symbolic] // CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.cfe: %T.as_type.as.DefaultOrUnformed.impl.Op.type.0c9 = struct_value () [symbolic] -// CHECK:STDOUT: %S.Op.type: type = fn_type @S.Op [concrete] -// CHECK:STDOUT: %S.Op: %S.Op.type = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.85f: = custom_witness (%S.Op), @Default [concrete] -// CHECK:STDOUT: %Default.facet.fc7: %Default.type = facet_value %S, (%custom_witness.85f) [concrete] -// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.c8f: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.162, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.fc7) [concrete] -// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %S, (%DefaultOrUnformed.impl_witness.c8f) [concrete] -// CHECK:STDOUT: %S.cpp_destructor.type: type = fn_type @S.cpp_destructor [concrete] -// CHECK:STDOUT: %S.cpp_destructor: %S.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %InNamespaceStruct.Op.type: type = fn_type @InNamespaceStruct.Op [concrete] +// CHECK:STDOUT: %InNamespaceStruct.Op: %InNamespaceStruct.Op.type = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.85f: = custom_witness (%InNamespaceStruct.Op), @Default [concrete] +// CHECK:STDOUT: %Default.facet.598: %Default.type = facet_value %InNamespaceStruct, (%custom_witness.85f) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.d48: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.162, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.598) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %InNamespaceStruct, (%DefaultOrUnformed.impl_witness.d48) [concrete] +// CHECK:STDOUT: %InNamespaceStruct.cpp_destructor.type: type = fn_type @InNamespaceStruct.cpp_destructor [concrete] +// CHECK:STDOUT: %InNamespaceStruct.cpp_destructor: %InNamespaceStruct.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { // CHECK:STDOUT: .N = %N -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .foo_in_namespace = %foo_in_namespace.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: %N: = namespace [concrete] { -// CHECK:STDOUT: .S = %S.decl +// CHECK:STDOUT: .InNamespaceStruct = %InNamespaceStruct.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { +// CHECK:STDOUT: %InNamespaceStruct.decl: type = class_decl @InNamespaceStruct [concrete = constants.%InNamespaceStruct] {} {} +// CHECK:STDOUT: %foo_in_namespace.cpp_overload_set.value: %foo_in_namespace.cpp_overload_set.type = cpp_overload_set_value @foo_in_namespace.cpp_overload_set [concrete = constants.%foo_in_namespace.cpp_overload_set.value] +// CHECK:STDOUT: %foo_in_namespace__carbon_thunk.decl: %foo_in_namespace__carbon_thunk.type = fn_decl @foo_in_namespace__carbon_thunk [concrete = constants.%foo_in_namespace__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -689,46 +689,46 @@ fn F() { // CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table.162 = impl_witness_table (%Core.import_ref.c2f), @T.as_type.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%s.param: %S) { +// CHECK:STDOUT: fn @F(%s.param: %InNamespaceStruct) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %s.ref: %S = name_ref s, %s -// CHECK:STDOUT: %.loc8: ref %S = value_as_ref %s.ref -// CHECK:STDOUT: %addr: %ptr.237 = addr_of %.loc8 -// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) -// CHECK:STDOUT: %x.var: ref %S = var_storage %x.var_patt -// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%S, (constants.%DefaultOrUnformed.impl_witness.c8f) [concrete = constants.%DefaultOrUnformed.facet] -// CHECK:STDOUT: %.loc10_24.1: %DefaultOrUnformed.type = converted constants.%S, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] -// CHECK:STDOUT: %as_type: type = facet_access_type %.loc10_24.1 [concrete = constants.%S] -// CHECK:STDOUT: %.loc10_24.2: type = converted %.loc10_24.1, %as_type [concrete = constants.%S] +// CHECK:STDOUT: %foo_in_namespace.ref: %foo_in_namespace.cpp_overload_set.type = name_ref foo_in_namespace, imports.%foo_in_namespace.cpp_overload_set.value [concrete = constants.%foo_in_namespace.cpp_overload_set.value] +// CHECK:STDOUT: %s.ref: %InNamespaceStruct = name_ref s, %s +// CHECK:STDOUT: %.loc8: ref %InNamespaceStruct = value_as_ref %s.ref +// CHECK:STDOUT: %addr: %ptr.f55 = addr_of %.loc8 +// CHECK:STDOUT: %foo_in_namespace__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_in_namespace__carbon_thunk.decl(%addr) +// CHECK:STDOUT: %x.var: ref %InNamespaceStruct = var_storage %x.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%InNamespaceStruct, (constants.%DefaultOrUnformed.impl_witness.d48) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc10_40.1: %DefaultOrUnformed.type = converted constants.%InNamespaceStruct, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc10_40.1 [concrete = constants.%InNamespaceStruct] +// CHECK:STDOUT: %.loc10_40.2: type = converted %.loc10_40.1, %as_type [concrete = constants.%InNamespaceStruct] // CHECK:STDOUT: -// CHECK:STDOUT: %.loc10_3: ref %S = splice_block %x.var {} -// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call: init %S to %.loc10_3 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: %.loc10_3: ref %InNamespaceStruct = splice_block %x.var {} +// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call: init %InNamespaceStruct to %.loc10_3 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn() // CHECK:STDOUT: assign %x.var, %T.as_type.as.DefaultOrUnformed.impl.Op.call -// CHECK:STDOUT: %.loc10_22: type = splice_block %S.ref.loc10 [concrete = constants.%S] { +// CHECK:STDOUT: %.loc10_22: type = splice_block %InNamespaceStruct.ref.loc10 [concrete = constants.%InNamespaceStruct] { // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N.ref.loc10: = name_ref N, imports.%N [concrete = imports.%N] -// CHECK:STDOUT: %S.ref.loc10: type = name_ref S, imports.%S.decl [concrete = constants.%S] +// CHECK:STDOUT: %InNamespaceStruct.ref.loc10: type = name_ref InNamespaceStruct, imports.%InNamespaceStruct.decl [concrete = constants.%InNamespaceStruct] // CHECK:STDOUT: } -// CHECK:STDOUT: %x: ref %S = wrapper_binding x, %x.var +// CHECK:STDOUT: %x: ref %InNamespaceStruct = wrapper_binding x, %x.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.bc1 = ref_binding_pattern x [concrete = constants.%x.patt] -// CHECK:STDOUT: %x.var_patt: %pattern_type.bc1 = var_pattern %x.patt [concrete = constants.%x.var_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.d3e = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.d3e = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %S.cpp_destructor.bound: = bound_method %x.var, constants.%S.cpp_destructor -// CHECK:STDOUT: %S.cpp_destructor.call: init %empty_tuple.type = call %S.cpp_destructor.bound(%x.var) +// CHECK:STDOUT: %InNamespaceStruct.cpp_destructor.bound: = bound_method %x.var, constants.%InNamespaceStruct.cpp_destructor +// CHECK:STDOUT: %InNamespaceStruct.cpp_destructor.call: init %empty_tuple.type = call %InNamespaceStruct.cpp_destructor.bound(%x.var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_definition_in_relative_namespace_value_param_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %S: type = class_type @S [concrete] +// CHECK:STDOUT: %InRelativeNamespaceStruct: type = class_type @InRelativeNamespaceStruct [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.b0f: type = ptr_type %S [concrete] +// CHECK:STDOUT: %ptr.772: type = ptr_type %InRelativeNamespaceStruct [concrete] // CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] // CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -744,10 +744,10 @@ fn F() { // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: %N2: = namespace [concrete] { -// CHECK:STDOUT: .S = %S.decl +// CHECK:STDOUT: .InRelativeNamespaceStruct = %InRelativeNamespaceStruct.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} +// CHECK:STDOUT: %InRelativeNamespaceStruct.decl: type = class_decl @InRelativeNamespaceStruct [concrete = constants.%InRelativeNamespaceStruct] {} {} // CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] // CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { // CHECK:STDOUT: @@ -756,14 +756,14 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%s.param: %S) { +// CHECK:STDOUT: fn @F(%s.param: %InRelativeNamespaceStruct) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N1.ref.loc8: = name_ref N1, imports.%N1 [concrete = imports.%N1] // CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %s.ref: %S = name_ref s, %s -// CHECK:STDOUT: %.loc8: ref %S = value_as_ref %s.ref -// CHECK:STDOUT: %addr: %ptr.b0f = addr_of %.loc8 +// CHECK:STDOUT: %s.ref: %InRelativeNamespaceStruct = name_ref s, %s +// CHECK:STDOUT: %.loc8: ref %InRelativeNamespaceStruct = value_as_ref %s.ref +// CHECK:STDOUT: %addr: %ptr.772 = addr_of %.loc8 // CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) // CHECK:STDOUT: // CHECK:STDOUT: } @@ -771,41 +771,41 @@ fn F() { // CHECK:STDOUT: --- import_definition_in_outer_definition.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %O: type = class_type @O [concrete] +// CHECK:STDOUT: %OuterStruct: type = class_type @OuterStruct [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %S: type = class_type @S [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.ad4: type = ptr_type %S [concrete] -// CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] -// CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %pattern_type.6eb: type = pattern_type %O [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.6eb = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.6eb = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %InnerStruct: type = class_type @InnerStruct [concrete] +// CHECK:STDOUT: %foo_in_outer.cpp_overload_set.type: type = cpp_overload_set_type @foo_in_outer.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_in_outer.cpp_overload_set.value: %foo_in_outer.cpp_overload_set.type = cpp_overload_set_value @foo_in_outer.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.d74: type = ptr_type %InnerStruct [concrete] +// CHECK:STDOUT: %foo_in_outer__carbon_thunk.type: type = fn_type @foo_in_outer__carbon_thunk [concrete] +// CHECK:STDOUT: %foo_in_outer__carbon_thunk: %foo_in_outer__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.e34: type = pattern_type %OuterStruct [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.e34 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.e34 = var_pattern %x.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete] // CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.type.0c9: type = fn_type @T.as_type.as.DefaultOrUnformed.impl.Op, @T.as_type.as.DefaultOrUnformed.impl(%T.b09) [symbolic] // CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.cfe: %T.as_type.as.DefaultOrUnformed.impl.Op.type.0c9 = struct_value () [symbolic] -// CHECK:STDOUT: %O.Op.type: type = fn_type @O.Op [concrete] -// CHECK:STDOUT: %O.Op: %O.Op.type = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.9b4: = custom_witness (%O.Op), @Default [concrete] -// CHECK:STDOUT: %Default.facet.240: %Default.type = facet_value %O, (%custom_witness.9b4) [concrete] -// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.6b8: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.162, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.240) [concrete] -// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %O, (%DefaultOrUnformed.impl_witness.6b8) [concrete] -// CHECK:STDOUT: %O.cpp_destructor.type: type = fn_type @O.cpp_destructor [concrete] -// CHECK:STDOUT: %O.cpp_destructor: %O.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %OuterStruct.Op.type: type = fn_type @OuterStruct.Op [concrete] +// CHECK:STDOUT: %OuterStruct.Op: %OuterStruct.Op.type = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.9b4: = custom_witness (%OuterStruct.Op), @Default [concrete] +// CHECK:STDOUT: %Default.facet.e09: %Default.type = facet_value %OuterStruct, (%custom_witness.9b4) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.219: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.162, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.e09) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %OuterStruct, (%DefaultOrUnformed.impl_witness.219) [concrete] +// CHECK:STDOUT: %OuterStruct.cpp_destructor.type: type = fn_type @OuterStruct.cpp_destructor [concrete] +// CHECK:STDOUT: %OuterStruct.cpp_destructor: %OuterStruct.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .O = %O.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .OuterStruct = %OuterStruct.decl +// CHECK:STDOUT: .foo_in_outer = %foo_in_outer.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %O.decl: type = class_decl @O [concrete = constants.%O] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { +// CHECK:STDOUT: %OuterStruct.decl: type = class_decl @OuterStruct [concrete = constants.%OuterStruct] {} {} +// CHECK:STDOUT: %foo_in_outer.cpp_overload_set.value: %foo_in_outer.cpp_overload_set.type = cpp_overload_set_value @foo_in_outer.cpp_overload_set [concrete = constants.%foo_in_outer.cpp_overload_set.value] +// CHECK:STDOUT: %foo_in_outer__carbon_thunk.decl: %foo_in_outer__carbon_thunk.type = fn_decl @foo_in_outer__carbon_thunk [concrete = constants.%foo_in_outer__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -814,154 +814,154 @@ fn F() { // CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table.162 = impl_witness_table (%Core.import_ref.c2f), @T.as_type.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%s.param: %S) { +// CHECK:STDOUT: fn @F(%s.param: %InnerStruct) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %s.ref: %S = name_ref s, %s -// CHECK:STDOUT: %.loc8: ref %S = value_as_ref %s.ref -// CHECK:STDOUT: %addr: %ptr.ad4 = addr_of %.loc8 -// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) -// CHECK:STDOUT: %x.var: ref %O = var_storage %x.var_patt -// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%O, (constants.%DefaultOrUnformed.impl_witness.6b8) [concrete = constants.%DefaultOrUnformed.facet] -// CHECK:STDOUT: %.loc9_22.1: %DefaultOrUnformed.type = converted constants.%O, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] -// CHECK:STDOUT: %as_type: type = facet_access_type %.loc9_22.1 [concrete = constants.%O] -// CHECK:STDOUT: %.loc9_22.2: type = converted %.loc9_22.1, %as_type [concrete = constants.%O] +// CHECK:STDOUT: %foo_in_outer.ref: %foo_in_outer.cpp_overload_set.type = name_ref foo_in_outer, imports.%foo_in_outer.cpp_overload_set.value [concrete = constants.%foo_in_outer.cpp_overload_set.value] +// CHECK:STDOUT: %s.ref: %InnerStruct = name_ref s, %s +// CHECK:STDOUT: %.loc8: ref %InnerStruct = value_as_ref %s.ref +// CHECK:STDOUT: %addr: %ptr.d74 = addr_of %.loc8 +// CHECK:STDOUT: %foo_in_outer__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_in_outer__carbon_thunk.decl(%addr) +// CHECK:STDOUT: %x.var: ref %OuterStruct = var_storage %x.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%OuterStruct, (constants.%DefaultOrUnformed.impl_witness.219) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc9_32.1: %DefaultOrUnformed.type = converted constants.%OuterStruct, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc9_32.1 [concrete = constants.%OuterStruct] +// CHECK:STDOUT: %.loc9_32.2: type = converted %.loc9_32.1, %as_type [concrete = constants.%OuterStruct] // CHECK:STDOUT: -// CHECK:STDOUT: %.loc9_3: ref %O = splice_block %x.var {} -// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call: init %O to %.loc9_3 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: %.loc9_3: ref %OuterStruct = splice_block %x.var {} +// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call: init %OuterStruct to %.loc9_3 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn() // CHECK:STDOUT: assign %x.var, %T.as_type.as.DefaultOrUnformed.impl.Op.call -// CHECK:STDOUT: %.loc9_20: type = splice_block %O.ref.loc9 [concrete = constants.%O] { +// CHECK:STDOUT: %.loc9_20: type = splice_block %OuterStruct.ref.loc9 [concrete = constants.%OuterStruct] { // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %O.ref.loc9: type = name_ref O, imports.%O.decl [concrete = constants.%O] +// CHECK:STDOUT: %OuterStruct.ref.loc9: type = name_ref OuterStruct, imports.%OuterStruct.decl [concrete = constants.%OuterStruct] // CHECK:STDOUT: } -// CHECK:STDOUT: %x: ref %O = wrapper_binding x, %x.var +// CHECK:STDOUT: %x: ref %OuterStruct = wrapper_binding x, %x.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.6eb = ref_binding_pattern x [concrete = constants.%x.patt] -// CHECK:STDOUT: %x.var_patt: %pattern_type.6eb = var_pattern %x.patt [concrete = constants.%x.var_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.e34 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.e34 = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %O.cpp_destructor.bound: = bound_method %x.var, constants.%O.cpp_destructor -// CHECK:STDOUT: %O.cpp_destructor.call: init %empty_tuple.type = call %O.cpp_destructor.bound(%x.var) +// CHECK:STDOUT: %OuterStruct.cpp_destructor.bound: = bound_method %x.var, constants.%OuterStruct.cpp_destructor +// CHECK:STDOUT: %OuterStruct.cpp_destructor.call: init %empty_tuple.type = call %OuterStruct.cpp_destructor.bound(%x.var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_definition_and_static_method_call_before.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %S: type = class_type @S [concrete] +// CHECK:STDOUT: %StaticMethodStruct: type = class_type @StaticMethodStruct [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %S.bar.cpp_overload_set.type: type = cpp_overload_set_type @S.bar.cpp_overload_set [concrete] -// CHECK:STDOUT: %S.bar.cpp_overload_set.value: %S.bar.cpp_overload_set.type = cpp_overload_set_value @S.bar.cpp_overload_set [concrete] -// CHECK:STDOUT: %S.bar.type: type = fn_type @S.bar [concrete] -// CHECK:STDOUT: %S.bar: %S.bar.type = struct_value () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.037: type = ptr_type %S [concrete] -// CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] -// CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %StaticMethodStruct.bar.cpp_overload_set.type: type = cpp_overload_set_type @StaticMethodStruct.bar.cpp_overload_set [concrete] +// CHECK:STDOUT: %StaticMethodStruct.bar.cpp_overload_set.value: %StaticMethodStruct.bar.cpp_overload_set.type = cpp_overload_set_value @StaticMethodStruct.bar.cpp_overload_set [concrete] +// CHECK:STDOUT: %StaticMethodStruct.bar.type: type = fn_type @StaticMethodStruct.bar [concrete] +// CHECK:STDOUT: %StaticMethodStruct.bar: %StaticMethodStruct.bar.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_static_method.cpp_overload_set.type: type = cpp_overload_set_type @foo_static_method.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_static_method.cpp_overload_set.value: %foo_static_method.cpp_overload_set.type = cpp_overload_set_value @foo_static_method.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.f77: type = ptr_type %StaticMethodStruct [concrete] +// CHECK:STDOUT: %foo_static_method__carbon_thunk.type: type = fn_type @foo_static_method__carbon_thunk [concrete] +// CHECK:STDOUT: %foo_static_method__carbon_thunk: %foo_static_method__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .S = %S.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .StaticMethodStruct = %StaticMethodStruct.decl +// CHECK:STDOUT: .foo_static_method = %foo_static_method.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} -// CHECK:STDOUT: %S.bar.cpp_overload_set.value: %S.bar.cpp_overload_set.type = cpp_overload_set_value @S.bar.cpp_overload_set [concrete = constants.%S.bar.cpp_overload_set.value] -// CHECK:STDOUT: %S.bar.decl: %S.bar.type = fn_decl @S.bar [concrete = constants.%S.bar] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { +// CHECK:STDOUT: %StaticMethodStruct.decl: type = class_decl @StaticMethodStruct [concrete = constants.%StaticMethodStruct] {} {} +// CHECK:STDOUT: %StaticMethodStruct.bar.cpp_overload_set.value: %StaticMethodStruct.bar.cpp_overload_set.type = cpp_overload_set_value @StaticMethodStruct.bar.cpp_overload_set [concrete = constants.%StaticMethodStruct.bar.cpp_overload_set.value] +// CHECK:STDOUT: %StaticMethodStruct.bar.decl: %StaticMethodStruct.bar.type = fn_decl @StaticMethodStruct.bar [concrete = constants.%StaticMethodStruct.bar] {} {} +// CHECK:STDOUT: %foo_static_method.cpp_overload_set.value: %foo_static_method.cpp_overload_set.type = cpp_overload_set_value @foo_static_method.cpp_overload_set [concrete = constants.%foo_static_method.cpp_overload_set.value] +// CHECK:STDOUT: %foo_static_method__carbon_thunk.decl: %foo_static_method__carbon_thunk.type = fn_decl @foo_static_method__carbon_thunk [concrete = constants.%foo_static_method__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%s.param: %S) { +// CHECK:STDOUT: fn @F(%s.param: %StaticMethodStruct) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %S.ref.loc8: type = name_ref S, imports.%S.decl [concrete = constants.%S] -// CHECK:STDOUT: %bar.ref: %S.bar.cpp_overload_set.type = name_ref bar, imports.%S.bar.cpp_overload_set.value [concrete = constants.%S.bar.cpp_overload_set.value] -// CHECK:STDOUT: %S.bar.call: init %empty_tuple.type = call imports.%S.bar.decl() +// CHECK:STDOUT: %StaticMethodStruct.ref.loc8: type = name_ref StaticMethodStruct, imports.%StaticMethodStruct.decl [concrete = constants.%StaticMethodStruct] +// CHECK:STDOUT: %bar.ref: %StaticMethodStruct.bar.cpp_overload_set.type = name_ref bar, imports.%StaticMethodStruct.bar.cpp_overload_set.value [concrete = constants.%StaticMethodStruct.bar.cpp_overload_set.value] +// CHECK:STDOUT: %StaticMethodStruct.bar.call: init %empty_tuple.type = call imports.%StaticMethodStruct.bar.decl() // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %s.ref: %S = name_ref s, %s -// CHECK:STDOUT: %.loc9: ref %S = value_as_ref %s.ref -// CHECK:STDOUT: %addr: %ptr.037 = addr_of %.loc9 -// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) +// CHECK:STDOUT: %foo_static_method.ref: %foo_static_method.cpp_overload_set.type = name_ref foo_static_method, imports.%foo_static_method.cpp_overload_set.value [concrete = constants.%foo_static_method.cpp_overload_set.value] +// CHECK:STDOUT: %s.ref: %StaticMethodStruct = name_ref s, %s +// CHECK:STDOUT: %.loc9: ref %StaticMethodStruct = value_as_ref %s.ref +// CHECK:STDOUT: %addr: %ptr.f77 = addr_of %.loc9 +// CHECK:STDOUT: %foo_static_method__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_static_method__carbon_thunk.decl(%addr) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_definition_and_static_method_call_after.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %S: type = class_type @S [concrete] +// CHECK:STDOUT: %StaticMethodStruct: type = class_type @StaticMethodStruct [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.037: type = ptr_type %S [concrete] -// CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] -// CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %S.bar.cpp_overload_set.type: type = cpp_overload_set_type @S.bar.cpp_overload_set [concrete] -// CHECK:STDOUT: %S.bar.cpp_overload_set.value: %S.bar.cpp_overload_set.type = cpp_overload_set_value @S.bar.cpp_overload_set [concrete] -// CHECK:STDOUT: %S.bar.type: type = fn_type @S.bar [concrete] -// CHECK:STDOUT: %S.bar: %S.bar.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_static_method.cpp_overload_set.type: type = cpp_overload_set_type @foo_static_method.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_static_method.cpp_overload_set.value: %foo_static_method.cpp_overload_set.type = cpp_overload_set_value @foo_static_method.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.f77: type = ptr_type %StaticMethodStruct [concrete] +// CHECK:STDOUT: %foo_static_method__carbon_thunk.type: type = fn_type @foo_static_method__carbon_thunk [concrete] +// CHECK:STDOUT: %foo_static_method__carbon_thunk: %foo_static_method__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %StaticMethodStruct.bar.cpp_overload_set.type: type = cpp_overload_set_type @StaticMethodStruct.bar.cpp_overload_set [concrete] +// CHECK:STDOUT: %StaticMethodStruct.bar.cpp_overload_set.value: %StaticMethodStruct.bar.cpp_overload_set.type = cpp_overload_set_value @StaticMethodStruct.bar.cpp_overload_set [concrete] +// CHECK:STDOUT: %StaticMethodStruct.bar.type: type = fn_type @StaticMethodStruct.bar [concrete] +// CHECK:STDOUT: %StaticMethodStruct.bar: %StaticMethodStruct.bar.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .S = %S.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .StaticMethodStruct = %StaticMethodStruct.decl +// CHECK:STDOUT: .foo_static_method = %foo_static_method.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { +// CHECK:STDOUT: %StaticMethodStruct.decl: type = class_decl @StaticMethodStruct [concrete = constants.%StaticMethodStruct] {} {} +// CHECK:STDOUT: %foo_static_method.cpp_overload_set.value: %foo_static_method.cpp_overload_set.type = cpp_overload_set_value @foo_static_method.cpp_overload_set [concrete = constants.%foo_static_method.cpp_overload_set.value] +// CHECK:STDOUT: %foo_static_method__carbon_thunk.decl: %foo_static_method__carbon_thunk.type = fn_decl @foo_static_method__carbon_thunk [concrete = constants.%foo_static_method__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } -// CHECK:STDOUT: %S.bar.cpp_overload_set.value: %S.bar.cpp_overload_set.type = cpp_overload_set_value @S.bar.cpp_overload_set [concrete = constants.%S.bar.cpp_overload_set.value] -// CHECK:STDOUT: %S.bar.decl: %S.bar.type = fn_decl @S.bar [concrete = constants.%S.bar] {} {} +// CHECK:STDOUT: %StaticMethodStruct.bar.cpp_overload_set.value: %StaticMethodStruct.bar.cpp_overload_set.type = cpp_overload_set_value @StaticMethodStruct.bar.cpp_overload_set [concrete = constants.%StaticMethodStruct.bar.cpp_overload_set.value] +// CHECK:STDOUT: %StaticMethodStruct.bar.decl: %StaticMethodStruct.bar.type = fn_decl @StaticMethodStruct.bar [concrete = constants.%StaticMethodStruct.bar] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%s.param: %S) { +// CHECK:STDOUT: fn @F(%s.param: %StaticMethodStruct) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %s.ref: %S = name_ref s, %s -// CHECK:STDOUT: %.loc8: ref %S = value_as_ref %s.ref -// CHECK:STDOUT: %addr: %ptr.037 = addr_of %.loc8 -// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) +// CHECK:STDOUT: %foo_static_method.ref: %foo_static_method.cpp_overload_set.type = name_ref foo_static_method, imports.%foo_static_method.cpp_overload_set.value [concrete = constants.%foo_static_method.cpp_overload_set.value] +// CHECK:STDOUT: %s.ref: %StaticMethodStruct = name_ref s, %s +// CHECK:STDOUT: %.loc8: ref %StaticMethodStruct = value_as_ref %s.ref +// CHECK:STDOUT: %addr: %ptr.f77 = addr_of %.loc8 +// CHECK:STDOUT: %foo_static_method__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_static_method__carbon_thunk.decl(%addr) // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %S.ref.loc9: type = name_ref S, imports.%S.decl [concrete = constants.%S] -// CHECK:STDOUT: %bar.ref: %S.bar.cpp_overload_set.type = name_ref bar, imports.%S.bar.cpp_overload_set.value [concrete = constants.%S.bar.cpp_overload_set.value] -// CHECK:STDOUT: %S.bar.call: init %empty_tuple.type = call imports.%S.bar.decl() +// CHECK:STDOUT: %StaticMethodStruct.ref.loc9: type = name_ref StaticMethodStruct, imports.%StaticMethodStruct.decl [concrete = constants.%StaticMethodStruct] +// CHECK:STDOUT: %bar.ref: %StaticMethodStruct.bar.cpp_overload_set.type = name_ref bar, imports.%StaticMethodStruct.bar.cpp_overload_set.value [concrete = constants.%StaticMethodStruct.bar.cpp_overload_set.value] +// CHECK:STDOUT: %StaticMethodStruct.bar.call: init %empty_tuple.type = call imports.%StaticMethodStruct.bar.decl() // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_decl_pointer_param_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %S: type = class_type @S [concrete] -// CHECK:STDOUT: %ptr: type = ptr_type %S [concrete] +// CHECK:STDOUT: %DeclPointerParamStruct: type = class_type @DeclPointerParamStruct [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %DeclPointerParamStruct [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_decl_pointer_param.cpp_overload_set.type: type = cpp_overload_set_type @foo_decl_pointer_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_decl_pointer_param.cpp_overload_set.value: %foo_decl_pointer_param.cpp_overload_set.type = cpp_overload_set_value @foo_decl_pointer_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_decl_pointer_param.type: type = fn_type @foo_decl_pointer_param [concrete] +// CHECK:STDOUT: %foo_decl_pointer_param: %foo_decl_pointer_param.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .S = %S.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .DeclPointerParamStruct = %DeclPointerParamStruct.decl +// CHECK:STDOUT: .foo_decl_pointer_param = %foo_decl_pointer_param.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %DeclPointerParamStruct.decl: type = class_decl @DeclPointerParamStruct [concrete = constants.%DeclPointerParamStruct] {} {} +// CHECK:STDOUT: %foo_decl_pointer_param.cpp_overload_set.value: %foo_decl_pointer_param.cpp_overload_set.type = cpp_overload_set_value @foo_decl_pointer_param.cpp_overload_set [concrete = constants.%foo_decl_pointer_param.cpp_overload_set.value] +// CHECK:STDOUT: %foo_decl_pointer_param.decl: %foo_decl_pointer_param.type = fn_decl @foo_decl_pointer_param [concrete = constants.%foo_decl_pointer_param] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -971,33 +971,33 @@ fn F() { // CHECK:STDOUT: fn @F(%s.param: %ptr) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] +// CHECK:STDOUT: %foo_decl_pointer_param.ref: %foo_decl_pointer_param.cpp_overload_set.type = name_ref foo_decl_pointer_param, imports.%foo_decl_pointer_param.cpp_overload_set.value [concrete = constants.%foo_decl_pointer_param.cpp_overload_set.value] // CHECK:STDOUT: %s.ref: %ptr = name_ref s, %s -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl(%s.ref) +// CHECK:STDOUT: %foo_decl_pointer_param.call: init %empty_tuple.type = call imports.%foo_decl_pointer_param.decl(%s.ref) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_definition_pointer_param_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %S: type = class_type @S [concrete] -// CHECK:STDOUT: %ptr: type = ptr_type %S [concrete] +// CHECK:STDOUT: %DefPointerParamStruct: type = class_type @DefPointerParamStruct [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %DefPointerParamStruct [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_def_pointer_param.cpp_overload_set.type: type = cpp_overload_set_type @foo_def_pointer_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_def_pointer_param.cpp_overload_set.value: %foo_def_pointer_param.cpp_overload_set.type = cpp_overload_set_value @foo_def_pointer_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_def_pointer_param.type: type = fn_type @foo_def_pointer_param [concrete] +// CHECK:STDOUT: %foo_def_pointer_param: %foo_def_pointer_param.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .S = %S.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .DefPointerParamStruct = %DefPointerParamStruct.decl +// CHECK:STDOUT: .foo_def_pointer_param = %foo_def_pointer_param.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %S.decl: type = class_decl @S [concrete = constants.%S] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %DefPointerParamStruct.decl: type = class_decl @DefPointerParamStruct [concrete = constants.%DefPointerParamStruct] {} {} +// CHECK:STDOUT: %foo_def_pointer_param.cpp_overload_set.value: %foo_def_pointer_param.cpp_overload_set.type = cpp_overload_set_value @foo_def_pointer_param.cpp_overload_set [concrete = constants.%foo_def_pointer_param.cpp_overload_set.value] +// CHECK:STDOUT: %foo_def_pointer_param.decl: %foo_def_pointer_param.type = fn_decl @foo_def_pointer_param [concrete = constants.%foo_def_pointer_param] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -1007,9 +1007,9 @@ fn F() { // CHECK:STDOUT: fn @F(%s.param: %ptr) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] +// CHECK:STDOUT: %foo_def_pointer_param.ref: %foo_def_pointer_param.cpp_overload_set.type = name_ref foo_def_pointer_param, imports.%foo_def_pointer_param.cpp_overload_set.value [concrete = constants.%foo_def_pointer_param.cpp_overload_set.value] // CHECK:STDOUT: %s.ref: %ptr = name_ref s, %s -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl(%s.ref) +// CHECK:STDOUT: %foo_def_pointer_param.call: init %empty_tuple.type = call imports.%foo_def_pointer_param.decl(%s.ref) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1017,23 +1017,23 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %S: type = class_type @S [concrete] -// CHECK:STDOUT: %ptr.037: type = ptr_type %S [concrete] -// CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] -// CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %S.cpp_destructor.type: type = fn_type @S.cpp_destructor [concrete] -// CHECK:STDOUT: %S.cpp_destructor: %S.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_def_value_return.cpp_overload_set.type: type = cpp_overload_set_type @foo_def_value_return.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_def_value_return.cpp_overload_set.value: %foo_def_value_return.cpp_overload_set.type = cpp_overload_set_value @foo_def_value_return.cpp_overload_set [concrete] +// CHECK:STDOUT: %DefValueReturnStruct: type = class_type @DefValueReturnStruct [concrete] +// CHECK:STDOUT: %ptr.b68: type = ptr_type %DefValueReturnStruct [concrete] +// CHECK:STDOUT: %foo_def_value_return__carbon_thunk.type: type = fn_type @foo_def_value_return__carbon_thunk [concrete] +// CHECK:STDOUT: %foo_def_value_return__carbon_thunk: %foo_def_value_return__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %DefValueReturnStruct.cpp_destructor.type: type = fn_type @DefValueReturnStruct.cpp_destructor [concrete] +// CHECK:STDOUT: %DefValueReturnStruct.cpp_destructor: %DefValueReturnStruct.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .foo_def_value_return = %foo_def_value_return.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { +// CHECK:STDOUT: %foo_def_value_return.cpp_overload_set.value: %foo_def_value_return.cpp_overload_set.type = cpp_overload_set_value @foo_def_value_return.cpp_overload_set [concrete = constants.%foo_def_value_return.cpp_overload_set.value] +// CHECK:STDOUT: %foo_def_value_return__carbon_thunk.decl: %foo_def_value_return__carbon_thunk.type = fn_decl @foo_def_value_return__carbon_thunk [concrete = constants.%foo_def_value_return__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -1043,35 +1043,35 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %.loc8_11.1: ref %S = temporary_storage -// CHECK:STDOUT: %addr: %ptr.037 = addr_of %.loc8_11.1 -// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) -// CHECK:STDOUT: %.loc8_11.2: init %S to %.loc8_11.1 = mark_in_place_init %foo__carbon_thunk.call -// CHECK:STDOUT: %.loc8_11.3: ref %S = temporary %.loc8_11.1, %.loc8_11.2 -// CHECK:STDOUT: %S.cpp_destructor.bound: = bound_method %.loc8_11.3, constants.%S.cpp_destructor -// CHECK:STDOUT: %S.cpp_destructor.call: init %empty_tuple.type = call %S.cpp_destructor.bound(%.loc8_11.3) +// CHECK:STDOUT: %foo_def_value_return.ref: %foo_def_value_return.cpp_overload_set.type = name_ref foo_def_value_return, imports.%foo_def_value_return.cpp_overload_set.value [concrete = constants.%foo_def_value_return.cpp_overload_set.value] +// CHECK:STDOUT: %.loc8_28.1: ref %DefValueReturnStruct = temporary_storage +// CHECK:STDOUT: %addr: %ptr.b68 = addr_of %.loc8_28.1 +// CHECK:STDOUT: %foo_def_value_return__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_def_value_return__carbon_thunk.decl(%addr) +// CHECK:STDOUT: %.loc8_28.2: init %DefValueReturnStruct to %.loc8_28.1 = mark_in_place_init %foo_def_value_return__carbon_thunk.call +// CHECK:STDOUT: %.loc8_28.3: ref %DefValueReturnStruct = temporary %.loc8_28.1, %.loc8_28.2 +// CHECK:STDOUT: %DefValueReturnStruct.cpp_destructor.bound: = bound_method %.loc8_28.3, constants.%DefValueReturnStruct.cpp_destructor +// CHECK:STDOUT: %DefValueReturnStruct.cpp_destructor.call: init %empty_tuple.type = call %DefValueReturnStruct.cpp_destructor.bound(%.loc8_28.3) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_decl_pointer_return_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %S: type = class_type @S [concrete] -// CHECK:STDOUT: %ptr: type = ptr_type %S [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_decl_pointer_return.cpp_overload_set.type: type = cpp_overload_set_type @foo_decl_pointer_return.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_decl_pointer_return.cpp_overload_set.value: %foo_decl_pointer_return.cpp_overload_set.type = cpp_overload_set_value @foo_decl_pointer_return.cpp_overload_set [concrete] +// CHECK:STDOUT: %DeclPointerReturnStruct: type = class_type @DeclPointerReturnStruct [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %DeclPointerReturnStruct [concrete] +// CHECK:STDOUT: %foo_decl_pointer_return.type: type = fn_type @foo_decl_pointer_return [concrete] +// CHECK:STDOUT: %foo_decl_pointer_return: %foo_decl_pointer_return.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .foo_decl_pointer_return = %foo_decl_pointer_return.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %foo_decl_pointer_return.cpp_overload_set.value: %foo_decl_pointer_return.cpp_overload_set.type = cpp_overload_set_value @foo_decl_pointer_return.cpp_overload_set [concrete = constants.%foo_decl_pointer_return.cpp_overload_set.value] +// CHECK:STDOUT: %foo_decl_pointer_return.decl: %foo_decl_pointer_return.type = fn_decl @foo_decl_pointer_return [concrete = constants.%foo_decl_pointer_return] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -1081,29 +1081,29 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.call: init %ptr = call imports.%foo.decl() +// CHECK:STDOUT: %foo_decl_pointer_return.ref: %foo_decl_pointer_return.cpp_overload_set.type = name_ref foo_decl_pointer_return, imports.%foo_decl_pointer_return.cpp_overload_set.value [concrete = constants.%foo_decl_pointer_return.cpp_overload_set.value] +// CHECK:STDOUT: %foo_decl_pointer_return.call: init %ptr = call imports.%foo_decl_pointer_return.decl() // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_definition_pointer_return_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %S: type = class_type @S [concrete] -// CHECK:STDOUT: %ptr: type = ptr_type %S [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_def_pointer_return.cpp_overload_set.type: type = cpp_overload_set_type @foo_def_pointer_return.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_def_pointer_return.cpp_overload_set.value: %foo_def_pointer_return.cpp_overload_set.type = cpp_overload_set_value @foo_def_pointer_return.cpp_overload_set [concrete] +// CHECK:STDOUT: %DefPointerReturnStruct: type = class_type @DefPointerReturnStruct [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %DefPointerReturnStruct [concrete] +// CHECK:STDOUT: %foo_def_pointer_return.type: type = fn_type @foo_def_pointer_return [concrete] +// CHECK:STDOUT: %foo_def_pointer_return: %foo_def_pointer_return.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .foo_def_pointer_return = %foo_def_pointer_return.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %foo_def_pointer_return.cpp_overload_set.value: %foo_def_pointer_return.cpp_overload_set.type = cpp_overload_set_value @foo_def_pointer_return.cpp_overload_set [concrete = constants.%foo_def_pointer_return.cpp_overload_set.value] +// CHECK:STDOUT: %foo_def_pointer_return.decl: %foo_def_pointer_return.type = fn_decl @foo_def_pointer_return [concrete = constants.%foo_def_pointer_return] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -1113,8 +1113,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.call: init %ptr = call imports.%foo.decl() +// CHECK:STDOUT: %foo_def_pointer_return.ref: %foo_def_pointer_return.cpp_overload_set.type = name_ref foo_def_pointer_return, imports.%foo_def_pointer_return.cpp_overload_set.value [concrete = constants.%foo_def_pointer_return.cpp_overload_set.value] +// CHECK:STDOUT: %foo_def_pointer_return.call: init %ptr = call imports.%foo_def_pointer_return.decl() // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/function/import/template.carbon b/toolchain/check/testdata/interop/cpp/function/import/template.carbon index c74e5be79024..ecdd2c68a34d 100644 --- a/toolchain/check/testdata/interop/cpp/function/import/template.carbon +++ b/toolchain/check/testdata/interop/cpp/function/import/template.carbon @@ -29,9 +29,9 @@ let min_explicit_literal: i32 = Cpp.min(i32, 1, 2); library "[[@TEST_NAME]]"; import Cpp inline ''' -template struct X; -template struct Y; -template typename... TT, typename... T> void f(T ...a) {} +template struct TemplateTemplateX; +template struct TemplateTemplateY; +template typename... TT, typename... T> void template_template_fn(T ...a) {} '''; fn Call() { @@ -40,15 +40,15 @@ fn Call() { // `a` and `b` are not classified as template arguments, so are passed as the // function parameter pack `a...`. - Cpp.f(a, b); + Cpp.template_template_fn(a, b); - // `Cpp.X` and `Cpp.Y` are classified as template template arguments, so they + // `Cpp.TemplateTemplateX` and `Cpp.TemplateTemplateY` are classified as template template arguments, so they // are passed as the template parameter pack `TT...`. - Cpp.f(Cpp.X, Cpp.Y); + Cpp.template_template_fn(Cpp.TemplateTemplateX, Cpp.TemplateTemplateY); // Pass some template arguments followed by some function arguments. - Cpp.f(Cpp.X, Cpp.Y, a, b); - Cpp.f(Cpp.X, a, b, a); + Cpp.template_template_fn(Cpp.TemplateTemplateX, Cpp.TemplateTemplateY, a, b); + Cpp.template_template_fn(Cpp.TemplateTemplateX, a, b, a); } // --- nontype_template_arg.carbon @@ -56,25 +56,25 @@ fn Call() { library "[[@TEST_NAME]]"; import Cpp inline ''' -template void f(T ...a) {} -template void g(T ...a) {} +template void nontype_f(T ...a) {} +template void nontype_g(T ...a) {} '''; fn Call() { let a: i32 = 0; let b: i32 = 0; - Cpp.f(a, b); + Cpp.nontype_f(a, b); // TODO: There should be a way to indicate that the arguments are template - // arguments, not function arguments, when calling `f`. - Cpp.f(1, 2); + // arguments, not function arguments, when calling `nontype_f`. + Cpp.nontype_f(1, 2); // Two function arguments. - Cpp.g(1, 2); + Cpp.nontype_g(1, 2); // Three template arguments. - Cpp.g(1, 2, i32); + Cpp.nontype_g(1, 2, i32); // Three template arguments and two function arguments. - Cpp.g(1, 2, i32, 3, 4); + Cpp.nontype_g(1, 2, i32, 3, 4); } // --- fail_function_arg_not_template_arg.carbon @@ -82,19 +82,19 @@ fn Call() { library "[[@TEST_NAME]]"; import Cpp inline ''' -template void f(); +template void fn_arg_not_template_arg_f(); '''; fn Call() { // We treat this as a function argument, even though that makes the call fail. - // CHECK:STDERR: fail_function_arg_not_template_arg.carbon:[[@LINE+7]]:10: error: no matching function for call to 'f' [CppInteropParseError] - // CHECK:STDERR: 17 | Cpp.f(1); - // CHECK:STDERR: | ^ + // CHECK:STDERR: fail_function_arg_not_template_arg.carbon:[[@LINE+7]]:34: error: no matching function for call to 'fn_arg_not_template_arg_f' [CppInteropParseError] + // CHECK:STDERR: 17 | Cpp.fn_arg_not_template_arg_f(1); + // CHECK:STDERR: | ^ // CHECK:STDERR: fail_function_arg_not_template_arg.carbon:[[@LINE-8]]:22: note: candidate function template not viable: requires 0 arguments, but 1 was provided [CppInteropParseNote] - // CHECK:STDERR: 5 | template void f(); + // CHECK:STDERR: 5 | template void fn_arg_not_template_arg_f(); // CHECK:STDERR: | ^ // CHECK:STDERR: - Cpp.f(1); + Cpp.fn_arg_not_template_arg_f(1); } // --- function_arg_not_template_arg_overloaded.carbon @@ -102,12 +102,12 @@ fn Call() { library "[[@TEST_NAME]]"; import Cpp inline ''' -template void f(); -void f(int n); +template void overloaded_f(); +void overloaded_f(int n); '''; fn Call() { - Cpp.f(1); + Cpp.overloaded_f(1); } // --- overloaded_with_different_template_params.carbon @@ -115,18 +115,18 @@ fn Call() { library "[[@TEST_NAME]]"; import Cpp inline ''' -template struct X; -struct Y; +template struct OverloadedTemplateX; +struct OverloadedNonTemplateY; -template void f(); -template void f(); -template typename T> void f(); +template void different_template_params_f(); +template void different_template_params_f(); +template typename T> void different_template_params_f(); '''; fn Call() { - Cpp.f(1, i32); - Cpp.f(Cpp.X); - Cpp.f(Cpp.Y); + Cpp.different_template_params_f(1, i32); + Cpp.different_template_params_f(Cpp.OverloadedTemplateX); + Cpp.different_template_params_f(Cpp.OverloadedNonTemplateY); } // --- only_call_templates_when_given_template_args.carbon @@ -137,13 +137,13 @@ import Cpp inline ''' struct NonTemplate {}; struct Template {}; -NonTemplate f(unsigned char, unsigned char); -template Template f(unsigned char, int = 0); +NonTemplate only_call_templates_f(unsigned char, unsigned char); +template Template only_call_templates_f(unsigned char, int = 0); '''; // Prefers the non-template because it has a better match for the second parameter. -let x: Cpp.NonTemplate = Cpp.f(1 as u8, 2 as u8); +let x: Cpp.NonTemplate = Cpp.only_call_templates_f(1 as u8, 2 as u8); // Calls the template; the non-template is not considered due to the template // argument `i32`. -let y: Cpp.Template = Cpp.f(i32, 1 as u8); +let y: Cpp.Template = Cpp.only_call_templates_f(i32, 1 as u8); diff --git a/toolchain/check/testdata/interop/cpp/function/import/union.carbon b/toolchain/check/testdata/interop/cpp/function/import/union.carbon index 8f9c6e5279a6..9b6d0773e700 100644 --- a/toolchain/check/testdata/interop/cpp/function/import/union.carbon +++ b/toolchain/check/testdata/interop/cpp/function/import/union.carbon @@ -16,66 +16,66 @@ // --- decl_value_param_type.h -union U; +union ForwardDeclaredUnion; -auto foo1(U) -> void; -auto foo2(U) -> void; +auto foo1(ForwardDeclaredUnion) -> void; +auto foo2(ForwardDeclaredUnion) -> void; // --- fail_import_decl_value_param_type.carbon library "[[@TEST_NAME]]"; // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE+8]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./decl_value_param_type.h:4:6: error: argument type 'U' is incomplete [CppInteropParseError] -// CHECK:STDERR: 4 | auto foo1(U) -> void; +// CHECK:STDERR: ./decl_value_param_type.h:4:6: error: argument type 'ForwardDeclaredUnion' is incomplete [CppInteropParseError] +// CHECK:STDERR: 4 | auto foo1(ForwardDeclaredUnion) -> void; // CHECK:STDERR: | ^~~~ // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE+4]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./decl_value_param_type.h:2:7: note: forward declaration of 'U' [CppInteropParseNote] -// CHECK:STDERR: 2 | union U; +// CHECK:STDERR: ./decl_value_param_type.h:2:7: note: forward declaration of 'ForwardDeclaredUnion' [CppInteropParseNote] +// CHECK:STDERR: 2 | union ForwardDeclaredUnion; // CHECK:STDERR: | ^ import Cpp library "decl_value_param_type.h"; -fn F(p: Cpp.U*) { +fn F(p: Cpp.ForwardDeclaredUnion*) { // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE+12]]:3: note: in thunk for C++ function used here [InCppThunk] // CHECK:STDERR: Cpp.foo1(*p); // CHECK:STDERR: ^~~~~~~~~~~~ // CHECK:STDERR: // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE-7]]:10: in file included here [InCppInclude] - // CHECK:STDERR: ./decl_value_param_type.h:5:6: error: argument type 'U' is incomplete [CppInteropParseError] - // CHECK:STDERR: 5 | auto foo2(U) -> void; + // CHECK:STDERR: ./decl_value_param_type.h:5:6: error: argument type 'ForwardDeclaredUnion' is incomplete [CppInteropParseError] + // CHECK:STDERR: 5 | auto foo2(ForwardDeclaredUnion) -> void; // CHECK:STDERR: | ^~~~ // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE-11]]:10: in file included here [InCppInclude] - // CHECK:STDERR: ./decl_value_param_type.h:2:7: note: forward declaration of 'U' [CppInteropParseNote] - // CHECK:STDERR: 2 | union U; + // CHECK:STDERR: ./decl_value_param_type.h:2:7: note: forward declaration of 'ForwardDeclaredUnion' [CppInteropParseNote] + // CHECK:STDERR: 2 | union ForwardDeclaredUnion; // CHECK:STDERR: | ^ Cpp.foo1(*p); // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE+28]]:3: note: in thunk for C++ function used here [InCppThunk] // CHECK:STDERR: Cpp.foo2(*p); // CHECK:STDERR: ^~~~~~~~~~~~ // CHECK:STDERR: - // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE-5]]:12: error: forming value of incomplete type `Cpp.U` [IncompleteTypeInValueConversion] + // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE-5]]:12: error: forming value of incomplete type `Cpp.ForwardDeclaredUnion` [IncompleteTypeInValueConversion] // CHECK:STDERR: Cpp.foo1(*p); // CHECK:STDERR: ^~ // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE-23]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./decl_value_param_type.h:2:7: note: class was forward declared here [ClassForwardDeclaredHere] - // CHECK:STDERR: union U; + // CHECK:STDERR: union ForwardDeclaredUnion; // CHECK:STDERR: ^ // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE-27]]:10: in file included here [InCppInclude] - // CHECK:STDERR: ./decl_value_param_type.h:4:12: note: initializing function parameter [InCallToFunctionParam] - // CHECK:STDERR: auto foo1(U) -> void; - // CHECK:STDERR: ^ + // CHECK:STDERR: ./decl_value_param_type.h:4:31: note: initializing function parameter [InCallToFunctionParam] + // CHECK:STDERR: auto foo1(ForwardDeclaredUnion) -> void; + // CHECK:STDERR: ^ // CHECK:STDERR: - // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE+12]]:12: error: forming value of incomplete type `Cpp.U` [IncompleteTypeInValueConversion] + // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE+12]]:12: error: forming value of incomplete type `Cpp.ForwardDeclaredUnion` [IncompleteTypeInValueConversion] // CHECK:STDERR: Cpp.foo2(*p); // CHECK:STDERR: ^~ // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE-35]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./decl_value_param_type.h:2:7: note: class was forward declared here [ClassForwardDeclaredHere] - // CHECK:STDERR: union U; + // CHECK:STDERR: union ForwardDeclaredUnion; // CHECK:STDERR: ^ // CHECK:STDERR: fail_import_decl_value_param_type.carbon:[[@LINE-39]]:10: in file included here [InCppInclude] - // CHECK:STDERR: ./decl_value_param_type.h:5:12: note: initializing function parameter [InCallToFunctionParam] - // CHECK:STDERR: auto foo2(U) -> void; - // CHECK:STDERR: ^ + // CHECK:STDERR: ./decl_value_param_type.h:5:31: note: initializing function parameter [InCallToFunctionParam] + // CHECK:STDERR: auto foo2(ForwardDeclaredUnion) -> void; + // CHECK:STDERR: ^ // CHECK:STDERR: Cpp.foo2(*p); } @@ -86,9 +86,9 @@ fn F(p: Cpp.U*) { // --- definition_no_data_members_value_param_type.h -union U {}; +union EmptyUnion {}; -auto foo(U) -> void; +auto foo_empty(EmptyUnion) -> void; // --- import_definition_no_data_members_value_param_type.carbon @@ -96,9 +96,9 @@ library "[[@TEST_NAME]]"; import Cpp library "definition_no_data_members_value_param_type.h"; -fn F(u: Cpp.U) { +fn F(u: Cpp.EmptyUnion) { //@dump-sem-ir-begin - Cpp.foo(u); + Cpp.foo_empty(u); //@dump-sem-ir-end } @@ -108,13 +108,13 @@ fn F(u: Cpp.U) { // --- definition_single_data_member_value_param_type.h -struct S {}; +struct SingleMemberS {}; -union U { - S s; +union SingleMemberUnion { + SingleMemberS s; }; -auto foo(U) -> void; +auto foo_single_member(SingleMemberUnion) -> void; // --- import_definition_single_data_member_value_param_type.carbon @@ -122,9 +122,9 @@ library "[[@TEST_NAME]]"; import Cpp library "definition_single_data_member_value_param_type.h"; -fn F(u: Cpp.U) { +fn F(u: Cpp.SingleMemberUnion) { //@dump-sem-ir-begin - Cpp.foo(u); + Cpp.foo_single_member(u); //@dump-sem-ir-end } @@ -134,15 +134,15 @@ fn F(u: Cpp.U) { // --- definition_multiple_data_members_value_param_type.h -struct S {}; +struct MultipleMembersS {}; -union U { - S s1; - S s2; - S s3; +union MultipleMembersUnion { + MultipleMembersS s1; + MultipleMembersS s2; + MultipleMembersS s3; }; -auto foo(U) -> void; +auto foo_multiple_members(MultipleMembersUnion) -> void; // --- import_definition_multiple_data_members_value_param_type.carbon @@ -150,9 +150,9 @@ library "[[@TEST_NAME]]"; import Cpp library "definition_multiple_data_members_value_param_type.h"; -fn F(u: Cpp.U) { +fn F(u: Cpp.MultipleMembersUnion) { //@dump-sem-ir-begin - Cpp.foo(u); + Cpp.foo_multiple_members(u); //@dump-sem-ir-end } @@ -162,9 +162,9 @@ fn F(u: Cpp.U) { // --- definition_in_namespace_value_param_type.h -namespace N { union U {}; } +namespace N { union InNamespaceUnion {}; } -auto foo(N::U) -> void; +auto foo_in_namespace(N::InNamespaceUnion) -> void; // --- import_definition_in_namespace_value_param_type.carbon @@ -172,11 +172,11 @@ library "[[@TEST_NAME]]"; import Cpp library "definition_in_namespace_value_param_type.h"; -fn F(u: Cpp.N.U) { +fn F(u: Cpp.N.InNamespaceUnion) { //@dump-sem-ir-begin - Cpp.foo(u); + Cpp.foo_in_namespace(u); // Check that the parameter type was imported correctly. - var unused x: Cpp.N.U; + var unused x: Cpp.N.InNamespaceUnion; //@dump-sem-ir-end } @@ -187,8 +187,8 @@ fn F(u: Cpp.N.U) { // --- definition_in_relative_namespace_value_param_type.h namespace N1 { - namespace N2 { union U {}; } - auto foo(N2::U) -> void; + namespace N2 { union InRelativeNamespaceUnion {}; } + auto foo(N2::InRelativeNamespaceUnion) -> void; } // --- import_definition_in_relative_namespace_value_param_type.carbon @@ -197,7 +197,7 @@ library "[[@TEST_NAME]]"; import Cpp library "definition_in_relative_namespace_value_param_type.h"; -fn F(u: Cpp.N1.N2.U) { +fn F(u: Cpp.N1.N2.InRelativeNamespaceUnion) { //@dump-sem-ir-begin Cpp.N1.foo(u); //@dump-sem-ir-end @@ -209,12 +209,12 @@ fn F(u: Cpp.N1.N2.U) { // --- definition_in_outer_definition.h -union O { +union OuterUnion { public: - union U {}; + union InnerUnion {}; }; -auto foo(O::U) -> void; +auto foo_in_outer(OuterUnion::InnerUnion) -> void; // --- import_definition_in_outer_definition.carbon @@ -222,10 +222,10 @@ library "[[@TEST_NAME]]"; import Cpp library "definition_in_outer_definition.h"; -fn F(u: Cpp.O.U) { +fn F(u: Cpp.OuterUnion.InnerUnion) { //@dump-sem-ir-begin - Cpp.foo(u); - var unused x: Cpp.O; + Cpp.foo_in_outer(u); + var unused x: Cpp.OuterUnion; //@dump-sem-ir-end } @@ -235,11 +235,11 @@ fn F(u: Cpp.O.U) { // --- definition_with_static_method.h -union U { +union StaticMethodUnion { static void bar(); }; -auto foo(U) -> void; +auto foo_static_method(StaticMethodUnion) -> void; // --- import_definition_and_static_method_call_before.carbon @@ -247,10 +247,10 @@ library "[[@TEST_NAME]]"; import Cpp library "definition_with_static_method.h"; -fn F(u: Cpp.U) { +fn F(u: Cpp.StaticMethodUnion) { //@dump-sem-ir-begin - Cpp.U.bar(); - Cpp.foo(u); + Cpp.StaticMethodUnion.bar(); + Cpp.foo_static_method(u); //@dump-sem-ir-end } @@ -260,10 +260,10 @@ library "[[@TEST_NAME]]"; import Cpp library "definition_with_static_method.h"; -fn F(u: Cpp.U) { +fn F(u: Cpp.StaticMethodUnion) { //@dump-sem-ir-begin - Cpp.foo(u); - Cpp.U.bar(); + Cpp.foo_static_method(u); + Cpp.StaticMethodUnion.bar(); //@dump-sem-ir-end } @@ -273,7 +273,7 @@ fn F(u: Cpp.U) { // --- incomplete.h -union Incomplete; +union IncompleteUnion; // --- fail_import_incomplete.carbon @@ -282,15 +282,15 @@ library "[[@TEST_NAME]]"; import Cpp library "incomplete.h"; fn F() { - // CHECK:STDERR: fail_import_incomplete.carbon:[[@LINE+8]]:3: error: member access into incomplete class `Cpp.Incomplete` [QualifiedExprInIncompleteClassScope] - // CHECK:STDERR: Cpp.Incomplete.foo(); - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_import_incomplete.carbon:[[@LINE+8]]:3: error: member access into incomplete class `Cpp.IncompleteUnion` [QualifiedExprInIncompleteClassScope] + // CHECK:STDERR: Cpp.IncompleteUnion.foo(); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_incomplete.carbon:[[@LINE-6]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./incomplete.h:2:7: note: class was forward declared here [ClassForwardDeclaredHere] - // CHECK:STDERR: union Incomplete; + // CHECK:STDERR: union IncompleteUnion; // CHECK:STDERR: ^ // CHECK:STDERR: - Cpp.Incomplete.foo(); + Cpp.IncompleteUnion.foo(); } // ============================================================================ @@ -299,9 +299,9 @@ fn F() { // --- decl_pointer_param_type.h -union U; +union DeclPointerParamUnion; -auto foo(U* _Nonnull) -> void; +auto foo_decl_pointer_param(DeclPointerParamUnion* _Nonnull) -> void; // --- import_decl_pointer_param_type.carbon @@ -309,9 +309,9 @@ library "[[@TEST_NAME]]"; import Cpp library "decl_pointer_param_type.h"; -fn F(u: Cpp.U*) { +fn F(u: Cpp.DeclPointerParamUnion*) { //@dump-sem-ir-begin - Cpp.foo(u); + Cpp.foo_decl_pointer_param(u); //@dump-sem-ir-end } @@ -321,9 +321,9 @@ fn F(u: Cpp.U*) { // --- definition_pointer_param_type.h -union U {}; +union DefPointerParamUnion {}; -auto foo(U* _Nonnull) -> void; +auto foo_def_pointer_param(DefPointerParamUnion* _Nonnull) -> void; // --- import_definition_pointer_param_type.carbon @@ -331,9 +331,9 @@ library "[[@TEST_NAME]]"; import Cpp library "definition_pointer_param_type.h"; -fn F(u: Cpp.U*) { +fn F(u: Cpp.DefPointerParamUnion*) { //@dump-sem-ir-begin - Cpp.foo(u); + Cpp.foo_def_pointer_param(u); //@dump-sem-ir-end } @@ -343,46 +343,46 @@ fn F(u: Cpp.U*) { // --- decl_value_return_type.h -union U; +union DeclValueReturnUnion; -auto foo() -> U; +auto foo_decl_value_return() -> DeclValueReturnUnion; // --- fail_import_decl_value_return_type.carbon library "[[@TEST_NAME]]"; // CHECK:STDERR: fail_import_decl_value_return_type.carbon:[[@LINE+12]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./decl_value_return_type.h:4:6: error: calling 'foo' with incomplete return type 'U' [CppInteropParseError] -// CHECK:STDERR: 4 | auto foo() -> U; -// CHECK:STDERR: | ^~~ +// CHECK:STDERR: ./decl_value_return_type.h:4:6: error: calling 'foo_decl_value_return' with incomplete return type 'DeclValueReturnUnion' [CppInteropParseError] +// CHECK:STDERR: 4 | auto foo_decl_value_return() -> DeclValueReturnUnion; +// CHECK:STDERR: | ^~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_decl_value_return_type.carbon:[[@LINE+8]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./decl_value_return_type.h:4:6: note: 'foo' declared here [CppInteropParseNote] -// CHECK:STDERR: 4 | auto foo() -> U; +// CHECK:STDERR: ./decl_value_return_type.h:4:6: note: 'foo_decl_value_return' declared here [CppInteropParseNote] +// CHECK:STDERR: 4 | auto foo_decl_value_return() -> DeclValueReturnUnion; // CHECK:STDERR: | ^ // CHECK:STDERR: fail_import_decl_value_return_type.carbon:[[@LINE+4]]:10: in file included here [InCppInclude] -// CHECK:STDERR: ./decl_value_return_type.h:2:7: note: forward declaration of 'U' [CppInteropParseNote] -// CHECK:STDERR: 2 | union U; +// CHECK:STDERR: ./decl_value_return_type.h:2:7: note: forward declaration of 'DeclValueReturnUnion' [CppInteropParseNote] +// CHECK:STDERR: 2 | union DeclValueReturnUnion; // CHECK:STDERR: | ^ import Cpp library "decl_value_return_type.h"; fn F() { // CHECK:STDERR: fail_import_decl_value_return_type.carbon:[[@LINE+16]]:3: note: in thunk for C++ function used here [InCppThunk] - // CHECK:STDERR: Cpp.foo(); - // CHECK:STDERR: ^~~~~~~~~ + // CHECK:STDERR: Cpp.foo_decl_value_return(); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - // CHECK:STDERR: fail_import_decl_value_return_type.carbon:[[@LINE+12]]:3: error: function returns incomplete type `Cpp.U` [IncompleteTypeInFunctionReturnType] - // CHECK:STDERR: Cpp.foo(); - // CHECK:STDERR: ^~~~~~~~~ + // CHECK:STDERR: fail_import_decl_value_return_type.carbon:[[@LINE+12]]:3: error: function returns incomplete type `Cpp.DeclValueReturnUnion` [IncompleteTypeInFunctionReturnType] + // CHECK:STDERR: Cpp.foo_decl_value_return(); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_import_decl_value_return_type.carbon:[[@LINE-10]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./decl_value_return_type.h:2:7: note: class was forward declared here [ClassForwardDeclaredHere] - // CHECK:STDERR: union U; + // CHECK:STDERR: union DeclValueReturnUnion; // CHECK:STDERR: ^ // CHECK:STDERR: fail_import_decl_value_return_type.carbon:[[@LINE-14]]:10: in file included here [InCppInclude] // CHECK:STDERR: ./decl_value_return_type.h:4:1: note: return type declared here [IncompleteReturnTypeHere] - // CHECK:STDERR: auto foo() -> U; + // CHECK:STDERR: auto foo_decl_value_return() -> DeclValueReturnUnion; // CHECK:STDERR: ^ // CHECK:STDERR: - Cpp.foo(); + Cpp.foo_decl_value_return(); } // ============================================================================ @@ -391,9 +391,9 @@ fn F() { // --- definition_value_return_type.h -union U {}; +union DefValueReturnUnion {}; -auto foo() -> U; +auto foo_def_value_return() -> DefValueReturnUnion; // --- import_definition_value_return_type.carbon @@ -403,7 +403,7 @@ import Cpp library "definition_value_return_type.h"; fn F() { //@dump-sem-ir-begin - Cpp.foo(); + Cpp.foo_def_value_return(); //@dump-sem-ir-end } @@ -413,9 +413,9 @@ fn F() { // --- decl_pointer_return_type.h -union U; +union DeclPointerReturnUnion; -auto foo() -> U* _Nonnull; +auto foo_decl_pointer_return() -> DeclPointerReturnUnion* _Nonnull; // --- import_decl_pointer_return_type.carbon @@ -425,7 +425,7 @@ import Cpp library "decl_pointer_return_type.h"; fn F() { //@dump-sem-ir-begin - Cpp.foo(); + Cpp.foo_decl_pointer_return(); //@dump-sem-ir-end } @@ -435,9 +435,9 @@ fn F() { // --- definition_pointer_return_type.h -union U {}; +union DefPointerReturnUnion {}; -auto foo() -> U* _Nonnull; +auto foo_def_pointer_return() -> DefPointerReturnUnion* _Nonnull; // --- import_definition_pointer_return_type.carbon @@ -447,165 +447,165 @@ import Cpp library "definition_pointer_return_type.h"; fn F() { //@dump-sem-ir-begin - Cpp.foo(); + Cpp.foo_def_pointer_return(); //@dump-sem-ir-end } // CHECK:STDOUT: --- import_definition_no_data_members_value_param_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %U: type = class_type @U [concrete] +// CHECK:STDOUT: %EmptyUnion: type = class_type @EmptyUnion [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.2fe: type = ptr_type %U [concrete] -// CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] -// CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_empty.cpp_overload_set.type: type = cpp_overload_set_type @foo_empty.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_empty.cpp_overload_set.value: %foo_empty.cpp_overload_set.type = cpp_overload_set_value @foo_empty.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.73e: type = ptr_type %EmptyUnion [concrete] +// CHECK:STDOUT: %foo_empty__carbon_thunk.type: type = fn_type @foo_empty__carbon_thunk [concrete] +// CHECK:STDOUT: %foo_empty__carbon_thunk: %foo_empty__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .U = %U.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .EmptyUnion = %EmptyUnion.decl +// CHECK:STDOUT: .foo_empty = %foo_empty.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %U.decl: type = class_decl @U [concrete = constants.%U] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { +// CHECK:STDOUT: %EmptyUnion.decl: type = class_decl @EmptyUnion [concrete = constants.%EmptyUnion] {} {} +// CHECK:STDOUT: %foo_empty.cpp_overload_set.value: %foo_empty.cpp_overload_set.type = cpp_overload_set_value @foo_empty.cpp_overload_set [concrete = constants.%foo_empty.cpp_overload_set.value] +// CHECK:STDOUT: %foo_empty__carbon_thunk.decl: %foo_empty__carbon_thunk.type = fn_decl @foo_empty__carbon_thunk [concrete = constants.%foo_empty__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%u.param: %U) { +// CHECK:STDOUT: fn @F(%u.param: %EmptyUnion) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %u.ref: %U = name_ref u, %u -// CHECK:STDOUT: %.loc8: ref %U = value_as_ref %u.ref -// CHECK:STDOUT: %addr: %ptr.2fe = addr_of %.loc8 -// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) +// CHECK:STDOUT: %foo_empty.ref: %foo_empty.cpp_overload_set.type = name_ref foo_empty, imports.%foo_empty.cpp_overload_set.value [concrete = constants.%foo_empty.cpp_overload_set.value] +// CHECK:STDOUT: %u.ref: %EmptyUnion = name_ref u, %u +// CHECK:STDOUT: %.loc8: ref %EmptyUnion = value_as_ref %u.ref +// CHECK:STDOUT: %addr: %ptr.73e = addr_of %.loc8 +// CHECK:STDOUT: %foo_empty__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_empty__carbon_thunk.decl(%addr) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_definition_single_data_member_value_param_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %U: type = class_type @U [concrete] +// CHECK:STDOUT: %SingleMemberUnion: type = class_type @SingleMemberUnion [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.2fe: type = ptr_type %U [concrete] -// CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] -// CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_single_member.cpp_overload_set.type: type = cpp_overload_set_type @foo_single_member.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_single_member.cpp_overload_set.value: %foo_single_member.cpp_overload_set.type = cpp_overload_set_value @foo_single_member.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.6f8: type = ptr_type %SingleMemberUnion [concrete] +// CHECK:STDOUT: %foo_single_member__carbon_thunk.type: type = fn_type @foo_single_member__carbon_thunk [concrete] +// CHECK:STDOUT: %foo_single_member__carbon_thunk: %foo_single_member__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .U = %U.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .SingleMemberUnion = %SingleMemberUnion.decl +// CHECK:STDOUT: .foo_single_member = %foo_single_member.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %U.decl: type = class_decl @U [concrete = constants.%U] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { +// CHECK:STDOUT: %SingleMemberUnion.decl: type = class_decl @SingleMemberUnion [concrete = constants.%SingleMemberUnion] {} {} +// CHECK:STDOUT: %foo_single_member.cpp_overload_set.value: %foo_single_member.cpp_overload_set.type = cpp_overload_set_value @foo_single_member.cpp_overload_set [concrete = constants.%foo_single_member.cpp_overload_set.value] +// CHECK:STDOUT: %foo_single_member__carbon_thunk.decl: %foo_single_member__carbon_thunk.type = fn_decl @foo_single_member__carbon_thunk [concrete = constants.%foo_single_member__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%u.param: %U) { +// CHECK:STDOUT: fn @F(%u.param: %SingleMemberUnion) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %u.ref: %U = name_ref u, %u -// CHECK:STDOUT: %.loc8: ref %U = value_as_ref %u.ref -// CHECK:STDOUT: %addr: %ptr.2fe = addr_of %.loc8 -// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) +// CHECK:STDOUT: %foo_single_member.ref: %foo_single_member.cpp_overload_set.type = name_ref foo_single_member, imports.%foo_single_member.cpp_overload_set.value [concrete = constants.%foo_single_member.cpp_overload_set.value] +// CHECK:STDOUT: %u.ref: %SingleMemberUnion = name_ref u, %u +// CHECK:STDOUT: %.loc8: ref %SingleMemberUnion = value_as_ref %u.ref +// CHECK:STDOUT: %addr: %ptr.6f8 = addr_of %.loc8 +// CHECK:STDOUT: %foo_single_member__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_single_member__carbon_thunk.decl(%addr) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_definition_multiple_data_members_value_param_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %U: type = class_type @U [concrete] +// CHECK:STDOUT: %MultipleMembersUnion: type = class_type @MultipleMembersUnion [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.2fe: type = ptr_type %U [concrete] -// CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] -// CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_multiple_members.cpp_overload_set.type: type = cpp_overload_set_type @foo_multiple_members.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_multiple_members.cpp_overload_set.value: %foo_multiple_members.cpp_overload_set.type = cpp_overload_set_value @foo_multiple_members.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.f0d: type = ptr_type %MultipleMembersUnion [concrete] +// CHECK:STDOUT: %foo_multiple_members__carbon_thunk.type: type = fn_type @foo_multiple_members__carbon_thunk [concrete] +// CHECK:STDOUT: %foo_multiple_members__carbon_thunk: %foo_multiple_members__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .U = %U.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .MultipleMembersUnion = %MultipleMembersUnion.decl +// CHECK:STDOUT: .foo_multiple_members = %foo_multiple_members.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %U.decl: type = class_decl @U [concrete = constants.%U] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { +// CHECK:STDOUT: %MultipleMembersUnion.decl: type = class_decl @MultipleMembersUnion [concrete = constants.%MultipleMembersUnion] {} {} +// CHECK:STDOUT: %foo_multiple_members.cpp_overload_set.value: %foo_multiple_members.cpp_overload_set.type = cpp_overload_set_value @foo_multiple_members.cpp_overload_set [concrete = constants.%foo_multiple_members.cpp_overload_set.value] +// CHECK:STDOUT: %foo_multiple_members__carbon_thunk.decl: %foo_multiple_members__carbon_thunk.type = fn_decl @foo_multiple_members__carbon_thunk [concrete = constants.%foo_multiple_members__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%u.param: %U) { +// CHECK:STDOUT: fn @F(%u.param: %MultipleMembersUnion) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %u.ref: %U = name_ref u, %u -// CHECK:STDOUT: %.loc8: ref %U = value_as_ref %u.ref -// CHECK:STDOUT: %addr: %ptr.2fe = addr_of %.loc8 -// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) +// CHECK:STDOUT: %foo_multiple_members.ref: %foo_multiple_members.cpp_overload_set.type = name_ref foo_multiple_members, imports.%foo_multiple_members.cpp_overload_set.value [concrete = constants.%foo_multiple_members.cpp_overload_set.value] +// CHECK:STDOUT: %u.ref: %MultipleMembersUnion = name_ref u, %u +// CHECK:STDOUT: %.loc8: ref %MultipleMembersUnion = value_as_ref %u.ref +// CHECK:STDOUT: %addr: %ptr.f0d = addr_of %.loc8 +// CHECK:STDOUT: %foo_multiple_members__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_multiple_members__carbon_thunk.decl(%addr) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_definition_in_namespace_value_param_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %U: type = class_type @U [concrete] -// CHECK:STDOUT: %pattern_type.04d: type = pattern_type %U [concrete] +// CHECK:STDOUT: %InNamespaceUnion: type = class_type @InNamespaceUnion [concrete] +// CHECK:STDOUT: %pattern_type.007: type = pattern_type %InNamespaceUnion [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.d0c: type = ptr_type %U [concrete] -// CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] -// CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.04d = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.04d = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %foo_in_namespace.cpp_overload_set.type: type = cpp_overload_set_type @foo_in_namespace.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_in_namespace.cpp_overload_set.value: %foo_in_namespace.cpp_overload_set.type = cpp_overload_set_value @foo_in_namespace.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.e1a: type = ptr_type %InNamespaceUnion [concrete] +// CHECK:STDOUT: %foo_in_namespace__carbon_thunk.type: type = fn_type @foo_in_namespace__carbon_thunk [concrete] +// CHECK:STDOUT: %foo_in_namespace__carbon_thunk: %foo_in_namespace__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.007 = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.007 = var_pattern %x.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete] // CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.type.0c9: type = fn_type @T.as_type.as.DefaultOrUnformed.impl.Op, @T.as_type.as.DefaultOrUnformed.impl(%T.b09) [symbolic] // CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.cfe: %T.as_type.as.DefaultOrUnformed.impl.Op.type.0c9 = struct_value () [symbolic] -// CHECK:STDOUT: %U.Op.type: type = fn_type @U.Op [concrete] -// CHECK:STDOUT: %U.Op: %U.Op.type = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.85f: = custom_witness (%U.Op), @Default [concrete] -// CHECK:STDOUT: %Default.facet.fb3: %Default.type = facet_value %U, (%custom_witness.85f) [concrete] -// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.5cc: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.162, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.fb3) [concrete] -// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %U, (%DefaultOrUnformed.impl_witness.5cc) [concrete] -// CHECK:STDOUT: %U.cpp_destructor.type: type = fn_type @U.cpp_destructor [concrete] -// CHECK:STDOUT: %U.cpp_destructor: %U.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %InNamespaceUnion.Op.type: type = fn_type @InNamespaceUnion.Op [concrete] +// CHECK:STDOUT: %InNamespaceUnion.Op: %InNamespaceUnion.Op.type = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.85f: = custom_witness (%InNamespaceUnion.Op), @Default [concrete] +// CHECK:STDOUT: %Default.facet.c4a: %Default.type = facet_value %InNamespaceUnion, (%custom_witness.85f) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.ee1: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.162, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.c4a) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %InNamespaceUnion, (%DefaultOrUnformed.impl_witness.ee1) [concrete] +// CHECK:STDOUT: %InNamespaceUnion.cpp_destructor.type: type = fn_type @InNamespaceUnion.cpp_destructor [concrete] +// CHECK:STDOUT: %InNamespaceUnion.cpp_destructor: %InNamespaceUnion.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { // CHECK:STDOUT: .N = %N -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .foo_in_namespace = %foo_in_namespace.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: %N: = namespace [concrete] { -// CHECK:STDOUT: .U = %U.decl +// CHECK:STDOUT: .InNamespaceUnion = %InNamespaceUnion.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %U.decl: type = class_decl @U [concrete = constants.%U] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { +// CHECK:STDOUT: %InNamespaceUnion.decl: type = class_decl @InNamespaceUnion [concrete = constants.%InNamespaceUnion] {} {} +// CHECK:STDOUT: %foo_in_namespace.cpp_overload_set.value: %foo_in_namespace.cpp_overload_set.type = cpp_overload_set_value @foo_in_namespace.cpp_overload_set [concrete = constants.%foo_in_namespace.cpp_overload_set.value] +// CHECK:STDOUT: %foo_in_namespace__carbon_thunk.decl: %foo_in_namespace__carbon_thunk.type = fn_decl @foo_in_namespace__carbon_thunk [concrete = constants.%foo_in_namespace__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -614,46 +614,46 @@ fn F() { // CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table.162 = impl_witness_table (%Core.import_ref.c2f), @T.as_type.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%u.param: %U) { +// CHECK:STDOUT: fn @F(%u.param: %InNamespaceUnion) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %u.ref: %U = name_ref u, %u -// CHECK:STDOUT: %.loc8: ref %U = value_as_ref %u.ref -// CHECK:STDOUT: %addr: %ptr.d0c = addr_of %.loc8 -// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) -// CHECK:STDOUT: %x.var: ref %U = var_storage %x.var_patt -// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%U, (constants.%DefaultOrUnformed.impl_witness.5cc) [concrete = constants.%DefaultOrUnformed.facet] -// CHECK:STDOUT: %.loc10_24.1: %DefaultOrUnformed.type = converted constants.%U, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] -// CHECK:STDOUT: %as_type: type = facet_access_type %.loc10_24.1 [concrete = constants.%U] -// CHECK:STDOUT: %.loc10_24.2: type = converted %.loc10_24.1, %as_type [concrete = constants.%U] +// CHECK:STDOUT: %foo_in_namespace.ref: %foo_in_namespace.cpp_overload_set.type = name_ref foo_in_namespace, imports.%foo_in_namespace.cpp_overload_set.value [concrete = constants.%foo_in_namespace.cpp_overload_set.value] +// CHECK:STDOUT: %u.ref: %InNamespaceUnion = name_ref u, %u +// CHECK:STDOUT: %.loc8: ref %InNamespaceUnion = value_as_ref %u.ref +// CHECK:STDOUT: %addr: %ptr.e1a = addr_of %.loc8 +// CHECK:STDOUT: %foo_in_namespace__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_in_namespace__carbon_thunk.decl(%addr) +// CHECK:STDOUT: %x.var: ref %InNamespaceUnion = var_storage %x.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%InNamespaceUnion, (constants.%DefaultOrUnformed.impl_witness.ee1) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc10_39.1: %DefaultOrUnformed.type = converted constants.%InNamespaceUnion, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc10_39.1 [concrete = constants.%InNamespaceUnion] +// CHECK:STDOUT: %.loc10_39.2: type = converted %.loc10_39.1, %as_type [concrete = constants.%InNamespaceUnion] // CHECK:STDOUT: -// CHECK:STDOUT: %.loc10_3: ref %U = splice_block %x.var {} -// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call: init %U to %.loc10_3 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: %.loc10_3: ref %InNamespaceUnion = splice_block %x.var {} +// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call: init %InNamespaceUnion to %.loc10_3 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn() // CHECK:STDOUT: assign %x.var, %T.as_type.as.DefaultOrUnformed.impl.Op.call -// CHECK:STDOUT: %.loc10_22: type = splice_block %U.ref.loc10 [concrete = constants.%U] { +// CHECK:STDOUT: %.loc10_22: type = splice_block %InNamespaceUnion.ref.loc10 [concrete = constants.%InNamespaceUnion] { // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N.ref.loc10: = name_ref N, imports.%N [concrete = imports.%N] -// CHECK:STDOUT: %U.ref.loc10: type = name_ref U, imports.%U.decl [concrete = constants.%U] +// CHECK:STDOUT: %InNamespaceUnion.ref.loc10: type = name_ref InNamespaceUnion, imports.%InNamespaceUnion.decl [concrete = constants.%InNamespaceUnion] // CHECK:STDOUT: } -// CHECK:STDOUT: %x: ref %U = wrapper_binding x, %x.var +// CHECK:STDOUT: %x: ref %InNamespaceUnion = wrapper_binding x, %x.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.04d = ref_binding_pattern x [concrete = constants.%x.patt] -// CHECK:STDOUT: %x.var_patt: %pattern_type.04d = var_pattern %x.patt [concrete = constants.%x.var_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.007 = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.007 = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %U.cpp_destructor.bound: = bound_method %x.var, constants.%U.cpp_destructor -// CHECK:STDOUT: %U.cpp_destructor.call: init %empty_tuple.type = call %U.cpp_destructor.bound(%x.var) +// CHECK:STDOUT: %InNamespaceUnion.cpp_destructor.bound: = bound_method %x.var, constants.%InNamespaceUnion.cpp_destructor +// CHECK:STDOUT: %InNamespaceUnion.cpp_destructor.call: init %empty_tuple.type = call %InNamespaceUnion.cpp_destructor.bound(%x.var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_definition_in_relative_namespace_value_param_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %U: type = class_type @U [concrete] +// CHECK:STDOUT: %InRelativeNamespaceUnion: type = class_type @InRelativeNamespaceUnion [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] // CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.6d9: type = ptr_type %U [concrete] +// CHECK:STDOUT: %ptr.cfd: type = ptr_type %InRelativeNamespaceUnion [concrete] // CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] // CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -669,10 +669,10 @@ fn F() { // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: %N2: = namespace [concrete] { -// CHECK:STDOUT: .U = %U.decl +// CHECK:STDOUT: .InRelativeNamespaceUnion = %InRelativeNamespaceUnion.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %U.decl: type = class_decl @U [concrete = constants.%U] {} {} +// CHECK:STDOUT: %InRelativeNamespaceUnion.decl: type = class_decl @InRelativeNamespaceUnion [concrete = constants.%InRelativeNamespaceUnion] {} {} // CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] // CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { // CHECK:STDOUT: @@ -681,14 +681,14 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%u.param: %U) { +// CHECK:STDOUT: fn @F(%u.param: %InRelativeNamespaceUnion) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %N1.ref.loc8: = name_ref N1, imports.%N1 [concrete = imports.%N1] // CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %u.ref: %U = name_ref u, %u -// CHECK:STDOUT: %.loc8: ref %U = value_as_ref %u.ref -// CHECK:STDOUT: %addr: %ptr.6d9 = addr_of %.loc8 +// CHECK:STDOUT: %u.ref: %InRelativeNamespaceUnion = name_ref u, %u +// CHECK:STDOUT: %.loc8: ref %InRelativeNamespaceUnion = value_as_ref %u.ref +// CHECK:STDOUT: %addr: %ptr.cfd = addr_of %.loc8 // CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) // CHECK:STDOUT: // CHECK:STDOUT: } @@ -696,41 +696,41 @@ fn F() { // CHECK:STDOUT: --- import_definition_in_outer_definition.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %O: type = class_type @O [concrete] +// CHECK:STDOUT: %OuterUnion: type = class_type @OuterUnion [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %U: type = class_type @U [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.fea: type = ptr_type %U [concrete] -// CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] -// CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %pattern_type.6eb: type = pattern_type %O [concrete] -// CHECK:STDOUT: %x.patt: %pattern_type.6eb = ref_binding_pattern x [concrete] -// CHECK:STDOUT: %x.var_patt: %pattern_type.6eb = var_pattern %x.patt [concrete] +// CHECK:STDOUT: %InnerUnion: type = class_type @InnerUnion [concrete] +// CHECK:STDOUT: %foo_in_outer.cpp_overload_set.type: type = cpp_overload_set_type @foo_in_outer.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_in_outer.cpp_overload_set.value: %foo_in_outer.cpp_overload_set.type = cpp_overload_set_value @foo_in_outer.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.63b: type = ptr_type %InnerUnion [concrete] +// CHECK:STDOUT: %foo_in_outer__carbon_thunk.type: type = fn_type @foo_in_outer__carbon_thunk [concrete] +// CHECK:STDOUT: %foo_in_outer__carbon_thunk: %foo_in_outer__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %pattern_type.89d: type = pattern_type %OuterUnion [concrete] +// CHECK:STDOUT: %x.patt: %pattern_type.89d = ref_binding_pattern x [concrete] +// CHECK:STDOUT: %x.var_patt: %pattern_type.89d = var_pattern %x.patt [concrete] // CHECK:STDOUT: %DefaultOrUnformed.type: type = facet_type <@DefaultOrUnformed> [concrete] // CHECK:STDOUT: %Default.type: type = facet_type <@Default> [concrete] // CHECK:STDOUT: %T.b09: %Default.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.type.0c9: type = fn_type @T.as_type.as.DefaultOrUnformed.impl.Op, @T.as_type.as.DefaultOrUnformed.impl(%T.b09) [symbolic] // CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.cfe: %T.as_type.as.DefaultOrUnformed.impl.Op.type.0c9 = struct_value () [symbolic] -// CHECK:STDOUT: %O.Op.type: type = fn_type @O.Op [concrete] -// CHECK:STDOUT: %O.Op: %O.Op.type = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.9b4: = custom_witness (%O.Op), @Default [concrete] -// CHECK:STDOUT: %Default.facet.240: %Default.type = facet_value %O, (%custom_witness.9b4) [concrete] -// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.6b8: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.162, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.240) [concrete] -// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %O, (%DefaultOrUnformed.impl_witness.6b8) [concrete] -// CHECK:STDOUT: %O.cpp_destructor.type: type = fn_type @O.cpp_destructor [concrete] -// CHECK:STDOUT: %O.cpp_destructor: %O.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %OuterUnion.Op.type: type = fn_type @OuterUnion.Op [concrete] +// CHECK:STDOUT: %OuterUnion.Op: %OuterUnion.Op.type = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.9b4: = custom_witness (%OuterUnion.Op), @Default [concrete] +// CHECK:STDOUT: %Default.facet.a9b: %Default.type = facet_value %OuterUnion, (%custom_witness.9b4) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.impl_witness.661: = impl_witness imports.%DefaultOrUnformed.impl_witness_table.162, @T.as_type.as.DefaultOrUnformed.impl(%Default.facet.a9b) [concrete] +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value %OuterUnion, (%DefaultOrUnformed.impl_witness.661) [concrete] +// CHECK:STDOUT: %OuterUnion.cpp_destructor.type: type = fn_type @OuterUnion.cpp_destructor [concrete] +// CHECK:STDOUT: %OuterUnion.cpp_destructor: %OuterUnion.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .O = %O.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .OuterUnion = %OuterUnion.decl +// CHECK:STDOUT: .foo_in_outer = %foo_in_outer.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %O.decl: type = class_decl @O [concrete = constants.%O] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { +// CHECK:STDOUT: %OuterUnion.decl: type = class_decl @OuterUnion [concrete = constants.%OuterUnion] {} {} +// CHECK:STDOUT: %foo_in_outer.cpp_overload_set.value: %foo_in_outer.cpp_overload_set.type = cpp_overload_set_value @foo_in_outer.cpp_overload_set [concrete = constants.%foo_in_outer.cpp_overload_set.value] +// CHECK:STDOUT: %foo_in_outer__carbon_thunk.decl: %foo_in_outer__carbon_thunk.type = fn_decl @foo_in_outer__carbon_thunk [concrete = constants.%foo_in_outer__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -739,154 +739,154 @@ fn F() { // CHECK:STDOUT: %DefaultOrUnformed.impl_witness_table.162 = impl_witness_table (%Core.import_ref.c2f), @T.as_type.as.DefaultOrUnformed.impl [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%u.param: %U) { +// CHECK:STDOUT: fn @F(%u.param: %InnerUnion) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %u.ref: %U = name_ref u, %u -// CHECK:STDOUT: %.loc8: ref %U = value_as_ref %u.ref -// CHECK:STDOUT: %addr: %ptr.fea = addr_of %.loc8 -// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) -// CHECK:STDOUT: %x.var: ref %O = var_storage %x.var_patt -// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%O, (constants.%DefaultOrUnformed.impl_witness.6b8) [concrete = constants.%DefaultOrUnformed.facet] -// CHECK:STDOUT: %.loc9_22.1: %DefaultOrUnformed.type = converted constants.%O, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] -// CHECK:STDOUT: %as_type: type = facet_access_type %.loc9_22.1 [concrete = constants.%O] -// CHECK:STDOUT: %.loc9_22.2: type = converted %.loc9_22.1, %as_type [concrete = constants.%O] +// CHECK:STDOUT: %foo_in_outer.ref: %foo_in_outer.cpp_overload_set.type = name_ref foo_in_outer, imports.%foo_in_outer.cpp_overload_set.value [concrete = constants.%foo_in_outer.cpp_overload_set.value] +// CHECK:STDOUT: %u.ref: %InnerUnion = name_ref u, %u +// CHECK:STDOUT: %.loc8: ref %InnerUnion = value_as_ref %u.ref +// CHECK:STDOUT: %addr: %ptr.63b = addr_of %.loc8 +// CHECK:STDOUT: %foo_in_outer__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_in_outer__carbon_thunk.decl(%addr) +// CHECK:STDOUT: %x.var: ref %OuterUnion = var_storage %x.var_patt +// CHECK:STDOUT: %DefaultOrUnformed.facet: %DefaultOrUnformed.type = facet_value constants.%OuterUnion, (constants.%DefaultOrUnformed.impl_witness.661) [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %.loc9_31.1: %DefaultOrUnformed.type = converted constants.%OuterUnion, %DefaultOrUnformed.facet [concrete = constants.%DefaultOrUnformed.facet] +// CHECK:STDOUT: %as_type: type = facet_access_type %.loc9_31.1 [concrete = constants.%OuterUnion] +// CHECK:STDOUT: %.loc9_31.2: type = converted %.loc9_31.1, %as_type [concrete = constants.%OuterUnion] // CHECK:STDOUT: -// CHECK:STDOUT: %.loc9_3: ref %O = splice_block %x.var {} -// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call: init %O to %.loc9_3 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn() +// CHECK:STDOUT: %.loc9_3: ref %OuterUnion = splice_block %x.var {} +// CHECK:STDOUT: %T.as_type.as.DefaultOrUnformed.impl.Op.call: init %OuterUnion to %.loc9_3 = call %T.as_type.as.DefaultOrUnformed.impl.Op.specific_fn() // CHECK:STDOUT: assign %x.var, %T.as_type.as.DefaultOrUnformed.impl.Op.call -// CHECK:STDOUT: %.loc9_20: type = splice_block %O.ref.loc9 [concrete = constants.%O] { +// CHECK:STDOUT: %.loc9_20: type = splice_block %OuterUnion.ref.loc9 [concrete = constants.%OuterUnion] { // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %O.ref.loc9: type = name_ref O, imports.%O.decl [concrete = constants.%O] +// CHECK:STDOUT: %OuterUnion.ref.loc9: type = name_ref OuterUnion, imports.%OuterUnion.decl [concrete = constants.%OuterUnion] // CHECK:STDOUT: } -// CHECK:STDOUT: %x: ref %O = wrapper_binding x, %x.var +// CHECK:STDOUT: %x: ref %OuterUnion = wrapper_binding x, %x.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %x.patt: %pattern_type.6eb = ref_binding_pattern x [concrete = constants.%x.patt] -// CHECK:STDOUT: %x.var_patt: %pattern_type.6eb = var_pattern %x.patt [concrete = constants.%x.var_patt] +// CHECK:STDOUT: %x.patt: %pattern_type.89d = ref_binding_pattern x [concrete = constants.%x.patt] +// CHECK:STDOUT: %x.var_patt: %pattern_type.89d = var_pattern %x.patt [concrete = constants.%x.var_patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %O.cpp_destructor.bound: = bound_method %x.var, constants.%O.cpp_destructor -// CHECK:STDOUT: %O.cpp_destructor.call: init %empty_tuple.type = call %O.cpp_destructor.bound(%x.var) +// CHECK:STDOUT: %OuterUnion.cpp_destructor.bound: = bound_method %x.var, constants.%OuterUnion.cpp_destructor +// CHECK:STDOUT: %OuterUnion.cpp_destructor.call: init %empty_tuple.type = call %OuterUnion.cpp_destructor.bound(%x.var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_definition_and_static_method_call_before.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %U: type = class_type @U [concrete] +// CHECK:STDOUT: %StaticMethodUnion: type = class_type @StaticMethodUnion [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %U.bar.cpp_overload_set.type: type = cpp_overload_set_type @U.bar.cpp_overload_set [concrete] -// CHECK:STDOUT: %U.bar.cpp_overload_set.value: %U.bar.cpp_overload_set.type = cpp_overload_set_value @U.bar.cpp_overload_set [concrete] -// CHECK:STDOUT: %U.bar.type: type = fn_type @U.bar [concrete] -// CHECK:STDOUT: %U.bar: %U.bar.type = struct_value () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.2fe: type = ptr_type %U [concrete] -// CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] -// CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %StaticMethodUnion.bar.cpp_overload_set.type: type = cpp_overload_set_type @StaticMethodUnion.bar.cpp_overload_set [concrete] +// CHECK:STDOUT: %StaticMethodUnion.bar.cpp_overload_set.value: %StaticMethodUnion.bar.cpp_overload_set.type = cpp_overload_set_value @StaticMethodUnion.bar.cpp_overload_set [concrete] +// CHECK:STDOUT: %StaticMethodUnion.bar.type: type = fn_type @StaticMethodUnion.bar [concrete] +// CHECK:STDOUT: %StaticMethodUnion.bar: %StaticMethodUnion.bar.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_static_method.cpp_overload_set.type: type = cpp_overload_set_type @foo_static_method.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_static_method.cpp_overload_set.value: %foo_static_method.cpp_overload_set.type = cpp_overload_set_value @foo_static_method.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.9f6: type = ptr_type %StaticMethodUnion [concrete] +// CHECK:STDOUT: %foo_static_method__carbon_thunk.type: type = fn_type @foo_static_method__carbon_thunk [concrete] +// CHECK:STDOUT: %foo_static_method__carbon_thunk: %foo_static_method__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .U = %U.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .StaticMethodUnion = %StaticMethodUnion.decl +// CHECK:STDOUT: .foo_static_method = %foo_static_method.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %U.decl: type = class_decl @U [concrete = constants.%U] {} {} -// CHECK:STDOUT: %U.bar.cpp_overload_set.value: %U.bar.cpp_overload_set.type = cpp_overload_set_value @U.bar.cpp_overload_set [concrete = constants.%U.bar.cpp_overload_set.value] -// CHECK:STDOUT: %U.bar.decl: %U.bar.type = fn_decl @U.bar [concrete = constants.%U.bar] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { +// CHECK:STDOUT: %StaticMethodUnion.decl: type = class_decl @StaticMethodUnion [concrete = constants.%StaticMethodUnion] {} {} +// CHECK:STDOUT: %StaticMethodUnion.bar.cpp_overload_set.value: %StaticMethodUnion.bar.cpp_overload_set.type = cpp_overload_set_value @StaticMethodUnion.bar.cpp_overload_set [concrete = constants.%StaticMethodUnion.bar.cpp_overload_set.value] +// CHECK:STDOUT: %StaticMethodUnion.bar.decl: %StaticMethodUnion.bar.type = fn_decl @StaticMethodUnion.bar [concrete = constants.%StaticMethodUnion.bar] {} {} +// CHECK:STDOUT: %foo_static_method.cpp_overload_set.value: %foo_static_method.cpp_overload_set.type = cpp_overload_set_value @foo_static_method.cpp_overload_set [concrete = constants.%foo_static_method.cpp_overload_set.value] +// CHECK:STDOUT: %foo_static_method__carbon_thunk.decl: %foo_static_method__carbon_thunk.type = fn_decl @foo_static_method__carbon_thunk [concrete = constants.%foo_static_method__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%u.param: %U) { +// CHECK:STDOUT: fn @F(%u.param: %StaticMethodUnion) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %U.ref.loc8: type = name_ref U, imports.%U.decl [concrete = constants.%U] -// CHECK:STDOUT: %bar.ref: %U.bar.cpp_overload_set.type = name_ref bar, imports.%U.bar.cpp_overload_set.value [concrete = constants.%U.bar.cpp_overload_set.value] -// CHECK:STDOUT: %U.bar.call: init %empty_tuple.type = call imports.%U.bar.decl() +// CHECK:STDOUT: %StaticMethodUnion.ref.loc8: type = name_ref StaticMethodUnion, imports.%StaticMethodUnion.decl [concrete = constants.%StaticMethodUnion] +// CHECK:STDOUT: %bar.ref: %StaticMethodUnion.bar.cpp_overload_set.type = name_ref bar, imports.%StaticMethodUnion.bar.cpp_overload_set.value [concrete = constants.%StaticMethodUnion.bar.cpp_overload_set.value] +// CHECK:STDOUT: %StaticMethodUnion.bar.call: init %empty_tuple.type = call imports.%StaticMethodUnion.bar.decl() // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %u.ref: %U = name_ref u, %u -// CHECK:STDOUT: %.loc9: ref %U = value_as_ref %u.ref -// CHECK:STDOUT: %addr: %ptr.2fe = addr_of %.loc9 -// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) +// CHECK:STDOUT: %foo_static_method.ref: %foo_static_method.cpp_overload_set.type = name_ref foo_static_method, imports.%foo_static_method.cpp_overload_set.value [concrete = constants.%foo_static_method.cpp_overload_set.value] +// CHECK:STDOUT: %u.ref: %StaticMethodUnion = name_ref u, %u +// CHECK:STDOUT: %.loc9: ref %StaticMethodUnion = value_as_ref %u.ref +// CHECK:STDOUT: %addr: %ptr.9f6 = addr_of %.loc9 +// CHECK:STDOUT: %foo_static_method__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_static_method__carbon_thunk.decl(%addr) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_definition_and_static_method_call_after.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %U: type = class_type @U [concrete] +// CHECK:STDOUT: %StaticMethodUnion: type = class_type @StaticMethodUnion [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.2fe: type = ptr_type %U [concrete] -// CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] -// CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %U.bar.cpp_overload_set.type: type = cpp_overload_set_type @U.bar.cpp_overload_set [concrete] -// CHECK:STDOUT: %U.bar.cpp_overload_set.value: %U.bar.cpp_overload_set.type = cpp_overload_set_value @U.bar.cpp_overload_set [concrete] -// CHECK:STDOUT: %U.bar.type: type = fn_type @U.bar [concrete] -// CHECK:STDOUT: %U.bar: %U.bar.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_static_method.cpp_overload_set.type: type = cpp_overload_set_type @foo_static_method.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_static_method.cpp_overload_set.value: %foo_static_method.cpp_overload_set.type = cpp_overload_set_value @foo_static_method.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.9f6: type = ptr_type %StaticMethodUnion [concrete] +// CHECK:STDOUT: %foo_static_method__carbon_thunk.type: type = fn_type @foo_static_method__carbon_thunk [concrete] +// CHECK:STDOUT: %foo_static_method__carbon_thunk: %foo_static_method__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %StaticMethodUnion.bar.cpp_overload_set.type: type = cpp_overload_set_type @StaticMethodUnion.bar.cpp_overload_set [concrete] +// CHECK:STDOUT: %StaticMethodUnion.bar.cpp_overload_set.value: %StaticMethodUnion.bar.cpp_overload_set.type = cpp_overload_set_value @StaticMethodUnion.bar.cpp_overload_set [concrete] +// CHECK:STDOUT: %StaticMethodUnion.bar.type: type = fn_type @StaticMethodUnion.bar [concrete] +// CHECK:STDOUT: %StaticMethodUnion.bar: %StaticMethodUnion.bar.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .U = %U.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .StaticMethodUnion = %StaticMethodUnion.decl +// CHECK:STDOUT: .foo_static_method = %foo_static_method.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %U.decl: type = class_decl @U [concrete = constants.%U] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { +// CHECK:STDOUT: %StaticMethodUnion.decl: type = class_decl @StaticMethodUnion [concrete = constants.%StaticMethodUnion] {} {} +// CHECK:STDOUT: %foo_static_method.cpp_overload_set.value: %foo_static_method.cpp_overload_set.type = cpp_overload_set_value @foo_static_method.cpp_overload_set [concrete = constants.%foo_static_method.cpp_overload_set.value] +// CHECK:STDOUT: %foo_static_method__carbon_thunk.decl: %foo_static_method__carbon_thunk.type = fn_decl @foo_static_method__carbon_thunk [concrete = constants.%foo_static_method__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } -// CHECK:STDOUT: %U.bar.cpp_overload_set.value: %U.bar.cpp_overload_set.type = cpp_overload_set_value @U.bar.cpp_overload_set [concrete = constants.%U.bar.cpp_overload_set.value] -// CHECK:STDOUT: %U.bar.decl: %U.bar.type = fn_decl @U.bar [concrete = constants.%U.bar] {} {} +// CHECK:STDOUT: %StaticMethodUnion.bar.cpp_overload_set.value: %StaticMethodUnion.bar.cpp_overload_set.type = cpp_overload_set_value @StaticMethodUnion.bar.cpp_overload_set [concrete = constants.%StaticMethodUnion.bar.cpp_overload_set.value] +// CHECK:STDOUT: %StaticMethodUnion.bar.decl: %StaticMethodUnion.bar.type = fn_decl @StaticMethodUnion.bar [concrete = constants.%StaticMethodUnion.bar] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%u.param: %U) { +// CHECK:STDOUT: fn @F(%u.param: %StaticMethodUnion) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %u.ref: %U = name_ref u, %u -// CHECK:STDOUT: %.loc8: ref %U = value_as_ref %u.ref -// CHECK:STDOUT: %addr: %ptr.2fe = addr_of %.loc8 -// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) +// CHECK:STDOUT: %foo_static_method.ref: %foo_static_method.cpp_overload_set.type = name_ref foo_static_method, imports.%foo_static_method.cpp_overload_set.value [concrete = constants.%foo_static_method.cpp_overload_set.value] +// CHECK:STDOUT: %u.ref: %StaticMethodUnion = name_ref u, %u +// CHECK:STDOUT: %.loc8: ref %StaticMethodUnion = value_as_ref %u.ref +// CHECK:STDOUT: %addr: %ptr.9f6 = addr_of %.loc8 +// CHECK:STDOUT: %foo_static_method__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_static_method__carbon_thunk.decl(%addr) // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %U.ref.loc9: type = name_ref U, imports.%U.decl [concrete = constants.%U] -// CHECK:STDOUT: %bar.ref: %U.bar.cpp_overload_set.type = name_ref bar, imports.%U.bar.cpp_overload_set.value [concrete = constants.%U.bar.cpp_overload_set.value] -// CHECK:STDOUT: %U.bar.call: init %empty_tuple.type = call imports.%U.bar.decl() +// CHECK:STDOUT: %StaticMethodUnion.ref.loc9: type = name_ref StaticMethodUnion, imports.%StaticMethodUnion.decl [concrete = constants.%StaticMethodUnion] +// CHECK:STDOUT: %bar.ref: %StaticMethodUnion.bar.cpp_overload_set.type = name_ref bar, imports.%StaticMethodUnion.bar.cpp_overload_set.value [concrete = constants.%StaticMethodUnion.bar.cpp_overload_set.value] +// CHECK:STDOUT: %StaticMethodUnion.bar.call: init %empty_tuple.type = call imports.%StaticMethodUnion.bar.decl() // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_decl_pointer_param_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %U: type = class_type @U [concrete] -// CHECK:STDOUT: %ptr: type = ptr_type %U [concrete] +// CHECK:STDOUT: %DeclPointerParamUnion: type = class_type @DeclPointerParamUnion [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %DeclPointerParamUnion [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_decl_pointer_param.cpp_overload_set.type: type = cpp_overload_set_type @foo_decl_pointer_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_decl_pointer_param.cpp_overload_set.value: %foo_decl_pointer_param.cpp_overload_set.type = cpp_overload_set_value @foo_decl_pointer_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_decl_pointer_param.type: type = fn_type @foo_decl_pointer_param [concrete] +// CHECK:STDOUT: %foo_decl_pointer_param: %foo_decl_pointer_param.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .U = %U.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .DeclPointerParamUnion = %DeclPointerParamUnion.decl +// CHECK:STDOUT: .foo_decl_pointer_param = %foo_decl_pointer_param.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %U.decl: type = class_decl @U [concrete = constants.%U] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %DeclPointerParamUnion.decl: type = class_decl @DeclPointerParamUnion [concrete = constants.%DeclPointerParamUnion] {} {} +// CHECK:STDOUT: %foo_decl_pointer_param.cpp_overload_set.value: %foo_decl_pointer_param.cpp_overload_set.type = cpp_overload_set_value @foo_decl_pointer_param.cpp_overload_set [concrete = constants.%foo_decl_pointer_param.cpp_overload_set.value] +// CHECK:STDOUT: %foo_decl_pointer_param.decl: %foo_decl_pointer_param.type = fn_decl @foo_decl_pointer_param [concrete = constants.%foo_decl_pointer_param] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -896,33 +896,33 @@ fn F() { // CHECK:STDOUT: fn @F(%u.param: %ptr) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] +// CHECK:STDOUT: %foo_decl_pointer_param.ref: %foo_decl_pointer_param.cpp_overload_set.type = name_ref foo_decl_pointer_param, imports.%foo_decl_pointer_param.cpp_overload_set.value [concrete = constants.%foo_decl_pointer_param.cpp_overload_set.value] // CHECK:STDOUT: %u.ref: %ptr = name_ref u, %u -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl(%u.ref) +// CHECK:STDOUT: %foo_decl_pointer_param.call: init %empty_tuple.type = call imports.%foo_decl_pointer_param.decl(%u.ref) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_definition_pointer_param_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %U: type = class_type @U [concrete] -// CHECK:STDOUT: %ptr: type = ptr_type %U [concrete] +// CHECK:STDOUT: %DefPointerParamUnion: type = class_type @DefPointerParamUnion [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %DefPointerParamUnion [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_def_pointer_param.cpp_overload_set.type: type = cpp_overload_set_type @foo_def_pointer_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_def_pointer_param.cpp_overload_set.value: %foo_def_pointer_param.cpp_overload_set.type = cpp_overload_set_value @foo_def_pointer_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_def_pointer_param.type: type = fn_type @foo_def_pointer_param [concrete] +// CHECK:STDOUT: %foo_def_pointer_param: %foo_def_pointer_param.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .U = %U.decl -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .DefPointerParamUnion = %DefPointerParamUnion.decl +// CHECK:STDOUT: .foo_def_pointer_param = %foo_def_pointer_param.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %U.decl: type = class_decl @U [concrete = constants.%U] {} {} -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %DefPointerParamUnion.decl: type = class_decl @DefPointerParamUnion [concrete = constants.%DefPointerParamUnion] {} {} +// CHECK:STDOUT: %foo_def_pointer_param.cpp_overload_set.value: %foo_def_pointer_param.cpp_overload_set.type = cpp_overload_set_value @foo_def_pointer_param.cpp_overload_set [concrete = constants.%foo_def_pointer_param.cpp_overload_set.value] +// CHECK:STDOUT: %foo_def_pointer_param.decl: %foo_def_pointer_param.type = fn_decl @foo_def_pointer_param [concrete = constants.%foo_def_pointer_param] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -932,9 +932,9 @@ fn F() { // CHECK:STDOUT: fn @F(%u.param: %ptr) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc8: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] +// CHECK:STDOUT: %foo_def_pointer_param.ref: %foo_def_pointer_param.cpp_overload_set.type = name_ref foo_def_pointer_param, imports.%foo_def_pointer_param.cpp_overload_set.value [concrete = constants.%foo_def_pointer_param.cpp_overload_set.value] // CHECK:STDOUT: %u.ref: %ptr = name_ref u, %u -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl(%u.ref) +// CHECK:STDOUT: %foo_def_pointer_param.call: init %empty_tuple.type = call imports.%foo_def_pointer_param.decl(%u.ref) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -942,23 +942,23 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %U: type = class_type @U [concrete] -// CHECK:STDOUT: %ptr.2fe: type = ptr_type %U [concrete] -// CHECK:STDOUT: %foo__carbon_thunk.type: type = fn_type @foo__carbon_thunk [concrete] -// CHECK:STDOUT: %foo__carbon_thunk: %foo__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %U.cpp_destructor.type: type = fn_type @U.cpp_destructor [concrete] -// CHECK:STDOUT: %U.cpp_destructor: %U.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_def_value_return.cpp_overload_set.type: type = cpp_overload_set_type @foo_def_value_return.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_def_value_return.cpp_overload_set.value: %foo_def_value_return.cpp_overload_set.type = cpp_overload_set_value @foo_def_value_return.cpp_overload_set [concrete] +// CHECK:STDOUT: %DefValueReturnUnion: type = class_type @DefValueReturnUnion [concrete] +// CHECK:STDOUT: %ptr.5e5: type = ptr_type %DefValueReturnUnion [concrete] +// CHECK:STDOUT: %foo_def_value_return__carbon_thunk.type: type = fn_type @foo_def_value_return__carbon_thunk [concrete] +// CHECK:STDOUT: %foo_def_value_return__carbon_thunk: %foo_def_value_return__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %DefValueReturnUnion.cpp_destructor.type: type = fn_type @DefValueReturnUnion.cpp_destructor [concrete] +// CHECK:STDOUT: %DefValueReturnUnion.cpp_destructor: %DefValueReturnUnion.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .foo_def_value_return = %foo_def_value_return.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo__carbon_thunk.decl: %foo__carbon_thunk.type = fn_decl @foo__carbon_thunk [concrete = constants.%foo__carbon_thunk] { +// CHECK:STDOUT: %foo_def_value_return.cpp_overload_set.value: %foo_def_value_return.cpp_overload_set.type = cpp_overload_set_value @foo_def_value_return.cpp_overload_set [concrete = constants.%foo_def_value_return.cpp_overload_set.value] +// CHECK:STDOUT: %foo_def_value_return__carbon_thunk.decl: %foo_def_value_return__carbon_thunk.type = fn_decl @foo_def_value_return__carbon_thunk [concrete = constants.%foo_def_value_return__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -968,35 +968,35 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %.loc8_11.1: ref %U = temporary_storage -// CHECK:STDOUT: %addr: %ptr.2fe = addr_of %.loc8_11.1 -// CHECK:STDOUT: %foo__carbon_thunk.call: init %empty_tuple.type = call imports.%foo__carbon_thunk.decl(%addr) -// CHECK:STDOUT: %.loc8_11.2: init %U to %.loc8_11.1 = mark_in_place_init %foo__carbon_thunk.call -// CHECK:STDOUT: %.loc8_11.3: ref %U = temporary %.loc8_11.1, %.loc8_11.2 -// CHECK:STDOUT: %U.cpp_destructor.bound: = bound_method %.loc8_11.3, constants.%U.cpp_destructor -// CHECK:STDOUT: %U.cpp_destructor.call: init %empty_tuple.type = call %U.cpp_destructor.bound(%.loc8_11.3) +// CHECK:STDOUT: %foo_def_value_return.ref: %foo_def_value_return.cpp_overload_set.type = name_ref foo_def_value_return, imports.%foo_def_value_return.cpp_overload_set.value [concrete = constants.%foo_def_value_return.cpp_overload_set.value] +// CHECK:STDOUT: %.loc8_28.1: ref %DefValueReturnUnion = temporary_storage +// CHECK:STDOUT: %addr: %ptr.5e5 = addr_of %.loc8_28.1 +// CHECK:STDOUT: %foo_def_value_return__carbon_thunk.call: init %empty_tuple.type = call imports.%foo_def_value_return__carbon_thunk.decl(%addr) +// CHECK:STDOUT: %.loc8_28.2: init %DefValueReturnUnion to %.loc8_28.1 = mark_in_place_init %foo_def_value_return__carbon_thunk.call +// CHECK:STDOUT: %.loc8_28.3: ref %DefValueReturnUnion = temporary %.loc8_28.1, %.loc8_28.2 +// CHECK:STDOUT: %DefValueReturnUnion.cpp_destructor.bound: = bound_method %.loc8_28.3, constants.%DefValueReturnUnion.cpp_destructor +// CHECK:STDOUT: %DefValueReturnUnion.cpp_destructor.call: init %empty_tuple.type = call %DefValueReturnUnion.cpp_destructor.bound(%.loc8_28.3) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_decl_pointer_return_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %U: type = class_type @U [concrete] -// CHECK:STDOUT: %ptr: type = ptr_type %U [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_decl_pointer_return.cpp_overload_set.type: type = cpp_overload_set_type @foo_decl_pointer_return.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_decl_pointer_return.cpp_overload_set.value: %foo_decl_pointer_return.cpp_overload_set.type = cpp_overload_set_value @foo_decl_pointer_return.cpp_overload_set [concrete] +// CHECK:STDOUT: %DeclPointerReturnUnion: type = class_type @DeclPointerReturnUnion [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %DeclPointerReturnUnion [concrete] +// CHECK:STDOUT: %foo_decl_pointer_return.type: type = fn_type @foo_decl_pointer_return [concrete] +// CHECK:STDOUT: %foo_decl_pointer_return: %foo_decl_pointer_return.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .foo_decl_pointer_return = %foo_decl_pointer_return.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %foo_decl_pointer_return.cpp_overload_set.value: %foo_decl_pointer_return.cpp_overload_set.type = cpp_overload_set_value @foo_decl_pointer_return.cpp_overload_set [concrete = constants.%foo_decl_pointer_return.cpp_overload_set.value] +// CHECK:STDOUT: %foo_decl_pointer_return.decl: %foo_decl_pointer_return.type = fn_decl @foo_decl_pointer_return [concrete = constants.%foo_decl_pointer_return] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -1006,29 +1006,29 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.call: init %ptr = call imports.%foo.decl() +// CHECK:STDOUT: %foo_decl_pointer_return.ref: %foo_decl_pointer_return.cpp_overload_set.type = name_ref foo_decl_pointer_return, imports.%foo_decl_pointer_return.cpp_overload_set.value [concrete = constants.%foo_decl_pointer_return.cpp_overload_set.value] +// CHECK:STDOUT: %foo_decl_pointer_return.call: init %ptr = call imports.%foo_decl_pointer_return.decl() // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- import_definition_pointer_return_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %U: type = class_type @U [concrete] -// CHECK:STDOUT: %ptr: type = ptr_type %U [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_def_pointer_return.cpp_overload_set.type: type = cpp_overload_set_type @foo_def_pointer_return.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_def_pointer_return.cpp_overload_set.value: %foo_def_pointer_return.cpp_overload_set.type = cpp_overload_set_value @foo_def_pointer_return.cpp_overload_set [concrete] +// CHECK:STDOUT: %DefPointerReturnUnion: type = class_type @DefPointerReturnUnion [concrete] +// CHECK:STDOUT: %ptr: type = ptr_type %DefPointerReturnUnion [concrete] +// CHECK:STDOUT: %foo_def_pointer_return.type: type = fn_type @foo_def_pointer_return [concrete] +// CHECK:STDOUT: %foo_def_pointer_return: %foo_def_pointer_return.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .foo_def_pointer_return = %foo_def_pointer_return.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %foo_def_pointer_return.cpp_overload_set.value: %foo_def_pointer_return.cpp_overload_set.type = cpp_overload_set_value @foo_def_pointer_return.cpp_overload_set [concrete = constants.%foo_def_pointer_return.cpp_overload_set.value] +// CHECK:STDOUT: %foo_def_pointer_return.decl: %foo_def_pointer_return.type = fn_decl @foo_def_pointer_return [concrete = constants.%foo_def_pointer_return] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -1038,8 +1038,8 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.call: init %ptr = call imports.%foo.decl() +// CHECK:STDOUT: %foo_def_pointer_return.ref: %foo_def_pointer_return.cpp_overload_set.type = name_ref foo_def_pointer_return, imports.%foo_def_pointer_return.cpp_overload_set.value [concrete = constants.%foo_def_pointer_return.cpp_overload_set.value] +// CHECK:STDOUT: %foo_def_pointer_return.call: init %ptr = call imports.%foo_def_pointer_return.decl() // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/function/import/void_pointer.carbon b/toolchain/check/testdata/interop/cpp/function/import/void_pointer.carbon index 64b6a6c1d927..86cee5bee4e0 100644 --- a/toolchain/check/testdata/interop/cpp/function/import/void_pointer.carbon +++ b/toolchain/check/testdata/interop/cpp/function/import/void_pointer.carbon @@ -15,12 +15,12 @@ library "[[@TEST_NAME]]"; import Cpp inline ''' -auto foo(void* _Nonnull x) -> void; +auto foo_non_nullable_param(void* _Nonnull x) -> void; '''; fn F(input: Cpp.void*) { //@dump-sem-ir-begin - Cpp.foo(input); + Cpp.foo_non_nullable_param(input); //@dump-sem-ir-end } @@ -29,12 +29,12 @@ fn F(input: Cpp.void*) { library "[[@TEST_NAME]]"; import Cpp inline ''' -auto foo() -> void* _Nonnull; +auto foo_non_nullable_return() -> void* _Nonnull; '''; fn F() { //@dump-sem-ir-begin - let unused output: Cpp.void* = Cpp.foo(); + let unused output: Cpp.void* = Cpp.foo_non_nullable_return(); //@dump-sem-ir-end } @@ -43,12 +43,12 @@ fn F() { library "[[@TEST_NAME]]"; import Cpp inline ''' -auto foo(void* x) -> void; +auto foo_nullable_param(void* x) -> void; '''; fn F(input: Cpp.void*) { //@dump-sem-ir-begin - Cpp.foo(input); + Cpp.foo_nullable_param(input); //@dump-sem-ir-end } @@ -57,12 +57,12 @@ fn F(input: Cpp.void*) { library "[[@TEST_NAME]]"; import Cpp inline ''' -auto foo(void* x) -> void; +auto foo_null_param(void* x) -> void; '''; fn F() { //@dump-sem-ir-begin - Cpp.foo(Core.Optional(Cpp.void*).None()); + Cpp.foo_null_param(Core.Optional(Cpp.void*).None()); //@dump-sem-ir-end } @@ -71,12 +71,12 @@ fn F() { library "[[@TEST_NAME]]"; import Cpp inline ''' -auto foo() -> void*; +auto foo_nullable_return() -> void*; '''; fn F() { //@dump-sem-ir-begin - let unused output: Core.Optional(Cpp.void*) = Cpp.foo(); + let unused output: Core.Optional(Cpp.void*) = Cpp.foo_nullable_return(); //@dump-sem-ir-end } @@ -85,14 +85,14 @@ fn F() { library "[[@TEST_NAME]]"; import Cpp inline ''' -auto Return() -> void* _Nonnull* _Nonnull; -auto Invoke(void* _Nonnull* _Nonnull) -> void; +auto Return_pointer() -> void* _Nonnull* _Nonnull; +auto Invoke_pointer(void* _Nonnull* _Nonnull) -> void; '''; fn F() { //@dump-sem-ir-begin - var non_nullable_pointer: Cpp.void** = Cpp.Return(); - Cpp.Invoke(non_nullable_pointer); + var non_nullable_pointer: Cpp.void** = Cpp.Return_pointer(); + Cpp.Invoke_pointer(non_nullable_pointer); //@dump-sem-ir-end } @@ -101,14 +101,14 @@ fn F() { library "[[@TEST_NAME]]"; import Cpp inline ''' -auto Return() -> const void* _Nonnull; -auto Invoke(const void* _Nonnull) -> void; +auto Return_const() -> const void* _Nonnull; +auto Invoke_const(const void* _Nonnull) -> void; '''; fn F() { //@dump-sem-ir-begin - var const_void_pointer: const Cpp.void* = Cpp.Return(); - Cpp.Invoke(const_void_pointer); + var const_void_pointer: const Cpp.void* = Cpp.Return_const(); + Cpp.Invoke_const(const_void_pointer); //@dump-sem-ir-end } @@ -118,20 +118,20 @@ fn F() { // CHECK:STDOUT: %Cpp.void: type = class_type @VoidBase [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %ptr: type = ptr_type %Cpp.void [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_non_nullable_param.cpp_overload_set.type: type = cpp_overload_set_type @foo_non_nullable_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_non_nullable_param.cpp_overload_set.value: %foo_non_nullable_param.cpp_overload_set.type = cpp_overload_set_value @foo_non_nullable_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_non_nullable_param.type: type = fn_type @foo_non_nullable_param [concrete] +// CHECK:STDOUT: %foo_non_nullable_param: %foo_non_nullable_param.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { // CHECK:STDOUT: .void = constants.%Cpp.void -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .foo_non_nullable_param = %foo_non_nullable_param.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %foo_non_nullable_param.cpp_overload_set.value: %foo_non_nullable_param.cpp_overload_set.type = cpp_overload_set_value @foo_non_nullable_param.cpp_overload_set [concrete = constants.%foo_non_nullable_param.cpp_overload_set.value] +// CHECK:STDOUT: %foo_non_nullable_param.decl: %foo_non_nullable_param.type = fn_decl @foo_non_nullable_param [concrete = constants.%foo_non_nullable_param] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -141,9 +141,9 @@ fn F() { // CHECK:STDOUT: fn @F(%input.param: %ptr) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] +// CHECK:STDOUT: %foo_non_nullable_param.ref: %foo_non_nullable_param.cpp_overload_set.type = name_ref foo_non_nullable_param, imports.%foo_non_nullable_param.cpp_overload_set.value [concrete = constants.%foo_non_nullable_param.cpp_overload_set.value] // CHECK:STDOUT: %input.ref: %ptr = name_ref input, %input -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl(%input.ref) +// CHECK:STDOUT: %foo_non_nullable_param.call: init %empty_tuple.type = call imports.%foo_non_nullable_param.decl(%input.ref) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -154,20 +154,20 @@ fn F() { // CHECK:STDOUT: %ptr: type = ptr_type %Cpp.void [concrete] // CHECK:STDOUT: %pattern_type: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %output.patt: %pattern_type = value_binding_pattern output [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_non_nullable_return.cpp_overload_set.type: type = cpp_overload_set_type @foo_non_nullable_return.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_non_nullable_return.cpp_overload_set.value: %foo_non_nullable_return.cpp_overload_set.type = cpp_overload_set_value @foo_non_nullable_return.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_non_nullable_return.type: type = fn_type @foo_non_nullable_return [concrete] +// CHECK:STDOUT: %foo_non_nullable_return: %foo_non_nullable_return.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { // CHECK:STDOUT: .void = constants.%Cpp.void -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .foo_non_nullable_return = %foo_non_nullable_return.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %foo_non_nullable_return.cpp_overload_set.value: %foo_non_nullable_return.cpp_overload_set.type = cpp_overload_set_value @foo_non_nullable_return.cpp_overload_set [concrete = constants.%foo_non_nullable_return.cpp_overload_set.value] +// CHECK:STDOUT: %foo_non_nullable_return.decl: %foo_non_nullable_return.type = fn_decl @foo_non_nullable_return [concrete = constants.%foo_non_nullable_return] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -177,16 +177,16 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc10_34: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.call: init %ptr = call imports.%foo.decl() -// CHECK:STDOUT: %.loc10_42.1: %ptr = value_of_initializer %foo.call -// CHECK:STDOUT: %.loc10_42.2: %ptr = converted %foo.call, %.loc10_42.1 +// CHECK:STDOUT: %foo_non_nullable_return.ref: %foo_non_nullable_return.cpp_overload_set.type = name_ref foo_non_nullable_return, imports.%foo_non_nullable_return.cpp_overload_set.value [concrete = constants.%foo_non_nullable_return.cpp_overload_set.value] +// CHECK:STDOUT: %foo_non_nullable_return.call: init %ptr = call imports.%foo_non_nullable_return.decl() +// CHECK:STDOUT: %.loc10_62.1: %ptr = value_of_initializer %foo_non_nullable_return.call +// CHECK:STDOUT: %.loc10_62.2: %ptr = converted %foo_non_nullable_return.call, %.loc10_62.1 // CHECK:STDOUT: %.loc10_30: type = splice_block %ptr [concrete = constants.%ptr] { // CHECK:STDOUT: %Cpp.ref.loc10_22: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %void.ref: type = name_ref void, constants.%Cpp.void [concrete = constants.%Cpp.void] // CHECK:STDOUT: %ptr: type = ptr_type %void.ref [concrete = constants.%ptr] // CHECK:STDOUT: } -// CHECK:STDOUT: %output: %ptr = wrapper_binding output, %.loc10_42.2 +// CHECK:STDOUT: %output: %ptr = wrapper_binding output, %.loc10_62.2 // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %output.patt: %pattern_type = value_binding_pattern output [concrete = constants.%output.patt] // CHECK:STDOUT: } @@ -199,8 +199,8 @@ fn F() { // CHECK:STDOUT: %Cpp.void: type = class_type @VoidBase [concrete] // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %ptr.00a: type = ptr_type %Cpp.void [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_nullable_param.cpp_overload_set.type: type = cpp_overload_set_type @foo_nullable_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_nullable_param.cpp_overload_set.value: %foo_nullable_param.cpp_overload_set.type = cpp_overload_set_value @foo_nullable_param.cpp_overload_set [concrete] // CHECK:STDOUT: %OptionalStorage.type: type = facet_type <@OptionalStorage> [concrete] // CHECK:STDOUT: %T.220: %OptionalStorage.type = symbolic_binding T, 0 [symbolic] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] @@ -220,8 +220,8 @@ fn F() { // CHECK:STDOUT: %.a7d: type = maybe_unformed_type %ptr.00a [concrete] // CHECK:STDOUT: %OptionalStorage.facet.427: %OptionalStorage.type = facet_value %ptr.00a, (%OptionalStorage.impl_witness.d51) [concrete] // CHECK:STDOUT: %Optional.14b: type = class_type @Optional, @Optional(%OptionalStorage.facet.427) [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] +// CHECK:STDOUT: %foo_nullable_param.type: type = fn_type @foo_nullable_param [concrete] +// CHECK:STDOUT: %foo_nullable_param: %foo_nullable_param.type = struct_value () [concrete] // CHECK:STDOUT: %ImplicitAs.type.8e0: type = facet_type <@ImplicitAs, @ImplicitAs(%Optional.14b)> [concrete] // CHECK:STDOUT: %OptionalAs.type.3b8: type = facet_type <@OptionalAs, @OptionalAs(%T.220)> [symbolic] // CHECK:STDOUT: %U.042: %OptionalAs.type.3b8 = symbolic_binding U, 1 [symbolic] @@ -239,17 +239,17 @@ fn F() { // CHECK:STDOUT: %ImplicitAs.WithSelf.Convert.type.002: type = fn_type @ImplicitAs.WithSelf.Convert, @ImplicitAs.WithSelf(%Optional.14b, %ImplicitAs.facet.3be) [concrete] // CHECK:STDOUT: %.fde: type = fn_type_with_self_type %ImplicitAs.WithSelf.Convert.type.002, %ImplicitAs.facet.3be [concrete] // CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %U.as_type.as.ImplicitAs.impl.Convert.f63, @U.as_type.as.ImplicitAs.impl.Convert.2(%OptionalStorage.facet.427, %OptionalAs.facet) [concrete] -// CHECK:STDOUT: %Destroy.Op.type.1d8f74.4: type = fn_type @Destroy.Op.loc10_11.3 [concrete] +// CHECK:STDOUT: %Destroy.Op.type.1d8f74.4: type = fn_type @Destroy.Op.loc10_26.3 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.4: %Destroy.Op.type.1d8f74.4 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { // CHECK:STDOUT: .void = constants.%Cpp.void -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .foo_nullable_param = %foo_nullable_param.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] +// CHECK:STDOUT: %foo_nullable_param.cpp_overload_set.value: %foo_nullable_param.cpp_overload_set.type = cpp_overload_set_value @foo_nullable_param.cpp_overload_set [concrete = constants.%foo_nullable_param.cpp_overload_set.value] // CHECK:STDOUT: %Core.import_ref.509: type = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @ptr.as.OptionalStorage.impl.%MaybeUnformed (constants.%MaybeUnformed.ddb)] // CHECK:STDOUT: %Core.import_ref.105 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %Core.import_ref.fa7: @ptr.as.OptionalStorage.impl.%ptr.as.OptionalStorage.impl.Some.type (%ptr.as.OptionalStorage.impl.Some.type.71e) = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @ptr.as.OptionalStorage.impl.%ptr.as.OptionalStorage.impl.Some (constants.%ptr.as.OptionalStorage.impl.Some.caa)] @@ -257,13 +257,13 @@ fn F() { // CHECK:STDOUT: %Core.import_ref.306 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %Core.import_ref.3e3 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %OptionalStorage.impl_witness_table.110 = impl_witness_table (%Core.import_ref.509, %Core.import_ref.105, %Core.import_ref.fa7, %Core.import_ref.a90, %Core.import_ref.306, %Core.import_ref.3e3), @ptr.as.OptionalStorage.impl [concrete] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %foo_nullable_param.decl: %foo_nullable_param.type = fn_decl @foo_nullable_param [concrete = constants.%foo_nullable_param] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: -// CHECK:STDOUT: %.loc10_16.1: type = splice_block %Optional [concrete = constants.%Optional.14b] { +// CHECK:STDOUT: %.loc10_31.1: type = splice_block %Optional [concrete = constants.%Optional.14b] { // CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value constants.%ptr.00a, (constants.%OptionalStorage.impl_witness.d51) [concrete = constants.%OptionalStorage.facet.427] -// CHECK:STDOUT: %.loc10_16.2: %OptionalStorage.type = converted constants.%ptr.00a, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet.427] +// CHECK:STDOUT: %.loc10_31.2: %OptionalStorage.type = converted constants.%ptr.00a, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet.427] // CHECK:STDOUT: %Optional: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet.427) [concrete = constants.%Optional.14b] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -277,34 +277,34 @@ fn F() { // CHECK:STDOUT: fn @F(%input.param: %ptr.00a) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] +// CHECK:STDOUT: %foo_nullable_param.ref: %foo_nullable_param.cpp_overload_set.type = name_ref foo_nullable_param, imports.%foo_nullable_param.cpp_overload_set.value [concrete = constants.%foo_nullable_param.cpp_overload_set.value] // CHECK:STDOUT: %input.ref: %ptr.00a = name_ref input, %input // CHECK:STDOUT: %impl.elem0: %.fde = impl_witness_access constants.%ImplicitAs.impl_witness.50c, element0 [concrete = constants.%U.as_type.as.ImplicitAs.impl.Convert.f63] -// CHECK:STDOUT: %bound_method.loc10_11.1: = bound_method %input.ref, %impl.elem0 +// CHECK:STDOUT: %bound_method.loc10_26.1: = bound_method %input.ref, %impl.elem0 // CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @U.as_type.as.ImplicitAs.impl.Convert.2(constants.%OptionalStorage.facet.427, constants.%OptionalAs.facet) [concrete = constants.%U.as_type.as.ImplicitAs.impl.Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc10_11.2: = bound_method %input.ref, %specific_fn -// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.call: init %Optional.14b = call %bound_method.loc10_11.2(%input.ref) -// CHECK:STDOUT: %.loc10_11.1: init %Optional.14b = converted %input.ref, %U.as_type.as.ImplicitAs.impl.Convert.call -// CHECK:STDOUT: %.loc10_11.2: ref %Optional.14b = temporary_storage -// CHECK:STDOUT: %.loc10_11.3: ref %Optional.14b = temporary %.loc10_11.2, %.loc10_11.1 -// CHECK:STDOUT: %.loc10_11.4: %Optional.14b = acquire_value %.loc10_11.3 -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl(%.loc10_11.4) -// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc10_11.3, constants.%Destroy.Op.1a2547.4 -// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc10_11.3) +// CHECK:STDOUT: %bound_method.loc10_26.2: = bound_method %input.ref, %specific_fn +// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.call: init %Optional.14b = call %bound_method.loc10_26.2(%input.ref) +// CHECK:STDOUT: %.loc10_26.1: init %Optional.14b = converted %input.ref, %U.as_type.as.ImplicitAs.impl.Convert.call +// CHECK:STDOUT: %.loc10_26.2: ref %Optional.14b = temporary_storage +// CHECK:STDOUT: %.loc10_26.3: ref %Optional.14b = temporary %.loc10_26.2, %.loc10_26.1 +// CHECK:STDOUT: %.loc10_26.4: %Optional.14b = acquire_value %.loc10_26.3 +// CHECK:STDOUT: %foo_nullable_param.call: init %empty_tuple.type = call imports.%foo_nullable_param.decl(%.loc10_26.4) +// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc10_26.3, constants.%Destroy.Op.1a2547.4 +// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc10_26.3) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc10_11.1(%self.param: ref %.a7d) { +// CHECK:STDOUT: fn @Destroy.Op.loc10_26.1(%self.param: ref %.a7d) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc10_11.2(%self.param: ref %MaybeUnformed.399) { +// CHECK:STDOUT: fn @Destroy.Op.loc10_26.2(%self.param: ref %MaybeUnformed.399) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc10_11.3(%self.param: ref %Optional.14b) { +// CHECK:STDOUT: fn @Destroy.Op.loc10_26.3(%self.param: ref %Optional.14b) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } @@ -313,8 +313,8 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_null_param.cpp_overload_set.type: type = cpp_overload_set_type @foo_null_param.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_null_param.cpp_overload_set.value: %foo_null_param.cpp_overload_set.type = cpp_overload_set_value @foo_null_param.cpp_overload_set [concrete] // CHECK:STDOUT: %Optional.type: type = generic_class_type @Optional [concrete] // CHECK:STDOUT: %Optional.generic: %Optional.type = struct_value () [concrete] // CHECK:STDOUT: %OptionalStorage.type: type = facet_type <@OptionalStorage> [concrete] @@ -343,9 +343,9 @@ fn F() { // CHECK:STDOUT: %Optional.None.type.18e: type = fn_type @Optional.None, @Optional(%OptionalStorage.facet) [concrete] // CHECK:STDOUT: %Optional.None.aa9: %Optional.None.type.18e = struct_value () [concrete] // CHECK:STDOUT: %Optional.None.specific_fn: = specific_function %Optional.None.aa9, @Optional.None(%OptionalStorage.facet) [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.Op.type.1d8f74.4: type = fn_type @Destroy.Op.loc10_41.3 [concrete] +// CHECK:STDOUT: %foo_null_param.type: type = fn_type @foo_null_param [concrete] +// CHECK:STDOUT: %foo_null_param: %foo_null_param.type = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.Op.type.1d8f74.4: type = fn_type @Destroy.Op.loc10_52.3 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.4: %Destroy.Op.type.1d8f74.4 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -358,11 +358,11 @@ fn F() { // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .foo_null_param = %foo_null_param.cpp_overload_set.value // CHECK:STDOUT: .void = constants.%Cpp.void // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] +// CHECK:STDOUT: %foo_null_param.cpp_overload_set.value: %foo_null_param.cpp_overload_set.type = cpp_overload_set_value @foo_null_param.cpp_overload_set [concrete = constants.%foo_null_param.cpp_overload_set.value] // CHECK:STDOUT: %Core.Optional: %Optional.type = import_ref Core//prelude/types/optional, Optional, loaded [concrete = constants.%Optional.generic] // CHECK:STDOUT: %Core.import_ref.e9f: @Optional.%Optional.None.type (%Optional.None.type.bdc) = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, loaded [symbolic = @Optional.%Optional.None (constants.%Optional.None.01e)] // CHECK:STDOUT: %Core.CppCompat: = import_ref Core//prelude, CppCompat, loaded @@ -379,13 +379,13 @@ fn F() { // CHECK:STDOUT: %Core.import_ref.306 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %Core.import_ref.3e3 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %OptionalStorage.impl_witness_table.110 = impl_witness_table (%Core.import_ref.509, %Core.import_ref.307, %Core.import_ref.c9a, %Core.import_ref.a90, %Core.import_ref.306, %Core.import_ref.3e3), @ptr.as.OptionalStorage.impl [concrete] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %foo_null_param.decl: %foo_null_param.type = fn_decl @foo_null_param [concrete = constants.%foo_null_param] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: -// CHECK:STDOUT: %.loc10_42.1: type = splice_block %Optional [concrete = constants.%Optional.14b] { +// CHECK:STDOUT: %.loc10_53.1: type = splice_block %Optional [concrete = constants.%Optional.14b] { // CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value constants.%ptr.00a, (constants.%OptionalStorage.impl_witness.d51) [concrete = constants.%OptionalStorage.facet] -// CHECK:STDOUT: %.loc10_42.2: %OptionalStorage.type = converted constants.%ptr.00a, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet] +// CHECK:STDOUT: %.loc10_53.2: %OptionalStorage.type = converted constants.%ptr.00a, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet] // CHECK:STDOUT: %Optional: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet) [concrete = constants.%Optional.14b] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -396,39 +396,39 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc10_3: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] +// CHECK:STDOUT: %foo_null_param.ref: %foo_null_param.cpp_overload_set.type = name_ref foo_null_param, imports.%foo_null_param.cpp_overload_set.value [concrete = constants.%foo_null_param.cpp_overload_set.value] // CHECK:STDOUT: %Core.ref: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %Optional.ref: %Optional.type = name_ref Optional, imports.%Core.Optional [concrete = constants.%Optional.generic] -// CHECK:STDOUT: %Cpp.ref.loc10_25: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %Cpp.ref.loc10_36: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %void.ref: type = name_ref void, constants.%Cpp.void [concrete = constants.%Cpp.void] // CHECK:STDOUT: %ptr: type = ptr_type %void.ref [concrete = constants.%ptr.00a] // CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value %ptr, (constants.%OptionalStorage.impl_witness.d51) [concrete = constants.%OptionalStorage.facet] -// CHECK:STDOUT: %.loc10_34: %OptionalStorage.type = converted %ptr, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet] +// CHECK:STDOUT: %.loc10_45: %OptionalStorage.type = converted %ptr, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet] // CHECK:STDOUT: %Optional: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet) [concrete = constants.%Optional.14b] -// CHECK:STDOUT: %.loc10_35: %Optional.None.type.18e = specific_constant imports.%Core.import_ref.e9f, @Optional(constants.%OptionalStorage.facet) [concrete = constants.%Optional.None.aa9] -// CHECK:STDOUT: %None.ref: %Optional.None.type.18e = name_ref None, %.loc10_35 [concrete = constants.%Optional.None.aa9] +// CHECK:STDOUT: %.loc10_46: %Optional.None.type.18e = specific_constant imports.%Core.import_ref.e9f, @Optional(constants.%OptionalStorage.facet) [concrete = constants.%Optional.None.aa9] +// CHECK:STDOUT: %None.ref: %Optional.None.type.18e = name_ref None, %.loc10_46 [concrete = constants.%Optional.None.aa9] // CHECK:STDOUT: %Optional.None.specific_fn: = specific_function %None.ref, @Optional.None(constants.%OptionalStorage.facet) [concrete = constants.%Optional.None.specific_fn] // CHECK:STDOUT: %Optional.None.call: init %Optional.14b = call %Optional.None.specific_fn() -// CHECK:STDOUT: %.loc10_41.1: ref %Optional.14b = temporary_storage -// CHECK:STDOUT: %.loc10_41.2: ref %Optional.14b = temporary %.loc10_41.1, %Optional.None.call -// CHECK:STDOUT: %.loc10_41.3: %Optional.14b = acquire_value %.loc10_41.2 -// CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl(%.loc10_41.3) -// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc10_41.2, constants.%Destroy.Op.1a2547.4 -// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc10_41.2) +// CHECK:STDOUT: %.loc10_52.1: ref %Optional.14b = temporary_storage +// CHECK:STDOUT: %.loc10_52.2: ref %Optional.14b = temporary %.loc10_52.1, %Optional.None.call +// CHECK:STDOUT: %.loc10_52.3: %Optional.14b = acquire_value %.loc10_52.2 +// CHECK:STDOUT: %foo_null_param.call: init %empty_tuple.type = call imports.%foo_null_param.decl(%.loc10_52.3) +// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc10_52.2, constants.%Destroy.Op.1a2547.4 +// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc10_52.2) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc10_41.1(%self.param: ref %.a7d) { +// CHECK:STDOUT: fn @Destroy.Op.loc10_52.1(%self.param: ref %.a7d) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc10_41.2(%self.param: ref %MaybeUnformed.399) { +// CHECK:STDOUT: fn @Destroy.Op.loc10_52.2(%self.param: ref %MaybeUnformed.399) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc10_41.3(%self.param: ref %Optional.14b) { +// CHECK:STDOUT: fn @Destroy.Op.loc10_52.3(%self.param: ref %Optional.14b) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } @@ -459,11 +459,11 @@ fn F() { // CHECK:STDOUT: %Optional.14b: type = class_type @Optional, @Optional(%OptionalStorage.facet) [concrete] // CHECK:STDOUT: %pattern_type.65e: type = pattern_type %Optional.14b [concrete] // CHECK:STDOUT: %output.patt: %pattern_type.65e = value_binding_pattern output [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.type: type = cpp_overload_set_type @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete] -// CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] -// CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.Op.type.1d8f74.4: type = fn_type @Destroy.Op.loc10_57.3 [concrete] +// CHECK:STDOUT: %foo_nullable_return.cpp_overload_set.type: type = cpp_overload_set_type @foo_nullable_return.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_nullable_return.cpp_overload_set.value: %foo_nullable_return.cpp_overload_set.type = cpp_overload_set_value @foo_nullable_return.cpp_overload_set [concrete] +// CHECK:STDOUT: %foo_nullable_return.type: type = fn_type @foo_nullable_return [concrete] +// CHECK:STDOUT: %foo_nullable_return: %foo_nullable_return.type = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.Op.type.1d8f74.4: type = fn_type @Destroy.Op.loc10_73.3 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.4: %Destroy.Op.type.1d8f74.4 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -477,7 +477,7 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { // CHECK:STDOUT: .void = constants.%Cpp.void -// CHECK:STDOUT: .foo = %foo.cpp_overload_set.value +// CHECK:STDOUT: .foo_nullable_return = %foo_nullable_return.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: %Core.Optional: %Optional.type = import_ref Core//prelude/types/optional, Optional, loaded [concrete = constants.%Optional.generic] @@ -495,8 +495,8 @@ fn F() { // CHECK:STDOUT: %Core.import_ref.306 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %Core.import_ref.3e3 = import_ref Core//prelude/types/optional, loc{{\d+_\d+}}, unloaded // CHECK:STDOUT: %OptionalStorage.impl_witness_table.110 = impl_witness_table (%Core.import_ref.509, %Core.import_ref.105, %Core.import_ref.c9a, %Core.import_ref.a90, %Core.import_ref.306, %Core.import_ref.3e3), @ptr.as.OptionalStorage.impl [concrete] -// CHECK:STDOUT: %foo.cpp_overload_set.value: %foo.cpp_overload_set.type = cpp_overload_set_value @foo.cpp_overload_set [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.decl: %foo.type = fn_decl @foo [concrete = constants.%foo] { +// CHECK:STDOUT: %foo_nullable_return.cpp_overload_set.value: %foo_nullable_return.cpp_overload_set.type = cpp_overload_set_value @foo_nullable_return.cpp_overload_set [concrete = constants.%foo_nullable_return.cpp_overload_set.value] +// CHECK:STDOUT: %foo_nullable_return.decl: %foo_nullable_return.type = fn_decl @foo_nullable_return [concrete = constants.%foo_nullable_return] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: %OptionalStorage.facet: %OptionalStorage.type = facet_value constants.%ptr.00a, (constants.%OptionalStorage.impl_witness.d51) [concrete = constants.%OptionalStorage.facet] @@ -510,11 +510,11 @@ fn F() { // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc10_49: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %foo.ref: %foo.cpp_overload_set.type = name_ref foo, imports.%foo.cpp_overload_set.value [concrete = constants.%foo.cpp_overload_set.value] -// CHECK:STDOUT: %foo.call: init %Optional.14b = call imports.%foo.decl() -// CHECK:STDOUT: %.loc10_57.1: ref %Optional.14b = temporary_storage -// CHECK:STDOUT: %.loc10_57.2: ref %Optional.14b = temporary %.loc10_57.1, %foo.call -// CHECK:STDOUT: %.loc10_57.3: %Optional.14b = acquire_value %.loc10_57.2 +// CHECK:STDOUT: %foo_nullable_return.ref: %foo_nullable_return.cpp_overload_set.type = name_ref foo_nullable_return, imports.%foo_nullable_return.cpp_overload_set.value [concrete = constants.%foo_nullable_return.cpp_overload_set.value] +// CHECK:STDOUT: %foo_nullable_return.call: init %Optional.14b = call imports.%foo_nullable_return.decl() +// CHECK:STDOUT: %.loc10_73.1: ref %Optional.14b = temporary_storage +// CHECK:STDOUT: %.loc10_73.2: ref %Optional.14b = temporary %.loc10_73.1, %foo_nullable_return.call +// CHECK:STDOUT: %.loc10_73.3: %Optional.14b = acquire_value %.loc10_73.2 // CHECK:STDOUT: %.loc10_45.1: type = splice_block %Optional [concrete = constants.%Optional.14b] { // CHECK:STDOUT: %Core.ref: = name_ref Core, imports.%Core [concrete = imports.%Core] // CHECK:STDOUT: %Optional.ref: %Optional.type = name_ref Optional, imports.%Core.Optional [concrete = constants.%Optional.generic] @@ -525,26 +525,26 @@ fn F() { // CHECK:STDOUT: %.loc10_45.2: %OptionalStorage.type = converted %ptr, %OptionalStorage.facet [concrete = constants.%OptionalStorage.facet] // CHECK:STDOUT: %Optional: type = class_type @Optional, @Optional(constants.%OptionalStorage.facet) [concrete = constants.%Optional.14b] // CHECK:STDOUT: } -// CHECK:STDOUT: %output: %Optional.14b = wrapper_binding output, %.loc10_57.3 +// CHECK:STDOUT: %output: %Optional.14b = wrapper_binding output, %.loc10_73.3 // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %output.patt: %pattern_type.65e = value_binding_pattern output [concrete = constants.%output.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc10_57.2, constants.%Destroy.Op.1a2547.4 -// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc10_57.2) +// CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc10_73.2, constants.%Destroy.Op.1a2547.4 +// CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc10_73.2) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc10_57.1(%self.param: ref %.a7d) { +// CHECK:STDOUT: fn @Destroy.Op.loc10_73.1(%self.param: ref %.a7d) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc10_57.2(%self.param: ref %MaybeUnformed.399) { +// CHECK:STDOUT: fn @Destroy.Op.loc10_73.2(%self.param: ref %MaybeUnformed.399) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc10_57.3(%self.param: ref %Optional.14b) { +// CHECK:STDOUT: fn @Destroy.Op.loc10_73.3(%self.param: ref %Optional.14b) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } @@ -559,14 +559,14 @@ fn F() { // CHECK:STDOUT: %pattern_type.c1e: type = pattern_type %ptr.6f9 [concrete] // CHECK:STDOUT: %non_nullable_pointer.patt: %pattern_type.c1e = ref_binding_pattern non_nullable_pointer [concrete] // CHECK:STDOUT: %non_nullable_pointer.var_patt: %pattern_type.c1e = var_pattern %non_nullable_pointer.patt [concrete] -// CHECK:STDOUT: %Return.cpp_overload_set.type: type = cpp_overload_set_type @Return.cpp_overload_set [concrete] -// CHECK:STDOUT: %Return.cpp_overload_set.value: %Return.cpp_overload_set.type = cpp_overload_set_value @Return.cpp_overload_set [concrete] -// CHECK:STDOUT: %Return.type: type = fn_type @Return [concrete] -// CHECK:STDOUT: %Return: %Return.type = struct_value () [concrete] -// CHECK:STDOUT: %Invoke.cpp_overload_set.type: type = cpp_overload_set_type @Invoke.cpp_overload_set [concrete] -// CHECK:STDOUT: %Invoke.cpp_overload_set.value: %Invoke.cpp_overload_set.type = cpp_overload_set_value @Invoke.cpp_overload_set [concrete] -// CHECK:STDOUT: %Invoke.type: type = fn_type @Invoke [concrete] -// CHECK:STDOUT: %Invoke: %Invoke.type = struct_value () [concrete] +// CHECK:STDOUT: %Return_pointer.cpp_overload_set.type: type = cpp_overload_set_type @Return_pointer.cpp_overload_set [concrete] +// CHECK:STDOUT: %Return_pointer.cpp_overload_set.value: %Return_pointer.cpp_overload_set.type = cpp_overload_set_value @Return_pointer.cpp_overload_set [concrete] +// CHECK:STDOUT: %Return_pointer.type: type = fn_type @Return_pointer [concrete] +// CHECK:STDOUT: %Return_pointer: %Return_pointer.type = struct_value () [concrete] +// CHECK:STDOUT: %Invoke_pointer.cpp_overload_set.type: type = cpp_overload_set_type @Invoke_pointer.cpp_overload_set [concrete] +// CHECK:STDOUT: %Invoke_pointer.cpp_overload_set.value: %Invoke_pointer.cpp_overload_set.type = cpp_overload_set_value @Invoke_pointer.cpp_overload_set [concrete] +// CHECK:STDOUT: %Invoke_pointer.type: type = fn_type @Invoke_pointer [concrete] +// CHECK:STDOUT: %Invoke_pointer: %Invoke_pointer.type = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -574,18 +574,18 @@ fn F() { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { // CHECK:STDOUT: .void = constants.%Cpp.void -// CHECK:STDOUT: .Return = %Return.cpp_overload_set.value -// CHECK:STDOUT: .Invoke = %Invoke.cpp_overload_set.value +// CHECK:STDOUT: .Return_pointer = %Return_pointer.cpp_overload_set.value +// CHECK:STDOUT: .Invoke_pointer = %Invoke_pointer.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %Return.cpp_overload_set.value: %Return.cpp_overload_set.type = cpp_overload_set_value @Return.cpp_overload_set [concrete = constants.%Return.cpp_overload_set.value] -// CHECK:STDOUT: %Return.decl: %Return.type = fn_decl @Return [concrete = constants.%Return] { +// CHECK:STDOUT: %Return_pointer.cpp_overload_set.value: %Return_pointer.cpp_overload_set.type = cpp_overload_set_value @Return_pointer.cpp_overload_set [concrete = constants.%Return_pointer.cpp_overload_set.value] +// CHECK:STDOUT: %Return_pointer.decl: %Return_pointer.type = fn_decl @Return_pointer [concrete = constants.%Return_pointer] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } -// CHECK:STDOUT: %Invoke.cpp_overload_set.value: %Invoke.cpp_overload_set.type = cpp_overload_set_value @Invoke.cpp_overload_set [concrete = constants.%Invoke.cpp_overload_set.value] -// CHECK:STDOUT: %Invoke.decl: %Invoke.type = fn_decl @Invoke [concrete = constants.%Invoke] { +// CHECK:STDOUT: %Invoke_pointer.cpp_overload_set.value: %Invoke_pointer.cpp_overload_set.type = cpp_overload_set_value @Invoke_pointer.cpp_overload_set [concrete = constants.%Invoke_pointer.cpp_overload_set.value] +// CHECK:STDOUT: %Invoke_pointer.decl: %Invoke_pointer.type = fn_decl @Invoke_pointer [concrete = constants.%Invoke_pointer] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -596,9 +596,9 @@ fn F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %non_nullable_pointer.var: ref %ptr.6f9 = var_storage %non_nullable_pointer.var_patt // CHECK:STDOUT: %Cpp.ref.loc11_42: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Return.ref: %Return.cpp_overload_set.type = name_ref Return, imports.%Return.cpp_overload_set.value [concrete = constants.%Return.cpp_overload_set.value] -// CHECK:STDOUT: %Return.call: init %ptr.6f9 = call imports.%Return.decl() -// CHECK:STDOUT: assign %non_nullable_pointer.var, %Return.call +// CHECK:STDOUT: %Return_pointer.ref: %Return_pointer.cpp_overload_set.type = name_ref Return_pointer, imports.%Return_pointer.cpp_overload_set.value [concrete = constants.%Return_pointer.cpp_overload_set.value] +// CHECK:STDOUT: %Return_pointer.call: init %ptr.6f9 = call imports.%Return_pointer.decl() +// CHECK:STDOUT: assign %non_nullable_pointer.var, %Return_pointer.call // CHECK:STDOUT: %.loc11: type = splice_block %ptr.loc11_38 [concrete = constants.%ptr.6f9] { // CHECK:STDOUT: %Cpp.ref.loc11_29: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %void.ref: type = name_ref void, constants.%Cpp.void [concrete = constants.%Cpp.void] @@ -611,10 +611,10 @@ fn F() { // CHECK:STDOUT: %non_nullable_pointer.var_patt: %pattern_type.c1e = var_pattern %non_nullable_pointer.patt [concrete = constants.%non_nullable_pointer.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc12: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Invoke.ref: %Invoke.cpp_overload_set.type = name_ref Invoke, imports.%Invoke.cpp_overload_set.value [concrete = constants.%Invoke.cpp_overload_set.value] +// CHECK:STDOUT: %Invoke_pointer.ref: %Invoke_pointer.cpp_overload_set.type = name_ref Invoke_pointer, imports.%Invoke_pointer.cpp_overload_set.value [concrete = constants.%Invoke_pointer.cpp_overload_set.value] // CHECK:STDOUT: %non_nullable_pointer.ref: ref %ptr.6f9 = name_ref non_nullable_pointer, %non_nullable_pointer // CHECK:STDOUT: %.loc12: %ptr.6f9 = acquire_value %non_nullable_pointer.ref -// CHECK:STDOUT: %Invoke.call: init %empty_tuple.type = call imports.%Invoke.decl(%.loc12) +// CHECK:STDOUT: %Invoke_pointer.call: init %empty_tuple.type = call imports.%Invoke_pointer.decl(%.loc12) // CHECK:STDOUT: %Destroy.Op.bound: = bound_method %non_nullable_pointer.var, constants.%Destroy.Op // CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%non_nullable_pointer.var) // CHECK:STDOUT: @@ -632,14 +632,14 @@ fn F() { // CHECK:STDOUT: %pattern_type.c83: type = pattern_type %ptr [concrete] // CHECK:STDOUT: %const_void_pointer.patt: %pattern_type.c83 = ref_binding_pattern const_void_pointer [concrete] // CHECK:STDOUT: %const_void_pointer.var_patt: %pattern_type.c83 = var_pattern %const_void_pointer.patt [concrete] -// CHECK:STDOUT: %Return.cpp_overload_set.type: type = cpp_overload_set_type @Return.cpp_overload_set [concrete] -// CHECK:STDOUT: %Return.cpp_overload_set.value: %Return.cpp_overload_set.type = cpp_overload_set_value @Return.cpp_overload_set [concrete] -// CHECK:STDOUT: %Return.type: type = fn_type @Return [concrete] -// CHECK:STDOUT: %Return: %Return.type = struct_value () [concrete] -// CHECK:STDOUT: %Invoke.cpp_overload_set.type: type = cpp_overload_set_type @Invoke.cpp_overload_set [concrete] -// CHECK:STDOUT: %Invoke.cpp_overload_set.value: %Invoke.cpp_overload_set.type = cpp_overload_set_value @Invoke.cpp_overload_set [concrete] -// CHECK:STDOUT: %Invoke.type: type = fn_type @Invoke [concrete] -// CHECK:STDOUT: %Invoke: %Invoke.type = struct_value () [concrete] +// CHECK:STDOUT: %Return_const.cpp_overload_set.type: type = cpp_overload_set_type @Return_const.cpp_overload_set [concrete] +// CHECK:STDOUT: %Return_const.cpp_overload_set.value: %Return_const.cpp_overload_set.type = cpp_overload_set_value @Return_const.cpp_overload_set [concrete] +// CHECK:STDOUT: %Return_const.type: type = fn_type @Return_const [concrete] +// CHECK:STDOUT: %Return_const: %Return_const.type = struct_value () [concrete] +// CHECK:STDOUT: %Invoke_const.cpp_overload_set.type: type = cpp_overload_set_type @Invoke_const.cpp_overload_set [concrete] +// CHECK:STDOUT: %Invoke_const.cpp_overload_set.value: %Invoke_const.cpp_overload_set.type = cpp_overload_set_value @Invoke_const.cpp_overload_set [concrete] +// CHECK:STDOUT: %Invoke_const.type: type = fn_type @Invoke_const [concrete] +// CHECK:STDOUT: %Invoke_const: %Invoke_const.type = struct_value () [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -647,18 +647,18 @@ fn F() { // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { // CHECK:STDOUT: .void = constants.%Cpp.void -// CHECK:STDOUT: .Return = %Return.cpp_overload_set.value -// CHECK:STDOUT: .Invoke = %Invoke.cpp_overload_set.value +// CHECK:STDOUT: .Return_const = %Return_const.cpp_overload_set.value +// CHECK:STDOUT: .Invoke_const = %Invoke_const.cpp_overload_set.value // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %Return.cpp_overload_set.value: %Return.cpp_overload_set.type = cpp_overload_set_value @Return.cpp_overload_set [concrete = constants.%Return.cpp_overload_set.value] -// CHECK:STDOUT: %Return.decl: %Return.type = fn_decl @Return [concrete = constants.%Return] { +// CHECK:STDOUT: %Return_const.cpp_overload_set.value: %Return_const.cpp_overload_set.type = cpp_overload_set_value @Return_const.cpp_overload_set [concrete = constants.%Return_const.cpp_overload_set.value] +// CHECK:STDOUT: %Return_const.decl: %Return_const.type = fn_decl @Return_const [concrete = constants.%Return_const] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } -// CHECK:STDOUT: %Invoke.cpp_overload_set.value: %Invoke.cpp_overload_set.type = cpp_overload_set_value @Invoke.cpp_overload_set [concrete = constants.%Invoke.cpp_overload_set.value] -// CHECK:STDOUT: %Invoke.decl: %Invoke.type = fn_decl @Invoke [concrete = constants.%Invoke] { +// CHECK:STDOUT: %Invoke_const.cpp_overload_set.value: %Invoke_const.cpp_overload_set.type = cpp_overload_set_value @Invoke_const.cpp_overload_set [concrete = constants.%Invoke_const.cpp_overload_set.value] +// CHECK:STDOUT: %Invoke_const.decl: %Invoke_const.type = fn_decl @Invoke_const [concrete = constants.%Invoke_const] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -669,9 +669,9 @@ fn F() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %const_void_pointer.var: ref %ptr = var_storage %const_void_pointer.var_patt // CHECK:STDOUT: %Cpp.ref.loc11_45: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Return.ref: %Return.cpp_overload_set.type = name_ref Return, imports.%Return.cpp_overload_set.value [concrete = constants.%Return.cpp_overload_set.value] -// CHECK:STDOUT: %Return.call: init %ptr = call imports.%Return.decl() -// CHECK:STDOUT: assign %const_void_pointer.var, %Return.call +// CHECK:STDOUT: %Return_const.ref: %Return_const.cpp_overload_set.type = name_ref Return_const, imports.%Return_const.cpp_overload_set.value [concrete = constants.%Return_const.cpp_overload_set.value] +// CHECK:STDOUT: %Return_const.call: init %ptr = call imports.%Return_const.decl() +// CHECK:STDOUT: assign %const_void_pointer.var, %Return_const.call // CHECK:STDOUT: %.loc11: type = splice_block %ptr [concrete = constants.%ptr] { // CHECK:STDOUT: %Cpp.ref.loc11_33: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %void.ref: type = name_ref void, constants.%Cpp.void [concrete = constants.%Cpp.void] @@ -684,10 +684,10 @@ fn F() { // CHECK:STDOUT: %const_void_pointer.var_patt: %pattern_type.c83 = var_pattern %const_void_pointer.patt [concrete = constants.%const_void_pointer.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp.ref.loc12: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Invoke.ref: %Invoke.cpp_overload_set.type = name_ref Invoke, imports.%Invoke.cpp_overload_set.value [concrete = constants.%Invoke.cpp_overload_set.value] +// CHECK:STDOUT: %Invoke_const.ref: %Invoke_const.cpp_overload_set.type = name_ref Invoke_const, imports.%Invoke_const.cpp_overload_set.value [concrete = constants.%Invoke_const.cpp_overload_set.value] // CHECK:STDOUT: %const_void_pointer.ref: ref %ptr = name_ref const_void_pointer, %const_void_pointer // CHECK:STDOUT: %.loc12: %ptr = acquire_value %const_void_pointer.ref -// CHECK:STDOUT: %Invoke.call: init %empty_tuple.type = call imports.%Invoke.decl(%.loc12) +// CHECK:STDOUT: %Invoke_const.call: init %empty_tuple.type = call imports.%Invoke_const.decl(%.loc12) // CHECK:STDOUT: %Destroy.Op.bound: = bound_method %const_void_pointer.var, constants.%Destroy.Op // CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%const_void_pointer.var) // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/macros/macros.carbon b/toolchain/check/testdata/interop/cpp/macros/macros.carbon index e5867b9b7cde..adf23c07f387 100644 --- a/toolchain/check/testdata/interop/cpp/macros/macros.carbon +++ b/toolchain/check/testdata/interop/cpp/macros/macros.carbon @@ -650,8 +650,8 @@ fn F() { library "[[@TEST_NAME]]"; import Cpp inline ''' - enum A { a = 1, b = 2 }; - #define M_A_NO_SCOPE a + enum A_NoScope { a_no_scope = 1, b_no_scope = 2 }; + #define M_A_NO_SCOPE a_no_scope '''; fn F() { @@ -691,8 +691,8 @@ let p: const i32* = &Cpp.N; library "[[@TEST_NAME]]"; import Cpp inline ''' - constexpr int a = 1; - #define M_CONSTEXPR_NO_SCOPE a + constexpr int a_no_scope = 1; + #define M_CONSTEXPR_NO_SCOPE a_no_scope '''; fn F() { @@ -892,8 +892,8 @@ fn F() { library "[[@TEST_NAME]]"; import Cpp inline ''' -int v = 1; -#define m &v +int v_ptr = 1; +#define m &v_ptr '''; fn F() { @@ -905,14 +905,14 @@ fn F() { library "[[@TEST_NAME]]"; import Cpp inline ''' -struct B { +struct SubB { int c; }; -struct A { - B b; +struct SubA { + SubB b; }; -A a; -#define m a.b.c +SubA a_obj; +#define m a_obj.b.c '''; fn F() { @@ -956,11 +956,11 @@ fn F() { library "[[@TEST_NAME]]"; import Cpp inline ''' -struct A { +struct BaseA { int n; }; -struct B : A {} b; -#define m b.n +struct DerivedB : BaseA {} b_obj; +#define m b_obj.n '''; fn F() { @@ -2182,15 +2182,15 @@ let _: C(1) = {} as C(Cpp.COUNT); // CHECK:STDOUT: constants { // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] -// CHECK:STDOUT: %A: type = class_type @A [concrete] -// CHECK:STDOUT: %pattern_type.3fa: type = pattern_type %A [concrete] -// CHECK:STDOUT: %a.patt: %pattern_type.3fa = ref_binding_pattern a [concrete] -// CHECK:STDOUT: %a.var_patt: %pattern_type.3fa = var_pattern %a.patt [concrete] -// CHECK:STDOUT: %B: type = class_type @B [concrete] -// CHECK:STDOUT: %A.elem: type = unbound_element_type %A, %B [concrete] -// CHECK:STDOUT: %B.elem: type = unbound_element_type %B, %i32 [concrete] -// CHECK:STDOUT: %.401: ref %B = class_element_access imports.%a.var, element0 [concrete] -// CHECK:STDOUT: %.8f5: ref %i32 = class_element_access %.401, element0 [concrete] +// CHECK:STDOUT: %SubA: type = class_type @SubA [concrete] +// CHECK:STDOUT: %pattern_type.0f5: type = pattern_type %SubA [concrete] +// CHECK:STDOUT: %a_obj.patt: %pattern_type.0f5 = ref_binding_pattern a_obj [concrete] +// CHECK:STDOUT: %a_obj.var_patt: %pattern_type.0f5 = var_pattern %a_obj.patt [concrete] +// CHECK:STDOUT: %SubB: type = class_type @SubB [concrete] +// CHECK:STDOUT: %SubA.elem: type = unbound_element_type %SubA, %SubB [concrete] +// CHECK:STDOUT: %SubB.elem: type = unbound_element_type %SubB, %i32 [concrete] +// CHECK:STDOUT: %.d13: ref %SubB = class_element_access imports.%a_obj.var, element0 [concrete] +// CHECK:STDOUT: %.010: ref %i32 = class_element_access %.d13, element0 [concrete] // CHECK:STDOUT: %int_2.ecc: Core.IntLiteral = int_value 2 [concrete] // CHECK:STDOUT: %ImplicitAs.type.914: type = facet_type <@ImplicitAs, @ImplicitAs(%i32)> [concrete] // CHECK:STDOUT: %To: Core.IntLiteral = symbolic_binding To, 0 [symbolic] @@ -2210,12 +2210,12 @@ let _: C(1) = {} as C(Cpp.COUNT); // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .m = constants.%.8f5 +// CHECK:STDOUT: .m = constants.%.010 // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %a.patt: %pattern_type.3fa = ref_binding_pattern a [concrete = constants.%a.patt] -// CHECK:STDOUT: %a.var_patt: %pattern_type.3fa = var_pattern %a.patt [concrete = constants.%a.var_patt] -// CHECK:STDOUT: %a.var: ref %A = var_storage %a.var_patt [concrete] +// CHECK:STDOUT: %a_obj.patt: %pattern_type.0f5 = ref_binding_pattern a_obj [concrete = constants.%a_obj.patt] +// CHECK:STDOUT: %a_obj.var_patt: %pattern_type.0f5 = var_pattern %a_obj.patt [concrete = constants.%a_obj.var_patt] +// CHECK:STDOUT: %a_obj.var: ref %SubA = var_storage %a_obj.var_patt [concrete] // CHECK:STDOUT: %Core.import_ref.edf: @Core.IntLiteral.as.ImplicitAs.impl.0e9.%Core.IntLiteral.as.ImplicitAs.impl.Convert.type (%Core.IntLiteral.as.ImplicitAs.impl.Convert.type.e74) = import_ref Core//prelude/types/int, loc{{\d+_\d+}}, loaded [symbolic = @Core.IntLiteral.as.ImplicitAs.impl.0e9.%Core.IntLiteral.as.ImplicitAs.impl.Convert (constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.845)] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.1aa = impl_witness_table (%Core.import_ref.edf), @Core.IntLiteral.as.ImplicitAs.impl.0e9 [concrete] // CHECK:STDOUT: } @@ -2224,11 +2224,11 @@ let _: C(1) = {} as C(Cpp.COUNT); // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: -// CHECK:STDOUT: %b.ref: %A.elem = name_ref b, @A.%.1 [concrete = @A.%.1] -// CHECK:STDOUT: %.loc17_6.1: ref %B = class_element_access imports.%a.var, element0 [concrete = constants.%.401] -// CHECK:STDOUT: %c.ref: %B.elem = name_ref c, @B.%.1 [concrete = @B.%.1] -// CHECK:STDOUT: %.loc17_6.2: ref %i32 = class_element_access %.loc17_6.1, element0 [concrete = constants.%.8f5] -// CHECK:STDOUT: %m.ref: ref %i32 = name_ref m, constants.%.8f5 [concrete = constants.%.8f5] +// CHECK:STDOUT: %b.ref: %SubA.elem = name_ref b, @SubA.%.1 [concrete = @SubA.%.1] +// CHECK:STDOUT: %.loc17_6.1: ref %SubB = class_element_access imports.%a_obj.var, element0 [concrete = constants.%.d13] +// CHECK:STDOUT: %c.ref: %SubB.elem = name_ref c, @SubB.%.1 [concrete = @SubB.%.1] +// CHECK:STDOUT: %.loc17_6.2: ref %i32 = class_element_access %.loc17_6.1, element0 [concrete = constants.%.010] +// CHECK:STDOUT: %m.ref: ref %i32 = name_ref m, constants.%.010 [concrete = constants.%.010] // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc] // CHECK:STDOUT: %impl.elem0: %.b7a = impl_witness_access constants.%ImplicitAs.impl_witness.a2a, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc17_9.1: = bound_method %int_2, %impl.elem0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound] diff --git a/toolchain/check/testdata/interop/cpp/namespace/roundtrip.carbon b/toolchain/check/testdata/interop/cpp/namespace/roundtrip.carbon index 1bd9dfab82e6..ff4841fd04ec 100644 --- a/toolchain/check/testdata/interop/cpp/namespace/roundtrip.carbon +++ b/toolchain/check/testdata/interop/cpp/namespace/roundtrip.carbon @@ -84,17 +84,17 @@ import Cpp; alias r#Cpp = Cpp; inline Cpp ''' -void F(); +void FRaw(); -void G() { +void GRaw() { // CHECK:STDERR: fail_carbon_raw_cpp.carbon:[[@LINE+8]]:16: error: semantics TODO: `interop with translation unit decl` [SemanticsTodo] - // CHECK:STDERR: Carbon::Cpp::F(); + // CHECK:STDERR: Carbon::Cpp::FRaw(); // CHECK:STDERR: ^ // CHECK:STDERR: // CHECK:STDERR: fail_carbon_raw_cpp.carbon:[[@LINE+4]]:11: error: no member named 'Cpp' in namespace 'Carbon' [CppInteropParseError] - // CHECK:STDERR: 19 | Carbon::Cpp::F(); + // CHECK:STDERR: 19 | Carbon::Cpp::FRaw(); // CHECK:STDERR: | ~~~~~~~~^ // CHECK:STDERR: - Carbon::Cpp::F(); + Carbon::Cpp::FRaw(); } '''; diff --git a/toolchain/check/testdata/interop/cpp/operators/operators.carbon b/toolchain/check/testdata/interop/cpp/operators/operators.carbon index c660b3ea6e9e..0167573765c7 100644 --- a/toolchain/check/testdata/interop/cpp/operators/operators.carbon +++ b/toolchain/check/testdata/interop/cpp/operators/operators.carbon @@ -117,47 +117,47 @@ fn F() { // --- binary_operators.h -class C { +class BinaryC { public: void operator=(int); int operator[](int); }; // Arithmetic. -auto operator+(C lhs, C rhs) -> C; -auto operator-(C lhs, C rhs) -> C; -auto operator*(C lhs, C rhs) -> C; -auto operator/(C lhs, C rhs) -> C; -auto operator%(C lhs, C rhs) -> C; +auto operator+(BinaryC lhs, BinaryC rhs) -> BinaryC; +auto operator-(BinaryC lhs, BinaryC rhs) -> BinaryC; +auto operator*(BinaryC lhs, BinaryC rhs) -> BinaryC; +auto operator/(BinaryC lhs, BinaryC rhs) -> BinaryC; +auto operator%(BinaryC lhs, BinaryC rhs) -> BinaryC; // Bitwise. -auto operator&(C lhs, C rhs) -> C; -auto operator|(C lhs, C rhs) -> C; -auto operator^(C lhs, C rhs) -> C; -auto operator<<(C lhs, int num_bits) -> C; -auto operator>>(C lhs, int num_bits) -> C; +auto operator&(BinaryC lhs, BinaryC rhs) -> BinaryC; +auto operator|(BinaryC lhs, BinaryC rhs) -> BinaryC; +auto operator^(BinaryC lhs, BinaryC rhs) -> BinaryC; +auto operator<<(BinaryC lhs, int num_bits) -> BinaryC; +auto operator>>(BinaryC lhs, int num_bits) -> BinaryC; // Compound Assignment Arithmetic. -auto operator+=(C& lhs, C rhs) -> C&; -auto operator-=(C& lhs, C rhs) -> C&; -auto operator*=(C& lhs, C rhs) -> C&; -auto operator/=(C& lhs, C rhs) -> C&; -auto operator%=(C& lhs, C rhs) -> C&; +auto operator+=(BinaryC& lhs, BinaryC rhs) -> BinaryC&; +auto operator-=(BinaryC& lhs, BinaryC rhs) -> BinaryC&; +auto operator*=(BinaryC& lhs, BinaryC rhs) -> BinaryC&; +auto operator/=(BinaryC& lhs, BinaryC rhs) -> BinaryC&; +auto operator%=(BinaryC& lhs, BinaryC rhs) -> BinaryC&; // Compound Assignment Bitwuse. -auto operator&=(C& lhs, C rhs) -> C&; -auto operator|=(C& lhs, C rhs) -> C&; -auto operator^=(C& lhs, C rhs) -> C&; -auto operator<<=(C& lhs, int num_bites) -> C&; -auto operator>>=(C& lhs, int num_bites) -> C&; +auto operator&=(BinaryC& lhs, BinaryC rhs) -> BinaryC&; +auto operator|=(BinaryC& lhs, BinaryC rhs) -> BinaryC&; +auto operator^=(BinaryC& lhs, BinaryC rhs) -> BinaryC&; +auto operator<<=(BinaryC& lhs, int num_bites) -> BinaryC&; +auto operator>>=(BinaryC& lhs, int num_bites) -> BinaryC&; // Relational. -auto operator==(C lhs, C rhs) -> bool; -auto operator!=(C lhs, C rhs) -> bool; -auto operator<(C lhs, C rhs) -> bool; -auto operator>(C lhs, C rhs) -> bool; -auto operator<=(C lhs, C rhs) -> bool; -auto operator>=(C lhs, C rhs) -> bool; +auto operator==(BinaryC lhs, BinaryC rhs) -> bool; +auto operator!=(BinaryC lhs, BinaryC rhs) -> bool; +auto operator<(BinaryC lhs, BinaryC rhs) -> bool; +auto operator>(BinaryC lhs, BinaryC rhs) -> bool; +auto operator<=(BinaryC lhs, BinaryC rhs) -> bool; +auto operator>=(BinaryC lhs, BinaryC rhs) -> bool; // --- import_binary_operators.carbon @@ -167,22 +167,22 @@ import Cpp library "binary_operators.h"; fn F() { //@dump-sem-ir-begin - var c1: Cpp.C = Cpp.C.C(); - var c2: Cpp.C = Cpp.C.C(); + var c1: Cpp.BinaryC = Cpp.BinaryC.BinaryC(); + var c2: Cpp.BinaryC = Cpp.BinaryC.BinaryC(); // Arithmetic. - let unused addition: Cpp.C = c1 + c2; - let unused subtraction: Cpp.C = c1 - c2; - let unused multiplication: Cpp.C = c1 * c2; - let unused division: Cpp.C = c1 / c2; - let unused modulo: Cpp.C = c1 % c2; + let unused addition: Cpp.BinaryC = c1 + c2; + let unused subtraction: Cpp.BinaryC = c1 - c2; + let unused multiplication: Cpp.BinaryC = c1 * c2; + let unused division: Cpp.BinaryC = c1 / c2; + let unused modulo: Cpp.BinaryC = c1 % c2; // Bitwise. - let unused bitwise_and: Cpp.C = c1 & c2; - let unused bitwise_or: Cpp.C = c1 | c2; - let unused bitwise_xor: Cpp.C = c1 ^ c2; - let unused left_shift: Cpp.C = c1 << 3; - let unused right_shift: Cpp.C = c1 >> 5; + let unused bitwise_and: Cpp.BinaryC = c1 & c2; + let unused bitwise_or: Cpp.BinaryC = c1 | c2; + let unused bitwise_xor: Cpp.BinaryC = c1 ^ c2; + let unused left_shift: Cpp.BinaryC = c1 << 3; + let unused right_shift: Cpp.BinaryC = c1 >> 5; // Compound assignment, arithmetic. c1 += c2; @@ -218,13 +218,13 @@ library "[[@TEST_NAME]]"; import Cpp library "binary_operators.h"; fn F() { - var c: Cpp.C = {}; + var c: Cpp.BinaryC = {}; // Simple assignment. - // CHECK:STDERR: fail_todo_import_assignment.carbon:[[@LINE+7]]:3: error: cannot implicitly convert expression of type `Core.IntLiteral` to `Cpp.C` [ConversionFailure] + // CHECK:STDERR: fail_todo_import_assignment.carbon:[[@LINE+7]]:3: error: cannot implicitly convert expression of type `Core.IntLiteral` to `Cpp.BinaryC` [ConversionFailure] // CHECK:STDERR: c = 42; // CHECK:STDERR: ^~~~~~ - // CHECK:STDERR: fail_todo_import_assignment.carbon:[[@LINE+4]]:3: note: type `Core.IntLiteral` does not implement interface `Core.ImplicitAs(Cpp.C)` [MissingImplInMemberAccessInContext] + // CHECK:STDERR: fail_todo_import_assignment.carbon:[[@LINE+4]]:3: note: type `Core.IntLiteral` does not implement interface `Core.ImplicitAs(Cpp.BinaryC)` [MissingImplInMemberAccessInContext] // CHECK:STDERR: c = 42; // CHECK:STDERR: ^~~~~~ // CHECK:STDERR: @@ -239,11 +239,11 @@ import Cpp library "binary_operators.h"; fn F() { //@dump-sem-ir-begin - let c1: Cpp.C = Cpp.C.C(); - let c2: Cpp.C = Cpp.C.C(); - let c3: Cpp.C = c1 + c2; - let c4: Cpp.C = c1 + c3; - let unused c5: Cpp.C = c4 + c3; + let c1: Cpp.BinaryC = Cpp.BinaryC.BinaryC(); + let c2: Cpp.BinaryC = Cpp.BinaryC.BinaryC(); + let c3: Cpp.BinaryC = c1 + c2; + let c4: Cpp.BinaryC = c1 + c3; + let unused c5: Cpp.BinaryC = c4 + c3; //@dump-sem-ir-end } @@ -254,18 +254,18 @@ library "[[@TEST_NAME]]"; import Cpp library "binary_operators.h"; fn F() { - let c1: Cpp.C = Cpp.C.C(); + let c1: Cpp.BinaryC = Cpp.BinaryC.BinaryC(); // TODO: Include a list of non-viable candidate operators with this diagnostic. - // CHECK:STDERR: fail_call_with_wrong_type.carbon:[[@LINE+4]]:26: error: cannot access member of interface `Core.AddWith(Core.IntLiteral)` in type `Cpp.C` that does not implement that interface [MissingImplInMemberAccess] - // CHECK:STDERR: let unused c2: Cpp.C = c1 + 5; - // CHECK:STDERR: ^~~~~~ + // CHECK:STDERR: fail_call_with_wrong_type.carbon:[[@LINE+4]]:32: error: cannot access member of interface `Core.AddWith(Core.IntLiteral)` in type `Cpp.BinaryC` that does not implement that interface [MissingImplInMemberAccess] + // CHECK:STDERR: let unused c2: Cpp.BinaryC = c1 + 5; + // CHECK:STDERR: ^~~~~~ // CHECK:STDERR: - let unused c2: Cpp.C = c1 + 5; - // CHECK:STDERR: fail_call_with_wrong_type.carbon:[[@LINE+4]]:26: error: cannot access member of interface `Core.AddWith(Cpp.C)` in type `Core.IntLiteral` that does not implement that interface [MissingImplInMemberAccess] - // CHECK:STDERR: let unused c3: Cpp.C = 6 + c1; - // CHECK:STDERR: ^~~~~~ + let unused c2: Cpp.BinaryC = c1 + 5; + // CHECK:STDERR: fail_call_with_wrong_type.carbon:[[@LINE+4]]:32: error: cannot access member of interface `Core.AddWith(Cpp.BinaryC)` in type `Core.IntLiteral` that does not implement that interface [MissingImplInMemberAccess] + // CHECK:STDERR: let unused c3: Cpp.BinaryC = 6 + c1; + // CHECK:STDERR: ^~~~~~ // CHECK:STDERR: - let unused c3: Cpp.C = 6 + c1; + let unused c3: Cpp.BinaryC = 6 + c1; } // ============================================================================ @@ -277,20 +277,20 @@ fn F() { library "[[@TEST_NAME]]"; import Cpp inline ''' -class C {}; -void operator+(C, char); -void operator+(C, short); +class AmbiguousC {}; +void operator+(AmbiguousC, char); +void operator+(AmbiguousC, short); '''; -fn Test(c: Cpp.C) { - // CHECK:STDERR: fail_ambiguous.carbon:[[@LINE+10]]:5: error: use of overloaded operator '+' is ambiguous (with operand types 'const C' and 'int') [CppInteropParseError] +fn Test(c: Cpp.AmbiguousC) { + // CHECK:STDERR: fail_ambiguous.carbon:[[@LINE+10]]:5: error: use of overloaded operator '+' is ambiguous (with operand types 'const AmbiguousC' and 'int') [CppInteropParseError] // CHECK:STDERR: 21 | c + 1; // CHECK:STDERR: | ^ // CHECK:STDERR: fail_ambiguous.carbon:[[@LINE-8]]:6: note: candidate function [CppInteropParseNote] - // CHECK:STDERR: 6 | void operator+(C, char); + // CHECK:STDERR: 6 | void operator+(AmbiguousC, char); // CHECK:STDERR: | ^ // CHECK:STDERR: fail_ambiguous.carbon:[[@LINE-10]]:6: note: candidate function [CppInteropParseNote] - // CHECK:STDERR: 7 | void operator+(C, short); + // CHECK:STDERR: 7 | void operator+(AmbiguousC, short); // CHECK:STDERR: | ^ // CHECK:STDERR: c + 1; @@ -301,21 +301,21 @@ fn Test(c: Cpp.C) { library "[[@TEST_NAME]]"; import Cpp inline ''' -class C {}; -void operator+(C, int) = delete; -void operator+(C, void*) = delete; +class DeletedC {}; +void operator+(DeletedC, int) = delete; +void operator+(DeletedC, void*) = delete; '''; -fn Test(c: Cpp.C) { +fn Test(c: Cpp.DeletedC) { // CHECK:STDERR: fail_deleted.carbon:[[@LINE+10]]:5: error: overload resolution selected deleted operator '+' [CppInteropParseError] // CHECK:STDERR: 21 | c + 1; // CHECK:STDERR: | ^ // CHECK:STDERR: fail_deleted.carbon:[[@LINE-8]]:6: note: candidate function has been explicitly deleted [CppInteropParseNote] - // CHECK:STDERR: 6 | void operator+(C, int) = delete; + // CHECK:STDERR: 6 | void operator+(DeletedC, int) = delete; // CHECK:STDERR: | ^ // CHECK:STDERR: fail_deleted.carbon:[[@LINE-10]]:6: note: candidate function not viable: no known conversion from 'int' to 'void *' for 2nd argument [CppInteropParseNote] - // CHECK:STDERR: 7 | void operator+(C, void*) = delete; - // CHECK:STDERR: | ^ ~~~~~ + // CHECK:STDERR: 7 | void operator+(DeletedC, void*) = delete; + // CHECK:STDERR: | ^ ~~~~~ // CHECK:STDERR: c + 1; } @@ -369,24 +369,24 @@ fn F() { library "[[@TEST_NAME]]"; import Cpp inline ''' -class B {}; -class C : public B {}; +class BaseDel {}; +class CDel : public BaseDel {}; namespace std { class strong_ordering {}; } -auto operator<=>(C lhs, C rhs) -> std::strong_ordering = delete; -auto operator<(C lhs, B rhs) -> bool; +auto operator<=>(CDel lhs, CDel rhs) -> std::strong_ordering = delete; +auto operator<(CDel lhs, BaseDel rhs) -> bool; '''; -fn F(c: Cpp.C) -> bool { +fn F(c: Cpp.CDel) -> bool { // Note that we mention `operator '<=>'` in the diagnostic. // CHECK:STDERR: fail_rewrite_deleted.carbon:[[@LINE+10]]:12: error: overload resolution selected deleted operator '<=>' [CppInteropParseError] // CHECK:STDERR: 25 | return c < c; // CHECK:STDERR: | ^ // CHECK:STDERR: fail_rewrite_deleted.carbon:[[@LINE-9]]:6: note: candidate function has been explicitly deleted [CppInteropParseNote] - // CHECK:STDERR: 9 | auto operator<=>(C lhs, C rhs) -> std::strong_ordering = delete; + // CHECK:STDERR: 9 | auto operator<=>(CDel lhs, CDel rhs) -> std::strong_ordering = delete; // CHECK:STDERR: | ^ // CHECK:STDERR: fail_rewrite_deleted.carbon:[[@LINE-11]]:6: note: candidate function [CppInteropParseNote] - // CHECK:STDERR: 10 | auto operator<(C lhs, B rhs) -> bool; + // CHECK:STDERR: 10 | auto operator<(CDel lhs, BaseDel rhs) -> bool; // CHECK:STDERR: | ^ // CHECK:STDERR: return c < c; @@ -401,15 +401,15 @@ fn F(c: Cpp.C) -> bool { library "[[@TEST_NAME]]"; import Cpp inline ''' -class C {}; +class EqualC {}; -auto operator==(C lhs, C rhs) -> bool; +auto operator==(EqualC lhs, EqualC rhs) -> bool; '''; fn F() { //@dump-sem-ir-begin - var c1: Cpp.C = Cpp.C.C(); - var c2: Cpp.C = Cpp.C.C(); + var c1: Cpp.EqualC = Cpp.EqualC.EqualC(); + var c2: Cpp.EqualC = Cpp.EqualC.EqualC(); // No rewrite. let unused equal: bool = c1 == c2; @@ -429,11 +429,11 @@ fn F() { // --- plus_with_int_conversion.h -class C { +class IntConvertibleC { public: - C(int); + IntConvertibleC(int); }; -auto operator+(C lhs, C rhs) -> C; +auto operator+(IntConvertibleC lhs, IntConvertibleC rhs) -> IntConvertibleC; // --- plus_with_int_conversion.carbon @@ -442,9 +442,9 @@ library "[[@TEST_NAME]]"; import Cpp library "plus_with_int_conversion.h"; fn F() { - let c1: Cpp.C = Cpp.C.C(4); - let unused c2: Cpp.C = c1 + 5; - let unused c3: Cpp.C = 6 + c1; + let c1: Cpp.IntConvertibleC = Cpp.IntConvertibleC.IntConvertibleC(4); + let unused c2: Cpp.IntConvertibleC = c1 + 5; + let unused c3: Cpp.IntConvertibleC = 6 + c1; } // ============================================================================ @@ -474,11 +474,11 @@ namespace std { } } -class C { +class StringViewConvertibleC { public: - C(std::string_view s); + StringViewConvertibleC(std::string_view s); }; -auto operator+(C lhs, C rhs) -> C; +auto operator+(StringViewConvertibleC lhs, StringViewConvertibleC rhs) -> StringViewConvertibleC; // --- fail_todo_import_plus_with_string_view_conversion.carbon @@ -489,11 +489,11 @@ import Cpp library "plus_with_string_view_conversion.h"; fn F() { let s1: str = "hello"; let s2: str = "world"; - // CHECK:STDERR: fail_todo_import_plus_with_string_view_conversion.carbon:[[@LINE+4]]:25: error: cannot access member of interface `Core.AddWith(str)` in type `str` that does not implement that interface [MissingImplInMemberAccess] - // CHECK:STDERR: let unused c: Cpp.C = s1 + s2; - // CHECK:STDERR: ^~~~~~~ + // CHECK:STDERR: fail_todo_import_plus_with_string_view_conversion.carbon:[[@LINE+4]]:46: error: cannot access member of interface `Core.AddWith(str)` in type `str` that does not implement that interface [MissingImplInMemberAccess] + // CHECK:STDERR: let unused c: Cpp.StringViewConvertibleC = s1 + s2; + // CHECK:STDERR: ^~~~~~~ // CHECK:STDERR: - let unused c: Cpp.C = s1 + s2; + let unused c: Cpp.StringViewConvertibleC = s1 + s2; } // ============================================================================ @@ -502,20 +502,20 @@ fn F() { // --- unsupported_unary_operators.h -class C {}; +class UnsupportedUnaryC {}; // Arithmetic. -auto operator+(C operand) -> C; +auto operator+(UnsupportedUnaryC operand) -> UnsupportedUnaryC; // Increment and Decrement. -auto operator++(C& operand, int) -> C&; -auto operator--(C& operand, int) -> C&; +auto operator++(UnsupportedUnaryC& operand, int) -> UnsupportedUnaryC&; +auto operator--(UnsupportedUnaryC& operand, int) -> UnsupportedUnaryC&; // Bitwise. -auto operator~(C operand) -> C; +auto operator~(UnsupportedUnaryC operand) -> UnsupportedUnaryC; // Logical. -auto operator!(C operand) -> C; +auto operator!(UnsupportedUnaryC operand) -> UnsupportedUnaryC; // Pointer and Memory. class P { @@ -533,22 +533,22 @@ library "[[@TEST_NAME]]"; import Cpp library "unsupported_unary_operators.h"; fn F() { - var c: Cpp.C = Cpp.C.C(); + var c: Cpp.UnsupportedUnaryC = Cpp.UnsupportedUnaryC.UnsupportedUnaryC(); // Arithmetic. - // CHECK:STDERR: fail_todo_import_unsupported_unary_operators.carbon:[[@LINE+12]]:21: error: expected expression [ExpectedExpr] - // CHECK:STDERR: let plus: Cpp.C = +c; - // CHECK:STDERR: ^ + // CHECK:STDERR: fail_todo_import_unsupported_unary_operators.carbon:[[@LINE+12]]:37: error: expected expression [ExpectedExpr] + // CHECK:STDERR: let plus: Cpp.UnsupportedUnaryC = +c; + // CHECK:STDERR: ^ // CHECK:STDERR: - // CHECK:STDERR: fail_todo_import_unsupported_unary_operators.carbon:[[@LINE+8]]:21: error: whitespace missing after binary operator [BinaryOperatorRequiresWhitespace] - // CHECK:STDERR: let plus: Cpp.C = +c; - // CHECK:STDERR: ^ + // CHECK:STDERR: fail_todo_import_unsupported_unary_operators.carbon:[[@LINE+8]]:37: error: whitespace missing after binary operator [BinaryOperatorRequiresWhitespace] + // CHECK:STDERR: let plus: Cpp.UnsupportedUnaryC = +c; + // CHECK:STDERR: ^ // CHECK:STDERR: - // CHECK:STDERR: fail_todo_import_unsupported_unary_operators.carbon:[[@LINE+4]]:21: error: semantics TODO: `handle invalid parse trees in `check`` [SemanticsTodo] - // CHECK:STDERR: let plus: Cpp.C = +c; - // CHECK:STDERR: ^ + // CHECK:STDERR: fail_todo_import_unsupported_unary_operators.carbon:[[@LINE+4]]:37: error: semantics TODO: `handle invalid parse trees in `check`` [SemanticsTodo] + // CHECK:STDERR: let plus: Cpp.UnsupportedUnaryC = +c; + // CHECK:STDERR: ^ // CHECK:STDERR: - let plus: Cpp.C = +c; + let plus: Cpp.UnsupportedUnaryC = +c; // Increment and Decrement. // CHECK:STDERR: fail_todo_import_unsupported_unary_operators.carbon:[[@LINE+4]]:4: error: expected `;` after expression statement [ExpectedExprSemi] @@ -563,22 +563,22 @@ fn F() { c--; // Bitwise. - // CHECK:STDERR: fail_todo_import_unsupported_unary_operators.carbon:[[@LINE+8]]:26: error: expected expression [ExpectedExpr] - // CHECK:STDERR: let not_value: Cpp.C = ~c; - // CHECK:STDERR: ^ + // CHECK:STDERR: fail_todo_import_unsupported_unary_operators.carbon:[[@LINE+8]]:42: error: expected expression [ExpectedExpr] + // CHECK:STDERR: let not_value: Cpp.UnsupportedUnaryC = ~c; + // CHECK:STDERR: ^ // CHECK:STDERR: - // CHECK:STDERR: fail_todo_import_unsupported_unary_operators.carbon:[[@LINE+4]]:26: error: `let` declarations must end with a `;` [ExpectedDeclSemi] - // CHECK:STDERR: let not_value: Cpp.C = ~c; - // CHECK:STDERR: ^ + // CHECK:STDERR: fail_todo_import_unsupported_unary_operators.carbon:[[@LINE+4]]:42: error: `let` declarations must end with a `;` [ExpectedDeclSemi] + // CHECK:STDERR: let not_value: Cpp.UnsupportedUnaryC = ~c; + // CHECK:STDERR: ^ // CHECK:STDERR: - let not_value: Cpp.C = ~c; + let not_value: Cpp.UnsupportedUnaryC = ~c; // Logical. - // CHECK:STDERR: fail_todo_import_unsupported_unary_operators.carbon:[[@LINE+4]]:35: error: `let` declarations must end with a `;` [ExpectedDeclSemi] - // CHECK:STDERR: let not_result: Cpp.C = operator!(c1); - // CHECK:STDERR: ^ + // CHECK:STDERR: fail_todo_import_unsupported_unary_operators.carbon:[[@LINE+4]]:51: error: `let` declarations must end with a `;` [ExpectedDeclSemi] + // CHECK:STDERR: let not_result: Cpp.UnsupportedUnaryC = operator!(c1); + // CHECK:STDERR: ^ // CHECK:STDERR: - let not_result: Cpp.C = operator!(c1); + let not_result: Cpp.UnsupportedUnaryC = operator!(c1); // Pointer and Memory. var p: Cpp.P = Cpp.P.P(); @@ -595,11 +595,11 @@ fn F() { // --- unsupported_binary_operators.h -class C {}; +class UnsupportedBinaryC {}; // Logical. -auto operator&&(C lhs, C rhs) -> C; -auto operator||(C lhs, C rhs) -> C; +auto operator&&(UnsupportedBinaryC lhs, UnsupportedBinaryC rhs) -> UnsupportedBinaryC; +auto operator||(UnsupportedBinaryC lhs, UnsupportedBinaryC rhs) -> UnsupportedBinaryC; // --- fail_todo_import_unsupported_binary_operators.carbon @@ -608,47 +608,47 @@ library "[[@TEST_NAME]]"; import Cpp library "unsupported_binary_operators.h"; fn F() { - var c1: Cpp.C = Cpp.C.C(); + var c1: Cpp.UnsupportedBinaryC = Cpp.UnsupportedBinaryC.UnsupportedBinaryC(); // Logical. - // CHECK:STDERR: fail_todo_import_unsupported_binary_operators.carbon:[[@LINE+16]]:27: error: name `operator` not found [NameNotFound] - // CHECK:STDERR: let and_result: Cpp.C = operator&&(c1, c2); - // CHECK:STDERR: ^~~~~~~~ + // CHECK:STDERR: fail_todo_import_unsupported_binary_operators.carbon:[[@LINE+16]]:44: error: name `operator` not found [NameNotFound] + // CHECK:STDERR: let and_result: Cpp.UnsupportedBinaryC = operator&&(c1, c2); + // CHECK:STDERR: ^~~~~~~~ // CHECK:STDERR: - // CHECK:STDERR: fail_todo_import_unsupported_binary_operators.carbon:[[@LINE+12]]:35: error: whitespace missing around binary operator [BinaryOperatorRequiresWhitespace] - // CHECK:STDERR: let and_result: Cpp.C = operator&&(c1, c2); - // CHECK:STDERR: ^ + // CHECK:STDERR: fail_todo_import_unsupported_binary_operators.carbon:[[@LINE+12]]:52: error: whitespace missing around binary operator [BinaryOperatorRequiresWhitespace] + // CHECK:STDERR: let and_result: Cpp.UnsupportedBinaryC = operator&&(c1, c2); + // CHECK:STDERR: ^ // CHECK:STDERR: - // CHECK:STDERR: fail_todo_import_unsupported_binary_operators.carbon:[[@LINE+8]]:42: error: name `c2` not found [NameNotFound] - // CHECK:STDERR: let and_result: Cpp.C = operator&&(c1, c2); - // CHECK:STDERR: ^~ + // CHECK:STDERR: fail_todo_import_unsupported_binary_operators.carbon:[[@LINE+8]]:59: error: name `c2` not found [NameNotFound] + // CHECK:STDERR: let and_result: Cpp.UnsupportedBinaryC = operator&&(c1, c2); + // CHECK:STDERR: ^~ // CHECK:STDERR: - // CHECK:STDERR: fail_todo_import_unsupported_binary_operators.carbon:[[@LINE+4]]:36: error: cannot take the address of non-reference expression [AddrOfNonRef] - // CHECK:STDERR: let and_result: Cpp.C = operator&&(c1, c2); - // CHECK:STDERR: ^ + // CHECK:STDERR: fail_todo_import_unsupported_binary_operators.carbon:[[@LINE+4]]:53: error: cannot take the address of non-reference expression [AddrOfNonRef] + // CHECK:STDERR: let and_result: Cpp.UnsupportedBinaryC = operator&&(c1, c2); + // CHECK:STDERR: ^ // CHECK:STDERR: - let and_result: Cpp.C = operator&&(c1, c2); - // CHECK:STDERR: fail_todo_import_unsupported_binary_operators.carbon:[[@LINE+20]]:26: error: name `operator` not found [NameNotFound] - // CHECK:STDERR: let or_result: Cpp.C = operator||(c1, c2); - // CHECK:STDERR: ^~~~~~~~ + let and_result: Cpp.UnsupportedBinaryC = operator&&(c1, c2); + // CHECK:STDERR: fail_todo_import_unsupported_binary_operators.carbon:[[@LINE+20]]:43: error: name `operator` not found [NameNotFound] + // CHECK:STDERR: let or_result: Cpp.UnsupportedBinaryC = operator||(c1, c2); + // CHECK:STDERR: ^~~~~~~~ // CHECK:STDERR: - // CHECK:STDERR: fail_todo_import_unsupported_binary_operators.carbon:[[@LINE+16]]:34: error: whitespace missing around binary operator [BinaryOperatorRequiresWhitespace] - // CHECK:STDERR: let or_result: Cpp.C = operator||(c1, c2); - // CHECK:STDERR: ^ + // CHECK:STDERR: fail_todo_import_unsupported_binary_operators.carbon:[[@LINE+16]]:51: error: whitespace missing around binary operator [BinaryOperatorRequiresWhitespace] + // CHECK:STDERR: let or_result: Cpp.UnsupportedBinaryC = operator||(c1, c2); + // CHECK:STDERR: ^ // CHECK:STDERR: - // CHECK:STDERR: fail_todo_import_unsupported_binary_operators.carbon:[[@LINE+12]]:35: error: expected expression [ExpectedExpr] - // CHECK:STDERR: let or_result: Cpp.C = operator||(c1, c2); - // CHECK:STDERR: ^ + // CHECK:STDERR: fail_todo_import_unsupported_binary_operators.carbon:[[@LINE+12]]:52: error: expected expression [ExpectedExpr] + // CHECK:STDERR: let or_result: Cpp.UnsupportedBinaryC = operator||(c1, c2); + // CHECK:STDERR: ^ // CHECK:STDERR: - // CHECK:STDERR: fail_todo_import_unsupported_binary_operators.carbon:[[@LINE+8]]:35: error: whitespace missing around binary operator [BinaryOperatorRequiresWhitespace] - // CHECK:STDERR: let or_result: Cpp.C = operator||(c1, c2); - // CHECK:STDERR: ^ + // CHECK:STDERR: fail_todo_import_unsupported_binary_operators.carbon:[[@LINE+8]]:52: error: whitespace missing around binary operator [BinaryOperatorRequiresWhitespace] + // CHECK:STDERR: let or_result: Cpp.UnsupportedBinaryC = operator||(c1, c2); + // CHECK:STDERR: ^ // CHECK:STDERR: - // CHECK:STDERR: fail_todo_import_unsupported_binary_operators.carbon:[[@LINE+4]]:35: error: semantics TODO: `handle invalid parse trees in `check`` [SemanticsTodo] - // CHECK:STDERR: let or_result: Cpp.C = operator||(c1, c2); - // CHECK:STDERR: ^ + // CHECK:STDERR: fail_todo_import_unsupported_binary_operators.carbon:[[@LINE+4]]:52: error: semantics TODO: `handle invalid parse trees in `check`` [SemanticsTodo] + // CHECK:STDERR: let or_result: Cpp.UnsupportedBinaryC = operator||(c1, c2); + // CHECK:STDERR: ^ // CHECK:STDERR: - let or_result: Cpp.C = operator||(c1, c2); + let or_result: Cpp.UnsupportedBinaryC = operator||(c1, c2); } // ============================================================================ @@ -712,13 +712,13 @@ fn F() { // --- operands_in_namespace_operator_in_global.h -namespace N { +namespace GlobalOpN { class C {}; -} // namespace N -auto operator+(N::C lhs, N::C rhs) -> N::C; +} // namespace GlobalOpN +auto operator+(GlobalOpN::C lhs, GlobalOpN::C rhs) -> GlobalOpN::C; void foo() { - N::C() + N::C(); + GlobalOpN::C() + GlobalOpN::C(); } // --- fail_todo_import_operands_in_namespace_operator_in_global.carbon @@ -729,13 +729,13 @@ import Cpp library "operands_in_namespace_operator_in_global.h"; fn F() { //@dump-sem-ir-begin - let c1: Cpp.N.C = Cpp.N.C.C(); - let c2: Cpp.N.C = Cpp.N.C.C(); - // CHECK:STDERR: fail_todo_import_operands_in_namespace_operator_in_global.carbon:[[@LINE+4]]:28: error: cannot access member of interface `Core.AddWith(Cpp.N.C)` in type `Cpp.N.C` that does not implement that interface [MissingImplInMemberAccess] - // CHECK:STDERR: let unused c3: Cpp.N.C = c1 + c2; - // CHECK:STDERR: ^~~~~~~ + let c1: Cpp.GlobalOpN.C = Cpp.GlobalOpN.C.C(); + let c2: Cpp.GlobalOpN.C = Cpp.GlobalOpN.C.C(); + // CHECK:STDERR: fail_todo_import_operands_in_namespace_operator_in_global.carbon:[[@LINE+4]]:36: error: cannot access member of interface `Core.AddWith(Cpp.GlobalOpN.C)` in type `Cpp.GlobalOpN.C` that does not implement that interface [MissingImplInMemberAccess] + // CHECK:STDERR: let unused c3: Cpp.GlobalOpN.C = c1 + c2; + // CHECK:STDERR: ^~~~~~~ // CHECK:STDERR: - let unused c3: Cpp.N.C = c1 + c2; + let unused c3: Cpp.GlobalOpN.C = c1 + c2; //@dump-sem-ir-end } @@ -799,13 +799,13 @@ fn F() { // --- member_add_with.h -class C { +class MemberClass { public: // Unary. - auto operator-() -> C; + auto operator-() -> MemberClass; // Binary. - auto operator+(C rhs) -> C; + auto operator+(MemberClass rhs) -> MemberClass; }; // --- import_member_add_with.carbon @@ -816,9 +816,9 @@ import Cpp library "member_add_with.h"; fn F() { //@dump-sem-ir-begin - var c1: Cpp.C = Cpp.C.C(); - var c2: Cpp.C = -c1; - var unused c3: Cpp.C = c1 + c2; + var c1: Cpp.MemberClass = Cpp.MemberClass.MemberClass(); + var c2: Cpp.MemberClass = -c1; + var unused c3: Cpp.MemberClass = c1 + c2; //@dump-sem-ir-end } @@ -829,7 +829,7 @@ fn F() { // --- not_found.h -class C {}; +class NoOperators {}; // --- fail_import_not_found.carbon @@ -838,13 +838,13 @@ library "[[@TEST_NAME]]"; import Cpp library "not_found.h"; fn F() { - let c1: Cpp.C = Cpp.C.C(); - let c2: Cpp.C = Cpp.C.C(); - // CHECK:STDERR: fail_import_not_found.carbon:[[@LINE+4]]:26: error: cannot access member of interface `Core.AddWith(Cpp.C)` in type `Cpp.C` that does not implement that interface [MissingImplInMemberAccess] - // CHECK:STDERR: let unused c3: Cpp.C = c1 + c2; - // CHECK:STDERR: ^~~~~~~ + let c1: Cpp.NoOperators = Cpp.NoOperators.NoOperators(); + let c2: Cpp.NoOperators = Cpp.NoOperators.NoOperators(); + // CHECK:STDERR: fail_import_not_found.carbon:[[@LINE+4]]:36: error: cannot access member of interface `Core.AddWith(Cpp.NoOperators)` in type `Cpp.NoOperators` that does not implement that interface [MissingImplInMemberAccess] + // CHECK:STDERR: let unused c3: Cpp.NoOperators = c1 + c2; + // CHECK:STDERR: ^~~~~~~ // CHECK:STDERR: - let unused c3: Cpp.C = c1 + c2; + let unused c3: Cpp.NoOperators = c1 + c2; } // ============================================================================ @@ -901,7 +901,7 @@ fn F() { // --- complete.h -struct Complete {}; +struct CompleteCpp {}; // --- fail_incomplete_operand_carbon_type.carbon @@ -913,7 +913,7 @@ class Incomplete; fn CreateIncomplete() -> Incomplete*; fn F() { - var complete: Cpp.Complete = Cpp.Complete.Complete(); + var complete: Cpp.CompleteCpp = Cpp.CompleteCpp.CompleteCpp(); // CHECK:STDERR: fail_incomplete_operand_carbon_type.carbon:[[@LINE+7]]:28: error: looking up a C++ operator with incomplete operand type `Incomplete` [IncompleteOperandTypeInCppOperatorLookup] // CHECK:STDERR: let unused result: i32 = *CreateIncomplete() + complete; // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -933,14 +933,14 @@ fn F() { library "[[@TEST_NAME]]"; import Cpp inline ''' -template struct B {}; -template struct A {}; +template struct TemplateB {}; +template struct TemplateA {}; -using X = B>; -int operator+(X, X); +using TemplateX = TemplateB>; +int operator+(TemplateX, TemplateX); '''; -fn F(x: Cpp.X) -> i32 { +fn F(x: Cpp.TemplateX) -> i32 { //@dump-sem-ir-begin return x + x; //@dump-sem-ir-end @@ -951,23 +951,23 @@ fn F(x: Cpp.X) -> i32 { library "[[@TEST_NAME]]"; import Cpp inline ''' -template struct B {}; -template struct A { +template struct FailTemplateB {}; +template struct FailTemplateA { // CHECK:STDERR: fail_indirect_template_instantiation_error.carbon:[[@LINE+3]]:19: error: type 'int' cannot be used prior to '::' because it has no members [CppInteropParseError] - // CHECK:STDERR: 10 | friend typename T::error operator+(B, B); + // CHECK:STDERR: 10 | friend typename T::error operator+(FailTemplateB, FailTemplateB); // CHECK:STDERR: | ^ - friend typename T::error operator+(B, B); + friend typename T::error operator+(FailTemplateB, FailTemplateB); }; -using X = B>; +using FailTemplateX = FailTemplateB>; '''; -fn F(x: Cpp.X) -> i32 { - // CHECK:STDERR: fail_indirect_template_instantiation_error.carbon:[[@LINE+8]]:12: note: in instantiation of template class 'A' requested here [CppInteropParseNote] +fn F(x: Cpp.FailTemplateX) -> i32 { + // CHECK:STDERR: fail_indirect_template_instantiation_error.carbon:[[@LINE+8]]:12: note: in instantiation of template class 'FailTemplateA' requested here [CppInteropParseNote] // CHECK:STDERR: 25 | return x + x; // CHECK:STDERR: | ^ // CHECK:STDERR: - // CHECK:STDERR: fail_indirect_template_instantiation_error.carbon:[[@LINE+4]]:10: error: cannot access member of interface `Core.AddWith(Cpp.B)` in type `Cpp.B` that does not implement that interface [MissingImplInMemberAccess] + // CHECK:STDERR: fail_indirect_template_instantiation_error.carbon:[[@LINE+4]]:10: error: cannot access member of interface `Core.AddWith(Cpp.FailTemplateB)` in type `Cpp.FailTemplateB` that does not implement that interface [MissingImplInMemberAccess] // CHECK:STDERR: return x + x; // CHECK:STDERR: ^~~~~ // CHECK:STDERR: @@ -1167,42 +1167,42 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] -// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = ref_binding_pattern c1 [concrete] -// CHECK:STDOUT: %c1.var_patt: %pattern_type.bbc = var_pattern %c1.patt [concrete] -// CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] -// CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] -// CHECK:STDOUT: %C__carbon_thunk.type: type = fn_type @C__carbon_thunk [concrete] -// CHECK:STDOUT: %C__carbon_thunk: %C__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = ref_binding_pattern c2 [concrete] -// CHECK:STDOUT: %c2.var_patt: %pattern_type.bbc = var_pattern %c2.patt [concrete] -// CHECK:STDOUT: %addition.patt: %pattern_type.bbc = value_binding_pattern addition [concrete] +// CHECK:STDOUT: %BinaryC: type = class_type @BinaryC [concrete] +// CHECK:STDOUT: %pattern_type.b2b: type = pattern_type %BinaryC [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.b2b = ref_binding_pattern c1 [concrete] +// CHECK:STDOUT: %c1.var_patt: %pattern_type.b2b = var_pattern %c1.patt [concrete] +// CHECK:STDOUT: %BinaryC.BinaryC.cpp_overload_set.type: type = cpp_overload_set_type @BinaryC.BinaryC.cpp_overload_set [concrete] +// CHECK:STDOUT: %BinaryC.BinaryC.cpp_overload_set.value: %BinaryC.BinaryC.cpp_overload_set.type = cpp_overload_set_value @BinaryC.BinaryC.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.6da: type = ptr_type %BinaryC [concrete] +// CHECK:STDOUT: %BinaryC__carbon_thunk.type: type = fn_type @BinaryC__carbon_thunk [concrete] +// CHECK:STDOUT: %BinaryC__carbon_thunk: %BinaryC__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.b2b = ref_binding_pattern c2 [concrete] +// CHECK:STDOUT: %c2.var_patt: %pattern_type.b2b = var_pattern %c2.patt [concrete] +// CHECK:STDOUT: %addition.patt: %pattern_type.b2b = value_binding_pattern addition [concrete] // CHECK:STDOUT: %operator_Plus__carbon_thunk.type: type = fn_type @operator_Plus__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Plus__carbon_thunk: %operator_Plus__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %subtraction.patt: %pattern_type.bbc = value_binding_pattern subtraction [concrete] +// CHECK:STDOUT: %subtraction.patt: %pattern_type.b2b = value_binding_pattern subtraction [concrete] // CHECK:STDOUT: %operator_Minus__carbon_thunk.type: type = fn_type @operator_Minus__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Minus__carbon_thunk: %operator_Minus__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %multiplication.patt: %pattern_type.bbc = value_binding_pattern multiplication [concrete] +// CHECK:STDOUT: %multiplication.patt: %pattern_type.b2b = value_binding_pattern multiplication [concrete] // CHECK:STDOUT: %operator_Star__carbon_thunk.type: type = fn_type @operator_Star__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Star__carbon_thunk: %operator_Star__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %division.patt: %pattern_type.bbc = value_binding_pattern division [concrete] +// CHECK:STDOUT: %division.patt: %pattern_type.b2b = value_binding_pattern division [concrete] // CHECK:STDOUT: %operator_Slash__carbon_thunk.type: type = fn_type @operator_Slash__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Slash__carbon_thunk: %operator_Slash__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %modulo.patt: %pattern_type.bbc = value_binding_pattern modulo [concrete] +// CHECK:STDOUT: %modulo.patt: %pattern_type.b2b = value_binding_pattern modulo [concrete] // CHECK:STDOUT: %operator_Percent__carbon_thunk.type: type = fn_type @operator_Percent__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Percent__carbon_thunk: %operator_Percent__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %bitwise_and.patt: %pattern_type.bbc = value_binding_pattern bitwise_and [concrete] +// CHECK:STDOUT: %bitwise_and.patt: %pattern_type.b2b = value_binding_pattern bitwise_and [concrete] // CHECK:STDOUT: %operator_Amp__carbon_thunk.type: type = fn_type @operator_Amp__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Amp__carbon_thunk: %operator_Amp__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %bitwise_or.patt: %pattern_type.bbc = value_binding_pattern bitwise_or [concrete] +// CHECK:STDOUT: %bitwise_or.patt: %pattern_type.b2b = value_binding_pattern bitwise_or [concrete] // CHECK:STDOUT: %operator_Pipe__carbon_thunk.type: type = fn_type @operator_Pipe__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Pipe__carbon_thunk: %operator_Pipe__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %bitwise_xor.patt: %pattern_type.bbc = value_binding_pattern bitwise_xor [concrete] +// CHECK:STDOUT: %bitwise_xor.patt: %pattern_type.b2b = value_binding_pattern bitwise_xor [concrete] // CHECK:STDOUT: %operator_Caret__carbon_thunk.type: type = fn_type @operator_Caret__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Caret__carbon_thunk: %operator_Caret__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %left_shift.patt: %pattern_type.bbc = value_binding_pattern left_shift [concrete] +// CHECK:STDOUT: %left_shift.patt: %pattern_type.b2b = value_binding_pattern left_shift [concrete] // CHECK:STDOUT: %int_3.1ba: Core.IntLiteral = int_value 3 [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] @@ -1223,7 +1223,7 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn: = specific_function %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39, @Core.IntLiteral.as.ImplicitAs.impl.Convert(%int_32) [concrete] // CHECK:STDOUT: %bound_method.763: = bound_method %int_3.1ba, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_3.410: %i32 = int_value 3 [concrete] -// CHECK:STDOUT: %right_shift.patt: %pattern_type.bbc = value_binding_pattern right_shift [concrete] +// CHECK:STDOUT: %right_shift.patt: %pattern_type.b2b = value_binding_pattern right_shift [concrete] // CHECK:STDOUT: %int_5.64b: Core.IntLiteral = int_value 5 [concrete] // CHECK:STDOUT: %operator_GreaterGreater__carbon_thunk.type: type = fn_type @operator_GreaterGreater__carbon_thunk [concrete] // CHECK:STDOUT: %operator_GreaterGreater__carbon_thunk: %operator_GreaterGreater__carbon_thunk.type = struct_value () [concrete] @@ -1272,27 +1272,27 @@ fn F() { // CHECK:STDOUT: %operator_LessEqual__carbon_thunk: %operator_LessEqual__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %index.patt: %pattern_type.6b6 = value_binding_pattern index [concrete] // CHECK:STDOUT: %int_42.20e: Core.IntLiteral = int_value 42 [concrete] -// CHECK:STDOUT: %C.cpp_operator.type: type = fn_type @C.cpp_operator [concrete] -// CHECK:STDOUT: %C.cpp_operator: %C.cpp_operator.type = struct_value () [concrete] +// CHECK:STDOUT: %BinaryC.cpp_operator.type: type = fn_type @BinaryC.cpp_operator [concrete] +// CHECK:STDOUT: %BinaryC.cpp_operator: %BinaryC.cpp_operator.type = struct_value () [concrete] // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.bf3: = bound_method %int_42.20e, %Core.IntLiteral.as.ImplicitAs.impl.Convert.e39 [concrete] // CHECK:STDOUT: %bound_method.098: = bound_method %int_42.20e, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_42.ac4: %i32 = int_value 42 [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] -// CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] -// CHECK:STDOUT: %C.cpp_destructor: %C.cpp_destructor.type = struct_value () [concrete] -// CHECK:STDOUT: %C.Op.type: type = fn_type @C.Op [concrete] -// CHECK:STDOUT: %C.Op: %C.Op.type = struct_value () [concrete] +// CHECK:STDOUT: %BinaryC.cpp_destructor.type: type = fn_type @BinaryC.cpp_destructor [concrete] +// CHECK:STDOUT: %BinaryC.cpp_destructor: %BinaryC.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %BinaryC.Op.type: type = fn_type @BinaryC.Op [concrete] +// CHECK:STDOUT: %BinaryC.Op: %BinaryC.Op.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .C = %C.decl +// CHECK:STDOUT: .BinaryC = %BinaryC.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete = constants.%C.C.cpp_overload_set.value] -// CHECK:STDOUT: %C__carbon_thunk.decl: %C__carbon_thunk.type = fn_decl @C__carbon_thunk [concrete = constants.%C__carbon_thunk] { +// CHECK:STDOUT: %BinaryC.decl: type = class_decl @BinaryC [concrete = constants.%BinaryC] {} {} +// CHECK:STDOUT: %BinaryC.BinaryC.cpp_overload_set.value: %BinaryC.BinaryC.cpp_overload_set.type = cpp_overload_set_value @BinaryC.BinaryC.cpp_overload_set [concrete = constants.%BinaryC.BinaryC.cpp_overload_set.value] +// CHECK:STDOUT: %BinaryC__carbon_thunk.decl: %BinaryC__carbon_thunk.type = fn_decl @BinaryC__carbon_thunk [concrete = constants.%BinaryC__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -1429,12 +1429,12 @@ fn F() { // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } -// CHECK:STDOUT: %C.cpp_operator.decl: %C.cpp_operator.type = fn_decl @C.cpp_operator [concrete = constants.%C.cpp_operator] { +// CHECK:STDOUT: %BinaryC.cpp_operator.decl: %BinaryC.cpp_operator.type = fn_decl @BinaryC.cpp_operator [concrete = constants.%BinaryC.cpp_operator] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } -// CHECK:STDOUT: %C.cpp_destructor.decl: %C.cpp_destructor.type = fn_decl @C.cpp_destructor [concrete = constants.%C.cpp_destructor] { +// CHECK:STDOUT: %BinaryC.cpp_destructor.decl: %BinaryC.cpp_destructor.type = fn_decl @BinaryC.cpp_destructor [concrete = constants.%BinaryC.cpp_destructor] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -1443,319 +1443,319 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %c1.var: ref %C = var_storage %c1.var_patt -// CHECK:STDOUT: %Cpp.ref.loc8_19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc8_22: type = name_ref C, imports.%C.decl [concrete = constants.%C] -// CHECK:STDOUT: %C.ref.loc8_24: %C.C.cpp_overload_set.type = name_ref C, imports.%C.C.cpp_overload_set.value [concrete = constants.%C.C.cpp_overload_set.value] -// CHECK:STDOUT: %.loc8_3: ref %C = splice_block %c1.var {} -// CHECK:STDOUT: %addr.loc8: %ptr.0a2 = addr_of %.loc8_3 -// CHECK:STDOUT: %C__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%addr.loc8) -// CHECK:STDOUT: %.loc8_27: init %C to %.loc8_3 = mark_in_place_init %C__carbon_thunk.call.loc8 -// CHECK:STDOUT: assign %c1.var, %.loc8_27 -// CHECK:STDOUT: %.loc8_14: type = splice_block %C.ref.loc8_14 [concrete = constants.%C] { +// CHECK:STDOUT: %c1.var: ref %BinaryC = var_storage %c1.var_patt +// CHECK:STDOUT: %Cpp.ref.loc8_25: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %BinaryC.ref.loc8_28: type = name_ref BinaryC, imports.%BinaryC.decl [concrete = constants.%BinaryC] +// CHECK:STDOUT: %BinaryC.ref.loc8_36: %BinaryC.BinaryC.cpp_overload_set.type = name_ref BinaryC, imports.%BinaryC.BinaryC.cpp_overload_set.value [concrete = constants.%BinaryC.BinaryC.cpp_overload_set.value] +// CHECK:STDOUT: %.loc8_3: ref %BinaryC = splice_block %c1.var {} +// CHECK:STDOUT: %addr.loc8: %ptr.6da = addr_of %.loc8_3 +// CHECK:STDOUT: %BinaryC__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%BinaryC__carbon_thunk.decl(%addr.loc8) +// CHECK:STDOUT: %.loc8_45: init %BinaryC to %.loc8_3 = mark_in_place_init %BinaryC__carbon_thunk.call.loc8 +// CHECK:STDOUT: assign %c1.var, %.loc8_45 +// CHECK:STDOUT: %.loc8_14: type = splice_block %BinaryC.ref.loc8_14 [concrete = constants.%BinaryC] { // CHECK:STDOUT: %Cpp.ref.loc8_11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc8_14: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %BinaryC.ref.loc8_14: type = name_ref BinaryC, imports.%BinaryC.decl [concrete = constants.%BinaryC] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1: ref %C = wrapper_binding c1, %c1.var +// CHECK:STDOUT: %c1: ref %BinaryC = wrapper_binding c1, %c1.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = ref_binding_pattern c1 [concrete = constants.%c1.patt] -// CHECK:STDOUT: %c1.var_patt: %pattern_type.bbc = var_pattern %c1.patt [concrete = constants.%c1.var_patt] +// CHECK:STDOUT: %c1.patt: %pattern_type.b2b = ref_binding_pattern c1 [concrete = constants.%c1.patt] +// CHECK:STDOUT: %c1.var_patt: %pattern_type.b2b = var_pattern %c1.patt [concrete = constants.%c1.var_patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c2.var: ref %C = var_storage %c2.var_patt -// CHECK:STDOUT: %Cpp.ref.loc9_19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc9_22: type = name_ref C, imports.%C.decl [concrete = constants.%C] -// CHECK:STDOUT: %C.ref.loc9_24: %C.C.cpp_overload_set.type = name_ref C, imports.%C.C.cpp_overload_set.value [concrete = constants.%C.C.cpp_overload_set.value] -// CHECK:STDOUT: %.loc9_3: ref %C = splice_block %c2.var {} -// CHECK:STDOUT: %addr.loc9: %ptr.0a2 = addr_of %.loc9_3 -// CHECK:STDOUT: %C__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%addr.loc9) -// CHECK:STDOUT: %.loc9_27: init %C to %.loc9_3 = mark_in_place_init %C__carbon_thunk.call.loc9 -// CHECK:STDOUT: assign %c2.var, %.loc9_27 -// CHECK:STDOUT: %.loc9_14: type = splice_block %C.ref.loc9_14 [concrete = constants.%C] { +// CHECK:STDOUT: %c2.var: ref %BinaryC = var_storage %c2.var_patt +// CHECK:STDOUT: %Cpp.ref.loc9_25: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %BinaryC.ref.loc9_28: type = name_ref BinaryC, imports.%BinaryC.decl [concrete = constants.%BinaryC] +// CHECK:STDOUT: %BinaryC.ref.loc9_36: %BinaryC.BinaryC.cpp_overload_set.type = name_ref BinaryC, imports.%BinaryC.BinaryC.cpp_overload_set.value [concrete = constants.%BinaryC.BinaryC.cpp_overload_set.value] +// CHECK:STDOUT: %.loc9_3: ref %BinaryC = splice_block %c2.var {} +// CHECK:STDOUT: %addr.loc9: %ptr.6da = addr_of %.loc9_3 +// CHECK:STDOUT: %BinaryC__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%BinaryC__carbon_thunk.decl(%addr.loc9) +// CHECK:STDOUT: %.loc9_45: init %BinaryC to %.loc9_3 = mark_in_place_init %BinaryC__carbon_thunk.call.loc9 +// CHECK:STDOUT: assign %c2.var, %.loc9_45 +// CHECK:STDOUT: %.loc9_14: type = splice_block %BinaryC.ref.loc9_14 [concrete = constants.%BinaryC] { // CHECK:STDOUT: %Cpp.ref.loc9_11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc9_14: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %BinaryC.ref.loc9_14: type = name_ref BinaryC, imports.%BinaryC.decl [concrete = constants.%BinaryC] // CHECK:STDOUT: } -// CHECK:STDOUT: %c2: ref %C = wrapper_binding c2, %c2.var +// CHECK:STDOUT: %c2: ref %BinaryC = wrapper_binding c2, %c2.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = ref_binding_pattern c2 [concrete = constants.%c2.patt] -// CHECK:STDOUT: %c2.var_patt: %pattern_type.bbc = var_pattern %c2.patt [concrete = constants.%c2.var_patt] +// CHECK:STDOUT: %c2.patt: %pattern_type.b2b = ref_binding_pattern c2 [concrete = constants.%c2.patt] +// CHECK:STDOUT: %c2.var_patt: %pattern_type.b2b = var_pattern %c2.patt [concrete = constants.%c2.var_patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1.ref.loc12: ref %C = name_ref c1, %c1 -// CHECK:STDOUT: %c2.ref.loc12: ref %C = name_ref c2, %c2 -// CHECK:STDOUT: %.loc12_35.1: ref %C = temporary_storage -// CHECK:STDOUT: %.loc12_32.1: %C = acquire_value %c1.ref.loc12 -// CHECK:STDOUT: %.loc12_37.1: %C = acquire_value %c2.ref.loc12 -// CHECK:STDOUT: %.loc12_32.2: ref %C = value_as_ref %.loc12_32.1 -// CHECK:STDOUT: %addr.loc12_35.1: %ptr.0a2 = addr_of %.loc12_32.2 -// CHECK:STDOUT: %.loc12_37.2: ref %C = value_as_ref %.loc12_37.1 -// CHECK:STDOUT: %addr.loc12_35.2: %ptr.0a2 = addr_of %.loc12_37.2 -// CHECK:STDOUT: %addr.loc12_35.3: %ptr.0a2 = addr_of %.loc12_35.1 -// CHECK:STDOUT: %operator_Plus__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Plus__carbon_thunk.decl(%addr.loc12_35.1, %addr.loc12_35.2, %addr.loc12_35.3) -// CHECK:STDOUT: %.loc12_35.2: init %C to %.loc12_35.1 = mark_in_place_init %operator_Plus__carbon_thunk.call -// CHECK:STDOUT: %.loc12_35.3: ref %C = temporary %.loc12_35.1, %.loc12_35.2 -// CHECK:STDOUT: %.loc12_35.4: %C = acquire_value %.loc12_35.3 -// CHECK:STDOUT: %.loc12_27: type = splice_block %C.ref.loc12 [concrete = constants.%C] { +// CHECK:STDOUT: %c1.ref.loc12: ref %BinaryC = name_ref c1, %c1 +// CHECK:STDOUT: %c2.ref.loc12: ref %BinaryC = name_ref c2, %c2 +// CHECK:STDOUT: %.loc12_41.1: ref %BinaryC = temporary_storage +// CHECK:STDOUT: %.loc12_38.1: %BinaryC = acquire_value %c1.ref.loc12 +// CHECK:STDOUT: %.loc12_43.1: %BinaryC = acquire_value %c2.ref.loc12 +// CHECK:STDOUT: %.loc12_38.2: ref %BinaryC = value_as_ref %.loc12_38.1 +// CHECK:STDOUT: %addr.loc12_41.1: %ptr.6da = addr_of %.loc12_38.2 +// CHECK:STDOUT: %.loc12_43.2: ref %BinaryC = value_as_ref %.loc12_43.1 +// CHECK:STDOUT: %addr.loc12_41.2: %ptr.6da = addr_of %.loc12_43.2 +// CHECK:STDOUT: %addr.loc12_41.3: %ptr.6da = addr_of %.loc12_41.1 +// CHECK:STDOUT: %operator_Plus__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Plus__carbon_thunk.decl(%addr.loc12_41.1, %addr.loc12_41.2, %addr.loc12_41.3) +// CHECK:STDOUT: %.loc12_41.2: init %BinaryC to %.loc12_41.1 = mark_in_place_init %operator_Plus__carbon_thunk.call +// CHECK:STDOUT: %.loc12_41.3: ref %BinaryC = temporary %.loc12_41.1, %.loc12_41.2 +// CHECK:STDOUT: %.loc12_41.4: %BinaryC = acquire_value %.loc12_41.3 +// CHECK:STDOUT: %.loc12_27: type = splice_block %BinaryC.ref.loc12 [concrete = constants.%BinaryC] { // CHECK:STDOUT: %Cpp.ref.loc12: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc12: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %BinaryC.ref.loc12: type = name_ref BinaryC, imports.%BinaryC.decl [concrete = constants.%BinaryC] // CHECK:STDOUT: } -// CHECK:STDOUT: %addition: %C = wrapper_binding addition, %.loc12_35.4 +// CHECK:STDOUT: %addition: %BinaryC = wrapper_binding addition, %.loc12_41.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %addition.patt: %pattern_type.bbc = value_binding_pattern addition [concrete = constants.%addition.patt] +// CHECK:STDOUT: %addition.patt: %pattern_type.b2b = value_binding_pattern addition [concrete = constants.%addition.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1.ref.loc13: ref %C = name_ref c1, %c1 -// CHECK:STDOUT: %c2.ref.loc13: ref %C = name_ref c2, %c2 -// CHECK:STDOUT: %.loc13_38.1: ref %C = temporary_storage -// CHECK:STDOUT: %.loc13_35.1: %C = acquire_value %c1.ref.loc13 -// CHECK:STDOUT: %.loc13_40.1: %C = acquire_value %c2.ref.loc13 -// CHECK:STDOUT: %.loc13_35.2: ref %C = value_as_ref %.loc13_35.1 -// CHECK:STDOUT: %addr.loc13_38.1: %ptr.0a2 = addr_of %.loc13_35.2 -// CHECK:STDOUT: %.loc13_40.2: ref %C = value_as_ref %.loc13_40.1 -// CHECK:STDOUT: %addr.loc13_38.2: %ptr.0a2 = addr_of %.loc13_40.2 -// CHECK:STDOUT: %addr.loc13_38.3: %ptr.0a2 = addr_of %.loc13_38.1 -// CHECK:STDOUT: %operator_Minus__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Minus__carbon_thunk.decl(%addr.loc13_38.1, %addr.loc13_38.2, %addr.loc13_38.3) -// CHECK:STDOUT: %.loc13_38.2: init %C to %.loc13_38.1 = mark_in_place_init %operator_Minus__carbon_thunk.call -// CHECK:STDOUT: %.loc13_38.3: ref %C = temporary %.loc13_38.1, %.loc13_38.2 -// CHECK:STDOUT: %.loc13_38.4: %C = acquire_value %.loc13_38.3 -// CHECK:STDOUT: %.loc13_30: type = splice_block %C.ref.loc13 [concrete = constants.%C] { +// CHECK:STDOUT: %c1.ref.loc13: ref %BinaryC = name_ref c1, %c1 +// CHECK:STDOUT: %c2.ref.loc13: ref %BinaryC = name_ref c2, %c2 +// CHECK:STDOUT: %.loc13_44.1: ref %BinaryC = temporary_storage +// CHECK:STDOUT: %.loc13_41.1: %BinaryC = acquire_value %c1.ref.loc13 +// CHECK:STDOUT: %.loc13_46.1: %BinaryC = acquire_value %c2.ref.loc13 +// CHECK:STDOUT: %.loc13_41.2: ref %BinaryC = value_as_ref %.loc13_41.1 +// CHECK:STDOUT: %addr.loc13_44.1: %ptr.6da = addr_of %.loc13_41.2 +// CHECK:STDOUT: %.loc13_46.2: ref %BinaryC = value_as_ref %.loc13_46.1 +// CHECK:STDOUT: %addr.loc13_44.2: %ptr.6da = addr_of %.loc13_46.2 +// CHECK:STDOUT: %addr.loc13_44.3: %ptr.6da = addr_of %.loc13_44.1 +// CHECK:STDOUT: %operator_Minus__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Minus__carbon_thunk.decl(%addr.loc13_44.1, %addr.loc13_44.2, %addr.loc13_44.3) +// CHECK:STDOUT: %.loc13_44.2: init %BinaryC to %.loc13_44.1 = mark_in_place_init %operator_Minus__carbon_thunk.call +// CHECK:STDOUT: %.loc13_44.3: ref %BinaryC = temporary %.loc13_44.1, %.loc13_44.2 +// CHECK:STDOUT: %.loc13_44.4: %BinaryC = acquire_value %.loc13_44.3 +// CHECK:STDOUT: %.loc13_30: type = splice_block %BinaryC.ref.loc13 [concrete = constants.%BinaryC] { // CHECK:STDOUT: %Cpp.ref.loc13: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc13: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %BinaryC.ref.loc13: type = name_ref BinaryC, imports.%BinaryC.decl [concrete = constants.%BinaryC] // CHECK:STDOUT: } -// CHECK:STDOUT: %subtraction: %C = wrapper_binding subtraction, %.loc13_38.4 +// CHECK:STDOUT: %subtraction: %BinaryC = wrapper_binding subtraction, %.loc13_44.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %subtraction.patt: %pattern_type.bbc = value_binding_pattern subtraction [concrete = constants.%subtraction.patt] +// CHECK:STDOUT: %subtraction.patt: %pattern_type.b2b = value_binding_pattern subtraction [concrete = constants.%subtraction.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1.ref.loc14: ref %C = name_ref c1, %c1 -// CHECK:STDOUT: %c2.ref.loc14: ref %C = name_ref c2, %c2 -// CHECK:STDOUT: %.loc14_41.1: ref %C = temporary_storage -// CHECK:STDOUT: %.loc14_38.1: %C = acquire_value %c1.ref.loc14 -// CHECK:STDOUT: %.loc14_43.1: %C = acquire_value %c2.ref.loc14 -// CHECK:STDOUT: %.loc14_38.2: ref %C = value_as_ref %.loc14_38.1 -// CHECK:STDOUT: %addr.loc14_41.1: %ptr.0a2 = addr_of %.loc14_38.2 -// CHECK:STDOUT: %.loc14_43.2: ref %C = value_as_ref %.loc14_43.1 -// CHECK:STDOUT: %addr.loc14_41.2: %ptr.0a2 = addr_of %.loc14_43.2 -// CHECK:STDOUT: %addr.loc14_41.3: %ptr.0a2 = addr_of %.loc14_41.1 -// CHECK:STDOUT: %operator_Star__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Star__carbon_thunk.decl(%addr.loc14_41.1, %addr.loc14_41.2, %addr.loc14_41.3) -// CHECK:STDOUT: %.loc14_41.2: init %C to %.loc14_41.1 = mark_in_place_init %operator_Star__carbon_thunk.call -// CHECK:STDOUT: %.loc14_41.3: ref %C = temporary %.loc14_41.1, %.loc14_41.2 -// CHECK:STDOUT: %.loc14_41.4: %C = acquire_value %.loc14_41.3 -// CHECK:STDOUT: %.loc14_33: type = splice_block %C.ref.loc14 [concrete = constants.%C] { +// CHECK:STDOUT: %c1.ref.loc14: ref %BinaryC = name_ref c1, %c1 +// CHECK:STDOUT: %c2.ref.loc14: ref %BinaryC = name_ref c2, %c2 +// CHECK:STDOUT: %.loc14_47.1: ref %BinaryC = temporary_storage +// CHECK:STDOUT: %.loc14_44.1: %BinaryC = acquire_value %c1.ref.loc14 +// CHECK:STDOUT: %.loc14_49.1: %BinaryC = acquire_value %c2.ref.loc14 +// CHECK:STDOUT: %.loc14_44.2: ref %BinaryC = value_as_ref %.loc14_44.1 +// CHECK:STDOUT: %addr.loc14_47.1: %ptr.6da = addr_of %.loc14_44.2 +// CHECK:STDOUT: %.loc14_49.2: ref %BinaryC = value_as_ref %.loc14_49.1 +// CHECK:STDOUT: %addr.loc14_47.2: %ptr.6da = addr_of %.loc14_49.2 +// CHECK:STDOUT: %addr.loc14_47.3: %ptr.6da = addr_of %.loc14_47.1 +// CHECK:STDOUT: %operator_Star__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Star__carbon_thunk.decl(%addr.loc14_47.1, %addr.loc14_47.2, %addr.loc14_47.3) +// CHECK:STDOUT: %.loc14_47.2: init %BinaryC to %.loc14_47.1 = mark_in_place_init %operator_Star__carbon_thunk.call +// CHECK:STDOUT: %.loc14_47.3: ref %BinaryC = temporary %.loc14_47.1, %.loc14_47.2 +// CHECK:STDOUT: %.loc14_47.4: %BinaryC = acquire_value %.loc14_47.3 +// CHECK:STDOUT: %.loc14_33: type = splice_block %BinaryC.ref.loc14 [concrete = constants.%BinaryC] { // CHECK:STDOUT: %Cpp.ref.loc14: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc14: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %BinaryC.ref.loc14: type = name_ref BinaryC, imports.%BinaryC.decl [concrete = constants.%BinaryC] // CHECK:STDOUT: } -// CHECK:STDOUT: %multiplication: %C = wrapper_binding multiplication, %.loc14_41.4 +// CHECK:STDOUT: %multiplication: %BinaryC = wrapper_binding multiplication, %.loc14_47.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %multiplication.patt: %pattern_type.bbc = value_binding_pattern multiplication [concrete = constants.%multiplication.patt] +// CHECK:STDOUT: %multiplication.patt: %pattern_type.b2b = value_binding_pattern multiplication [concrete = constants.%multiplication.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1.ref.loc15: ref %C = name_ref c1, %c1 -// CHECK:STDOUT: %c2.ref.loc15: ref %C = name_ref c2, %c2 -// CHECK:STDOUT: %.loc15_35.1: ref %C = temporary_storage -// CHECK:STDOUT: %.loc15_32.1: %C = acquire_value %c1.ref.loc15 -// CHECK:STDOUT: %.loc15_37.1: %C = acquire_value %c2.ref.loc15 -// CHECK:STDOUT: %.loc15_32.2: ref %C = value_as_ref %.loc15_32.1 -// CHECK:STDOUT: %addr.loc15_35.1: %ptr.0a2 = addr_of %.loc15_32.2 -// CHECK:STDOUT: %.loc15_37.2: ref %C = value_as_ref %.loc15_37.1 -// CHECK:STDOUT: %addr.loc15_35.2: %ptr.0a2 = addr_of %.loc15_37.2 -// CHECK:STDOUT: %addr.loc15_35.3: %ptr.0a2 = addr_of %.loc15_35.1 -// CHECK:STDOUT: %operator_Slash__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Slash__carbon_thunk.decl(%addr.loc15_35.1, %addr.loc15_35.2, %addr.loc15_35.3) -// CHECK:STDOUT: %.loc15_35.2: init %C to %.loc15_35.1 = mark_in_place_init %operator_Slash__carbon_thunk.call -// CHECK:STDOUT: %.loc15_35.3: ref %C = temporary %.loc15_35.1, %.loc15_35.2 -// CHECK:STDOUT: %.loc15_35.4: %C = acquire_value %.loc15_35.3 -// CHECK:STDOUT: %.loc15_27: type = splice_block %C.ref.loc15 [concrete = constants.%C] { +// CHECK:STDOUT: %c1.ref.loc15: ref %BinaryC = name_ref c1, %c1 +// CHECK:STDOUT: %c2.ref.loc15: ref %BinaryC = name_ref c2, %c2 +// CHECK:STDOUT: %.loc15_41.1: ref %BinaryC = temporary_storage +// CHECK:STDOUT: %.loc15_38.1: %BinaryC = acquire_value %c1.ref.loc15 +// CHECK:STDOUT: %.loc15_43.1: %BinaryC = acquire_value %c2.ref.loc15 +// CHECK:STDOUT: %.loc15_38.2: ref %BinaryC = value_as_ref %.loc15_38.1 +// CHECK:STDOUT: %addr.loc15_41.1: %ptr.6da = addr_of %.loc15_38.2 +// CHECK:STDOUT: %.loc15_43.2: ref %BinaryC = value_as_ref %.loc15_43.1 +// CHECK:STDOUT: %addr.loc15_41.2: %ptr.6da = addr_of %.loc15_43.2 +// CHECK:STDOUT: %addr.loc15_41.3: %ptr.6da = addr_of %.loc15_41.1 +// CHECK:STDOUT: %operator_Slash__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Slash__carbon_thunk.decl(%addr.loc15_41.1, %addr.loc15_41.2, %addr.loc15_41.3) +// CHECK:STDOUT: %.loc15_41.2: init %BinaryC to %.loc15_41.1 = mark_in_place_init %operator_Slash__carbon_thunk.call +// CHECK:STDOUT: %.loc15_41.3: ref %BinaryC = temporary %.loc15_41.1, %.loc15_41.2 +// CHECK:STDOUT: %.loc15_41.4: %BinaryC = acquire_value %.loc15_41.3 +// CHECK:STDOUT: %.loc15_27: type = splice_block %BinaryC.ref.loc15 [concrete = constants.%BinaryC] { // CHECK:STDOUT: %Cpp.ref.loc15: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc15: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %BinaryC.ref.loc15: type = name_ref BinaryC, imports.%BinaryC.decl [concrete = constants.%BinaryC] // CHECK:STDOUT: } -// CHECK:STDOUT: %division: %C = wrapper_binding division, %.loc15_35.4 +// CHECK:STDOUT: %division: %BinaryC = wrapper_binding division, %.loc15_41.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %division.patt: %pattern_type.bbc = value_binding_pattern division [concrete = constants.%division.patt] +// CHECK:STDOUT: %division.patt: %pattern_type.b2b = value_binding_pattern division [concrete = constants.%division.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1.ref.loc16: ref %C = name_ref c1, %c1 -// CHECK:STDOUT: %c2.ref.loc16: ref %C = name_ref c2, %c2 -// CHECK:STDOUT: %.loc16_33.1: ref %C = temporary_storage -// CHECK:STDOUT: %.loc16_30.1: %C = acquire_value %c1.ref.loc16 -// CHECK:STDOUT: %.loc16_35.1: %C = acquire_value %c2.ref.loc16 -// CHECK:STDOUT: %.loc16_30.2: ref %C = value_as_ref %.loc16_30.1 -// CHECK:STDOUT: %addr.loc16_33.1: %ptr.0a2 = addr_of %.loc16_30.2 -// CHECK:STDOUT: %.loc16_35.2: ref %C = value_as_ref %.loc16_35.1 -// CHECK:STDOUT: %addr.loc16_33.2: %ptr.0a2 = addr_of %.loc16_35.2 -// CHECK:STDOUT: %addr.loc16_33.3: %ptr.0a2 = addr_of %.loc16_33.1 -// CHECK:STDOUT: %operator_Percent__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Percent__carbon_thunk.decl(%addr.loc16_33.1, %addr.loc16_33.2, %addr.loc16_33.3) -// CHECK:STDOUT: %.loc16_33.2: init %C to %.loc16_33.1 = mark_in_place_init %operator_Percent__carbon_thunk.call -// CHECK:STDOUT: %.loc16_33.3: ref %C = temporary %.loc16_33.1, %.loc16_33.2 -// CHECK:STDOUT: %.loc16_33.4: %C = acquire_value %.loc16_33.3 -// CHECK:STDOUT: %.loc16_25: type = splice_block %C.ref.loc16 [concrete = constants.%C] { +// CHECK:STDOUT: %c1.ref.loc16: ref %BinaryC = name_ref c1, %c1 +// CHECK:STDOUT: %c2.ref.loc16: ref %BinaryC = name_ref c2, %c2 +// CHECK:STDOUT: %.loc16_39.1: ref %BinaryC = temporary_storage +// CHECK:STDOUT: %.loc16_36.1: %BinaryC = acquire_value %c1.ref.loc16 +// CHECK:STDOUT: %.loc16_41.1: %BinaryC = acquire_value %c2.ref.loc16 +// CHECK:STDOUT: %.loc16_36.2: ref %BinaryC = value_as_ref %.loc16_36.1 +// CHECK:STDOUT: %addr.loc16_39.1: %ptr.6da = addr_of %.loc16_36.2 +// CHECK:STDOUT: %.loc16_41.2: ref %BinaryC = value_as_ref %.loc16_41.1 +// CHECK:STDOUT: %addr.loc16_39.2: %ptr.6da = addr_of %.loc16_41.2 +// CHECK:STDOUT: %addr.loc16_39.3: %ptr.6da = addr_of %.loc16_39.1 +// CHECK:STDOUT: %operator_Percent__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Percent__carbon_thunk.decl(%addr.loc16_39.1, %addr.loc16_39.2, %addr.loc16_39.3) +// CHECK:STDOUT: %.loc16_39.2: init %BinaryC to %.loc16_39.1 = mark_in_place_init %operator_Percent__carbon_thunk.call +// CHECK:STDOUT: %.loc16_39.3: ref %BinaryC = temporary %.loc16_39.1, %.loc16_39.2 +// CHECK:STDOUT: %.loc16_39.4: %BinaryC = acquire_value %.loc16_39.3 +// CHECK:STDOUT: %.loc16_25: type = splice_block %BinaryC.ref.loc16 [concrete = constants.%BinaryC] { // CHECK:STDOUT: %Cpp.ref.loc16: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc16: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %BinaryC.ref.loc16: type = name_ref BinaryC, imports.%BinaryC.decl [concrete = constants.%BinaryC] // CHECK:STDOUT: } -// CHECK:STDOUT: %modulo: %C = wrapper_binding modulo, %.loc16_33.4 +// CHECK:STDOUT: %modulo: %BinaryC = wrapper_binding modulo, %.loc16_39.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %modulo.patt: %pattern_type.bbc = value_binding_pattern modulo [concrete = constants.%modulo.patt] +// CHECK:STDOUT: %modulo.patt: %pattern_type.b2b = value_binding_pattern modulo [concrete = constants.%modulo.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1.ref.loc19: ref %C = name_ref c1, %c1 -// CHECK:STDOUT: %c2.ref.loc19: ref %C = name_ref c2, %c2 -// CHECK:STDOUT: %.loc19_38.1: ref %C = temporary_storage -// CHECK:STDOUT: %.loc19_35.1: %C = acquire_value %c1.ref.loc19 -// CHECK:STDOUT: %.loc19_40.1: %C = acquire_value %c2.ref.loc19 -// CHECK:STDOUT: %.loc19_35.2: ref %C = value_as_ref %.loc19_35.1 -// CHECK:STDOUT: %addr.loc19_38.1: %ptr.0a2 = addr_of %.loc19_35.2 -// CHECK:STDOUT: %.loc19_40.2: ref %C = value_as_ref %.loc19_40.1 -// CHECK:STDOUT: %addr.loc19_38.2: %ptr.0a2 = addr_of %.loc19_40.2 -// CHECK:STDOUT: %addr.loc19_38.3: %ptr.0a2 = addr_of %.loc19_38.1 -// CHECK:STDOUT: %operator_Amp__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Amp__carbon_thunk.decl(%addr.loc19_38.1, %addr.loc19_38.2, %addr.loc19_38.3) -// CHECK:STDOUT: %.loc19_38.2: init %C to %.loc19_38.1 = mark_in_place_init %operator_Amp__carbon_thunk.call -// CHECK:STDOUT: %.loc19_38.3: ref %C = temporary %.loc19_38.1, %.loc19_38.2 -// CHECK:STDOUT: %.loc19_38.4: %C = acquire_value %.loc19_38.3 -// CHECK:STDOUT: %.loc19_30: type = splice_block %C.ref.loc19 [concrete = constants.%C] { +// CHECK:STDOUT: %c1.ref.loc19: ref %BinaryC = name_ref c1, %c1 +// CHECK:STDOUT: %c2.ref.loc19: ref %BinaryC = name_ref c2, %c2 +// CHECK:STDOUT: %.loc19_44.1: ref %BinaryC = temporary_storage +// CHECK:STDOUT: %.loc19_41.1: %BinaryC = acquire_value %c1.ref.loc19 +// CHECK:STDOUT: %.loc19_46.1: %BinaryC = acquire_value %c2.ref.loc19 +// CHECK:STDOUT: %.loc19_41.2: ref %BinaryC = value_as_ref %.loc19_41.1 +// CHECK:STDOUT: %addr.loc19_44.1: %ptr.6da = addr_of %.loc19_41.2 +// CHECK:STDOUT: %.loc19_46.2: ref %BinaryC = value_as_ref %.loc19_46.1 +// CHECK:STDOUT: %addr.loc19_44.2: %ptr.6da = addr_of %.loc19_46.2 +// CHECK:STDOUT: %addr.loc19_44.3: %ptr.6da = addr_of %.loc19_44.1 +// CHECK:STDOUT: %operator_Amp__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Amp__carbon_thunk.decl(%addr.loc19_44.1, %addr.loc19_44.2, %addr.loc19_44.3) +// CHECK:STDOUT: %.loc19_44.2: init %BinaryC to %.loc19_44.1 = mark_in_place_init %operator_Amp__carbon_thunk.call +// CHECK:STDOUT: %.loc19_44.3: ref %BinaryC = temporary %.loc19_44.1, %.loc19_44.2 +// CHECK:STDOUT: %.loc19_44.4: %BinaryC = acquire_value %.loc19_44.3 +// CHECK:STDOUT: %.loc19_30: type = splice_block %BinaryC.ref.loc19 [concrete = constants.%BinaryC] { // CHECK:STDOUT: %Cpp.ref.loc19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc19: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %BinaryC.ref.loc19: type = name_ref BinaryC, imports.%BinaryC.decl [concrete = constants.%BinaryC] // CHECK:STDOUT: } -// CHECK:STDOUT: %bitwise_and: %C = wrapper_binding bitwise_and, %.loc19_38.4 +// CHECK:STDOUT: %bitwise_and: %BinaryC = wrapper_binding bitwise_and, %.loc19_44.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %bitwise_and.patt: %pattern_type.bbc = value_binding_pattern bitwise_and [concrete = constants.%bitwise_and.patt] +// CHECK:STDOUT: %bitwise_and.patt: %pattern_type.b2b = value_binding_pattern bitwise_and [concrete = constants.%bitwise_and.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1.ref.loc20: ref %C = name_ref c1, %c1 -// CHECK:STDOUT: %c2.ref.loc20: ref %C = name_ref c2, %c2 -// CHECK:STDOUT: %.loc20_37.1: ref %C = temporary_storage -// CHECK:STDOUT: %.loc20_34.1: %C = acquire_value %c1.ref.loc20 -// CHECK:STDOUT: %.loc20_39.1: %C = acquire_value %c2.ref.loc20 -// CHECK:STDOUT: %.loc20_34.2: ref %C = value_as_ref %.loc20_34.1 -// CHECK:STDOUT: %addr.loc20_37.1: %ptr.0a2 = addr_of %.loc20_34.2 -// CHECK:STDOUT: %.loc20_39.2: ref %C = value_as_ref %.loc20_39.1 -// CHECK:STDOUT: %addr.loc20_37.2: %ptr.0a2 = addr_of %.loc20_39.2 -// CHECK:STDOUT: %addr.loc20_37.3: %ptr.0a2 = addr_of %.loc20_37.1 -// CHECK:STDOUT: %operator_Pipe__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Pipe__carbon_thunk.decl(%addr.loc20_37.1, %addr.loc20_37.2, %addr.loc20_37.3) -// CHECK:STDOUT: %.loc20_37.2: init %C to %.loc20_37.1 = mark_in_place_init %operator_Pipe__carbon_thunk.call -// CHECK:STDOUT: %.loc20_37.3: ref %C = temporary %.loc20_37.1, %.loc20_37.2 -// CHECK:STDOUT: %.loc20_37.4: %C = acquire_value %.loc20_37.3 -// CHECK:STDOUT: %.loc20_29: type = splice_block %C.ref.loc20 [concrete = constants.%C] { +// CHECK:STDOUT: %c1.ref.loc20: ref %BinaryC = name_ref c1, %c1 +// CHECK:STDOUT: %c2.ref.loc20: ref %BinaryC = name_ref c2, %c2 +// CHECK:STDOUT: %.loc20_43.1: ref %BinaryC = temporary_storage +// CHECK:STDOUT: %.loc20_40.1: %BinaryC = acquire_value %c1.ref.loc20 +// CHECK:STDOUT: %.loc20_45.1: %BinaryC = acquire_value %c2.ref.loc20 +// CHECK:STDOUT: %.loc20_40.2: ref %BinaryC = value_as_ref %.loc20_40.1 +// CHECK:STDOUT: %addr.loc20_43.1: %ptr.6da = addr_of %.loc20_40.2 +// CHECK:STDOUT: %.loc20_45.2: ref %BinaryC = value_as_ref %.loc20_45.1 +// CHECK:STDOUT: %addr.loc20_43.2: %ptr.6da = addr_of %.loc20_45.2 +// CHECK:STDOUT: %addr.loc20_43.3: %ptr.6da = addr_of %.loc20_43.1 +// CHECK:STDOUT: %operator_Pipe__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Pipe__carbon_thunk.decl(%addr.loc20_43.1, %addr.loc20_43.2, %addr.loc20_43.3) +// CHECK:STDOUT: %.loc20_43.2: init %BinaryC to %.loc20_43.1 = mark_in_place_init %operator_Pipe__carbon_thunk.call +// CHECK:STDOUT: %.loc20_43.3: ref %BinaryC = temporary %.loc20_43.1, %.loc20_43.2 +// CHECK:STDOUT: %.loc20_43.4: %BinaryC = acquire_value %.loc20_43.3 +// CHECK:STDOUT: %.loc20_29: type = splice_block %BinaryC.ref.loc20 [concrete = constants.%BinaryC] { // CHECK:STDOUT: %Cpp.ref.loc20: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc20: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %BinaryC.ref.loc20: type = name_ref BinaryC, imports.%BinaryC.decl [concrete = constants.%BinaryC] // CHECK:STDOUT: } -// CHECK:STDOUT: %bitwise_or: %C = wrapper_binding bitwise_or, %.loc20_37.4 +// CHECK:STDOUT: %bitwise_or: %BinaryC = wrapper_binding bitwise_or, %.loc20_43.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %bitwise_or.patt: %pattern_type.bbc = value_binding_pattern bitwise_or [concrete = constants.%bitwise_or.patt] +// CHECK:STDOUT: %bitwise_or.patt: %pattern_type.b2b = value_binding_pattern bitwise_or [concrete = constants.%bitwise_or.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1.ref.loc21: ref %C = name_ref c1, %c1 -// CHECK:STDOUT: %c2.ref.loc21: ref %C = name_ref c2, %c2 -// CHECK:STDOUT: %.loc21_38.1: ref %C = temporary_storage -// CHECK:STDOUT: %.loc21_35.1: %C = acquire_value %c1.ref.loc21 -// CHECK:STDOUT: %.loc21_40.1: %C = acquire_value %c2.ref.loc21 -// CHECK:STDOUT: %.loc21_35.2: ref %C = value_as_ref %.loc21_35.1 -// CHECK:STDOUT: %addr.loc21_38.1: %ptr.0a2 = addr_of %.loc21_35.2 -// CHECK:STDOUT: %.loc21_40.2: ref %C = value_as_ref %.loc21_40.1 -// CHECK:STDOUT: %addr.loc21_38.2: %ptr.0a2 = addr_of %.loc21_40.2 -// CHECK:STDOUT: %addr.loc21_38.3: %ptr.0a2 = addr_of %.loc21_38.1 -// CHECK:STDOUT: %operator_Caret__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Caret__carbon_thunk.decl(%addr.loc21_38.1, %addr.loc21_38.2, %addr.loc21_38.3) -// CHECK:STDOUT: %.loc21_38.2: init %C to %.loc21_38.1 = mark_in_place_init %operator_Caret__carbon_thunk.call -// CHECK:STDOUT: %.loc21_38.3: ref %C = temporary %.loc21_38.1, %.loc21_38.2 -// CHECK:STDOUT: %.loc21_38.4: %C = acquire_value %.loc21_38.3 -// CHECK:STDOUT: %.loc21_30: type = splice_block %C.ref.loc21 [concrete = constants.%C] { +// CHECK:STDOUT: %c1.ref.loc21: ref %BinaryC = name_ref c1, %c1 +// CHECK:STDOUT: %c2.ref.loc21: ref %BinaryC = name_ref c2, %c2 +// CHECK:STDOUT: %.loc21_44.1: ref %BinaryC = temporary_storage +// CHECK:STDOUT: %.loc21_41.1: %BinaryC = acquire_value %c1.ref.loc21 +// CHECK:STDOUT: %.loc21_46.1: %BinaryC = acquire_value %c2.ref.loc21 +// CHECK:STDOUT: %.loc21_41.2: ref %BinaryC = value_as_ref %.loc21_41.1 +// CHECK:STDOUT: %addr.loc21_44.1: %ptr.6da = addr_of %.loc21_41.2 +// CHECK:STDOUT: %.loc21_46.2: ref %BinaryC = value_as_ref %.loc21_46.1 +// CHECK:STDOUT: %addr.loc21_44.2: %ptr.6da = addr_of %.loc21_46.2 +// CHECK:STDOUT: %addr.loc21_44.3: %ptr.6da = addr_of %.loc21_44.1 +// CHECK:STDOUT: %operator_Caret__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Caret__carbon_thunk.decl(%addr.loc21_44.1, %addr.loc21_44.2, %addr.loc21_44.3) +// CHECK:STDOUT: %.loc21_44.2: init %BinaryC to %.loc21_44.1 = mark_in_place_init %operator_Caret__carbon_thunk.call +// CHECK:STDOUT: %.loc21_44.3: ref %BinaryC = temporary %.loc21_44.1, %.loc21_44.2 +// CHECK:STDOUT: %.loc21_44.4: %BinaryC = acquire_value %.loc21_44.3 +// CHECK:STDOUT: %.loc21_30: type = splice_block %BinaryC.ref.loc21 [concrete = constants.%BinaryC] { // CHECK:STDOUT: %Cpp.ref.loc21: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc21: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %BinaryC.ref.loc21: type = name_ref BinaryC, imports.%BinaryC.decl [concrete = constants.%BinaryC] // CHECK:STDOUT: } -// CHECK:STDOUT: %bitwise_xor: %C = wrapper_binding bitwise_xor, %.loc21_38.4 +// CHECK:STDOUT: %bitwise_xor: %BinaryC = wrapper_binding bitwise_xor, %.loc21_44.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %bitwise_xor.patt: %pattern_type.bbc = value_binding_pattern bitwise_xor [concrete = constants.%bitwise_xor.patt] +// CHECK:STDOUT: %bitwise_xor.patt: %pattern_type.b2b = value_binding_pattern bitwise_xor [concrete = constants.%bitwise_xor.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1.ref.loc22: ref %C = name_ref c1, %c1 +// CHECK:STDOUT: %c1.ref.loc22: ref %BinaryC = name_ref c1, %c1 // CHECK:STDOUT: %int_3.loc22: Core.IntLiteral = int_value 3 [concrete = constants.%int_3.1ba] -// CHECK:STDOUT: %.loc22_37.1: ref %C = temporary_storage -// CHECK:STDOUT: %.loc22_34.1: %C = acquire_value %c1.ref.loc22 +// CHECK:STDOUT: %.loc22_43.1: ref %BinaryC = temporary_storage +// CHECK:STDOUT: %.loc22_40.1: %BinaryC = acquire_value %c1.ref.loc22 // CHECK:STDOUT: %impl.elem0.loc22: %.b7a = impl_witness_access constants.%ImplicitAs.impl_witness.a2a, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] -// CHECK:STDOUT: %bound_method.loc22_40.1: = bound_method %int_3.loc22, %impl.elem0.loc22 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.485] +// CHECK:STDOUT: %bound_method.loc22_46.1: = bound_method %int_3.loc22, %impl.elem0.loc22 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.485] // CHECK:STDOUT: %specific_fn.loc22: = specific_function %impl.elem0.loc22, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc22_40.2: = bound_method %int_3.loc22, %specific_fn.loc22 [concrete = constants.%bound_method.763] -// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc22: init %i32 = call %bound_method.loc22_40.2(%int_3.loc22) [concrete = constants.%int_3.410] -// CHECK:STDOUT: %.loc22_40.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc22 [concrete = constants.%int_3.410] -// CHECK:STDOUT: %.loc22_40.2: %i32 = converted %int_3.loc22, %.loc22_40.1 [concrete = constants.%int_3.410] -// CHECK:STDOUT: %.loc22_34.2: ref %C = value_as_ref %.loc22_34.1 -// CHECK:STDOUT: %addr.loc22_37.1: %ptr.0a2 = addr_of %.loc22_34.2 -// CHECK:STDOUT: %addr.loc22_37.2: %ptr.0a2 = addr_of %.loc22_37.1 -// CHECK:STDOUT: %operator_LessLess__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_LessLess__carbon_thunk.decl(%addr.loc22_37.1, %.loc22_40.2, %addr.loc22_37.2) -// CHECK:STDOUT: %.loc22_37.2: init %C to %.loc22_37.1 = mark_in_place_init %operator_LessLess__carbon_thunk.call -// CHECK:STDOUT: %.loc22_37.3: ref %C = temporary %.loc22_37.1, %.loc22_37.2 -// CHECK:STDOUT: %.loc22_37.4: %C = acquire_value %.loc22_37.3 -// CHECK:STDOUT: %.loc22_29: type = splice_block %C.ref.loc22 [concrete = constants.%C] { +// CHECK:STDOUT: %bound_method.loc22_46.2: = bound_method %int_3.loc22, %specific_fn.loc22 [concrete = constants.%bound_method.763] +// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc22: init %i32 = call %bound_method.loc22_46.2(%int_3.loc22) [concrete = constants.%int_3.410] +// CHECK:STDOUT: %.loc22_46.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc22 [concrete = constants.%int_3.410] +// CHECK:STDOUT: %.loc22_46.2: %i32 = converted %int_3.loc22, %.loc22_46.1 [concrete = constants.%int_3.410] +// CHECK:STDOUT: %.loc22_40.2: ref %BinaryC = value_as_ref %.loc22_40.1 +// CHECK:STDOUT: %addr.loc22_43.1: %ptr.6da = addr_of %.loc22_40.2 +// CHECK:STDOUT: %addr.loc22_43.2: %ptr.6da = addr_of %.loc22_43.1 +// CHECK:STDOUT: %operator_LessLess__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_LessLess__carbon_thunk.decl(%addr.loc22_43.1, %.loc22_46.2, %addr.loc22_43.2) +// CHECK:STDOUT: %.loc22_43.2: init %BinaryC to %.loc22_43.1 = mark_in_place_init %operator_LessLess__carbon_thunk.call +// CHECK:STDOUT: %.loc22_43.3: ref %BinaryC = temporary %.loc22_43.1, %.loc22_43.2 +// CHECK:STDOUT: %.loc22_43.4: %BinaryC = acquire_value %.loc22_43.3 +// CHECK:STDOUT: %.loc22_29: type = splice_block %BinaryC.ref.loc22 [concrete = constants.%BinaryC] { // CHECK:STDOUT: %Cpp.ref.loc22: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc22: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %BinaryC.ref.loc22: type = name_ref BinaryC, imports.%BinaryC.decl [concrete = constants.%BinaryC] // CHECK:STDOUT: } -// CHECK:STDOUT: %left_shift: %C = wrapper_binding left_shift, %.loc22_37.4 +// CHECK:STDOUT: %left_shift: %BinaryC = wrapper_binding left_shift, %.loc22_43.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %left_shift.patt: %pattern_type.bbc = value_binding_pattern left_shift [concrete = constants.%left_shift.patt] +// CHECK:STDOUT: %left_shift.patt: %pattern_type.b2b = value_binding_pattern left_shift [concrete = constants.%left_shift.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1.ref.loc23: ref %C = name_ref c1, %c1 +// CHECK:STDOUT: %c1.ref.loc23: ref %BinaryC = name_ref c1, %c1 // CHECK:STDOUT: %int_5.loc23: Core.IntLiteral = int_value 5 [concrete = constants.%int_5.64b] -// CHECK:STDOUT: %.loc23_38.1: ref %C = temporary_storage -// CHECK:STDOUT: %.loc23_35.1: %C = acquire_value %c1.ref.loc23 +// CHECK:STDOUT: %.loc23_44.1: ref %BinaryC = temporary_storage +// CHECK:STDOUT: %.loc23_41.1: %BinaryC = acquire_value %c1.ref.loc23 // CHECK:STDOUT: %impl.elem0.loc23: %.b7a = impl_witness_access constants.%ImplicitAs.impl_witness.a2a, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] -// CHECK:STDOUT: %bound_method.loc23_41.1: = bound_method %int_5.loc23, %impl.elem0.loc23 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.f6c] +// CHECK:STDOUT: %bound_method.loc23_47.1: = bound_method %int_5.loc23, %impl.elem0.loc23 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.f6c] // CHECK:STDOUT: %specific_fn.loc23: = specific_function %impl.elem0.loc23, @Core.IntLiteral.as.ImplicitAs.impl.Convert(constants.%int_32) [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn] -// CHECK:STDOUT: %bound_method.loc23_41.2: = bound_method %int_5.loc23, %specific_fn.loc23 [concrete = constants.%bound_method.c9d] -// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc23: init %i32 = call %bound_method.loc23_41.2(%int_5.loc23) [concrete = constants.%int_5.eef] -// CHECK:STDOUT: %.loc23_41.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc23 [concrete = constants.%int_5.eef] -// CHECK:STDOUT: %.loc23_41.2: %i32 = converted %int_5.loc23, %.loc23_41.1 [concrete = constants.%int_5.eef] -// CHECK:STDOUT: %.loc23_35.2: ref %C = value_as_ref %.loc23_35.1 -// CHECK:STDOUT: %addr.loc23_38.1: %ptr.0a2 = addr_of %.loc23_35.2 -// CHECK:STDOUT: %addr.loc23_38.2: %ptr.0a2 = addr_of %.loc23_38.1 -// CHECK:STDOUT: %operator_GreaterGreater__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_GreaterGreater__carbon_thunk.decl(%addr.loc23_38.1, %.loc23_41.2, %addr.loc23_38.2) -// CHECK:STDOUT: %.loc23_38.2: init %C to %.loc23_38.1 = mark_in_place_init %operator_GreaterGreater__carbon_thunk.call -// CHECK:STDOUT: %.loc23_38.3: ref %C = temporary %.loc23_38.1, %.loc23_38.2 -// CHECK:STDOUT: %.loc23_38.4: %C = acquire_value %.loc23_38.3 -// CHECK:STDOUT: %.loc23_30: type = splice_block %C.ref.loc23 [concrete = constants.%C] { +// CHECK:STDOUT: %bound_method.loc23_47.2: = bound_method %int_5.loc23, %specific_fn.loc23 [concrete = constants.%bound_method.c9d] +// CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc23: init %i32 = call %bound_method.loc23_47.2(%int_5.loc23) [concrete = constants.%int_5.eef] +// CHECK:STDOUT: %.loc23_47.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc23 [concrete = constants.%int_5.eef] +// CHECK:STDOUT: %.loc23_47.2: %i32 = converted %int_5.loc23, %.loc23_47.1 [concrete = constants.%int_5.eef] +// CHECK:STDOUT: %.loc23_41.2: ref %BinaryC = value_as_ref %.loc23_41.1 +// CHECK:STDOUT: %addr.loc23_44.1: %ptr.6da = addr_of %.loc23_41.2 +// CHECK:STDOUT: %addr.loc23_44.2: %ptr.6da = addr_of %.loc23_44.1 +// CHECK:STDOUT: %operator_GreaterGreater__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_GreaterGreater__carbon_thunk.decl(%addr.loc23_44.1, %.loc23_47.2, %addr.loc23_44.2) +// CHECK:STDOUT: %.loc23_44.2: init %BinaryC to %.loc23_44.1 = mark_in_place_init %operator_GreaterGreater__carbon_thunk.call +// CHECK:STDOUT: %.loc23_44.3: ref %BinaryC = temporary %.loc23_44.1, %.loc23_44.2 +// CHECK:STDOUT: %.loc23_44.4: %BinaryC = acquire_value %.loc23_44.3 +// CHECK:STDOUT: %.loc23_30: type = splice_block %BinaryC.ref.loc23 [concrete = constants.%BinaryC] { // CHECK:STDOUT: %Cpp.ref.loc23: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc23: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %BinaryC.ref.loc23: type = name_ref BinaryC, imports.%BinaryC.decl [concrete = constants.%BinaryC] // CHECK:STDOUT: } -// CHECK:STDOUT: %right_shift: %C = wrapper_binding right_shift, %.loc23_38.4 +// CHECK:STDOUT: %right_shift: %BinaryC = wrapper_binding right_shift, %.loc23_44.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %right_shift.patt: %pattern_type.bbc = value_binding_pattern right_shift [concrete = constants.%right_shift.patt] +// CHECK:STDOUT: %right_shift.patt: %pattern_type.b2b = value_binding_pattern right_shift [concrete = constants.%right_shift.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1.ref.loc26: ref %C = name_ref c1, %c1 -// CHECK:STDOUT: %c2.ref.loc26: ref %C = name_ref c2, %c2 -// CHECK:STDOUT: %.loc26_9.1: %C = acquire_value %c2.ref.loc26 -// CHECK:STDOUT: %.loc26_9.2: ref %C = value_as_ref %.loc26_9.1 -// CHECK:STDOUT: %addr.loc26: %ptr.0a2 = addr_of %.loc26_9.2 -// CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.call: ref %C = call imports.%operator_PlusEqual__carbon_thunk.decl(%c1.ref.loc26, %addr.loc26) -// CHECK:STDOUT: %c1.ref.loc27: ref %C = name_ref c1, %c1 -// CHECK:STDOUT: %c2.ref.loc27: ref %C = name_ref c2, %c2 -// CHECK:STDOUT: %.loc27_9.1: %C = acquire_value %c2.ref.loc27 -// CHECK:STDOUT: %.loc27_9.2: ref %C = value_as_ref %.loc27_9.1 -// CHECK:STDOUT: %addr.loc27: %ptr.0a2 = addr_of %.loc27_9.2 -// CHECK:STDOUT: %operator_MinusEqual__carbon_thunk.call: ref %C = call imports.%operator_MinusEqual__carbon_thunk.decl(%c1.ref.loc27, %addr.loc27) -// CHECK:STDOUT: %c1.ref.loc28: ref %C = name_ref c1, %c1 -// CHECK:STDOUT: %c2.ref.loc28: ref %C = name_ref c2, %c2 -// CHECK:STDOUT: %.loc28_9.1: %C = acquire_value %c2.ref.loc28 -// CHECK:STDOUT: %.loc28_9.2: ref %C = value_as_ref %.loc28_9.1 -// CHECK:STDOUT: %addr.loc28: %ptr.0a2 = addr_of %.loc28_9.2 -// CHECK:STDOUT: %operator_StarEqual__carbon_thunk.call: ref %C = call imports.%operator_StarEqual__carbon_thunk.decl(%c1.ref.loc28, %addr.loc28) -// CHECK:STDOUT: %c1.ref.loc29: ref %C = name_ref c1, %c1 -// CHECK:STDOUT: %c2.ref.loc29: ref %C = name_ref c2, %c2 -// CHECK:STDOUT: %.loc29_9.1: %C = acquire_value %c2.ref.loc29 -// CHECK:STDOUT: %.loc29_9.2: ref %C = value_as_ref %.loc29_9.1 -// CHECK:STDOUT: %addr.loc29: %ptr.0a2 = addr_of %.loc29_9.2 -// CHECK:STDOUT: %operator_SlashEqual__carbon_thunk.call: ref %C = call imports.%operator_SlashEqual__carbon_thunk.decl(%c1.ref.loc29, %addr.loc29) -// CHECK:STDOUT: %c1.ref.loc30: ref %C = name_ref c1, %c1 -// CHECK:STDOUT: %c2.ref.loc30: ref %C = name_ref c2, %c2 -// CHECK:STDOUT: %.loc30_9.1: %C = acquire_value %c2.ref.loc30 -// CHECK:STDOUT: %.loc30_9.2: ref %C = value_as_ref %.loc30_9.1 -// CHECK:STDOUT: %addr.loc30: %ptr.0a2 = addr_of %.loc30_9.2 -// CHECK:STDOUT: %operator_PercentEqual__carbon_thunk.call: ref %C = call imports.%operator_PercentEqual__carbon_thunk.decl(%c1.ref.loc30, %addr.loc30) -// CHECK:STDOUT: %c1.ref.loc33: ref %C = name_ref c1, %c1 -// CHECK:STDOUT: %c2.ref.loc33: ref %C = name_ref c2, %c2 -// CHECK:STDOUT: %.loc33_9.1: %C = acquire_value %c2.ref.loc33 -// CHECK:STDOUT: %.loc33_9.2: ref %C = value_as_ref %.loc33_9.1 -// CHECK:STDOUT: %addr.loc33: %ptr.0a2 = addr_of %.loc33_9.2 -// CHECK:STDOUT: %operator_AmpEqual__carbon_thunk.call: ref %C = call imports.%operator_AmpEqual__carbon_thunk.decl(%c1.ref.loc33, %addr.loc33) -// CHECK:STDOUT: %c1.ref.loc34: ref %C = name_ref c1, %c1 -// CHECK:STDOUT: %c2.ref.loc34: ref %C = name_ref c2, %c2 -// CHECK:STDOUT: %.loc34_9.1: %C = acquire_value %c2.ref.loc34 -// CHECK:STDOUT: %.loc34_9.2: ref %C = value_as_ref %.loc34_9.1 -// CHECK:STDOUT: %addr.loc34: %ptr.0a2 = addr_of %.loc34_9.2 -// CHECK:STDOUT: %operator_PipeEqual__carbon_thunk.call: ref %C = call imports.%operator_PipeEqual__carbon_thunk.decl(%c1.ref.loc34, %addr.loc34) -// CHECK:STDOUT: %c1.ref.loc35: ref %C = name_ref c1, %c1 -// CHECK:STDOUT: %c2.ref.loc35: ref %C = name_ref c2, %c2 -// CHECK:STDOUT: %.loc35_9.1: %C = acquire_value %c2.ref.loc35 -// CHECK:STDOUT: %.loc35_9.2: ref %C = value_as_ref %.loc35_9.1 -// CHECK:STDOUT: %addr.loc35: %ptr.0a2 = addr_of %.loc35_9.2 -// CHECK:STDOUT: %operator_CaretEqual__carbon_thunk.call: ref %C = call imports.%operator_CaretEqual__carbon_thunk.decl(%c1.ref.loc35, %addr.loc35) -// CHECK:STDOUT: %c1.ref.loc36: ref %C = name_ref c1, %c1 +// CHECK:STDOUT: %c1.ref.loc26: ref %BinaryC = name_ref c1, %c1 +// CHECK:STDOUT: %c2.ref.loc26: ref %BinaryC = name_ref c2, %c2 +// CHECK:STDOUT: %.loc26_9.1: %BinaryC = acquire_value %c2.ref.loc26 +// CHECK:STDOUT: %.loc26_9.2: ref %BinaryC = value_as_ref %.loc26_9.1 +// CHECK:STDOUT: %addr.loc26: %ptr.6da = addr_of %.loc26_9.2 +// CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.call: ref %BinaryC = call imports.%operator_PlusEqual__carbon_thunk.decl(%c1.ref.loc26, %addr.loc26) +// CHECK:STDOUT: %c1.ref.loc27: ref %BinaryC = name_ref c1, %c1 +// CHECK:STDOUT: %c2.ref.loc27: ref %BinaryC = name_ref c2, %c2 +// CHECK:STDOUT: %.loc27_9.1: %BinaryC = acquire_value %c2.ref.loc27 +// CHECK:STDOUT: %.loc27_9.2: ref %BinaryC = value_as_ref %.loc27_9.1 +// CHECK:STDOUT: %addr.loc27: %ptr.6da = addr_of %.loc27_9.2 +// CHECK:STDOUT: %operator_MinusEqual__carbon_thunk.call: ref %BinaryC = call imports.%operator_MinusEqual__carbon_thunk.decl(%c1.ref.loc27, %addr.loc27) +// CHECK:STDOUT: %c1.ref.loc28: ref %BinaryC = name_ref c1, %c1 +// CHECK:STDOUT: %c2.ref.loc28: ref %BinaryC = name_ref c2, %c2 +// CHECK:STDOUT: %.loc28_9.1: %BinaryC = acquire_value %c2.ref.loc28 +// CHECK:STDOUT: %.loc28_9.2: ref %BinaryC = value_as_ref %.loc28_9.1 +// CHECK:STDOUT: %addr.loc28: %ptr.6da = addr_of %.loc28_9.2 +// CHECK:STDOUT: %operator_StarEqual__carbon_thunk.call: ref %BinaryC = call imports.%operator_StarEqual__carbon_thunk.decl(%c1.ref.loc28, %addr.loc28) +// CHECK:STDOUT: %c1.ref.loc29: ref %BinaryC = name_ref c1, %c1 +// CHECK:STDOUT: %c2.ref.loc29: ref %BinaryC = name_ref c2, %c2 +// CHECK:STDOUT: %.loc29_9.1: %BinaryC = acquire_value %c2.ref.loc29 +// CHECK:STDOUT: %.loc29_9.2: ref %BinaryC = value_as_ref %.loc29_9.1 +// CHECK:STDOUT: %addr.loc29: %ptr.6da = addr_of %.loc29_9.2 +// CHECK:STDOUT: %operator_SlashEqual__carbon_thunk.call: ref %BinaryC = call imports.%operator_SlashEqual__carbon_thunk.decl(%c1.ref.loc29, %addr.loc29) +// CHECK:STDOUT: %c1.ref.loc30: ref %BinaryC = name_ref c1, %c1 +// CHECK:STDOUT: %c2.ref.loc30: ref %BinaryC = name_ref c2, %c2 +// CHECK:STDOUT: %.loc30_9.1: %BinaryC = acquire_value %c2.ref.loc30 +// CHECK:STDOUT: %.loc30_9.2: ref %BinaryC = value_as_ref %.loc30_9.1 +// CHECK:STDOUT: %addr.loc30: %ptr.6da = addr_of %.loc30_9.2 +// CHECK:STDOUT: %operator_PercentEqual__carbon_thunk.call: ref %BinaryC = call imports.%operator_PercentEqual__carbon_thunk.decl(%c1.ref.loc30, %addr.loc30) +// CHECK:STDOUT: %c1.ref.loc33: ref %BinaryC = name_ref c1, %c1 +// CHECK:STDOUT: %c2.ref.loc33: ref %BinaryC = name_ref c2, %c2 +// CHECK:STDOUT: %.loc33_9.1: %BinaryC = acquire_value %c2.ref.loc33 +// CHECK:STDOUT: %.loc33_9.2: ref %BinaryC = value_as_ref %.loc33_9.1 +// CHECK:STDOUT: %addr.loc33: %ptr.6da = addr_of %.loc33_9.2 +// CHECK:STDOUT: %operator_AmpEqual__carbon_thunk.call: ref %BinaryC = call imports.%operator_AmpEqual__carbon_thunk.decl(%c1.ref.loc33, %addr.loc33) +// CHECK:STDOUT: %c1.ref.loc34: ref %BinaryC = name_ref c1, %c1 +// CHECK:STDOUT: %c2.ref.loc34: ref %BinaryC = name_ref c2, %c2 +// CHECK:STDOUT: %.loc34_9.1: %BinaryC = acquire_value %c2.ref.loc34 +// CHECK:STDOUT: %.loc34_9.2: ref %BinaryC = value_as_ref %.loc34_9.1 +// CHECK:STDOUT: %addr.loc34: %ptr.6da = addr_of %.loc34_9.2 +// CHECK:STDOUT: %operator_PipeEqual__carbon_thunk.call: ref %BinaryC = call imports.%operator_PipeEqual__carbon_thunk.decl(%c1.ref.loc34, %addr.loc34) +// CHECK:STDOUT: %c1.ref.loc35: ref %BinaryC = name_ref c1, %c1 +// CHECK:STDOUT: %c2.ref.loc35: ref %BinaryC = name_ref c2, %c2 +// CHECK:STDOUT: %.loc35_9.1: %BinaryC = acquire_value %c2.ref.loc35 +// CHECK:STDOUT: %.loc35_9.2: ref %BinaryC = value_as_ref %.loc35_9.1 +// CHECK:STDOUT: %addr.loc35: %ptr.6da = addr_of %.loc35_9.2 +// CHECK:STDOUT: %operator_CaretEqual__carbon_thunk.call: ref %BinaryC = call imports.%operator_CaretEqual__carbon_thunk.decl(%c1.ref.loc35, %addr.loc35) +// CHECK:STDOUT: %c1.ref.loc36: ref %BinaryC = name_ref c1, %c1 // CHECK:STDOUT: %int_3.loc36: Core.IntLiteral = int_value 3 [concrete = constants.%int_3.1ba] // CHECK:STDOUT: %impl.elem0.loc36: %.b7a = impl_witness_access constants.%ImplicitAs.impl_witness.a2a, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc36_10.1: = bound_method %int_3.loc36, %impl.elem0.loc36 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.485] @@ -1764,8 +1764,8 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc36: init %i32 = call %bound_method.loc36_10.2(%int_3.loc36) [concrete = constants.%int_3.410] // CHECK:STDOUT: %.loc36_10.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc36 [concrete = constants.%int_3.410] // CHECK:STDOUT: %.loc36_10.2: %i32 = converted %int_3.loc36, %.loc36_10.1 [concrete = constants.%int_3.410] -// CHECK:STDOUT: %cpp_operator.call.loc36: ref %C = call imports.%cpp_operator.decl.5ce91d.19(%c1.ref.loc36, %.loc36_10.2) -// CHECK:STDOUT: %c1.ref.loc37: ref %C = name_ref c1, %c1 +// CHECK:STDOUT: %cpp_operator.call.loc36: ref %BinaryC = call imports.%cpp_operator.decl.5ce91d.19(%c1.ref.loc36, %.loc36_10.2) +// CHECK:STDOUT: %c1.ref.loc37: ref %BinaryC = name_ref c1, %c1 // CHECK:STDOUT: %int_5.loc37: Core.IntLiteral = int_value 5 [concrete = constants.%int_5.64b] // CHECK:STDOUT: %impl.elem0.loc37: %.b7a = impl_witness_access constants.%ImplicitAs.impl_witness.a2a, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc37_10.1: = bound_method %int_5.loc37, %impl.elem0.loc37 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.f6c] @@ -1774,15 +1774,15 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc37: init %i32 = call %bound_method.loc37_10.2(%int_5.loc37) [concrete = constants.%int_5.eef] // CHECK:STDOUT: %.loc37_10.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc37 [concrete = constants.%int_5.eef] // CHECK:STDOUT: %.loc37_10.2: %i32 = converted %int_5.loc37, %.loc37_10.1 [concrete = constants.%int_5.eef] -// CHECK:STDOUT: %cpp_operator.call.loc37: ref %C = call imports.%cpp_operator.decl.5ce91d.20(%c1.ref.loc37, %.loc37_10.2) -// CHECK:STDOUT: %c1.ref.loc40: ref %C = name_ref c1, %c1 -// CHECK:STDOUT: %c2.ref.loc40: ref %C = name_ref c2, %c2 -// CHECK:STDOUT: %.loc40_28.1: %C = acquire_value %c1.ref.loc40 -// CHECK:STDOUT: %.loc40_34.1: %C = acquire_value %c2.ref.loc40 -// CHECK:STDOUT: %.loc40_28.2: ref %C = value_as_ref %.loc40_28.1 -// CHECK:STDOUT: %addr.loc40_31.1: %ptr.0a2 = addr_of %.loc40_28.2 -// CHECK:STDOUT: %.loc40_34.2: ref %C = value_as_ref %.loc40_34.1 -// CHECK:STDOUT: %addr.loc40_31.2: %ptr.0a2 = addr_of %.loc40_34.2 +// CHECK:STDOUT: %cpp_operator.call.loc37: ref %BinaryC = call imports.%cpp_operator.decl.5ce91d.20(%c1.ref.loc37, %.loc37_10.2) +// CHECK:STDOUT: %c1.ref.loc40: ref %BinaryC = name_ref c1, %c1 +// CHECK:STDOUT: %c2.ref.loc40: ref %BinaryC = name_ref c2, %c2 +// CHECK:STDOUT: %.loc40_28.1: %BinaryC = acquire_value %c1.ref.loc40 +// CHECK:STDOUT: %.loc40_34.1: %BinaryC = acquire_value %c2.ref.loc40 +// CHECK:STDOUT: %.loc40_28.2: ref %BinaryC = value_as_ref %.loc40_28.1 +// CHECK:STDOUT: %addr.loc40_31.1: %ptr.6da = addr_of %.loc40_28.2 +// CHECK:STDOUT: %.loc40_34.2: ref %BinaryC = value_as_ref %.loc40_34.1 +// CHECK:STDOUT: %addr.loc40_31.2: %ptr.6da = addr_of %.loc40_34.2 // CHECK:STDOUT: %.loc40_31.1: ref bool = temporary_storage // CHECK:STDOUT: %addr.loc40_31.3: %ptr.bb2 = addr_of %.loc40_31.1 // CHECK:STDOUT: %operator_EqualEqual__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_EqualEqual__carbon_thunk.decl(%addr.loc40_31.1, %addr.loc40_31.2, %addr.loc40_31.3) @@ -1794,14 +1794,14 @@ fn F() { // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %equal.patt: %pattern_type.831 = value_binding_pattern equal [concrete = constants.%equal.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1.ref.loc41: ref %C = name_ref c1, %c1 -// CHECK:STDOUT: %c2.ref.loc41: ref %C = name_ref c2, %c2 -// CHECK:STDOUT: %.loc41_32.1: %C = acquire_value %c1.ref.loc41 -// CHECK:STDOUT: %.loc41_38.1: %C = acquire_value %c2.ref.loc41 -// CHECK:STDOUT: %.loc41_32.2: ref %C = value_as_ref %.loc41_32.1 -// CHECK:STDOUT: %addr.loc41_35.1: %ptr.0a2 = addr_of %.loc41_32.2 -// CHECK:STDOUT: %.loc41_38.2: ref %C = value_as_ref %.loc41_38.1 -// CHECK:STDOUT: %addr.loc41_35.2: %ptr.0a2 = addr_of %.loc41_38.2 +// CHECK:STDOUT: %c1.ref.loc41: ref %BinaryC = name_ref c1, %c1 +// CHECK:STDOUT: %c2.ref.loc41: ref %BinaryC = name_ref c2, %c2 +// CHECK:STDOUT: %.loc41_32.1: %BinaryC = acquire_value %c1.ref.loc41 +// CHECK:STDOUT: %.loc41_38.1: %BinaryC = acquire_value %c2.ref.loc41 +// CHECK:STDOUT: %.loc41_32.2: ref %BinaryC = value_as_ref %.loc41_32.1 +// CHECK:STDOUT: %addr.loc41_35.1: %ptr.6da = addr_of %.loc41_32.2 +// CHECK:STDOUT: %.loc41_38.2: ref %BinaryC = value_as_ref %.loc41_38.1 +// CHECK:STDOUT: %addr.loc41_35.2: %ptr.6da = addr_of %.loc41_38.2 // CHECK:STDOUT: %.loc41_35.1: ref bool = temporary_storage // CHECK:STDOUT: %addr.loc41_35.3: %ptr.bb2 = addr_of %.loc41_35.1 // CHECK:STDOUT: %operator_ExclaimEqual__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_ExclaimEqual__carbon_thunk.decl(%addr.loc41_35.1, %addr.loc41_35.2, %addr.loc41_35.3) @@ -1813,14 +1813,14 @@ fn F() { // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %not_equal.patt: %pattern_type.831 = value_binding_pattern not_equal [concrete = constants.%not_equal.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1.ref.loc42: ref %C = name_ref c1, %c1 -// CHECK:STDOUT: %c2.ref.loc42: ref %C = name_ref c2, %c2 -// CHECK:STDOUT: %.loc42_35.1: %C = acquire_value %c1.ref.loc42 -// CHECK:STDOUT: %.loc42_40.1: %C = acquire_value %c2.ref.loc42 -// CHECK:STDOUT: %.loc42_35.2: ref %C = value_as_ref %.loc42_35.1 -// CHECK:STDOUT: %addr.loc42_38.1: %ptr.0a2 = addr_of %.loc42_35.2 -// CHECK:STDOUT: %.loc42_40.2: ref %C = value_as_ref %.loc42_40.1 -// CHECK:STDOUT: %addr.loc42_38.2: %ptr.0a2 = addr_of %.loc42_40.2 +// CHECK:STDOUT: %c1.ref.loc42: ref %BinaryC = name_ref c1, %c1 +// CHECK:STDOUT: %c2.ref.loc42: ref %BinaryC = name_ref c2, %c2 +// CHECK:STDOUT: %.loc42_35.1: %BinaryC = acquire_value %c1.ref.loc42 +// CHECK:STDOUT: %.loc42_40.1: %BinaryC = acquire_value %c2.ref.loc42 +// CHECK:STDOUT: %.loc42_35.2: ref %BinaryC = value_as_ref %.loc42_35.1 +// CHECK:STDOUT: %addr.loc42_38.1: %ptr.6da = addr_of %.loc42_35.2 +// CHECK:STDOUT: %.loc42_40.2: ref %BinaryC = value_as_ref %.loc42_40.1 +// CHECK:STDOUT: %addr.loc42_38.2: %ptr.6da = addr_of %.loc42_40.2 // CHECK:STDOUT: %.loc42_38.1: ref bool = temporary_storage // CHECK:STDOUT: %addr.loc42_38.3: %ptr.bb2 = addr_of %.loc42_38.1 // CHECK:STDOUT: %operator_Greater__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Greater__carbon_thunk.decl(%addr.loc42_38.1, %addr.loc42_38.2, %addr.loc42_38.3) @@ -1832,14 +1832,14 @@ fn F() { // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %greater_than.patt: %pattern_type.831 = value_binding_pattern greater_than [concrete = constants.%greater_than.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1.ref.loc43: ref %C = name_ref c1, %c1 -// CHECK:STDOUT: %c2.ref.loc43: ref %C = name_ref c2, %c2 -// CHECK:STDOUT: %.loc43_32.1: %C = acquire_value %c1.ref.loc43 -// CHECK:STDOUT: %.loc43_37.1: %C = acquire_value %c2.ref.loc43 -// CHECK:STDOUT: %.loc43_32.2: ref %C = value_as_ref %.loc43_32.1 -// CHECK:STDOUT: %addr.loc43_35.1: %ptr.0a2 = addr_of %.loc43_32.2 -// CHECK:STDOUT: %.loc43_37.2: ref %C = value_as_ref %.loc43_37.1 -// CHECK:STDOUT: %addr.loc43_35.2: %ptr.0a2 = addr_of %.loc43_37.2 +// CHECK:STDOUT: %c1.ref.loc43: ref %BinaryC = name_ref c1, %c1 +// CHECK:STDOUT: %c2.ref.loc43: ref %BinaryC = name_ref c2, %c2 +// CHECK:STDOUT: %.loc43_32.1: %BinaryC = acquire_value %c1.ref.loc43 +// CHECK:STDOUT: %.loc43_37.1: %BinaryC = acquire_value %c2.ref.loc43 +// CHECK:STDOUT: %.loc43_32.2: ref %BinaryC = value_as_ref %.loc43_32.1 +// CHECK:STDOUT: %addr.loc43_35.1: %ptr.6da = addr_of %.loc43_32.2 +// CHECK:STDOUT: %.loc43_37.2: ref %BinaryC = value_as_ref %.loc43_37.1 +// CHECK:STDOUT: %addr.loc43_35.2: %ptr.6da = addr_of %.loc43_37.2 // CHECK:STDOUT: %.loc43_35.1: ref bool = temporary_storage // CHECK:STDOUT: %addr.loc43_35.3: %ptr.bb2 = addr_of %.loc43_35.1 // CHECK:STDOUT: %operator_Less__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Less__carbon_thunk.decl(%addr.loc43_35.1, %addr.loc43_35.2, %addr.loc43_35.3) @@ -1851,14 +1851,14 @@ fn F() { // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %less_than.patt: %pattern_type.831 = value_binding_pattern less_than [concrete = constants.%less_than.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1.ref.loc44: ref %C = name_ref c1, %c1 -// CHECK:STDOUT: %c2.ref.loc44: ref %C = name_ref c2, %c2 -// CHECK:STDOUT: %.loc44_44.1: %C = acquire_value %c1.ref.loc44 -// CHECK:STDOUT: %.loc44_50.1: %C = acquire_value %c2.ref.loc44 -// CHECK:STDOUT: %.loc44_44.2: ref %C = value_as_ref %.loc44_44.1 -// CHECK:STDOUT: %addr.loc44_47.1: %ptr.0a2 = addr_of %.loc44_44.2 -// CHECK:STDOUT: %.loc44_50.2: ref %C = value_as_ref %.loc44_50.1 -// CHECK:STDOUT: %addr.loc44_47.2: %ptr.0a2 = addr_of %.loc44_50.2 +// CHECK:STDOUT: %c1.ref.loc44: ref %BinaryC = name_ref c1, %c1 +// CHECK:STDOUT: %c2.ref.loc44: ref %BinaryC = name_ref c2, %c2 +// CHECK:STDOUT: %.loc44_44.1: %BinaryC = acquire_value %c1.ref.loc44 +// CHECK:STDOUT: %.loc44_50.1: %BinaryC = acquire_value %c2.ref.loc44 +// CHECK:STDOUT: %.loc44_44.2: ref %BinaryC = value_as_ref %.loc44_44.1 +// CHECK:STDOUT: %addr.loc44_47.1: %ptr.6da = addr_of %.loc44_44.2 +// CHECK:STDOUT: %.loc44_50.2: ref %BinaryC = value_as_ref %.loc44_50.1 +// CHECK:STDOUT: %addr.loc44_47.2: %ptr.6da = addr_of %.loc44_50.2 // CHECK:STDOUT: %.loc44_47.1: ref bool = temporary_storage // CHECK:STDOUT: %addr.loc44_47.3: %ptr.bb2 = addr_of %.loc44_47.1 // CHECK:STDOUT: %operator_GreaterEqual__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_GreaterEqual__carbon_thunk.decl(%addr.loc44_47.1, %addr.loc44_47.2, %addr.loc44_47.3) @@ -1870,14 +1870,14 @@ fn F() { // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %greater_than_or_equal.patt: %pattern_type.831 = value_binding_pattern greater_than_or_equal [concrete = constants.%greater_than_or_equal.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1.ref.loc45: ref %C = name_ref c1, %c1 -// CHECK:STDOUT: %c2.ref.loc45: ref %C = name_ref c2, %c2 -// CHECK:STDOUT: %.loc45_41.1: %C = acquire_value %c1.ref.loc45 -// CHECK:STDOUT: %.loc45_47.1: %C = acquire_value %c2.ref.loc45 -// CHECK:STDOUT: %.loc45_41.2: ref %C = value_as_ref %.loc45_41.1 -// CHECK:STDOUT: %addr.loc45_44.1: %ptr.0a2 = addr_of %.loc45_41.2 -// CHECK:STDOUT: %.loc45_47.2: ref %C = value_as_ref %.loc45_47.1 -// CHECK:STDOUT: %addr.loc45_44.2: %ptr.0a2 = addr_of %.loc45_47.2 +// CHECK:STDOUT: %c1.ref.loc45: ref %BinaryC = name_ref c1, %c1 +// CHECK:STDOUT: %c2.ref.loc45: ref %BinaryC = name_ref c2, %c2 +// CHECK:STDOUT: %.loc45_41.1: %BinaryC = acquire_value %c1.ref.loc45 +// CHECK:STDOUT: %.loc45_47.1: %BinaryC = acquire_value %c2.ref.loc45 +// CHECK:STDOUT: %.loc45_41.2: ref %BinaryC = value_as_ref %.loc45_41.1 +// CHECK:STDOUT: %addr.loc45_44.1: %ptr.6da = addr_of %.loc45_41.2 +// CHECK:STDOUT: %.loc45_47.2: ref %BinaryC = value_as_ref %.loc45_47.1 +// CHECK:STDOUT: %addr.loc45_44.2: %ptr.6da = addr_of %.loc45_47.2 // CHECK:STDOUT: %.loc45_44.1: ref bool = temporary_storage // CHECK:STDOUT: %addr.loc45_44.3: %ptr.bb2 = addr_of %.loc45_44.1 // CHECK:STDOUT: %operator_LessEqual__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_LessEqual__carbon_thunk.decl(%addr.loc45_44.1, %addr.loc45_44.2, %addr.loc45_44.3) @@ -1889,7 +1889,7 @@ fn F() { // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %less_than_or_equal.patt: %pattern_type.831 = value_binding_pattern less_than_or_equal [concrete = constants.%less_than_or_equal.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1.ref.loc48: ref %C = name_ref c1, %c1 +// CHECK:STDOUT: %c1.ref.loc48: ref %BinaryC = name_ref c1, %c1 // CHECK:STDOUT: %int_42: Core.IntLiteral = int_value 42 [concrete = constants.%int_42.20e] // CHECK:STDOUT: %impl.elem0.loc48: %.b7a = impl_witness_access constants.%ImplicitAs.impl_witness.a2a, element0 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.e39] // CHECK:STDOUT: %bound_method.loc48_30.1: = bound_method %int_42, %impl.elem0.loc48 [concrete = constants.%Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.bf3] @@ -1898,9 +1898,9 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc48: init %i32 = call %bound_method.loc48_30.2(%int_42) [concrete = constants.%int_42.ac4] // CHECK:STDOUT: %.loc48_30.1: %i32 = value_of_initializer %Core.IntLiteral.as.ImplicitAs.impl.Convert.call.loc48 [concrete = constants.%int_42.ac4] // CHECK:STDOUT: %.loc48_30.2: %i32 = converted %int_42, %.loc48_30.1 [concrete = constants.%int_42.ac4] -// CHECK:STDOUT: %C.cpp_operator.call: init %i32 = call imports.%C.cpp_operator.decl(%c1.ref.loc48, %.loc48_30.2) -// CHECK:STDOUT: %.loc48_32.1: %i32 = value_of_initializer %C.cpp_operator.call -// CHECK:STDOUT: %.loc48_32.2: %i32 = converted %C.cpp_operator.call, %.loc48_32.1 +// CHECK:STDOUT: %BinaryC.cpp_operator.call: init %i32 = call imports.%BinaryC.cpp_operator.decl(%c1.ref.loc48, %.loc48_30.2) +// CHECK:STDOUT: %.loc48_32.1: %i32 = value_of_initializer %BinaryC.cpp_operator.call +// CHECK:STDOUT: %.loc48_32.2: %i32 = converted %BinaryC.cpp_operator.call, %.loc48_32.1 // CHECK:STDOUT: %i32: type = type_literal constants.%i32 [concrete = constants.%i32] // CHECK:STDOUT: %index: %i32 = wrapper_binding index, %.loc48_32.2 // CHECK:STDOUT: name_binding_decl { @@ -1919,54 +1919,54 @@ fn F() { // CHECK:STDOUT: %Destroy.Op.bound.loc40: = bound_method %.loc40_31.3, constants.%Destroy.Op // CHECK:STDOUT: %Destroy.Op.call.loc40: init %empty_tuple.type = call %Destroy.Op.bound.loc40(%.loc40_31.3) // CHECK:STDOUT: -// CHECK:STDOUT: %C.Op.bound.loc23: = bound_method %.loc23_38.3, constants.%C.Op -// CHECK:STDOUT: %Op.ref.loc23: %C.cpp_destructor.type = name_ref Op, imports.%C.cpp_destructor.decl [concrete = constants.%C.cpp_destructor] -// CHECK:STDOUT: %C.cpp_destructor.bound.loc23: = bound_method %.loc23_38.3, %Op.ref.loc23 -// CHECK:STDOUT: %C.cpp_destructor.call.loc23: init %empty_tuple.type = call %C.cpp_destructor.bound.loc23(%.loc23_38.3) -// CHECK:STDOUT: %C.Op.bound.loc22: = bound_method %.loc22_37.3, constants.%C.Op -// CHECK:STDOUT: %Op.ref.loc22: %C.cpp_destructor.type = name_ref Op, imports.%C.cpp_destructor.decl [concrete = constants.%C.cpp_destructor] -// CHECK:STDOUT: %C.cpp_destructor.bound.loc22: = bound_method %.loc22_37.3, %Op.ref.loc22 -// CHECK:STDOUT: %C.cpp_destructor.call.loc22: init %empty_tuple.type = call %C.cpp_destructor.bound.loc22(%.loc22_37.3) -// CHECK:STDOUT: %C.Op.bound.loc21: = bound_method %.loc21_38.3, constants.%C.Op -// CHECK:STDOUT: %Op.ref.loc21: %C.cpp_destructor.type = name_ref Op, imports.%C.cpp_destructor.decl [concrete = constants.%C.cpp_destructor] -// CHECK:STDOUT: %C.cpp_destructor.bound.loc21: = bound_method %.loc21_38.3, %Op.ref.loc21 -// CHECK:STDOUT: %C.cpp_destructor.call.loc21: init %empty_tuple.type = call %C.cpp_destructor.bound.loc21(%.loc21_38.3) -// CHECK:STDOUT: %C.Op.bound.loc20: = bound_method %.loc20_37.3, constants.%C.Op -// CHECK:STDOUT: %Op.ref.loc20: %C.cpp_destructor.type = name_ref Op, imports.%C.cpp_destructor.decl [concrete = constants.%C.cpp_destructor] -// CHECK:STDOUT: %C.cpp_destructor.bound.loc20: = bound_method %.loc20_37.3, %Op.ref.loc20 -// CHECK:STDOUT: %C.cpp_destructor.call.loc20: init %empty_tuple.type = call %C.cpp_destructor.bound.loc20(%.loc20_37.3) -// CHECK:STDOUT: %C.Op.bound.loc19: = bound_method %.loc19_38.3, constants.%C.Op -// CHECK:STDOUT: %Op.ref.loc19: %C.cpp_destructor.type = name_ref Op, imports.%C.cpp_destructor.decl [concrete = constants.%C.cpp_destructor] -// CHECK:STDOUT: %C.cpp_destructor.bound.loc19: = bound_method %.loc19_38.3, %Op.ref.loc19 -// CHECK:STDOUT: %C.cpp_destructor.call.loc19: init %empty_tuple.type = call %C.cpp_destructor.bound.loc19(%.loc19_38.3) -// CHECK:STDOUT: %C.Op.bound.loc16: = bound_method %.loc16_33.3, constants.%C.Op -// CHECK:STDOUT: %Op.ref.loc16: %C.cpp_destructor.type = name_ref Op, imports.%C.cpp_destructor.decl [concrete = constants.%C.cpp_destructor] -// CHECK:STDOUT: %C.cpp_destructor.bound.loc16: = bound_method %.loc16_33.3, %Op.ref.loc16 -// CHECK:STDOUT: %C.cpp_destructor.call.loc16: init %empty_tuple.type = call %C.cpp_destructor.bound.loc16(%.loc16_33.3) -// CHECK:STDOUT: %C.Op.bound.loc15: = bound_method %.loc15_35.3, constants.%C.Op -// CHECK:STDOUT: %Op.ref.loc15: %C.cpp_destructor.type = name_ref Op, imports.%C.cpp_destructor.decl [concrete = constants.%C.cpp_destructor] -// CHECK:STDOUT: %C.cpp_destructor.bound.loc15: = bound_method %.loc15_35.3, %Op.ref.loc15 -// CHECK:STDOUT: %C.cpp_destructor.call.loc15: init %empty_tuple.type = call %C.cpp_destructor.bound.loc15(%.loc15_35.3) -// CHECK:STDOUT: %C.Op.bound.loc14: = bound_method %.loc14_41.3, constants.%C.Op -// CHECK:STDOUT: %Op.ref.loc14: %C.cpp_destructor.type = name_ref Op, imports.%C.cpp_destructor.decl [concrete = constants.%C.cpp_destructor] -// CHECK:STDOUT: %C.cpp_destructor.bound.loc14: = bound_method %.loc14_41.3, %Op.ref.loc14 -// CHECK:STDOUT: %C.cpp_destructor.call.loc14: init %empty_tuple.type = call %C.cpp_destructor.bound.loc14(%.loc14_41.3) -// CHECK:STDOUT: %C.Op.bound.loc13: = bound_method %.loc13_38.3, constants.%C.Op -// CHECK:STDOUT: %Op.ref.loc13: %C.cpp_destructor.type = name_ref Op, imports.%C.cpp_destructor.decl [concrete = constants.%C.cpp_destructor] -// CHECK:STDOUT: %C.cpp_destructor.bound.loc13: = bound_method %.loc13_38.3, %Op.ref.loc13 -// CHECK:STDOUT: %C.cpp_destructor.call.loc13: init %empty_tuple.type = call %C.cpp_destructor.bound.loc13(%.loc13_38.3) -// CHECK:STDOUT: %C.Op.bound.loc12: = bound_method %.loc12_35.3, constants.%C.Op -// CHECK:STDOUT: %Op.ref.loc12: %C.cpp_destructor.type = name_ref Op, imports.%C.cpp_destructor.decl [concrete = constants.%C.cpp_destructor] -// CHECK:STDOUT: %C.cpp_destructor.bound.loc12: = bound_method %.loc12_35.3, %Op.ref.loc12 -// CHECK:STDOUT: %C.cpp_destructor.call.loc12: init %empty_tuple.type = call %C.cpp_destructor.bound.loc12(%.loc12_35.3) -// CHECK:STDOUT: %C.Op.bound.loc9: = bound_method %c2.var, constants.%C.Op -// CHECK:STDOUT: %Op.ref.loc9: %C.cpp_destructor.type = name_ref Op, imports.%C.cpp_destructor.decl [concrete = constants.%C.cpp_destructor] -// CHECK:STDOUT: %C.cpp_destructor.bound.loc9: = bound_method %c2.var, %Op.ref.loc9 -// CHECK:STDOUT: %C.cpp_destructor.call.loc9: init %empty_tuple.type = call %C.cpp_destructor.bound.loc9(%c2.var) -// CHECK:STDOUT: %C.Op.bound.loc8: = bound_method %c1.var, constants.%C.Op -// CHECK:STDOUT: %Op.ref.loc8: %C.cpp_destructor.type = name_ref Op, imports.%C.cpp_destructor.decl [concrete = constants.%C.cpp_destructor] -// CHECK:STDOUT: %C.cpp_destructor.bound.loc8: = bound_method %c1.var, %Op.ref.loc8 -// CHECK:STDOUT: %C.cpp_destructor.call.loc8: init %empty_tuple.type = call %C.cpp_destructor.bound.loc8(%c1.var) +// CHECK:STDOUT: %BinaryC.Op.bound.loc23: = bound_method %.loc23_44.3, constants.%BinaryC.Op +// CHECK:STDOUT: %Op.ref.loc23: %BinaryC.cpp_destructor.type = name_ref Op, imports.%BinaryC.cpp_destructor.decl [concrete = constants.%BinaryC.cpp_destructor] +// CHECK:STDOUT: %BinaryC.cpp_destructor.bound.loc23: = bound_method %.loc23_44.3, %Op.ref.loc23 +// CHECK:STDOUT: %BinaryC.cpp_destructor.call.loc23: init %empty_tuple.type = call %BinaryC.cpp_destructor.bound.loc23(%.loc23_44.3) +// CHECK:STDOUT: %BinaryC.Op.bound.loc22: = bound_method %.loc22_43.3, constants.%BinaryC.Op +// CHECK:STDOUT: %Op.ref.loc22: %BinaryC.cpp_destructor.type = name_ref Op, imports.%BinaryC.cpp_destructor.decl [concrete = constants.%BinaryC.cpp_destructor] +// CHECK:STDOUT: %BinaryC.cpp_destructor.bound.loc22: = bound_method %.loc22_43.3, %Op.ref.loc22 +// CHECK:STDOUT: %BinaryC.cpp_destructor.call.loc22: init %empty_tuple.type = call %BinaryC.cpp_destructor.bound.loc22(%.loc22_43.3) +// CHECK:STDOUT: %BinaryC.Op.bound.loc21: = bound_method %.loc21_44.3, constants.%BinaryC.Op +// CHECK:STDOUT: %Op.ref.loc21: %BinaryC.cpp_destructor.type = name_ref Op, imports.%BinaryC.cpp_destructor.decl [concrete = constants.%BinaryC.cpp_destructor] +// CHECK:STDOUT: %BinaryC.cpp_destructor.bound.loc21: = bound_method %.loc21_44.3, %Op.ref.loc21 +// CHECK:STDOUT: %BinaryC.cpp_destructor.call.loc21: init %empty_tuple.type = call %BinaryC.cpp_destructor.bound.loc21(%.loc21_44.3) +// CHECK:STDOUT: %BinaryC.Op.bound.loc20: = bound_method %.loc20_43.3, constants.%BinaryC.Op +// CHECK:STDOUT: %Op.ref.loc20: %BinaryC.cpp_destructor.type = name_ref Op, imports.%BinaryC.cpp_destructor.decl [concrete = constants.%BinaryC.cpp_destructor] +// CHECK:STDOUT: %BinaryC.cpp_destructor.bound.loc20: = bound_method %.loc20_43.3, %Op.ref.loc20 +// CHECK:STDOUT: %BinaryC.cpp_destructor.call.loc20: init %empty_tuple.type = call %BinaryC.cpp_destructor.bound.loc20(%.loc20_43.3) +// CHECK:STDOUT: %BinaryC.Op.bound.loc19: = bound_method %.loc19_44.3, constants.%BinaryC.Op +// CHECK:STDOUT: %Op.ref.loc19: %BinaryC.cpp_destructor.type = name_ref Op, imports.%BinaryC.cpp_destructor.decl [concrete = constants.%BinaryC.cpp_destructor] +// CHECK:STDOUT: %BinaryC.cpp_destructor.bound.loc19: = bound_method %.loc19_44.3, %Op.ref.loc19 +// CHECK:STDOUT: %BinaryC.cpp_destructor.call.loc19: init %empty_tuple.type = call %BinaryC.cpp_destructor.bound.loc19(%.loc19_44.3) +// CHECK:STDOUT: %BinaryC.Op.bound.loc16: = bound_method %.loc16_39.3, constants.%BinaryC.Op +// CHECK:STDOUT: %Op.ref.loc16: %BinaryC.cpp_destructor.type = name_ref Op, imports.%BinaryC.cpp_destructor.decl [concrete = constants.%BinaryC.cpp_destructor] +// CHECK:STDOUT: %BinaryC.cpp_destructor.bound.loc16: = bound_method %.loc16_39.3, %Op.ref.loc16 +// CHECK:STDOUT: %BinaryC.cpp_destructor.call.loc16: init %empty_tuple.type = call %BinaryC.cpp_destructor.bound.loc16(%.loc16_39.3) +// CHECK:STDOUT: %BinaryC.Op.bound.loc15: = bound_method %.loc15_41.3, constants.%BinaryC.Op +// CHECK:STDOUT: %Op.ref.loc15: %BinaryC.cpp_destructor.type = name_ref Op, imports.%BinaryC.cpp_destructor.decl [concrete = constants.%BinaryC.cpp_destructor] +// CHECK:STDOUT: %BinaryC.cpp_destructor.bound.loc15: = bound_method %.loc15_41.3, %Op.ref.loc15 +// CHECK:STDOUT: %BinaryC.cpp_destructor.call.loc15: init %empty_tuple.type = call %BinaryC.cpp_destructor.bound.loc15(%.loc15_41.3) +// CHECK:STDOUT: %BinaryC.Op.bound.loc14: = bound_method %.loc14_47.3, constants.%BinaryC.Op +// CHECK:STDOUT: %Op.ref.loc14: %BinaryC.cpp_destructor.type = name_ref Op, imports.%BinaryC.cpp_destructor.decl [concrete = constants.%BinaryC.cpp_destructor] +// CHECK:STDOUT: %BinaryC.cpp_destructor.bound.loc14: = bound_method %.loc14_47.3, %Op.ref.loc14 +// CHECK:STDOUT: %BinaryC.cpp_destructor.call.loc14: init %empty_tuple.type = call %BinaryC.cpp_destructor.bound.loc14(%.loc14_47.3) +// CHECK:STDOUT: %BinaryC.Op.bound.loc13: = bound_method %.loc13_44.3, constants.%BinaryC.Op +// CHECK:STDOUT: %Op.ref.loc13: %BinaryC.cpp_destructor.type = name_ref Op, imports.%BinaryC.cpp_destructor.decl [concrete = constants.%BinaryC.cpp_destructor] +// CHECK:STDOUT: %BinaryC.cpp_destructor.bound.loc13: = bound_method %.loc13_44.3, %Op.ref.loc13 +// CHECK:STDOUT: %BinaryC.cpp_destructor.call.loc13: init %empty_tuple.type = call %BinaryC.cpp_destructor.bound.loc13(%.loc13_44.3) +// CHECK:STDOUT: %BinaryC.Op.bound.loc12: = bound_method %.loc12_41.3, constants.%BinaryC.Op +// CHECK:STDOUT: %Op.ref.loc12: %BinaryC.cpp_destructor.type = name_ref Op, imports.%BinaryC.cpp_destructor.decl [concrete = constants.%BinaryC.cpp_destructor] +// CHECK:STDOUT: %BinaryC.cpp_destructor.bound.loc12: = bound_method %.loc12_41.3, %Op.ref.loc12 +// CHECK:STDOUT: %BinaryC.cpp_destructor.call.loc12: init %empty_tuple.type = call %BinaryC.cpp_destructor.bound.loc12(%.loc12_41.3) +// CHECK:STDOUT: %BinaryC.Op.bound.loc9: = bound_method %c2.var, constants.%BinaryC.Op +// CHECK:STDOUT: %Op.ref.loc9: %BinaryC.cpp_destructor.type = name_ref Op, imports.%BinaryC.cpp_destructor.decl [concrete = constants.%BinaryC.cpp_destructor] +// CHECK:STDOUT: %BinaryC.cpp_destructor.bound.loc9: = bound_method %c2.var, %Op.ref.loc9 +// CHECK:STDOUT: %BinaryC.cpp_destructor.call.loc9: init %empty_tuple.type = call %BinaryC.cpp_destructor.bound.loc9(%c2.var) +// CHECK:STDOUT: %BinaryC.Op.bound.loc8: = bound_method %c1.var, constants.%BinaryC.Op +// CHECK:STDOUT: %Op.ref.loc8: %BinaryC.cpp_destructor.type = name_ref Op, imports.%BinaryC.cpp_destructor.decl [concrete = constants.%BinaryC.cpp_destructor] +// CHECK:STDOUT: %BinaryC.cpp_destructor.bound.loc8: = bound_method %c1.var, %Op.ref.loc8 +// CHECK:STDOUT: %BinaryC.cpp_destructor.call.loc8: init %empty_tuple.type = call %BinaryC.cpp_destructor.bound.loc8(%c1.var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1976,34 +1976,34 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] -// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = value_binding_pattern c1 [concrete] -// CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] -// CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] -// CHECK:STDOUT: %C__carbon_thunk.type: type = fn_type @C__carbon_thunk [concrete] -// CHECK:STDOUT: %C__carbon_thunk: %C__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = value_binding_pattern c2 [concrete] -// CHECK:STDOUT: %c3.patt: %pattern_type.bbc = value_binding_pattern c3 [concrete] +// CHECK:STDOUT: %BinaryC: type = class_type @BinaryC [concrete] +// CHECK:STDOUT: %pattern_type.b2b: type = pattern_type %BinaryC [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.b2b = value_binding_pattern c1 [concrete] +// CHECK:STDOUT: %BinaryC.BinaryC.cpp_overload_set.type: type = cpp_overload_set_type @BinaryC.BinaryC.cpp_overload_set [concrete] +// CHECK:STDOUT: %BinaryC.BinaryC.cpp_overload_set.value: %BinaryC.BinaryC.cpp_overload_set.type = cpp_overload_set_value @BinaryC.BinaryC.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.6da: type = ptr_type %BinaryC [concrete] +// CHECK:STDOUT: %BinaryC__carbon_thunk.type: type = fn_type @BinaryC__carbon_thunk [concrete] +// CHECK:STDOUT: %BinaryC__carbon_thunk: %BinaryC__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.b2b = value_binding_pattern c2 [concrete] +// CHECK:STDOUT: %c3.patt: %pattern_type.b2b = value_binding_pattern c3 [concrete] // CHECK:STDOUT: %operator_Plus__carbon_thunk.type: type = fn_type @operator_Plus__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Plus__carbon_thunk: %operator_Plus__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %c4.patt: %pattern_type.bbc = value_binding_pattern c4 [concrete] -// CHECK:STDOUT: %c5.patt: %pattern_type.bbc = value_binding_pattern c5 [concrete] -// CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] -// CHECK:STDOUT: %C.cpp_destructor: %C.cpp_destructor.type = struct_value () [concrete] -// CHECK:STDOUT: %C.Op.type: type = fn_type @C.Op [concrete] -// CHECK:STDOUT: %C.Op: %C.Op.type = struct_value () [concrete] +// CHECK:STDOUT: %c4.patt: %pattern_type.b2b = value_binding_pattern c4 [concrete] +// CHECK:STDOUT: %c5.patt: %pattern_type.b2b = value_binding_pattern c5 [concrete] +// CHECK:STDOUT: %BinaryC.cpp_destructor.type: type = fn_type @BinaryC.cpp_destructor [concrete] +// CHECK:STDOUT: %BinaryC.cpp_destructor: %BinaryC.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %BinaryC.Op.type: type = fn_type @BinaryC.Op [concrete] +// CHECK:STDOUT: %BinaryC.Op: %BinaryC.Op.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .C = %C.decl +// CHECK:STDOUT: .BinaryC = %BinaryC.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete = constants.%C.C.cpp_overload_set.value] -// CHECK:STDOUT: %C__carbon_thunk.decl: %C__carbon_thunk.type = fn_decl @C__carbon_thunk [concrete = constants.%C__carbon_thunk] { +// CHECK:STDOUT: %BinaryC.decl: type = class_decl @BinaryC [concrete = constants.%BinaryC] {} {} +// CHECK:STDOUT: %BinaryC.BinaryC.cpp_overload_set.value: %BinaryC.BinaryC.cpp_overload_set.type = cpp_overload_set_value @BinaryC.BinaryC.cpp_overload_set [concrete = constants.%BinaryC.BinaryC.cpp_overload_set.value] +// CHECK:STDOUT: %BinaryC__carbon_thunk.decl: %BinaryC__carbon_thunk.type = fn_decl @BinaryC__carbon_thunk [concrete = constants.%BinaryC__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -2013,7 +2013,7 @@ fn F() { // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } -// CHECK:STDOUT: %C.cpp_destructor.decl: %C.cpp_destructor.type = fn_decl @C.cpp_destructor [concrete = constants.%C.cpp_destructor] { +// CHECK:STDOUT: %BinaryC.cpp_destructor.decl: %BinaryC.cpp_destructor.type = fn_decl @BinaryC.cpp_destructor [concrete = constants.%BinaryC.cpp_destructor] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -2022,121 +2022,121 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Cpp.ref.loc8_19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc8_22: type = name_ref C, imports.%C.decl [concrete = constants.%C] -// CHECK:STDOUT: %C.ref.loc8_24: %C.C.cpp_overload_set.type = name_ref C, imports.%C.C.cpp_overload_set.value [concrete = constants.%C.C.cpp_overload_set.value] -// CHECK:STDOUT: %.loc8_27.1: ref %C = temporary_storage -// CHECK:STDOUT: %addr.loc8: %ptr.0a2 = addr_of %.loc8_27.1 -// CHECK:STDOUT: %C__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%addr.loc8) -// CHECK:STDOUT: %.loc8_27.2: init %C to %.loc8_27.1 = mark_in_place_init %C__carbon_thunk.call.loc8 -// CHECK:STDOUT: %.loc8_27.3: ref %C = temporary %.loc8_27.1, %.loc8_27.2 -// CHECK:STDOUT: %.loc8_27.4: %C = acquire_value %.loc8_27.3 -// CHECK:STDOUT: %.loc8_14: type = splice_block %C.ref.loc8_14 [concrete = constants.%C] { +// CHECK:STDOUT: %Cpp.ref.loc8_25: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %BinaryC.ref.loc8_28: type = name_ref BinaryC, imports.%BinaryC.decl [concrete = constants.%BinaryC] +// CHECK:STDOUT: %BinaryC.ref.loc8_36: %BinaryC.BinaryC.cpp_overload_set.type = name_ref BinaryC, imports.%BinaryC.BinaryC.cpp_overload_set.value [concrete = constants.%BinaryC.BinaryC.cpp_overload_set.value] +// CHECK:STDOUT: %.loc8_45.1: ref %BinaryC = temporary_storage +// CHECK:STDOUT: %addr.loc8: %ptr.6da = addr_of %.loc8_45.1 +// CHECK:STDOUT: %BinaryC__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%BinaryC__carbon_thunk.decl(%addr.loc8) +// CHECK:STDOUT: %.loc8_45.2: init %BinaryC to %.loc8_45.1 = mark_in_place_init %BinaryC__carbon_thunk.call.loc8 +// CHECK:STDOUT: %.loc8_45.3: ref %BinaryC = temporary %.loc8_45.1, %.loc8_45.2 +// CHECK:STDOUT: %.loc8_45.4: %BinaryC = acquire_value %.loc8_45.3 +// CHECK:STDOUT: %.loc8_14: type = splice_block %BinaryC.ref.loc8_14 [concrete = constants.%BinaryC] { // CHECK:STDOUT: %Cpp.ref.loc8_11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc8_14: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %BinaryC.ref.loc8_14: type = name_ref BinaryC, imports.%BinaryC.decl [concrete = constants.%BinaryC] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1: %C = wrapper_binding c1, %.loc8_27.4 +// CHECK:STDOUT: %c1: %BinaryC = wrapper_binding c1, %.loc8_45.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = value_binding_pattern c1 [concrete = constants.%c1.patt] +// CHECK:STDOUT: %c1.patt: %pattern_type.b2b = value_binding_pattern c1 [concrete = constants.%c1.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.ref.loc9_19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc9_22: type = name_ref C, imports.%C.decl [concrete = constants.%C] -// CHECK:STDOUT: %C.ref.loc9_24: %C.C.cpp_overload_set.type = name_ref C, imports.%C.C.cpp_overload_set.value [concrete = constants.%C.C.cpp_overload_set.value] -// CHECK:STDOUT: %.loc9_27.1: ref %C = temporary_storage -// CHECK:STDOUT: %addr.loc9: %ptr.0a2 = addr_of %.loc9_27.1 -// CHECK:STDOUT: %C__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%addr.loc9) -// CHECK:STDOUT: %.loc9_27.2: init %C to %.loc9_27.1 = mark_in_place_init %C__carbon_thunk.call.loc9 -// CHECK:STDOUT: %.loc9_27.3: ref %C = temporary %.loc9_27.1, %.loc9_27.2 -// CHECK:STDOUT: %.loc9_27.4: %C = acquire_value %.loc9_27.3 -// CHECK:STDOUT: %.loc9_14: type = splice_block %C.ref.loc9_14 [concrete = constants.%C] { +// CHECK:STDOUT: %Cpp.ref.loc9_25: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %BinaryC.ref.loc9_28: type = name_ref BinaryC, imports.%BinaryC.decl [concrete = constants.%BinaryC] +// CHECK:STDOUT: %BinaryC.ref.loc9_36: %BinaryC.BinaryC.cpp_overload_set.type = name_ref BinaryC, imports.%BinaryC.BinaryC.cpp_overload_set.value [concrete = constants.%BinaryC.BinaryC.cpp_overload_set.value] +// CHECK:STDOUT: %.loc9_45.1: ref %BinaryC = temporary_storage +// CHECK:STDOUT: %addr.loc9: %ptr.6da = addr_of %.loc9_45.1 +// CHECK:STDOUT: %BinaryC__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%BinaryC__carbon_thunk.decl(%addr.loc9) +// CHECK:STDOUT: %.loc9_45.2: init %BinaryC to %.loc9_45.1 = mark_in_place_init %BinaryC__carbon_thunk.call.loc9 +// CHECK:STDOUT: %.loc9_45.3: ref %BinaryC = temporary %.loc9_45.1, %.loc9_45.2 +// CHECK:STDOUT: %.loc9_45.4: %BinaryC = acquire_value %.loc9_45.3 +// CHECK:STDOUT: %.loc9_14: type = splice_block %BinaryC.ref.loc9_14 [concrete = constants.%BinaryC] { // CHECK:STDOUT: %Cpp.ref.loc9_11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc9_14: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %BinaryC.ref.loc9_14: type = name_ref BinaryC, imports.%BinaryC.decl [concrete = constants.%BinaryC] // CHECK:STDOUT: } -// CHECK:STDOUT: %c2: %C = wrapper_binding c2, %.loc9_27.4 +// CHECK:STDOUT: %c2: %BinaryC = wrapper_binding c2, %.loc9_45.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = value_binding_pattern c2 [concrete = constants.%c2.patt] +// CHECK:STDOUT: %c2.patt: %pattern_type.b2b = value_binding_pattern c2 [concrete = constants.%c2.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1.ref.loc10: %C = name_ref c1, %c1 -// CHECK:STDOUT: %c2.ref: %C = name_ref c2, %c2 -// CHECK:STDOUT: %.loc10_22.1: ref %C = temporary_storage -// CHECK:STDOUT: %.loc10_19: ref %C = value_as_ref %c1.ref.loc10 -// CHECK:STDOUT: %addr.loc10_22.1: %ptr.0a2 = addr_of %.loc10_19 -// CHECK:STDOUT: %.loc10_24: ref %C = value_as_ref %c2.ref -// CHECK:STDOUT: %addr.loc10_22.2: %ptr.0a2 = addr_of %.loc10_24 -// CHECK:STDOUT: %addr.loc10_22.3: %ptr.0a2 = addr_of %.loc10_22.1 -// CHECK:STDOUT: %operator_Plus__carbon_thunk.call.loc10: init %empty_tuple.type = call imports.%operator_Plus__carbon_thunk.decl(%addr.loc10_22.1, %addr.loc10_22.2, %addr.loc10_22.3) -// CHECK:STDOUT: %.loc10_22.2: init %C to %.loc10_22.1 = mark_in_place_init %operator_Plus__carbon_thunk.call.loc10 -// CHECK:STDOUT: %.loc10_22.3: ref %C = temporary %.loc10_22.1, %.loc10_22.2 -// CHECK:STDOUT: %.loc10_22.4: %C = acquire_value %.loc10_22.3 -// CHECK:STDOUT: %.loc10_14: type = splice_block %C.ref.loc10 [concrete = constants.%C] { +// CHECK:STDOUT: %c1.ref.loc10: %BinaryC = name_ref c1, %c1 +// CHECK:STDOUT: %c2.ref: %BinaryC = name_ref c2, %c2 +// CHECK:STDOUT: %.loc10_28.1: ref %BinaryC = temporary_storage +// CHECK:STDOUT: %.loc10_25: ref %BinaryC = value_as_ref %c1.ref.loc10 +// CHECK:STDOUT: %addr.loc10_28.1: %ptr.6da = addr_of %.loc10_25 +// CHECK:STDOUT: %.loc10_30: ref %BinaryC = value_as_ref %c2.ref +// CHECK:STDOUT: %addr.loc10_28.2: %ptr.6da = addr_of %.loc10_30 +// CHECK:STDOUT: %addr.loc10_28.3: %ptr.6da = addr_of %.loc10_28.1 +// CHECK:STDOUT: %operator_Plus__carbon_thunk.call.loc10: init %empty_tuple.type = call imports.%operator_Plus__carbon_thunk.decl(%addr.loc10_28.1, %addr.loc10_28.2, %addr.loc10_28.3) +// CHECK:STDOUT: %.loc10_28.2: init %BinaryC to %.loc10_28.1 = mark_in_place_init %operator_Plus__carbon_thunk.call.loc10 +// CHECK:STDOUT: %.loc10_28.3: ref %BinaryC = temporary %.loc10_28.1, %.loc10_28.2 +// CHECK:STDOUT: %.loc10_28.4: %BinaryC = acquire_value %.loc10_28.3 +// CHECK:STDOUT: %.loc10_14: type = splice_block %BinaryC.ref.loc10 [concrete = constants.%BinaryC] { // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc10: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %BinaryC.ref.loc10: type = name_ref BinaryC, imports.%BinaryC.decl [concrete = constants.%BinaryC] // CHECK:STDOUT: } -// CHECK:STDOUT: %c3: %C = wrapper_binding c3, %.loc10_22.4 +// CHECK:STDOUT: %c3: %BinaryC = wrapper_binding c3, %.loc10_28.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c3.patt: %pattern_type.bbc = value_binding_pattern c3 [concrete = constants.%c3.patt] +// CHECK:STDOUT: %c3.patt: %pattern_type.b2b = value_binding_pattern c3 [concrete = constants.%c3.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1.ref.loc11: %C = name_ref c1, %c1 -// CHECK:STDOUT: %c3.ref.loc11: %C = name_ref c3, %c3 -// CHECK:STDOUT: %.loc11_22.1: ref %C = temporary_storage -// CHECK:STDOUT: %.loc11_19: ref %C = value_as_ref %c1.ref.loc11 -// CHECK:STDOUT: %addr.loc11_22.1: %ptr.0a2 = addr_of %.loc11_19 -// CHECK:STDOUT: %.loc11_24: ref %C = value_as_ref %c3.ref.loc11 -// CHECK:STDOUT: %addr.loc11_22.2: %ptr.0a2 = addr_of %.loc11_24 -// CHECK:STDOUT: %addr.loc11_22.3: %ptr.0a2 = addr_of %.loc11_22.1 -// CHECK:STDOUT: %operator_Plus__carbon_thunk.call.loc11: init %empty_tuple.type = call imports.%operator_Plus__carbon_thunk.decl(%addr.loc11_22.1, %addr.loc11_22.2, %addr.loc11_22.3) -// CHECK:STDOUT: %.loc11_22.2: init %C to %.loc11_22.1 = mark_in_place_init %operator_Plus__carbon_thunk.call.loc11 -// CHECK:STDOUT: %.loc11_22.3: ref %C = temporary %.loc11_22.1, %.loc11_22.2 -// CHECK:STDOUT: %.loc11_22.4: %C = acquire_value %.loc11_22.3 -// CHECK:STDOUT: %.loc11_14: type = splice_block %C.ref.loc11 [concrete = constants.%C] { +// CHECK:STDOUT: %c1.ref.loc11: %BinaryC = name_ref c1, %c1 +// CHECK:STDOUT: %c3.ref.loc11: %BinaryC = name_ref c3, %c3 +// CHECK:STDOUT: %.loc11_28.1: ref %BinaryC = temporary_storage +// CHECK:STDOUT: %.loc11_25: ref %BinaryC = value_as_ref %c1.ref.loc11 +// CHECK:STDOUT: %addr.loc11_28.1: %ptr.6da = addr_of %.loc11_25 +// CHECK:STDOUT: %.loc11_30: ref %BinaryC = value_as_ref %c3.ref.loc11 +// CHECK:STDOUT: %addr.loc11_28.2: %ptr.6da = addr_of %.loc11_30 +// CHECK:STDOUT: %addr.loc11_28.3: %ptr.6da = addr_of %.loc11_28.1 +// CHECK:STDOUT: %operator_Plus__carbon_thunk.call.loc11: init %empty_tuple.type = call imports.%operator_Plus__carbon_thunk.decl(%addr.loc11_28.1, %addr.loc11_28.2, %addr.loc11_28.3) +// CHECK:STDOUT: %.loc11_28.2: init %BinaryC to %.loc11_28.1 = mark_in_place_init %operator_Plus__carbon_thunk.call.loc11 +// CHECK:STDOUT: %.loc11_28.3: ref %BinaryC = temporary %.loc11_28.1, %.loc11_28.2 +// CHECK:STDOUT: %.loc11_28.4: %BinaryC = acquire_value %.loc11_28.3 +// CHECK:STDOUT: %.loc11_14: type = splice_block %BinaryC.ref.loc11 [concrete = constants.%BinaryC] { // CHECK:STDOUT: %Cpp.ref.loc11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc11: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %BinaryC.ref.loc11: type = name_ref BinaryC, imports.%BinaryC.decl [concrete = constants.%BinaryC] // CHECK:STDOUT: } -// CHECK:STDOUT: %c4: %C = wrapper_binding c4, %.loc11_22.4 +// CHECK:STDOUT: %c4: %BinaryC = wrapper_binding c4, %.loc11_28.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c4.patt: %pattern_type.bbc = value_binding_pattern c4 [concrete = constants.%c4.patt] +// CHECK:STDOUT: %c4.patt: %pattern_type.b2b = value_binding_pattern c4 [concrete = constants.%c4.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c4.ref: %C = name_ref c4, %c4 -// CHECK:STDOUT: %c3.ref.loc12: %C = name_ref c3, %c3 -// CHECK:STDOUT: %.loc12_29.1: ref %C = temporary_storage -// CHECK:STDOUT: %.loc12_26: ref %C = value_as_ref %c4.ref -// CHECK:STDOUT: %addr.loc12_29.1: %ptr.0a2 = addr_of %.loc12_26 -// CHECK:STDOUT: %.loc12_31: ref %C = value_as_ref %c3.ref.loc12 -// CHECK:STDOUT: %addr.loc12_29.2: %ptr.0a2 = addr_of %.loc12_31 -// CHECK:STDOUT: %addr.loc12_29.3: %ptr.0a2 = addr_of %.loc12_29.1 -// CHECK:STDOUT: %operator_Plus__carbon_thunk.call.loc12: init %empty_tuple.type = call imports.%operator_Plus__carbon_thunk.decl(%addr.loc12_29.1, %addr.loc12_29.2, %addr.loc12_29.3) -// CHECK:STDOUT: %.loc12_29.2: init %C to %.loc12_29.1 = mark_in_place_init %operator_Plus__carbon_thunk.call.loc12 -// CHECK:STDOUT: %.loc12_29.3: ref %C = temporary %.loc12_29.1, %.loc12_29.2 -// CHECK:STDOUT: %.loc12_29.4: %C = acquire_value %.loc12_29.3 -// CHECK:STDOUT: %.loc12_21: type = splice_block %C.ref.loc12 [concrete = constants.%C] { +// CHECK:STDOUT: %c4.ref: %BinaryC = name_ref c4, %c4 +// CHECK:STDOUT: %c3.ref.loc12: %BinaryC = name_ref c3, %c3 +// CHECK:STDOUT: %.loc12_35.1: ref %BinaryC = temporary_storage +// CHECK:STDOUT: %.loc12_32: ref %BinaryC = value_as_ref %c4.ref +// CHECK:STDOUT: %addr.loc12_35.1: %ptr.6da = addr_of %.loc12_32 +// CHECK:STDOUT: %.loc12_37: ref %BinaryC = value_as_ref %c3.ref.loc12 +// CHECK:STDOUT: %addr.loc12_35.2: %ptr.6da = addr_of %.loc12_37 +// CHECK:STDOUT: %addr.loc12_35.3: %ptr.6da = addr_of %.loc12_35.1 +// CHECK:STDOUT: %operator_Plus__carbon_thunk.call.loc12: init %empty_tuple.type = call imports.%operator_Plus__carbon_thunk.decl(%addr.loc12_35.1, %addr.loc12_35.2, %addr.loc12_35.3) +// CHECK:STDOUT: %.loc12_35.2: init %BinaryC to %.loc12_35.1 = mark_in_place_init %operator_Plus__carbon_thunk.call.loc12 +// CHECK:STDOUT: %.loc12_35.3: ref %BinaryC = temporary %.loc12_35.1, %.loc12_35.2 +// CHECK:STDOUT: %.loc12_35.4: %BinaryC = acquire_value %.loc12_35.3 +// CHECK:STDOUT: %.loc12_21: type = splice_block %BinaryC.ref.loc12 [concrete = constants.%BinaryC] { // CHECK:STDOUT: %Cpp.ref.loc12: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc12: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %BinaryC.ref.loc12: type = name_ref BinaryC, imports.%BinaryC.decl [concrete = constants.%BinaryC] // CHECK:STDOUT: } -// CHECK:STDOUT: %c5: %C = wrapper_binding c5, %.loc12_29.4 +// CHECK:STDOUT: %c5: %BinaryC = wrapper_binding c5, %.loc12_35.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c5.patt: %pattern_type.bbc = value_binding_pattern c5 [concrete = constants.%c5.patt] +// CHECK:STDOUT: %c5.patt: %pattern_type.b2b = value_binding_pattern c5 [concrete = constants.%c5.patt] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: %C.Op.bound.loc12: = bound_method %.loc12_29.3, constants.%C.Op -// CHECK:STDOUT: %Op.ref.loc12: %C.cpp_destructor.type = name_ref Op, imports.%C.cpp_destructor.decl [concrete = constants.%C.cpp_destructor] -// CHECK:STDOUT: %C.cpp_destructor.bound.loc12: = bound_method %.loc12_29.3, %Op.ref.loc12 -// CHECK:STDOUT: %C.cpp_destructor.call.loc12: init %empty_tuple.type = call %C.cpp_destructor.bound.loc12(%.loc12_29.3) -// CHECK:STDOUT: %C.Op.bound.loc11: = bound_method %.loc11_22.3, constants.%C.Op -// CHECK:STDOUT: %Op.ref.loc11: %C.cpp_destructor.type = name_ref Op, imports.%C.cpp_destructor.decl [concrete = constants.%C.cpp_destructor] -// CHECK:STDOUT: %C.cpp_destructor.bound.loc11: = bound_method %.loc11_22.3, %Op.ref.loc11 -// CHECK:STDOUT: %C.cpp_destructor.call.loc11: init %empty_tuple.type = call %C.cpp_destructor.bound.loc11(%.loc11_22.3) -// CHECK:STDOUT: %C.Op.bound.loc10: = bound_method %.loc10_22.3, constants.%C.Op -// CHECK:STDOUT: %Op.ref.loc10: %C.cpp_destructor.type = name_ref Op, imports.%C.cpp_destructor.decl [concrete = constants.%C.cpp_destructor] -// CHECK:STDOUT: %C.cpp_destructor.bound.loc10: = bound_method %.loc10_22.3, %Op.ref.loc10 -// CHECK:STDOUT: %C.cpp_destructor.call.loc10: init %empty_tuple.type = call %C.cpp_destructor.bound.loc10(%.loc10_22.3) -// CHECK:STDOUT: %C.Op.bound.loc9: = bound_method %.loc9_27.3, constants.%C.Op -// CHECK:STDOUT: %Op.ref.loc9: %C.cpp_destructor.type = name_ref Op, imports.%C.cpp_destructor.decl [concrete = constants.%C.cpp_destructor] -// CHECK:STDOUT: %C.cpp_destructor.bound.loc9: = bound_method %.loc9_27.3, %Op.ref.loc9 -// CHECK:STDOUT: %C.cpp_destructor.call.loc9: init %empty_tuple.type = call %C.cpp_destructor.bound.loc9(%.loc9_27.3) -// CHECK:STDOUT: %C.Op.bound.loc8: = bound_method %.loc8_27.3, constants.%C.Op -// CHECK:STDOUT: %Op.ref.loc8: %C.cpp_destructor.type = name_ref Op, imports.%C.cpp_destructor.decl [concrete = constants.%C.cpp_destructor] -// CHECK:STDOUT: %C.cpp_destructor.bound.loc8: = bound_method %.loc8_27.3, %Op.ref.loc8 -// CHECK:STDOUT: %C.cpp_destructor.call.loc8: init %empty_tuple.type = call %C.cpp_destructor.bound.loc8(%.loc8_27.3) +// CHECK:STDOUT: %BinaryC.Op.bound.loc12: = bound_method %.loc12_35.3, constants.%BinaryC.Op +// CHECK:STDOUT: %Op.ref.loc12: %BinaryC.cpp_destructor.type = name_ref Op, imports.%BinaryC.cpp_destructor.decl [concrete = constants.%BinaryC.cpp_destructor] +// CHECK:STDOUT: %BinaryC.cpp_destructor.bound.loc12: = bound_method %.loc12_35.3, %Op.ref.loc12 +// CHECK:STDOUT: %BinaryC.cpp_destructor.call.loc12: init %empty_tuple.type = call %BinaryC.cpp_destructor.bound.loc12(%.loc12_35.3) +// CHECK:STDOUT: %BinaryC.Op.bound.loc11: = bound_method %.loc11_28.3, constants.%BinaryC.Op +// CHECK:STDOUT: %Op.ref.loc11: %BinaryC.cpp_destructor.type = name_ref Op, imports.%BinaryC.cpp_destructor.decl [concrete = constants.%BinaryC.cpp_destructor] +// CHECK:STDOUT: %BinaryC.cpp_destructor.bound.loc11: = bound_method %.loc11_28.3, %Op.ref.loc11 +// CHECK:STDOUT: %BinaryC.cpp_destructor.call.loc11: init %empty_tuple.type = call %BinaryC.cpp_destructor.bound.loc11(%.loc11_28.3) +// CHECK:STDOUT: %BinaryC.Op.bound.loc10: = bound_method %.loc10_28.3, constants.%BinaryC.Op +// CHECK:STDOUT: %Op.ref.loc10: %BinaryC.cpp_destructor.type = name_ref Op, imports.%BinaryC.cpp_destructor.decl [concrete = constants.%BinaryC.cpp_destructor] +// CHECK:STDOUT: %BinaryC.cpp_destructor.bound.loc10: = bound_method %.loc10_28.3, %Op.ref.loc10 +// CHECK:STDOUT: %BinaryC.cpp_destructor.call.loc10: init %empty_tuple.type = call %BinaryC.cpp_destructor.bound.loc10(%.loc10_28.3) +// CHECK:STDOUT: %BinaryC.Op.bound.loc9: = bound_method %.loc9_45.3, constants.%BinaryC.Op +// CHECK:STDOUT: %Op.ref.loc9: %BinaryC.cpp_destructor.type = name_ref Op, imports.%BinaryC.cpp_destructor.decl [concrete = constants.%BinaryC.cpp_destructor] +// CHECK:STDOUT: %BinaryC.cpp_destructor.bound.loc9: = bound_method %.loc9_45.3, %Op.ref.loc9 +// CHECK:STDOUT: %BinaryC.cpp_destructor.call.loc9: init %empty_tuple.type = call %BinaryC.cpp_destructor.bound.loc9(%.loc9_45.3) +// CHECK:STDOUT: %BinaryC.Op.bound.loc8: = bound_method %.loc8_45.3, constants.%BinaryC.Op +// CHECK:STDOUT: %Op.ref.loc8: %BinaryC.cpp_destructor.type = name_ref Op, imports.%BinaryC.cpp_destructor.decl [concrete = constants.%BinaryC.cpp_destructor] +// CHECK:STDOUT: %BinaryC.cpp_destructor.bound.loc8: = bound_method %.loc8_45.3, %Op.ref.loc8 +// CHECK:STDOUT: %BinaryC.cpp_destructor.call.loc8: init %empty_tuple.type = call %BinaryC.cpp_destructor.bound.loc8(%.loc8_45.3) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -2314,17 +2314,17 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] -// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = ref_binding_pattern c1 [concrete] -// CHECK:STDOUT: %c1.var_patt: %pattern_type.bbc = var_pattern %c1.patt [concrete] -// CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] -// CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] -// CHECK:STDOUT: %C__carbon_thunk.type: type = fn_type @C__carbon_thunk [concrete] -// CHECK:STDOUT: %C__carbon_thunk: %C__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = ref_binding_pattern c2 [concrete] -// CHECK:STDOUT: %c2.var_patt: %pattern_type.bbc = var_pattern %c2.patt [concrete] +// CHECK:STDOUT: %EqualC: type = class_type @EqualC [concrete] +// CHECK:STDOUT: %pattern_type.4e7: type = pattern_type %EqualC [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.4e7 = ref_binding_pattern c1 [concrete] +// CHECK:STDOUT: %c1.var_patt: %pattern_type.4e7 = var_pattern %c1.patt [concrete] +// CHECK:STDOUT: %EqualC.EqualC.cpp_overload_set.type: type = cpp_overload_set_type @EqualC.EqualC.cpp_overload_set [concrete] +// CHECK:STDOUT: %EqualC.EqualC.cpp_overload_set.value: %EqualC.EqualC.cpp_overload_set.type = cpp_overload_set_value @EqualC.EqualC.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.ebc: type = ptr_type %EqualC [concrete] +// CHECK:STDOUT: %EqualC__carbon_thunk.type: type = fn_type @EqualC__carbon_thunk [concrete] +// CHECK:STDOUT: %EqualC__carbon_thunk: %EqualC__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.4e7 = ref_binding_pattern c2 [concrete] +// CHECK:STDOUT: %c2.var_patt: %pattern_type.4e7 = var_pattern %c2.patt [concrete] // CHECK:STDOUT: %pattern_type.831: type = pattern_type bool [concrete] // CHECK:STDOUT: %equal.patt: %pattern_type.831 = value_binding_pattern equal [concrete] // CHECK:STDOUT: %ptr.bb2: type = ptr_type bool [concrete] @@ -2333,20 +2333,20 @@ fn F() { // CHECK:STDOUT: %not_equal.patt: %pattern_type.831 = value_binding_pattern not_equal [concrete] // CHECK:STDOUT: %Destroy.Op.type: type = fn_type @Destroy.Op [concrete] // CHECK:STDOUT: %Destroy.Op: %Destroy.Op.type = struct_value () [concrete] -// CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] -// CHECK:STDOUT: %C.cpp_destructor: %C.cpp_destructor.type = struct_value () [concrete] -// CHECK:STDOUT: %C.Op.type: type = fn_type @C.Op [concrete] -// CHECK:STDOUT: %C.Op: %C.Op.type = struct_value () [concrete] +// CHECK:STDOUT: %EqualC.cpp_destructor.type: type = fn_type @EqualC.cpp_destructor [concrete] +// CHECK:STDOUT: %EqualC.cpp_destructor: %EqualC.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %EqualC.Op.type: type = fn_type @EqualC.Op [concrete] +// CHECK:STDOUT: %EqualC.Op: %EqualC.Op.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .C = %C.decl +// CHECK:STDOUT: .EqualC = %EqualC.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete = constants.%C.C.cpp_overload_set.value] -// CHECK:STDOUT: %C__carbon_thunk.decl: %C__carbon_thunk.type = fn_decl @C__carbon_thunk [concrete = constants.%C__carbon_thunk] { +// CHECK:STDOUT: %EqualC.decl: type = class_decl @EqualC [concrete = constants.%EqualC] {} {} +// CHECK:STDOUT: %EqualC.EqualC.cpp_overload_set.value: %EqualC.EqualC.cpp_overload_set.type = cpp_overload_set_value @EqualC.EqualC.cpp_overload_set [concrete = constants.%EqualC.EqualC.cpp_overload_set.value] +// CHECK:STDOUT: %EqualC__carbon_thunk.decl: %EqualC__carbon_thunk.type = fn_decl @EqualC__carbon_thunk [concrete = constants.%EqualC__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -2356,7 +2356,7 @@ fn F() { // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } -// CHECK:STDOUT: %C.cpp_destructor.decl: %C.cpp_destructor.type = fn_decl @C.cpp_destructor [concrete = constants.%C.cpp_destructor] { +// CHECK:STDOUT: %EqualC.cpp_destructor.decl: %EqualC.cpp_destructor.type = fn_decl @EqualC.cpp_destructor [concrete = constants.%EqualC.cpp_destructor] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -2365,50 +2365,50 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %c1.var: ref %C = var_storage %c1.var_patt -// CHECK:STDOUT: %Cpp.ref.loc12_19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc12_22: type = name_ref C, imports.%C.decl [concrete = constants.%C] -// CHECK:STDOUT: %C.ref.loc12_24: %C.C.cpp_overload_set.type = name_ref C, imports.%C.C.cpp_overload_set.value [concrete = constants.%C.C.cpp_overload_set.value] -// CHECK:STDOUT: %.loc12_3: ref %C = splice_block %c1.var {} -// CHECK:STDOUT: %addr.loc12: %ptr.0a2 = addr_of %.loc12_3 -// CHECK:STDOUT: %C__carbon_thunk.call.loc12: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%addr.loc12) -// CHECK:STDOUT: %.loc12_27: init %C to %.loc12_3 = mark_in_place_init %C__carbon_thunk.call.loc12 -// CHECK:STDOUT: assign %c1.var, %.loc12_27 -// CHECK:STDOUT: %.loc12_14: type = splice_block %C.ref.loc12_14 [concrete = constants.%C] { +// CHECK:STDOUT: %c1.var: ref %EqualC = var_storage %c1.var_patt +// CHECK:STDOUT: %Cpp.ref.loc12_24: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %EqualC.ref.loc12_27: type = name_ref EqualC, imports.%EqualC.decl [concrete = constants.%EqualC] +// CHECK:STDOUT: %EqualC.ref.loc12_34: %EqualC.EqualC.cpp_overload_set.type = name_ref EqualC, imports.%EqualC.EqualC.cpp_overload_set.value [concrete = constants.%EqualC.EqualC.cpp_overload_set.value] +// CHECK:STDOUT: %.loc12_3: ref %EqualC = splice_block %c1.var {} +// CHECK:STDOUT: %addr.loc12: %ptr.ebc = addr_of %.loc12_3 +// CHECK:STDOUT: %EqualC__carbon_thunk.call.loc12: init %empty_tuple.type = call imports.%EqualC__carbon_thunk.decl(%addr.loc12) +// CHECK:STDOUT: %.loc12_42: init %EqualC to %.loc12_3 = mark_in_place_init %EqualC__carbon_thunk.call.loc12 +// CHECK:STDOUT: assign %c1.var, %.loc12_42 +// CHECK:STDOUT: %.loc12_14: type = splice_block %EqualC.ref.loc12_14 [concrete = constants.%EqualC] { // CHECK:STDOUT: %Cpp.ref.loc12_11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc12_14: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %EqualC.ref.loc12_14: type = name_ref EqualC, imports.%EqualC.decl [concrete = constants.%EqualC] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1: ref %C = wrapper_binding c1, %c1.var +// CHECK:STDOUT: %c1: ref %EqualC = wrapper_binding c1, %c1.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = ref_binding_pattern c1 [concrete = constants.%c1.patt] -// CHECK:STDOUT: %c1.var_patt: %pattern_type.bbc = var_pattern %c1.patt [concrete = constants.%c1.var_patt] +// CHECK:STDOUT: %c1.patt: %pattern_type.4e7 = ref_binding_pattern c1 [concrete = constants.%c1.patt] +// CHECK:STDOUT: %c1.var_patt: %pattern_type.4e7 = var_pattern %c1.patt [concrete = constants.%c1.var_patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c2.var: ref %C = var_storage %c2.var_patt -// CHECK:STDOUT: %Cpp.ref.loc13_19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc13_22: type = name_ref C, imports.%C.decl [concrete = constants.%C] -// CHECK:STDOUT: %C.ref.loc13_24: %C.C.cpp_overload_set.type = name_ref C, imports.%C.C.cpp_overload_set.value [concrete = constants.%C.C.cpp_overload_set.value] -// CHECK:STDOUT: %.loc13_3: ref %C = splice_block %c2.var {} -// CHECK:STDOUT: %addr.loc13: %ptr.0a2 = addr_of %.loc13_3 -// CHECK:STDOUT: %C__carbon_thunk.call.loc13: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%addr.loc13) -// CHECK:STDOUT: %.loc13_27: init %C to %.loc13_3 = mark_in_place_init %C__carbon_thunk.call.loc13 -// CHECK:STDOUT: assign %c2.var, %.loc13_27 -// CHECK:STDOUT: %.loc13_14: type = splice_block %C.ref.loc13_14 [concrete = constants.%C] { +// CHECK:STDOUT: %c2.var: ref %EqualC = var_storage %c2.var_patt +// CHECK:STDOUT: %Cpp.ref.loc13_24: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %EqualC.ref.loc13_27: type = name_ref EqualC, imports.%EqualC.decl [concrete = constants.%EqualC] +// CHECK:STDOUT: %EqualC.ref.loc13_34: %EqualC.EqualC.cpp_overload_set.type = name_ref EqualC, imports.%EqualC.EqualC.cpp_overload_set.value [concrete = constants.%EqualC.EqualC.cpp_overload_set.value] +// CHECK:STDOUT: %.loc13_3: ref %EqualC = splice_block %c2.var {} +// CHECK:STDOUT: %addr.loc13: %ptr.ebc = addr_of %.loc13_3 +// CHECK:STDOUT: %EqualC__carbon_thunk.call.loc13: init %empty_tuple.type = call imports.%EqualC__carbon_thunk.decl(%addr.loc13) +// CHECK:STDOUT: %.loc13_42: init %EqualC to %.loc13_3 = mark_in_place_init %EqualC__carbon_thunk.call.loc13 +// CHECK:STDOUT: assign %c2.var, %.loc13_42 +// CHECK:STDOUT: %.loc13_14: type = splice_block %EqualC.ref.loc13_14 [concrete = constants.%EqualC] { // CHECK:STDOUT: %Cpp.ref.loc13_11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc13_14: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %EqualC.ref.loc13_14: type = name_ref EqualC, imports.%EqualC.decl [concrete = constants.%EqualC] // CHECK:STDOUT: } -// CHECK:STDOUT: %c2: ref %C = wrapper_binding c2, %c2.var +// CHECK:STDOUT: %c2: ref %EqualC = wrapper_binding c2, %c2.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = ref_binding_pattern c2 [concrete = constants.%c2.patt] -// CHECK:STDOUT: %c2.var_patt: %pattern_type.bbc = var_pattern %c2.patt [concrete = constants.%c2.var_patt] +// CHECK:STDOUT: %c2.patt: %pattern_type.4e7 = ref_binding_pattern c2 [concrete = constants.%c2.patt] +// CHECK:STDOUT: %c2.var_patt: %pattern_type.4e7 = var_pattern %c2.patt [concrete = constants.%c2.var_patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1.ref.loc16: ref %C = name_ref c1, %c1 -// CHECK:STDOUT: %c2.ref.loc16: ref %C = name_ref c2, %c2 -// CHECK:STDOUT: %.loc16_28.1: %C = acquire_value %c1.ref.loc16 -// CHECK:STDOUT: %.loc16_34.1: %C = acquire_value %c2.ref.loc16 -// CHECK:STDOUT: %.loc16_28.2: ref %C = value_as_ref %.loc16_28.1 -// CHECK:STDOUT: %addr.loc16_31.1: %ptr.0a2 = addr_of %.loc16_28.2 -// CHECK:STDOUT: %.loc16_34.2: ref %C = value_as_ref %.loc16_34.1 -// CHECK:STDOUT: %addr.loc16_31.2: %ptr.0a2 = addr_of %.loc16_34.2 +// CHECK:STDOUT: %c1.ref.loc16: ref %EqualC = name_ref c1, %c1 +// CHECK:STDOUT: %c2.ref.loc16: ref %EqualC = name_ref c2, %c2 +// CHECK:STDOUT: %.loc16_28.1: %EqualC = acquire_value %c1.ref.loc16 +// CHECK:STDOUT: %.loc16_34.1: %EqualC = acquire_value %c2.ref.loc16 +// CHECK:STDOUT: %.loc16_28.2: ref %EqualC = value_as_ref %.loc16_28.1 +// CHECK:STDOUT: %addr.loc16_31.1: %ptr.ebc = addr_of %.loc16_28.2 +// CHECK:STDOUT: %.loc16_34.2: ref %EqualC = value_as_ref %.loc16_34.1 +// CHECK:STDOUT: %addr.loc16_31.2: %ptr.ebc = addr_of %.loc16_34.2 // CHECK:STDOUT: %.loc16_31.1: ref bool = temporary_storage // CHECK:STDOUT: %addr.loc16_31.3: %ptr.bb2 = addr_of %.loc16_31.1 // CHECK:STDOUT: %operator_EqualEqual__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_EqualEqual__carbon_thunk.decl(%addr.loc16_31.1, %addr.loc16_31.2, %addr.loc16_31.3) @@ -2420,8 +2420,8 @@ fn F() { // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %equal.patt: %pattern_type.831 = value_binding_pattern equal [concrete = constants.%equal.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1.ref.loc23: ref %C = name_ref c1, %c1 -// CHECK:STDOUT: %c2.ref.loc23: ref %C = name_ref c2, %c2 +// CHECK:STDOUT: %c1.ref.loc23: ref %EqualC = name_ref c1, %c1 +// CHECK:STDOUT: %c2.ref.loc23: ref %EqualC = name_ref c2, %c2 // CHECK:STDOUT: %.loc23: type = type_literal bool [concrete = bool] // CHECK:STDOUT: %not_equal: bool = wrapper_binding not_equal, [concrete = ] // CHECK:STDOUT: name_binding_decl { @@ -2430,14 +2430,14 @@ fn F() { // CHECK:STDOUT: %Destroy.Op.bound: = bound_method %.loc16_31.3, constants.%Destroy.Op // CHECK:STDOUT: %Destroy.Op.call: init %empty_tuple.type = call %Destroy.Op.bound(%.loc16_31.3) // CHECK:STDOUT: -// CHECK:STDOUT: %C.Op.bound.loc13: = bound_method %c2.var, constants.%C.Op -// CHECK:STDOUT: %Op.ref.loc13: %C.cpp_destructor.type = name_ref Op, imports.%C.cpp_destructor.decl [concrete = constants.%C.cpp_destructor] -// CHECK:STDOUT: %C.cpp_destructor.bound.loc13: = bound_method %c2.var, %Op.ref.loc13 -// CHECK:STDOUT: %C.cpp_destructor.call.loc13: init %empty_tuple.type = call %C.cpp_destructor.bound.loc13(%c2.var) -// CHECK:STDOUT: %C.Op.bound.loc12: = bound_method %c1.var, constants.%C.Op -// CHECK:STDOUT: %Op.ref.loc12: %C.cpp_destructor.type = name_ref Op, imports.%C.cpp_destructor.decl [concrete = constants.%C.cpp_destructor] -// CHECK:STDOUT: %C.cpp_destructor.bound.loc12: = bound_method %c1.var, %Op.ref.loc12 -// CHECK:STDOUT: %C.cpp_destructor.call.loc12: init %empty_tuple.type = call %C.cpp_destructor.bound.loc12(%c1.var) +// CHECK:STDOUT: %EqualC.Op.bound.loc13: = bound_method %c2.var, constants.%EqualC.Op +// CHECK:STDOUT: %Op.ref.loc13: %EqualC.cpp_destructor.type = name_ref Op, imports.%EqualC.cpp_destructor.decl [concrete = constants.%EqualC.cpp_destructor] +// CHECK:STDOUT: %EqualC.cpp_destructor.bound.loc13: = bound_method %c2.var, %Op.ref.loc13 +// CHECK:STDOUT: %EqualC.cpp_destructor.call.loc13: init %empty_tuple.type = call %EqualC.cpp_destructor.bound.loc13(%c2.var) +// CHECK:STDOUT: %EqualC.Op.bound.loc12: = bound_method %c1.var, constants.%EqualC.Op +// CHECK:STDOUT: %Op.ref.loc12: %EqualC.cpp_destructor.type = name_ref Op, imports.%EqualC.cpp_destructor.decl [concrete = constants.%EqualC.cpp_destructor] +// CHECK:STDOUT: %EqualC.cpp_destructor.bound.loc12: = bound_method %c1.var, %Op.ref.loc12 +// CHECK:STDOUT: %EqualC.cpp_destructor.call.loc12: init %empty_tuple.type = call %EqualC.cpp_destructor.bound.loc12(%c1.var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -2764,15 +2764,15 @@ fn F() { // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %pattern_type.7cb: type = pattern_type %C [concrete] -// CHECK:STDOUT: %c1.patt: %pattern_type.7cb = value_binding_pattern c1 [concrete] +// CHECK:STDOUT: %pattern_type.73b: type = pattern_type %C [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.73b = value_binding_pattern c1 [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] // CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.f8b: type = ptr_type %C [concrete] +// CHECK:STDOUT: %ptr.25e: type = ptr_type %C [concrete] // CHECK:STDOUT: %C__carbon_thunk.type: type = fn_type @C__carbon_thunk [concrete] // CHECK:STDOUT: %C__carbon_thunk: %C__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %c2.patt: %pattern_type.7cb = value_binding_pattern c2 [concrete] -// CHECK:STDOUT: %c3.patt: %pattern_type.7cb = value_binding_pattern c3 [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.73b = value_binding_pattern c2 [concrete] +// CHECK:STDOUT: %c3.patt: %pattern_type.73b = value_binding_pattern c3 [concrete] // CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] // CHECK:STDOUT: %C.cpp_destructor: %C.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: %C.Op.type: type = fn_type @C.Op [concrete] @@ -2781,10 +2781,10 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .N = %N +// CHECK:STDOUT: .GlobalOpN = %GlobalOpN // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %N: = namespace [concrete] { +// CHECK:STDOUT: %GlobalOpN: = namespace [concrete] { // CHECK:STDOUT: .C = %C.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } @@ -2804,64 +2804,64 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %Cpp.ref.loc8_21: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %N.ref.loc8_24: = name_ref N, imports.%N [concrete = imports.%N] -// CHECK:STDOUT: %C.ref.loc8_26: type = name_ref C, imports.%C.decl [concrete = constants.%C] -// CHECK:STDOUT: %C.ref.loc8_28: %C.C.cpp_overload_set.type = name_ref C, imports.%C.C.cpp_overload_set.value [concrete = constants.%C.C.cpp_overload_set.value] -// CHECK:STDOUT: %.loc8_31.1: ref %C = temporary_storage -// CHECK:STDOUT: %addr.loc8: %ptr.f8b = addr_of %.loc8_31.1 +// CHECK:STDOUT: %Cpp.ref.loc8_29: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %GlobalOpN.ref.loc8_32: = name_ref GlobalOpN, imports.%GlobalOpN [concrete = imports.%GlobalOpN] +// CHECK:STDOUT: %C.ref.loc8_42: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %C.ref.loc8_44: %C.C.cpp_overload_set.type = name_ref C, imports.%C.C.cpp_overload_set.value [concrete = constants.%C.C.cpp_overload_set.value] +// CHECK:STDOUT: %.loc8_47.1: ref %C = temporary_storage +// CHECK:STDOUT: %addr.loc8: %ptr.25e = addr_of %.loc8_47.1 // CHECK:STDOUT: %C__carbon_thunk.call.loc8: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%addr.loc8) -// CHECK:STDOUT: %.loc8_31.2: init %C to %.loc8_31.1 = mark_in_place_init %C__carbon_thunk.call.loc8 -// CHECK:STDOUT: %.loc8_31.3: ref %C = temporary %.loc8_31.1, %.loc8_31.2 -// CHECK:STDOUT: %.loc8_31.4: %C = acquire_value %.loc8_31.3 -// CHECK:STDOUT: %.loc8_16: type = splice_block %C.ref.loc8_16 [concrete = constants.%C] { +// CHECK:STDOUT: %.loc8_47.2: init %C to %.loc8_47.1 = mark_in_place_init %C__carbon_thunk.call.loc8 +// CHECK:STDOUT: %.loc8_47.3: ref %C = temporary %.loc8_47.1, %.loc8_47.2 +// CHECK:STDOUT: %.loc8_47.4: %C = acquire_value %.loc8_47.3 +// CHECK:STDOUT: %.loc8_24: type = splice_block %C.ref.loc8_24 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc8_11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %N.ref.loc8_14: = name_ref N, imports.%N [concrete = imports.%N] -// CHECK:STDOUT: %C.ref.loc8_16: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %GlobalOpN.ref.loc8_14: = name_ref GlobalOpN, imports.%GlobalOpN [concrete = imports.%GlobalOpN] +// CHECK:STDOUT: %C.ref.loc8_24: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1: %C = wrapper_binding c1, %.loc8_31.4 +// CHECK:STDOUT: %c1: %C = wrapper_binding c1, %.loc8_47.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %pattern_type.7cb = value_binding_pattern c1 [concrete = constants.%c1.patt] +// CHECK:STDOUT: %c1.patt: %pattern_type.73b = value_binding_pattern c1 [concrete = constants.%c1.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %Cpp.ref.loc9_21: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %N.ref.loc9_24: = name_ref N, imports.%N [concrete = imports.%N] -// CHECK:STDOUT: %C.ref.loc9_26: type = name_ref C, imports.%C.decl [concrete = constants.%C] -// CHECK:STDOUT: %C.ref.loc9_28: %C.C.cpp_overload_set.type = name_ref C, imports.%C.C.cpp_overload_set.value [concrete = constants.%C.C.cpp_overload_set.value] -// CHECK:STDOUT: %.loc9_31.1: ref %C = temporary_storage -// CHECK:STDOUT: %addr.loc9: %ptr.f8b = addr_of %.loc9_31.1 +// CHECK:STDOUT: %Cpp.ref.loc9_29: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %GlobalOpN.ref.loc9_32: = name_ref GlobalOpN, imports.%GlobalOpN [concrete = imports.%GlobalOpN] +// CHECK:STDOUT: %C.ref.loc9_42: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %C.ref.loc9_44: %C.C.cpp_overload_set.type = name_ref C, imports.%C.C.cpp_overload_set.value [concrete = constants.%C.C.cpp_overload_set.value] +// CHECK:STDOUT: %.loc9_47.1: ref %C = temporary_storage +// CHECK:STDOUT: %addr.loc9: %ptr.25e = addr_of %.loc9_47.1 // CHECK:STDOUT: %C__carbon_thunk.call.loc9: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%addr.loc9) -// CHECK:STDOUT: %.loc9_31.2: init %C to %.loc9_31.1 = mark_in_place_init %C__carbon_thunk.call.loc9 -// CHECK:STDOUT: %.loc9_31.3: ref %C = temporary %.loc9_31.1, %.loc9_31.2 -// CHECK:STDOUT: %.loc9_31.4: %C = acquire_value %.loc9_31.3 -// CHECK:STDOUT: %.loc9_16: type = splice_block %C.ref.loc9_16 [concrete = constants.%C] { +// CHECK:STDOUT: %.loc9_47.2: init %C to %.loc9_47.1 = mark_in_place_init %C__carbon_thunk.call.loc9 +// CHECK:STDOUT: %.loc9_47.3: ref %C = temporary %.loc9_47.1, %.loc9_47.2 +// CHECK:STDOUT: %.loc9_47.4: %C = acquire_value %.loc9_47.3 +// CHECK:STDOUT: %.loc9_24: type = splice_block %C.ref.loc9_24 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc9_11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %N.ref.loc9_14: = name_ref N, imports.%N [concrete = imports.%N] -// CHECK:STDOUT: %C.ref.loc9_16: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %GlobalOpN.ref.loc9_14: = name_ref GlobalOpN, imports.%GlobalOpN [concrete = imports.%GlobalOpN] +// CHECK:STDOUT: %C.ref.loc9_24: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } -// CHECK:STDOUT: %c2: %C = wrapper_binding c2, %.loc9_31.4 +// CHECK:STDOUT: %c2: %C = wrapper_binding c2, %.loc9_47.4 // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c2.patt: %pattern_type.7cb = value_binding_pattern c2 [concrete = constants.%c2.patt] +// CHECK:STDOUT: %c2.patt: %pattern_type.73b = value_binding_pattern c2 [concrete = constants.%c2.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c1.ref: %C = name_ref c1, %c1 // CHECK:STDOUT: %c2.ref: %C = name_ref c2, %c2 // CHECK:STDOUT: %.loc14: type = splice_block %C.ref.loc14 [concrete = constants.%C] { // CHECK:STDOUT: %Cpp.ref.loc14: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %N.ref.loc14: = name_ref N, imports.%N [concrete = imports.%N] +// CHECK:STDOUT: %GlobalOpN.ref.loc14: = name_ref GlobalOpN, imports.%GlobalOpN [concrete = imports.%GlobalOpN] // CHECK:STDOUT: %C.ref.loc14: type = name_ref C, imports.%C.decl [concrete = constants.%C] // CHECK:STDOUT: } // CHECK:STDOUT: %c3: %C = wrapper_binding c3, [concrete = ] // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c3.patt: %pattern_type.7cb = value_binding_pattern c3 [concrete = constants.%c3.patt] +// CHECK:STDOUT: %c3.patt: %pattern_type.73b = value_binding_pattern c3 [concrete = constants.%c3.patt] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: %C.Op.bound.loc9: = bound_method %.loc9_31.3, constants.%C.Op +// CHECK:STDOUT: %C.Op.bound.loc9: = bound_method %.loc9_47.3, constants.%C.Op // CHECK:STDOUT: %Op.ref.loc9: %C.cpp_destructor.type = name_ref Op, imports.%C.cpp_destructor.decl [concrete = constants.%C.cpp_destructor] -// CHECK:STDOUT: %C.cpp_destructor.bound.loc9: = bound_method %.loc9_31.3, %Op.ref.loc9 -// CHECK:STDOUT: %C.cpp_destructor.call.loc9: init %empty_tuple.type = call %C.cpp_destructor.bound.loc9(%.loc9_31.3) -// CHECK:STDOUT: %C.Op.bound.loc8: = bound_method %.loc8_31.3, constants.%C.Op +// CHECK:STDOUT: %C.cpp_destructor.bound.loc9: = bound_method %.loc9_47.3, %Op.ref.loc9 +// CHECK:STDOUT: %C.cpp_destructor.call.loc9: init %empty_tuple.type = call %C.cpp_destructor.bound.loc9(%.loc9_47.3) +// CHECK:STDOUT: %C.Op.bound.loc8: = bound_method %.loc8_47.3, constants.%C.Op // CHECK:STDOUT: %Op.ref.loc8: %C.cpp_destructor.type = name_ref Op, imports.%C.cpp_destructor.decl [concrete = constants.%C.cpp_destructor] -// CHECK:STDOUT: %C.cpp_destructor.bound.loc8: = bound_method %.loc8_31.3, %Op.ref.loc8 -// CHECK:STDOUT: %C.cpp_destructor.call.loc8: init %empty_tuple.type = call %C.cpp_destructor.bound.loc8(%.loc8_31.3) +// CHECK:STDOUT: %C.cpp_destructor.bound.loc8: = bound_method %.loc8_47.3, %Op.ref.loc8 +// CHECK:STDOUT: %C.cpp_destructor.call.loc8: init %empty_tuple.type = call %C.cpp_destructor.bound.loc8(%.loc8_47.3) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: @@ -3128,37 +3128,37 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %pattern_type.bbc: type = pattern_type %C [concrete] -// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = ref_binding_pattern c1 [concrete] -// CHECK:STDOUT: %c1.var_patt: %pattern_type.bbc = var_pattern %c1.patt [concrete] -// CHECK:STDOUT: %C.C.cpp_overload_set.type: type = cpp_overload_set_type @C.C.cpp_overload_set [concrete] -// CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete] -// CHECK:STDOUT: %ptr.0a2: type = ptr_type %C [concrete] -// CHECK:STDOUT: %C__carbon_thunk.type: type = fn_type @C__carbon_thunk [concrete] -// CHECK:STDOUT: %C__carbon_thunk: %C__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = ref_binding_pattern c2 [concrete] -// CHECK:STDOUT: %c2.var_patt: %pattern_type.bbc = var_pattern %c2.patt [concrete] +// CHECK:STDOUT: %MemberClass: type = class_type @MemberClass [concrete] +// CHECK:STDOUT: %pattern_type.809: type = pattern_type %MemberClass [concrete] +// CHECK:STDOUT: %c1.patt: %pattern_type.809 = ref_binding_pattern c1 [concrete] +// CHECK:STDOUT: %c1.var_patt: %pattern_type.809 = var_pattern %c1.patt [concrete] +// CHECK:STDOUT: %MemberClass.MemberClass.cpp_overload_set.type: type = cpp_overload_set_type @MemberClass.MemberClass.cpp_overload_set [concrete] +// CHECK:STDOUT: %MemberClass.MemberClass.cpp_overload_set.value: %MemberClass.MemberClass.cpp_overload_set.type = cpp_overload_set_value @MemberClass.MemberClass.cpp_overload_set [concrete] +// CHECK:STDOUT: %ptr.ba2: type = ptr_type %MemberClass [concrete] +// CHECK:STDOUT: %MemberClass__carbon_thunk.type: type = fn_type @MemberClass__carbon_thunk [concrete] +// CHECK:STDOUT: %MemberClass__carbon_thunk: %MemberClass__carbon_thunk.type = struct_value () [concrete] +// CHECK:STDOUT: %c2.patt: %pattern_type.809 = ref_binding_pattern c2 [concrete] +// CHECK:STDOUT: %c2.var_patt: %pattern_type.809 = var_pattern %c2.patt [concrete] // CHECK:STDOUT: %operator_Minus__carbon_thunk.type: type = fn_type @operator_Minus__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Minus__carbon_thunk: %operator_Minus__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %c3.patt: %pattern_type.bbc = ref_binding_pattern c3 [concrete] -// CHECK:STDOUT: %c3.var_patt: %pattern_type.bbc = var_pattern %c3.patt [concrete] +// CHECK:STDOUT: %c3.patt: %pattern_type.809 = ref_binding_pattern c3 [concrete] +// CHECK:STDOUT: %c3.var_patt: %pattern_type.809 = var_pattern %c3.patt [concrete] // CHECK:STDOUT: %operator_Plus__carbon_thunk.type: type = fn_type @operator_Plus__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Plus__carbon_thunk: %operator_Plus__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %C.cpp_destructor.type: type = fn_type @C.cpp_destructor [concrete] -// CHECK:STDOUT: %C.cpp_destructor: %C.cpp_destructor.type = struct_value () [concrete] -// CHECK:STDOUT: %C.Op.type: type = fn_type @C.Op [concrete] -// CHECK:STDOUT: %C.Op: %C.Op.type = struct_value () [concrete] +// CHECK:STDOUT: %MemberClass.cpp_destructor.type: type = fn_type @MemberClass.cpp_destructor [concrete] +// CHECK:STDOUT: %MemberClass.cpp_destructor: %MemberClass.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %MemberClass.Op.type: type = fn_type @MemberClass.Op [concrete] +// CHECK:STDOUT: %MemberClass.Op: %MemberClass.Op.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .C = %C.decl +// CHECK:STDOUT: .MemberClass = %MemberClass.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: %C.C.cpp_overload_set.value: %C.C.cpp_overload_set.type = cpp_overload_set_value @C.C.cpp_overload_set [concrete = constants.%C.C.cpp_overload_set.value] -// CHECK:STDOUT: %C__carbon_thunk.decl: %C__carbon_thunk.type = fn_decl @C__carbon_thunk [concrete = constants.%C__carbon_thunk] { +// CHECK:STDOUT: %MemberClass.decl: type = class_decl @MemberClass [concrete = constants.%MemberClass] {} {} +// CHECK:STDOUT: %MemberClass.MemberClass.cpp_overload_set.value: %MemberClass.MemberClass.cpp_overload_set.type = cpp_overload_set_value @MemberClass.MemberClass.cpp_overload_set [concrete = constants.%MemberClass.MemberClass.cpp_overload_set.value] +// CHECK:STDOUT: %MemberClass__carbon_thunk.decl: %MemberClass__carbon_thunk.type = fn_decl @MemberClass__carbon_thunk [concrete = constants.%MemberClass__carbon_thunk] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -3173,7 +3173,7 @@ fn F() { // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } -// CHECK:STDOUT: %C.cpp_destructor.decl: %C.cpp_destructor.type = fn_decl @C.cpp_destructor [concrete = constants.%C.cpp_destructor] { +// CHECK:STDOUT: %MemberClass.cpp_destructor.decl: %MemberClass.cpp_destructor.type = fn_decl @MemberClass.cpp_destructor [concrete = constants.%MemberClass.cpp_destructor] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -3182,83 +3182,83 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %c1.var: ref %C = var_storage %c1.var_patt -// CHECK:STDOUT: %Cpp.ref.loc8_19: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc8_22: type = name_ref C, imports.%C.decl [concrete = constants.%C] -// CHECK:STDOUT: %C.ref.loc8_24: %C.C.cpp_overload_set.type = name_ref C, imports.%C.C.cpp_overload_set.value [concrete = constants.%C.C.cpp_overload_set.value] -// CHECK:STDOUT: %.loc8_3: ref %C = splice_block %c1.var {} -// CHECK:STDOUT: %addr.loc8: %ptr.0a2 = addr_of %.loc8_3 -// CHECK:STDOUT: %C__carbon_thunk.call: init %empty_tuple.type = call imports.%C__carbon_thunk.decl(%addr.loc8) -// CHECK:STDOUT: %.loc8_27: init %C to %.loc8_3 = mark_in_place_init %C__carbon_thunk.call -// CHECK:STDOUT: assign %c1.var, %.loc8_27 -// CHECK:STDOUT: %.loc8_14: type = splice_block %C.ref.loc8_14 [concrete = constants.%C] { +// CHECK:STDOUT: %c1.var: ref %MemberClass = var_storage %c1.var_patt +// CHECK:STDOUT: %Cpp.ref.loc8_29: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %MemberClass.ref.loc8_32: type = name_ref MemberClass, imports.%MemberClass.decl [concrete = constants.%MemberClass] +// CHECK:STDOUT: %MemberClass.ref.loc8_44: %MemberClass.MemberClass.cpp_overload_set.type = name_ref MemberClass, imports.%MemberClass.MemberClass.cpp_overload_set.value [concrete = constants.%MemberClass.MemberClass.cpp_overload_set.value] +// CHECK:STDOUT: %.loc8_3: ref %MemberClass = splice_block %c1.var {} +// CHECK:STDOUT: %addr.loc8: %ptr.ba2 = addr_of %.loc8_3 +// CHECK:STDOUT: %MemberClass__carbon_thunk.call: init %empty_tuple.type = call imports.%MemberClass__carbon_thunk.decl(%addr.loc8) +// CHECK:STDOUT: %.loc8_57: init %MemberClass to %.loc8_3 = mark_in_place_init %MemberClass__carbon_thunk.call +// CHECK:STDOUT: assign %c1.var, %.loc8_57 +// CHECK:STDOUT: %.loc8_14: type = splice_block %MemberClass.ref.loc8_14 [concrete = constants.%MemberClass] { // CHECK:STDOUT: %Cpp.ref.loc8_11: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc8_14: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %MemberClass.ref.loc8_14: type = name_ref MemberClass, imports.%MemberClass.decl [concrete = constants.%MemberClass] // CHECK:STDOUT: } -// CHECK:STDOUT: %c1: ref %C = wrapper_binding c1, %c1.var +// CHECK:STDOUT: %c1: ref %MemberClass = wrapper_binding c1, %c1.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c1.patt: %pattern_type.bbc = ref_binding_pattern c1 [concrete = constants.%c1.patt] -// CHECK:STDOUT: %c1.var_patt: %pattern_type.bbc = var_pattern %c1.patt [concrete = constants.%c1.var_patt] +// CHECK:STDOUT: %c1.patt: %pattern_type.809 = ref_binding_pattern c1 [concrete = constants.%c1.patt] +// CHECK:STDOUT: %c1.var_patt: %pattern_type.809 = var_pattern %c1.patt [concrete = constants.%c1.var_patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c2.var: ref %C = var_storage %c2.var_patt -// CHECK:STDOUT: %c1.ref.loc9: ref %C = name_ref c1, %c1 -// CHECK:STDOUT: %.loc9_3: ref %C = splice_block %c2.var {} -// CHECK:STDOUT: %addr.loc9: %ptr.0a2 = addr_of %.loc9_3 +// CHECK:STDOUT: %c2.var: ref %MemberClass = var_storage %c2.var_patt +// CHECK:STDOUT: %c1.ref.loc9: ref %MemberClass = name_ref c1, %c1 +// CHECK:STDOUT: %.loc9_3: ref %MemberClass = splice_block %c2.var {} +// CHECK:STDOUT: %addr.loc9: %ptr.ba2 = addr_of %.loc9_3 // CHECK:STDOUT: %operator_Minus__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Minus__carbon_thunk.decl(%c1.ref.loc9, %addr.loc9) -// CHECK:STDOUT: %.loc9_19: init %C to %.loc9_3 = mark_in_place_init %operator_Minus__carbon_thunk.call -// CHECK:STDOUT: assign %c2.var, %.loc9_19 -// CHECK:STDOUT: %.loc9_14: type = splice_block %C.ref.loc9 [concrete = constants.%C] { +// CHECK:STDOUT: %.loc9_29: init %MemberClass to %.loc9_3 = mark_in_place_init %operator_Minus__carbon_thunk.call +// CHECK:STDOUT: assign %c2.var, %.loc9_29 +// CHECK:STDOUT: %.loc9_14: type = splice_block %MemberClass.ref.loc9 [concrete = constants.%MemberClass] { // CHECK:STDOUT: %Cpp.ref.loc9: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc9: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %MemberClass.ref.loc9: type = name_ref MemberClass, imports.%MemberClass.decl [concrete = constants.%MemberClass] // CHECK:STDOUT: } -// CHECK:STDOUT: %c2: ref %C = wrapper_binding c2, %c2.var +// CHECK:STDOUT: %c2: ref %MemberClass = wrapper_binding c2, %c2.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c2.patt: %pattern_type.bbc = ref_binding_pattern c2 [concrete = constants.%c2.patt] -// CHECK:STDOUT: %c2.var_patt: %pattern_type.bbc = var_pattern %c2.patt [concrete = constants.%c2.var_patt] +// CHECK:STDOUT: %c2.patt: %pattern_type.809 = ref_binding_pattern c2 [concrete = constants.%c2.patt] +// CHECK:STDOUT: %c2.var_patt: %pattern_type.809 = var_pattern %c2.patt [concrete = constants.%c2.var_patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c3.var: ref %C = var_storage %c3.var_patt -// CHECK:STDOUT: %c1.ref.loc10: ref %C = name_ref c1, %c1 -// CHECK:STDOUT: %c2.ref: ref %C = name_ref c2, %c2 -// CHECK:STDOUT: %.loc10_3: ref %C = splice_block %c3.var {} -// CHECK:STDOUT: %.loc10_31.1: %C = acquire_value %c2.ref -// CHECK:STDOUT: %.loc10_31.2: ref %C = value_as_ref %.loc10_31.1 -// CHECK:STDOUT: %addr.loc10_29.1: %ptr.0a2 = addr_of %.loc10_31.2 -// CHECK:STDOUT: %addr.loc10_29.2: %ptr.0a2 = addr_of %.loc10_3 -// CHECK:STDOUT: %operator_Plus__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Plus__carbon_thunk.decl(%c1.ref.loc10, %addr.loc10_29.1, %addr.loc10_29.2) -// CHECK:STDOUT: %.loc10_29: init %C to %.loc10_3 = mark_in_place_init %operator_Plus__carbon_thunk.call -// CHECK:STDOUT: assign %c3.var, %.loc10_29 -// CHECK:STDOUT: %.loc10_21: type = splice_block %C.ref.loc10 [concrete = constants.%C] { +// CHECK:STDOUT: %c3.var: ref %MemberClass = var_storage %c3.var_patt +// CHECK:STDOUT: %c1.ref.loc10: ref %MemberClass = name_ref c1, %c1 +// CHECK:STDOUT: %c2.ref: ref %MemberClass = name_ref c2, %c2 +// CHECK:STDOUT: %.loc10_3: ref %MemberClass = splice_block %c3.var {} +// CHECK:STDOUT: %.loc10_41.1: %MemberClass = acquire_value %c2.ref +// CHECK:STDOUT: %.loc10_41.2: ref %MemberClass = value_as_ref %.loc10_41.1 +// CHECK:STDOUT: %addr.loc10_39.1: %ptr.ba2 = addr_of %.loc10_41.2 +// CHECK:STDOUT: %addr.loc10_39.2: %ptr.ba2 = addr_of %.loc10_3 +// CHECK:STDOUT: %operator_Plus__carbon_thunk.call: init %empty_tuple.type = call imports.%operator_Plus__carbon_thunk.decl(%c1.ref.loc10, %addr.loc10_39.1, %addr.loc10_39.2) +// CHECK:STDOUT: %.loc10_39: init %MemberClass to %.loc10_3 = mark_in_place_init %operator_Plus__carbon_thunk.call +// CHECK:STDOUT: assign %c3.var, %.loc10_39 +// CHECK:STDOUT: %.loc10_21: type = splice_block %MemberClass.ref.loc10 [concrete = constants.%MemberClass] { // CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %C.ref.loc10: type = name_ref C, imports.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %MemberClass.ref.loc10: type = name_ref MemberClass, imports.%MemberClass.decl [concrete = constants.%MemberClass] // CHECK:STDOUT: } -// CHECK:STDOUT: %c3: ref %C = wrapper_binding c3, %c3.var +// CHECK:STDOUT: %c3: ref %MemberClass = wrapper_binding c3, %c3.var // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %c3.patt: %pattern_type.bbc = ref_binding_pattern c3 [concrete = constants.%c3.patt] -// CHECK:STDOUT: %c3.var_patt: %pattern_type.bbc = var_pattern %c3.patt [concrete = constants.%c3.var_patt] +// CHECK:STDOUT: %c3.patt: %pattern_type.809 = ref_binding_pattern c3 [concrete = constants.%c3.patt] +// CHECK:STDOUT: %c3.var_patt: %pattern_type.809 = var_pattern %c3.patt [concrete = constants.%c3.var_patt] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: %C.Op.bound.loc10: = bound_method %c3.var, constants.%C.Op -// CHECK:STDOUT: %Op.ref.loc10: %C.cpp_destructor.type = name_ref Op, imports.%C.cpp_destructor.decl [concrete = constants.%C.cpp_destructor] -// CHECK:STDOUT: %C.cpp_destructor.bound.loc10: = bound_method %c3.var, %Op.ref.loc10 -// CHECK:STDOUT: %C.cpp_destructor.call.loc10: init %empty_tuple.type = call %C.cpp_destructor.bound.loc10(%c3.var) -// CHECK:STDOUT: %C.Op.bound.loc9: = bound_method %c2.var, constants.%C.Op -// CHECK:STDOUT: %Op.ref.loc9: %C.cpp_destructor.type = name_ref Op, imports.%C.cpp_destructor.decl [concrete = constants.%C.cpp_destructor] -// CHECK:STDOUT: %C.cpp_destructor.bound.loc9: = bound_method %c2.var, %Op.ref.loc9 -// CHECK:STDOUT: %C.cpp_destructor.call.loc9: init %empty_tuple.type = call %C.cpp_destructor.bound.loc9(%c2.var) -// CHECK:STDOUT: %C.Op.bound.loc8: = bound_method %c1.var, constants.%C.Op -// CHECK:STDOUT: %Op.ref.loc8: %C.cpp_destructor.type = name_ref Op, imports.%C.cpp_destructor.decl [concrete = constants.%C.cpp_destructor] -// CHECK:STDOUT: %C.cpp_destructor.bound.loc8: = bound_method %c1.var, %Op.ref.loc8 -// CHECK:STDOUT: %C.cpp_destructor.call.loc8: init %empty_tuple.type = call %C.cpp_destructor.bound.loc8(%c1.var) +// CHECK:STDOUT: %MemberClass.Op.bound.loc10: = bound_method %c3.var, constants.%MemberClass.Op +// CHECK:STDOUT: %Op.ref.loc10: %MemberClass.cpp_destructor.type = name_ref Op, imports.%MemberClass.cpp_destructor.decl [concrete = constants.%MemberClass.cpp_destructor] +// CHECK:STDOUT: %MemberClass.cpp_destructor.bound.loc10: = bound_method %c3.var, %Op.ref.loc10 +// CHECK:STDOUT: %MemberClass.cpp_destructor.call.loc10: init %empty_tuple.type = call %MemberClass.cpp_destructor.bound.loc10(%c3.var) +// CHECK:STDOUT: %MemberClass.Op.bound.loc9: = bound_method %c2.var, constants.%MemberClass.Op +// CHECK:STDOUT: %Op.ref.loc9: %MemberClass.cpp_destructor.type = name_ref Op, imports.%MemberClass.cpp_destructor.decl [concrete = constants.%MemberClass.cpp_destructor] +// CHECK:STDOUT: %MemberClass.cpp_destructor.bound.loc9: = bound_method %c2.var, %Op.ref.loc9 +// CHECK:STDOUT: %MemberClass.cpp_destructor.call.loc9: init %empty_tuple.type = call %MemberClass.cpp_destructor.bound.loc9(%c2.var) +// CHECK:STDOUT: %MemberClass.Op.bound.loc8: = bound_method %c1.var, constants.%MemberClass.Op +// CHECK:STDOUT: %Op.ref.loc8: %MemberClass.cpp_destructor.type = name_ref Op, imports.%MemberClass.cpp_destructor.decl [concrete = constants.%MemberClass.cpp_destructor] +// CHECK:STDOUT: %MemberClass.cpp_destructor.bound.loc8: = bound_method %c1.var, %Op.ref.loc8 +// CHECK:STDOUT: %MemberClass.cpp_destructor.call.loc8: init %empty_tuple.type = call %MemberClass.cpp_destructor.bound.loc8(%c1.var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- indirect_template_instantiation.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { -// CHECK:STDOUT: %B: type = class_type @B [concrete] +// CHECK:STDOUT: %TemplateB: type = class_type @TemplateB [concrete] // CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] // CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] -// CHECK:STDOUT: %ptr.307: type = ptr_type %B [concrete] +// CHECK:STDOUT: %ptr.336: type = ptr_type %TemplateB [concrete] // CHECK:STDOUT: %operator_Plus__carbon_thunk.type: type = fn_type @operator_Plus__carbon_thunk [concrete] // CHECK:STDOUT: %operator_Plus__carbon_thunk: %operator_Plus__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: } @@ -3271,14 +3271,14 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @F(%x.param: %B) -> out %return.param: %i32 { +// CHECK:STDOUT: fn @F(%x.param: %TemplateB) -> out %return.param: %i32 { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %x.ref.loc14_10: %B = name_ref x, %x -// CHECK:STDOUT: %x.ref.loc14_14: %B = name_ref x, %x -// CHECK:STDOUT: %.loc14_10: ref %B = value_as_ref %x.ref.loc14_10 -// CHECK:STDOUT: %addr.loc14_12.1: %ptr.307 = addr_of %.loc14_10 -// CHECK:STDOUT: %.loc14_14: ref %B = value_as_ref %x.ref.loc14_14 -// CHECK:STDOUT: %addr.loc14_12.2: %ptr.307 = addr_of %.loc14_14 +// CHECK:STDOUT: %x.ref.loc14_10: %TemplateB = name_ref x, %x +// CHECK:STDOUT: %x.ref.loc14_14: %TemplateB = name_ref x, %x +// CHECK:STDOUT: %.loc14_10: ref %TemplateB = value_as_ref %x.ref.loc14_10 +// CHECK:STDOUT: %addr.loc14_12.1: %ptr.336 = addr_of %.loc14_10 +// CHECK:STDOUT: %.loc14_14: ref %TemplateB = value_as_ref %x.ref.loc14_14 +// CHECK:STDOUT: %addr.loc14_12.2: %ptr.336 = addr_of %.loc14_14 // CHECK:STDOUT: %operator_Plus__carbon_thunk.call: init %i32 = call imports.%operator_Plus__carbon_thunk.decl(%addr.loc14_12.1, %addr.loc14_12.2) // CHECK:STDOUT: return %operator_Plus__carbon_thunk.call // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/interop/cpp/range_for.carbon b/toolchain/check/testdata/interop/cpp/range_for.carbon index 128f88640939..4fa7306ef472 100644 --- a/toolchain/check/testdata/interop/cpp/range_for.carbon +++ b/toolchain/check/testdata/interop/cpp/range_for.carbon @@ -78,13 +78,13 @@ fn TestRangeFor(var m: Cpp.MutableRange, c: Cpp.ConstRange) { library "[[@TEST_NAME]]"; import Cpp inline '''c++ -struct ValueType { - auto operator+=(const ValueType&) -> ValueType&; +struct DiffValueType { + auto operator+=(const DiffValueType&) -> DiffValueType&; }; -class MutableRange { +class DiffMutableRange { struct Iterator { - auto operator*() const -> ValueType&; + auto operator*() const -> DiffValueType&; auto operator++() -> Iterator&; }; @@ -97,9 +97,9 @@ public: auto end() -> Sentinel; }; -class ConstRange { +class DiffConstRange { struct Iterator { - auto operator*() const -> ValueType; + auto operator*() const -> DiffValueType; auto operator++() -> Iterator&; }; @@ -109,34 +109,34 @@ class ConstRange { }; public: auto begin() const -> Iterator; - auto end() const -> Sentinel; + auto end() -> Sentinel; }; '''; -fn TestIterate[R: Core.Iterate where .ElementType = Cpp.ValueType](var r: R) { - var sum: Cpp.ValueType = Cpp.ValueType.ValueType(); +fn TestIterate[R: Core.Iterate where .ElementType = Cpp.DiffValueType](var r: R) { + var sum: Cpp.DiffValueType = Cpp.DiffValueType.DiffValueType(); //@dump-sem-ir-begin - for (i: Cpp.ValueType in r) { + for (i: Cpp.DiffValueType in r) { sum += i; } //@dump-sem-ir-end } -fn TestIterateDriver(var m: Cpp.MutableRange, c: Cpp.ConstRange) { +fn TestIterateDriver(var m: Cpp.DiffMutableRange, c: Cpp.DiffConstRange) { TestIterate(m); TestIterate(c); } -fn TestRangeFor(var m: Cpp.MutableRange, c: Cpp.ConstRange) { - var sum: Cpp.ValueType = Cpp.ValueType.ValueType(); +fn TestRangeFor(var m: Cpp.DiffMutableRange, c: Cpp.DiffConstRange) { + var sum: Cpp.DiffValueType = Cpp.DiffValueType.DiffValueType(); //@dump-sem-ir-begin - for (i: Cpp.ValueType in m) { + for (i: Cpp.DiffValueType in m) { sum += i; } - for (i: Cpp.ValueType in c) { + for (i: Cpp.DiffValueType in c) { sum += i; } //@dump-sem-ir-end @@ -147,7 +147,7 @@ fn TestRangeFor(var m: Cpp.MutableRange, c: Cpp.ConstRange) { library "[[@TEST_NAME]]"; import Cpp inline '''c++ -struct ValueType {}; +struct OverloadValueType {}; class Range { template @@ -159,17 +159,17 @@ class Range { }; public: - auto begin() const -> Iterator; - auto end() const -> Iterator; + auto begin() const -> Iterator; + auto end() const -> Iterator; - auto begin() -> Iterator; - auto end() -> Iterator; + auto begin() -> Iterator; + auto end() -> Iterator; }; '''; -fn TestIterate[R: Core.Iterate where .ElementType = Cpp.ValueType](var r: R) { +fn TestIterate[R: Core.Iterate where .ElementType = Cpp.OverloadValueType](var r: R) { //@dump-sem-ir-begin - for (_: Cpp.ValueType in r) {} + for (_: Cpp.OverloadValueType in r) {} //@dump-sem-ir-end } @@ -179,7 +179,7 @@ fn TestIterateDriver(r: Cpp.Range) { fn TestRangeFor(var r: Cpp.Range) { //@dump-sem-ir-begin - for (_: Cpp.ValueType in r) {} + for (_: Cpp.OverloadValueType in r) {} //@dump-sem-ir-end } @@ -306,7 +306,7 @@ fn TestRangeFor(var m: Cpp.N.MutableRange) { library "[[@TEST_NAME]]"; import Cpp inline '''c++ -namespace N { +namespace DiffADL { struct ValueType { auto operator+=(const ValueType& other) -> ValueType&; }; @@ -325,28 +325,28 @@ public: friend auto begin(const ConstRange&) -> Iterator; friend auto end(const ConstRange&) -> Sentinel; }; -} // namespace N +} // namespace DiffADL '''; -fn TestIterate[R: Core.Iterate where .ElementType = Cpp.N.ValueType](r: R) { - var sum: Cpp.N.ValueType = Cpp.N.ValueType.ValueType(); +fn TestIterate[R: Core.Iterate where .ElementType = Cpp.DiffADL.ValueType](r: R) { + var sum: Cpp.DiffADL.ValueType = Cpp.DiffADL.ValueType.ValueType(); //@dump-sem-ir-begin - for (i: Cpp.N.ValueType in r) { + for (i: Cpp.DiffADL.ValueType in r) { sum += i; } //@dump-sem-ir-end } -fn TestIterateDriver(c: Cpp.N.ConstRange) { +fn TestIterateDriver(c: Cpp.DiffADL.ConstRange) { TestIterate(c); } -fn TestRangeFor(c: Cpp.N.ConstRange) { - var sum: Cpp.N.ValueType = Cpp.N.ValueType.ValueType(); +fn TestRangeFor(c: Cpp.DiffADL.ConstRange) { + var sum: Cpp.DiffADL.ValueType = Cpp.DiffADL.ValueType.ValueType(); //@dump-sem-ir-begin - for (i: Cpp.N.ValueType in c) { + for (i: Cpp.DiffADL.ValueType in c) { sum += i; } //@dump-sem-ir-end @@ -357,7 +357,7 @@ fn TestRangeFor(c: Cpp.N.ConstRange) { library "[[@TEST_NAME]]"; import Cpp inline '''c++ -namespace N { +namespace DiffMutableADL { struct ValueType { auto operator+=(const ValueType& other) -> ValueType&; }; @@ -379,17 +379,17 @@ public: } '''; -fn TestIterate[R: Core.Iterate where .ElementType = Cpp.N.ValueType](r: R) { - var sum: Cpp.N.ValueType = Cpp.N.ValueType.ValueType(); +fn TestIterate[R: Core.Iterate where .ElementType = Cpp.DiffMutableADL.ValueType](r: R) { + var sum: Cpp.DiffMutableADL.ValueType = Cpp.DiffMutableADL.ValueType.ValueType(); //@dump-sem-ir-begin - for (i: Cpp.N.ValueType in r) { + for (i: Cpp.DiffMutableADL.ValueType in r) { sum += i; } //@dump-sem-ir-end } -fn TestIterateDriver(var m: Cpp.N.MutableRange) { +fn TestIterateDriver(var m: Cpp.DiffMutableADL.MutableRange) { // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE+45]]:3: error: facet type `Core.CppRange where .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Copy` can not be identified [ImplLookupInUnidentifiedFacetType] // CHECK:STDERR: TestIterate(m); // CHECK:STDERR: ^~~~~~~~~~~~~~ @@ -401,8 +401,8 @@ fn TestIterateDriver(var m: Cpp.N.MutableRange) { // CHECK:STDERR: fn Begin(self) -> Iterator; // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE-21]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere] - // CHECK:STDERR: fn TestIterate[R: Core.Iterate where .ElementType = Cpp.N.ValueType](r: R) { - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fn TestIterate[R: Core.Iterate where .ElementType = Cpp.DiffMutableADL.ValueType](r: R) { + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE+31]]:3: error: facet type `Core.CppRange where .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Copy` can not be identified [ImplLookupInUnidentifiedFacetType] // CHECK:STDERR: TestIterate(m); @@ -415,8 +415,8 @@ fn TestIterateDriver(var m: Cpp.N.MutableRange) { // CHECK:STDERR: fn End(self) -> Sentinel; // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE-35]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere] - // CHECK:STDERR: fn TestIterate[R: Core.Iterate where .ElementType = Cpp.N.ValueType](r: R) { - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fn TestIterate[R: Core.Iterate where .ElementType = Cpp.DiffMutableADL.ValueType](r: R) { + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE+17]]:3: error: facet type `Core.CppRange where .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Copy` can not be identified [ImplLookupInUnidentifiedFacetType] // CHECK:STDERR: TestIterate(m); @@ -425,32 +425,32 @@ fn TestIterateDriver(var m: Cpp.N.MutableRange) { // CHECK:STDERR: TestIterate(m); // CHECK:STDERR: ^~~~~~~~~~~~~~ // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE-45]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere] - // CHECK:STDERR: fn TestIterate[R: Core.Iterate where .ElementType = Cpp.N.ValueType](r: R) { - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fn TestIterate[R: Core.Iterate where .ElementType = Cpp.DiffMutableADL.ValueType](r: R) { + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE+7]]:3: error: cannot convert type `Cpp.N.MutableRange` into type implementing `Core.Iterate where .(Core.Iterate.ElementType) = Cpp.N.ValueType as Core.Destroy & Core.Copy` [ConversionFailureTypeToFacet] + // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE+7]]:3: error: cannot convert type `Cpp.DiffMutableADL.MutableRange` into type implementing `Core.Iterate where .(Core.Iterate.ElementType) = Cpp.DiffMutableADL.ValueType as Core.Destroy & Core.Copy` [ConversionFailureTypeToFacet] // CHECK:STDERR: TestIterate(m); // CHECK:STDERR: ^~~~~~~~~~~~~~ // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE-52]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere] - // CHECK:STDERR: fn TestIterate[R: Core.Iterate where .ElementType = Cpp.N.ValueType](r: R) { - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fn TestIterate[R: Core.Iterate where .ElementType = Cpp.DiffMutableADL.ValueType](r: R) { + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: TestIterate(m); } -fn TestRangeFor(var m: Cpp.N.MutableRange) { - var sum: Cpp.N.ValueType = Cpp.N.ValueType.ValueType(); +fn TestRangeFor(var m: Cpp.DiffMutableADL.MutableRange) { + var sum: Cpp.DiffMutableADL.ValueType = Cpp.DiffMutableADL.ValueType.ValueType(); //@dump-sem-ir-begin - // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE+8]]:7: error: cannot access member of interface `Core.Iterate` in type `Cpp.N.MutableRange` that does not implement that interface [MissingImplInMemberAccess] - // CHECK:STDERR: for (i: Cpp.N.ValueType in m) { - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE+8]]:7: error: cannot access member of interface `Core.Iterate` in type `Cpp.DiffMutableADL.MutableRange` that does not implement that interface [MissingImplInMemberAccess] + // CHECK:STDERR: for (i: Cpp.DiffMutableADL.ValueType in m) { + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE+4]]:7: error: cannot access member of interface `Core.Iterate` in type `Cpp.N.MutableRange` that does not implement that interface [MissingImplInMemberAccess] - // CHECK:STDERR: for (i: Cpp.N.ValueType in m) { - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_todo_adl_returns_different_types_mutable.carbon:[[@LINE+4]]:7: error: cannot access member of interface `Core.Iterate` in type `Cpp.DiffMutableADL.MutableRange` that does not implement that interface [MissingImplInMemberAccess] + // CHECK:STDERR: for (i: Cpp.DiffMutableADL.ValueType in m) { + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - for (i: Cpp.N.ValueType in m) { + for (i: Cpp.DiffMutableADL.ValueType in m) { sum += i; } //@dump-sem-ir-end @@ -459,7 +459,7 @@ fn TestRangeFor(var m: Cpp.N.MutableRange) { // --- fail_todo_adl_overloads.carbon import Cpp inline '''c++ -namespace N { +namespace OverloadADL { struct ValueType { auto operator+=(const ValueType&) -> ValueType&; }; @@ -490,17 +490,17 @@ class MutableAndConstRange { } '''; -fn TestIterate[R: Core.Iterate where .ElementType = Cpp.N.ValueType](r: R) { - var sum: Cpp.N.ValueType = Cpp.N.ValueType.ValueType(); +fn TestIterate[R: Core.Iterate where .ElementType = Cpp.OverloadADL.ValueType](r: R) { + var sum: Cpp.OverloadADL.ValueType = Cpp.OverloadADL.ValueType.ValueType(); //@dump-sem-ir-begin - for (i: Cpp.N.ValueType in r) { + for (i: Cpp.OverloadADL.ValueType in r) { sum += i; } //@dump-sem-ir-end } -fn TestIterateDriver(var mc: Cpp.N.MutableAndConstRange) { +fn TestIterateDriver(var mc: Cpp.OverloadADL.MutableAndConstRange) { // CHECK:STDERR: fail_todo_adl_overloads.carbon:[[@LINE+28]]:3: error: facet type `Core.CppRange where .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Copy` can not be identified [ImplLookupInUnidentifiedFacetType] // CHECK:STDERR: TestIterate(mc); // CHECK:STDERR: ^~~~~~~~~~~~~~~ @@ -512,8 +512,8 @@ fn TestIterateDriver(var mc: Cpp.N.MutableAndConstRange) { // CHECK:STDERR: fn Begin(self) -> Iterator; // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_todo_adl_overloads.carbon:[[@LINE-21]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere] - // CHECK:STDERR: fn TestIterate[R: Core.Iterate where .ElementType = Cpp.N.ValueType](r: R) { - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fn TestIterate[R: Core.Iterate where .ElementType = Cpp.OverloadADL.ValueType](r: R) { + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: // CHECK:STDERR: fail_todo_adl_overloads.carbon:[[@LINE+14]]:3: error: facet type `Core.CppRange where .(Core.CppRangeForIterate.Iterator).(Core.CppUnsafeDeref.Result) impls Core.Copy` can not be identified [ImplLookupInUnidentifiedFacetType] // CHECK:STDERR: TestIterate(mc); @@ -526,17 +526,17 @@ fn TestIterateDriver(var mc: Cpp.N.MutableAndConstRange) { // CHECK:STDERR: fn End(self) -> Sentinel; // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: fail_todo_adl_overloads.carbon:[[@LINE-35]]:1: note: while deducing parameters of generic declared here [DeductionGenericHere] - // CHECK:STDERR: fn TestIterate[R: Core.Iterate where .ElementType = Cpp.N.ValueType](r: R) { - // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fn TestIterate[R: Core.Iterate where .ElementType = Cpp.OverloadADL.ValueType](r: R) { + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: TestIterate(mc); } -fn TestRangeFor(var mc: Cpp.N.MutableAndConstRange) { - var sum: Cpp.N.ValueType = Cpp.N.ValueType.ValueType(); +fn TestRangeFor(var mc: Cpp.OverloadADL.MutableAndConstRange) { + var sum: Cpp.OverloadADL.ValueType = Cpp.OverloadADL.ValueType.ValueType(); //@dump-sem-ir-begin - for (i: Cpp.N.ValueType in mc) { + for (i: Cpp.OverloadADL.ValueType in mc) { sum += i; } //@dump-sem-ir-end @@ -1465,178 +1465,178 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Destroy.lookup_impl_witness.35816c.2: = lookup_impl_witness %impl.elem0.493765.2, @Destroy [symbolic] // CHECK:STDOUT: %Copy.lookup_impl_witness.167: = lookup_impl_witness %impl.elem0.493765.2, @Copy [symbolic] // CHECK:STDOUT: %facet_value.f93: %facet_type.f48 = facet_value %impl.elem0.493765.2, (%Destroy.lookup_impl_witness.35816c.2, %Copy.lookup_impl_witness.167) [symbolic] -// CHECK:STDOUT: %ValueType: type = class_type @ValueType [concrete] +// CHECK:STDOUT: %DiffValueType: type = class_type @DiffValueType [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] -// CHECK:STDOUT: %pattern_type.e9f: type = pattern_type %ValueType [concrete] -// CHECK:STDOUT: %ValueType.cpp_destructor.type: type = fn_type @ValueType.cpp_destructor [concrete] -// CHECK:STDOUT: %ValueType.cpp_destructor: %ValueType.cpp_destructor.type = struct_value () [concrete] -// CHECK:STDOUT: %ValueType.Op.type.83af6e.1: type = fn_type @ValueType.Op.1 [concrete] -// CHECK:STDOUT: %ValueType.Op.4dca31.1: %ValueType.Op.type.83af6e.1 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.e7a31c.1: = custom_witness (%ValueType.Op.4dca31.1), @Destroy [concrete] -// CHECK:STDOUT: %const.243: type = const_type %ValueType [concrete] -// CHECK:STDOUT: %ptr.6bf: type = ptr_type %const.243 [concrete] -// CHECK:STDOUT: %ptr.a3d: type = ptr_type %ValueType [concrete] -// CHECK:STDOUT: %ValueType.Op.type.83af6e.2: type = fn_type @ValueType.Op.2 [concrete] -// CHECK:STDOUT: %ValueType.Op.4dca31.2: %ValueType.Op.type.83af6e.2 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.d0da43.1: = custom_witness (%ValueType.Op.4dca31.2), @Copy [concrete] -// CHECK:STDOUT: %facet_value.bf1: %facet_type.f48 = facet_value %ValueType, (%custom_witness.e7a31c.1, %custom_witness.d0da43.1) [concrete] +// CHECK:STDOUT: %pattern_type.149: type = pattern_type %DiffValueType [concrete] +// CHECK:STDOUT: %DiffValueType.cpp_destructor.type: type = fn_type @DiffValueType.cpp_destructor [concrete] +// CHECK:STDOUT: %DiffValueType.cpp_destructor: %DiffValueType.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %DiffValueType.Op.type.83af6e.1: type = fn_type @DiffValueType.Op.1 [concrete] +// CHECK:STDOUT: %DiffValueType.Op.4dca31.1: %DiffValueType.Op.type.83af6e.1 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.e7a31c.1: = custom_witness (%DiffValueType.Op.4dca31.1), @Destroy [concrete] +// CHECK:STDOUT: %const.879: type = const_type %DiffValueType [concrete] +// CHECK:STDOUT: %ptr.816: type = ptr_type %const.879 [concrete] +// CHECK:STDOUT: %ptr.cd0: type = ptr_type %DiffValueType [concrete] +// CHECK:STDOUT: %DiffValueType.Op.type.83af6e.2: type = fn_type @DiffValueType.Op.2 [concrete] +// CHECK:STDOUT: %DiffValueType.Op.4dca31.2: %DiffValueType.Op.type.83af6e.2 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.d0da43.1: = custom_witness (%DiffValueType.Op.4dca31.2), @Copy [concrete] +// CHECK:STDOUT: %facet_value.824: %facet_type.f48 = facet_value %DiffValueType, (%custom_witness.e7a31c.1, %custom_witness.d0da43.1) [concrete] // CHECK:STDOUT: %Iterate.lookup_impl_witness.1d8: = lookup_impl_witness %.Self.500, @Iterate [symbolic_self] // CHECK:STDOUT: %impl.elem0.294: %facet_type.f48 = impl_witness_access %Iterate.lookup_impl_witness.1d8, element0 [symbolic_self] -// CHECK:STDOUT: %Iterate_where.type.502: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.bf1> [concrete] -// CHECK:STDOUT: %pattern_type.4c7: type = pattern_type %Iterate_where.type.502 [concrete] -// CHECK:STDOUT: %R.patt: %pattern_type.4c7 = symbolic_binding_pattern R, 0 [symbolic] -// CHECK:STDOUT: %R: %Iterate_where.type.502 = symbolic_binding R, 0 [symbolic] +// CHECK:STDOUT: %Iterate_where.type.3fe: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.824> [concrete] +// CHECK:STDOUT: %pattern_type.d93: type = pattern_type %Iterate_where.type.3fe [concrete] +// CHECK:STDOUT: %R.patt: %pattern_type.d93 = symbolic_binding_pattern R, 0 [symbolic] +// CHECK:STDOUT: %R: %Iterate_where.type.3fe = symbolic_binding R, 0 [symbolic] // CHECK:STDOUT: %R.as_type: type = facet_access_type %R [symbolic] -// CHECK:STDOUT: %pattern_type.d2d: type = pattern_type %R.as_type [symbolic] -// CHECK:STDOUT: %r.patt.d27: %pattern_type.d2d = ref_binding_pattern r [symbolic] -// CHECK:STDOUT: %r.param_patt.a41: %pattern_type.d2d = var_param_pattern %r.patt.d27 [symbolic] -// CHECK:STDOUT: %i.patt: %pattern_type.e9f = value_binding_pattern i [concrete] -// CHECK:STDOUT: %Iterate.lookup_impl_witness.06b: = lookup_impl_witness %R, @Iterate [symbolic] -// CHECK:STDOUT: %Iterate.facet.dbf: %Iterate.type = facet_value %R.as_type, (%Iterate.lookup_impl_witness.06b) [symbolic] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.1b1: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.dbf) [symbolic] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type.705: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.dbf) [symbolic] -// CHECK:STDOUT: %.1c2: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.1b1, %Iterate.facet.dbf [symbolic] -// CHECK:STDOUT: %impl.elem2.49b: %.1c2 = impl_witness_access %Iterate.lookup_impl_witness.06b, element2 [symbolic] -// CHECK:STDOUT: %impl.elem1.3cf: %Destroy.type = impl_witness_access %Iterate.lookup_impl_witness.06b, element1 [symbolic] -// CHECK:STDOUT: %as_type.dbb: type = facet_access_type %impl.elem1.3cf [symbolic] -// CHECK:STDOUT: %specific_impl_fn.6f3: = specific_impl_function %impl.elem2.49b, @Iterate.WithSelf.NewCursor(%Iterate.facet.dbf) [symbolic] -// CHECK:STDOUT: %ptr.bde: type = ptr_type %as_type.dbb [symbolic] -// CHECK:STDOUT: %.bd3: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.705, %Iterate.facet.dbf [symbolic] -// CHECK:STDOUT: %impl.elem3.d57: %.bd3 = impl_witness_access %Iterate.lookup_impl_witness.06b, element3 [symbolic] -// CHECK:STDOUT: %DefaultOptionalStorage.84c: type = class_type @DefaultOptionalStorage, @DefaultOptionalStorage(%facet_value.bf1) [concrete] -// CHECK:STDOUT: %OptionalStorage.impl_witness.9b5: = impl_witness imports.%OptionalStorage.impl_witness_table.460, @T.as_type.as.OptionalStorage.impl(%facet_value.bf1) [concrete] -// CHECK:STDOUT: %OptionalStorage.facet.a0c: %OptionalStorage.type = facet_value %ValueType, (%OptionalStorage.impl_witness.9b5) [concrete] -// CHECK:STDOUT: %Optional.3c5: type = class_type @Optional, @Optional(%OptionalStorage.facet.a0c) [concrete] -// CHECK:STDOUT: %specific_impl_fn.fca: = specific_impl_function %impl.elem3.d57, @Iterate.WithSelf.Next(%Iterate.facet.dbf) [symbolic] -// CHECK:STDOUT: %Optional.HasValue.type.cca: type = fn_type @Optional.HasValue, @Optional(%OptionalStorage.facet.a0c) [concrete] -// CHECK:STDOUT: %Optional.HasValue.6d0: %Optional.HasValue.type.cca = struct_value () [concrete] -// CHECK:STDOUT: %Optional.Get.type.c7a: type = fn_type @Optional.Get, @Optional(%OptionalStorage.facet.a0c) [concrete] -// CHECK:STDOUT: %Optional.Get.6ac: %Optional.Get.type.c7a = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.facet.4e5: %Destroy.type = facet_value %ValueType, (%custom_witness.e7a31c.1) [concrete] -// CHECK:STDOUT: %MaybeUnformed.02e: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.4e5) [concrete] -// CHECK:STDOUT: %.98c: type = maybe_unformed_type %ValueType [concrete] -// CHECK:STDOUT: %struct_type.value.has_value.761: type = struct_type {.value: %MaybeUnformed.02e, .has_value: bool} [concrete] -// CHECK:STDOUT: %Optional.HasValue.specific_fn.8b5: = specific_function %Optional.HasValue.6d0, @Optional.HasValue(%OptionalStorage.facet.a0c) [concrete] -// CHECK:STDOUT: %Optional.Get.specific_fn.ee5: = specific_function %Optional.Get.6ac, @Optional.Get(%OptionalStorage.facet.a0c) [concrete] +// CHECK:STDOUT: %pattern_type.20b: type = pattern_type %R.as_type [symbolic] +// CHECK:STDOUT: %r.patt.9f3: %pattern_type.20b = ref_binding_pattern r [symbolic] +// CHECK:STDOUT: %r.param_patt.b12: %pattern_type.20b = var_param_pattern %r.patt.9f3 [symbolic] +// CHECK:STDOUT: %i.patt: %pattern_type.149 = value_binding_pattern i [concrete] +// CHECK:STDOUT: %Iterate.lookup_impl_witness.b8b: = lookup_impl_witness %R, @Iterate [symbolic] +// CHECK:STDOUT: %Iterate.facet.6ec: %Iterate.type = facet_value %R.as_type, (%Iterate.lookup_impl_witness.b8b) [symbolic] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.309: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.6ec) [symbolic] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type.75a: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.6ec) [symbolic] +// CHECK:STDOUT: %.799: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.309, %Iterate.facet.6ec [symbolic] +// CHECK:STDOUT: %impl.elem2.114: %.799 = impl_witness_access %Iterate.lookup_impl_witness.b8b, element2 [symbolic] +// CHECK:STDOUT: %impl.elem1.697: %Destroy.type = impl_witness_access %Iterate.lookup_impl_witness.b8b, element1 [symbolic] +// CHECK:STDOUT: %as_type.59f: type = facet_access_type %impl.elem1.697 [symbolic] +// CHECK:STDOUT: %specific_impl_fn.c74: = specific_impl_function %impl.elem2.114, @Iterate.WithSelf.NewCursor(%Iterate.facet.6ec) [symbolic] +// CHECK:STDOUT: %ptr.38a: type = ptr_type %as_type.59f [symbolic] +// CHECK:STDOUT: %.f06: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.75a, %Iterate.facet.6ec [symbolic] +// CHECK:STDOUT: %impl.elem3.463: %.f06 = impl_witness_access %Iterate.lookup_impl_witness.b8b, element3 [symbolic] +// CHECK:STDOUT: %DefaultOptionalStorage.5e4: type = class_type @DefaultOptionalStorage, @DefaultOptionalStorage(%facet_value.824) [concrete] +// CHECK:STDOUT: %OptionalStorage.impl_witness.313: = impl_witness imports.%OptionalStorage.impl_witness_table.460, @T.as_type.as.OptionalStorage.impl(%facet_value.824) [concrete] +// CHECK:STDOUT: %OptionalStorage.facet.c3f: %OptionalStorage.type = facet_value %DiffValueType, (%OptionalStorage.impl_witness.313) [concrete] +// CHECK:STDOUT: %Optional.15a: type = class_type @Optional, @Optional(%OptionalStorage.facet.c3f) [concrete] +// CHECK:STDOUT: %specific_impl_fn.dcf: = specific_impl_function %impl.elem3.463, @Iterate.WithSelf.Next(%Iterate.facet.6ec) [symbolic] +// CHECK:STDOUT: %Optional.HasValue.type.6f3: type = fn_type @Optional.HasValue, @Optional(%OptionalStorage.facet.c3f) [concrete] +// CHECK:STDOUT: %Optional.HasValue.038: %Optional.HasValue.type.6f3 = struct_value () [concrete] +// CHECK:STDOUT: %Optional.Get.type.d3e: type = fn_type @Optional.Get, @Optional(%OptionalStorage.facet.c3f) [concrete] +// CHECK:STDOUT: %Optional.Get.57f: %Optional.Get.type.d3e = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.facet.82e: %Destroy.type = facet_value %DiffValueType, (%custom_witness.e7a31c.1) [concrete] +// CHECK:STDOUT: %MaybeUnformed.923: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.82e) [concrete] +// CHECK:STDOUT: %.a18: type = maybe_unformed_type %DiffValueType [concrete] +// CHECK:STDOUT: %struct_type.value.has_value.3cf: type = struct_type {.value: %MaybeUnformed.923, .has_value: bool} [concrete] +// CHECK:STDOUT: %Optional.HasValue.specific_fn.bc4: = specific_function %Optional.HasValue.038, @Optional.HasValue(%OptionalStorage.facet.c3f) [concrete] +// CHECK:STDOUT: %Optional.Get.specific_fn.c49: = specific_function %Optional.Get.57f, @Optional.Get(%OptionalStorage.facet.c3f) [concrete] // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.type: type = fn_type @operator_PlusEqual__carbon_thunk [concrete] // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk: %operator_PlusEqual__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.Op.type.1d8f74.7: type = fn_type @Destroy.Op.loc44_29.6 [concrete] +// CHECK:STDOUT: %Destroy.Op.type.1d8f74.7: type = fn_type @Destroy.Op.loc44_33.6 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.7: %Destroy.Op.type.1d8f74.7 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.lookup_impl_witness.b29: = lookup_impl_witness %impl.elem1.3cf, @Destroy [symbolic] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type.d9c: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%impl.elem1.3cf) [symbolic] -// CHECK:STDOUT: %.98a: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.d9c, %impl.elem1.3cf [symbolic] -// CHECK:STDOUT: %impl.elem0.81b: %.98a = impl_witness_access %Destroy.lookup_impl_witness.b29, element0 [symbolic] -// CHECK:STDOUT: %specific_impl_fn.bf3: = specific_impl_function %impl.elem0.81b, @Destroy.WithSelf.Op(%impl.elem1.3cf) [symbolic] -// CHECK:STDOUT: %MutableRange: type = class_type @MutableRange [concrete] -// CHECK:STDOUT: %pattern_type.e635: type = pattern_type %MutableRange [concrete] -// CHECK:STDOUT: %ConstRange: type = class_type @ConstRange [concrete] -// CHECK:STDOUT: %pattern_type.0ba: type = pattern_type %ConstRange [concrete] -// CHECK:STDOUT: %Iterator.3ee: type = class_type @Iterator.1 [concrete] -// CHECK:STDOUT: %Sentinel.9b2: type = class_type @Sentinel.1 [concrete] -// CHECK:STDOUT: %MutableRange.Begin.type: type = fn_type @MutableRange.Begin [concrete] -// CHECK:STDOUT: %MutableRange.Begin: %MutableRange.Begin.type = struct_value () [concrete] -// CHECK:STDOUT: %MutableRange.End.type: type = fn_type @MutableRange.End [concrete] -// CHECK:STDOUT: %MutableRange.End: %MutableRange.End.type = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.6b6: = custom_witness (%Iterator.3ee, %Sentinel.9b2, %MutableRange.Begin, %MutableRange.End), @CppRangeForIterate [concrete] -// CHECK:STDOUT: %Iterator.Op.type.0aed5d.1: type = fn_type @Iterator.Op.1 [concrete] -// CHECK:STDOUT: %Iterator.Op.a2a866.1: %Iterator.Op.type.0aed5d.1 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.90a: = custom_witness (%ValueType, %Iterator.Op.a2a866.1), @CppUnsafeDeref [concrete] -// CHECK:STDOUT: %Iterator.Op.type.0aed5d.2: type = fn_type @Iterator.Op.2 [concrete] -// CHECK:STDOUT: %Iterator.Op.a2a866.2: %Iterator.Op.type.0aed5d.2 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.95581e.1: = custom_witness (%Iterator.Op.a2a866.2), @Destroy [concrete] -// CHECK:STDOUT: %Iterator.Op.type.0aed5d.3: type = fn_type @Iterator.Op.3 [concrete] -// CHECK:STDOUT: %Iterator.Op.a2a866.3: %Iterator.Op.type.0aed5d.3 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.444: = custom_witness (%Iterator.Op.a2a866.3), @Inc [concrete] +// CHECK:STDOUT: %Destroy.lookup_impl_witness.38d: = lookup_impl_witness %impl.elem1.697, @Destroy [symbolic] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type.dbc: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%impl.elem1.697) [symbolic] +// CHECK:STDOUT: %.763: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.dbc, %impl.elem1.697 [symbolic] +// CHECK:STDOUT: %impl.elem0.891: %.763 = impl_witness_access %Destroy.lookup_impl_witness.38d, element0 [symbolic] +// CHECK:STDOUT: %specific_impl_fn.b52: = specific_impl_function %impl.elem0.891, @Destroy.WithSelf.Op(%impl.elem1.697) [symbolic] +// CHECK:STDOUT: %DiffMutableRange: type = class_type @DiffMutableRange [concrete] +// CHECK:STDOUT: %pattern_type.611: type = pattern_type %DiffMutableRange [concrete] +// CHECK:STDOUT: %DiffConstRange: type = class_type @DiffConstRange [concrete] +// CHECK:STDOUT: %pattern_type.7dd: type = pattern_type %DiffConstRange [concrete] +// CHECK:STDOUT: %Iterator.f25: type = class_type @Iterator.1 [concrete] +// CHECK:STDOUT: %Sentinel.b4c: type = class_type @Sentinel.1 [concrete] +// CHECK:STDOUT: %DiffMutableRange.Begin.type: type = fn_type @DiffMutableRange.Begin [concrete] +// CHECK:STDOUT: %DiffMutableRange.Begin: %DiffMutableRange.Begin.type = struct_value () [concrete] +// CHECK:STDOUT: %DiffMutableRange.End.type: type = fn_type @DiffMutableRange.End [concrete] +// CHECK:STDOUT: %DiffMutableRange.End: %DiffMutableRange.End.type = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.aa8: = custom_witness (%Iterator.f25, %Sentinel.b4c, %DiffMutableRange.Begin, %DiffMutableRange.End), @CppRangeForIterate [concrete] +// CHECK:STDOUT: %Iterator.Op.type.41bbea.1: type = fn_type @Iterator.Op.1 [concrete] +// CHECK:STDOUT: %Iterator.Op.1caa36.1: %Iterator.Op.type.41bbea.1 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.392: = custom_witness (%DiffValueType, %Iterator.Op.1caa36.1), @CppUnsafeDeref [concrete] +// CHECK:STDOUT: %Iterator.Op.type.41bbea.2: type = fn_type @Iterator.Op.2 [concrete] +// CHECK:STDOUT: %Iterator.Op.1caa36.2: %Iterator.Op.type.41bbea.2 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.9bb15e.1: = custom_witness (%Iterator.Op.1caa36.2), @Destroy [concrete] +// CHECK:STDOUT: %Iterator.Op.type.41bbea.3: type = fn_type @Iterator.Op.3 [concrete] +// CHECK:STDOUT: %Iterator.Op.1caa36.3: %Iterator.Op.type.41bbea.3 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.1c9: = custom_witness (%Iterator.Op.1caa36.3), @Inc [concrete] // CHECK:STDOUT: %Equal.type.ca8475.1: type = fn_type @Equal.1 [concrete] // CHECK:STDOUT: %Equal.285b15.1: %Equal.type.ca8475.1 = struct_value () [concrete] // CHECK:STDOUT: %NotEqual.type.53d9ee.1: type = fn_type @NotEqual.1 [concrete] // CHECK:STDOUT: %NotEqual.119263.1: %NotEqual.type.53d9ee.1 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.3e8: = custom_witness (%Equal.285b15.1, %NotEqual.119263.1), @EqWith, @EqWith(%Sentinel.9b2) [concrete] -// CHECK:STDOUT: %Sentinel.Op.type.0ae: type = fn_type @Sentinel.Op.1 [concrete] -// CHECK:STDOUT: %Sentinel.Op.a2a: %Sentinel.Op.type.0ae = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.95581e.2: = custom_witness (%Sentinel.Op.a2a), @Destroy [concrete] -// CHECK:STDOUT: %facet_value.9f5: %CppRange_where.type.d682d6.1 = facet_value %MutableRange, (%custom_witness.e7a31c.1, %custom_witness.d0da43.1, %custom_witness.6b6, %custom_witness.95581e.1, %custom_witness.90a, %custom_witness.444, %custom_witness.3e8, %custom_witness.95581e.2) [concrete] -// CHECK:STDOUT: %tuple.type.829: type = tuple_type (%Iterator.3ee, %Sentinel.9b2) [concrete] +// CHECK:STDOUT: %custom_witness.723: = custom_witness (%Equal.285b15.1, %NotEqual.119263.1), @EqWith, @EqWith(%Sentinel.b4c) [concrete] +// CHECK:STDOUT: %Sentinel.Op.type.41b: type = fn_type @Sentinel.Op.1 [concrete] +// CHECK:STDOUT: %Sentinel.Op.1ca: %Sentinel.Op.type.41b = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.9bb15e.2: = custom_witness (%Sentinel.Op.1ca), @Destroy [concrete] +// CHECK:STDOUT: %facet_value.0a7: %CppRange_where.type.d682d6.1 = facet_value %DiffMutableRange, (%custom_witness.e7a31c.1, %custom_witness.d0da43.1, %custom_witness.aa8, %custom_witness.9bb15e.1, %custom_witness.392, %custom_witness.1c9, %custom_witness.723, %custom_witness.9bb15e.2) [concrete] +// CHECK:STDOUT: %tuple.type.b18: type = tuple_type (%Iterator.f25, %Sentinel.b4c) [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.8: type = fn_type @Destroy.Op.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.8: %Destroy.Op.type.1d8f74.8 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.df9cc1.8: = custom_witness (%Destroy.Op.1a2547.8), @Destroy [concrete] -// CHECK:STDOUT: %Destroy.facet.305: %Destroy.type = facet_value %tuple.type.829, (%custom_witness.df9cc1.8) [concrete] -// CHECK:STDOUT: %Iterate.impl_witness.cf3: = impl_witness imports.%Iterate.impl_witness_table.121, @T.as_type.as.Iterate.impl(%facet_value.9f5) [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.type.e73: type = fn_type @T.as_type.as.Iterate.impl.NewCursor, @T.as_type.as.Iterate.impl(%facet_value.9f5) [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.04f: %T.as_type.as.Iterate.impl.NewCursor.type.e73 = struct_value () [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.type.d0a: type = fn_type @T.as_type.as.Iterate.impl.Next, @T.as_type.as.Iterate.impl(%facet_value.9f5) [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.6bb: %T.as_type.as.Iterate.impl.Next.type.d0a = struct_value () [concrete] -// CHECK:STDOUT: %Iterate.facet.180: %Iterate.type = facet_value %MutableRange, (%Iterate.impl_witness.cf3) [concrete] -// CHECK:STDOUT: %facet_value.068: %Iterate_where.type.502 = facet_value %MutableRange, (%Iterate.impl_witness.cf3) [concrete] -// CHECK:STDOUT: %r.patt.f69: %pattern_type.e635 = ref_binding_pattern r [concrete] -// CHECK:STDOUT: %r.param_patt.91e: %pattern_type.e635 = var_param_pattern %r.patt.f69 [concrete] -// CHECK:STDOUT: %Iterator.260: type = class_type @Iterator.2 [concrete] -// CHECK:STDOUT: %Sentinel.4c4: type = class_type @Sentinel.2 [concrete] -// CHECK:STDOUT: %ConstRange.Begin.type: type = fn_type @ConstRange.Begin [concrete] -// CHECK:STDOUT: %ConstRange.Begin: %ConstRange.Begin.type = struct_value () [concrete] -// CHECK:STDOUT: %ConstRange.End.type: type = fn_type @ConstRange.End [concrete] -// CHECK:STDOUT: %ConstRange.End: %ConstRange.End.type = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.a03: = custom_witness (%Iterator.260, %Sentinel.4c4, %ConstRange.Begin, %ConstRange.End), @CppRangeForIterate [concrete] -// CHECK:STDOUT: %Iterator.Op.type.0f34b8.1: type = fn_type @Iterator.Op.4 [concrete] -// CHECK:STDOUT: %Iterator.Op.1c3e4a.1: %Iterator.Op.type.0f34b8.1 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.78b: = custom_witness (%ValueType, %Iterator.Op.1c3e4a.1), @CppUnsafeDeref [concrete] -// CHECK:STDOUT: %Iterator.Op.type.0f34b8.2: type = fn_type @Iterator.Op.5 [concrete] -// CHECK:STDOUT: %Iterator.Op.1c3e4a.2: %Iterator.Op.type.0f34b8.2 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.6e8a2e.1: = custom_witness (%Iterator.Op.1c3e4a.2), @Destroy [concrete] -// CHECK:STDOUT: %Iterator.Op.type.0f34b8.3: type = fn_type @Iterator.Op.6 [concrete] -// CHECK:STDOUT: %Iterator.Op.1c3e4a.3: %Iterator.Op.type.0f34b8.3 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.746: = custom_witness (%Iterator.Op.1c3e4a.3), @Inc [concrete] +// CHECK:STDOUT: %Destroy.facet.2c1: %Destroy.type = facet_value %tuple.type.b18, (%custom_witness.df9cc1.8) [concrete] +// CHECK:STDOUT: %Iterate.impl_witness.747: = impl_witness imports.%Iterate.impl_witness_table.121, @T.as_type.as.Iterate.impl(%facet_value.0a7) [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.type.096: type = fn_type @T.as_type.as.Iterate.impl.NewCursor, @T.as_type.as.Iterate.impl(%facet_value.0a7) [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.136: %T.as_type.as.Iterate.impl.NewCursor.type.096 = struct_value () [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.type.185: type = fn_type @T.as_type.as.Iterate.impl.Next, @T.as_type.as.Iterate.impl(%facet_value.0a7) [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.31b: %T.as_type.as.Iterate.impl.Next.type.185 = struct_value () [concrete] +// CHECK:STDOUT: %Iterate.facet.68a: %Iterate.type = facet_value %DiffMutableRange, (%Iterate.impl_witness.747) [concrete] +// CHECK:STDOUT: %facet_value.753: %Iterate_where.type.3fe = facet_value %DiffMutableRange, (%Iterate.impl_witness.747) [concrete] +// CHECK:STDOUT: %r.patt.5fe: %pattern_type.611 = ref_binding_pattern r [concrete] +// CHECK:STDOUT: %r.param_patt.a4b: %pattern_type.611 = var_param_pattern %r.patt.5fe [concrete] +// CHECK:STDOUT: %Iterator.a59: type = class_type @Iterator.2 [concrete] +// CHECK:STDOUT: %Sentinel.b33: type = class_type @Sentinel.2 [concrete] +// CHECK:STDOUT: %DiffConstRange.Begin.type: type = fn_type @DiffConstRange.Begin [concrete] +// CHECK:STDOUT: %DiffConstRange.Begin: %DiffConstRange.Begin.type = struct_value () [concrete] +// CHECK:STDOUT: %DiffConstRange.End.type: type = fn_type @DiffConstRange.End [concrete] +// CHECK:STDOUT: %DiffConstRange.End: %DiffConstRange.End.type = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.7b4: = custom_witness (%Iterator.a59, %Sentinel.b33, %DiffConstRange.Begin, %DiffConstRange.End), @CppRangeForIterate [concrete] +// CHECK:STDOUT: %Iterator.Op.type.b7ae80.1: type = fn_type @Iterator.Op.4 [concrete] +// CHECK:STDOUT: %Iterator.Op.690fee.1: %Iterator.Op.type.b7ae80.1 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.0c0: = custom_witness (%DiffValueType, %Iterator.Op.690fee.1), @CppUnsafeDeref [concrete] +// CHECK:STDOUT: %Iterator.Op.type.b7ae80.2: type = fn_type @Iterator.Op.5 [concrete] +// CHECK:STDOUT: %Iterator.Op.690fee.2: %Iterator.Op.type.b7ae80.2 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.f7d4ff.1: = custom_witness (%Iterator.Op.690fee.2), @Destroy [concrete] +// CHECK:STDOUT: %Iterator.Op.type.b7ae80.3: type = fn_type @Iterator.Op.6 [concrete] +// CHECK:STDOUT: %Iterator.Op.690fee.3: %Iterator.Op.type.b7ae80.3 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.ffb: = custom_witness (%Iterator.Op.690fee.3), @Inc [concrete] // CHECK:STDOUT: %Equal.type.ca8475.2: type = fn_type @Equal.2 [concrete] // CHECK:STDOUT: %Equal.285b15.2: %Equal.type.ca8475.2 = struct_value () [concrete] // CHECK:STDOUT: %NotEqual.type.53d9ee.2: type = fn_type @NotEqual.2 [concrete] // CHECK:STDOUT: %NotEqual.119263.2: %NotEqual.type.53d9ee.2 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.c55: = custom_witness (%Equal.285b15.2, %NotEqual.119263.2), @EqWith, @EqWith(%Sentinel.4c4) [concrete] -// CHECK:STDOUT: %Sentinel.Op.type.0f3: type = fn_type @Sentinel.Op.2 [concrete] -// CHECK:STDOUT: %Sentinel.Op.1c3: %Sentinel.Op.type.0f3 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.6e8a2e.2: = custom_witness (%Sentinel.Op.1c3), @Destroy [concrete] -// CHECK:STDOUT: %facet_value.782: %CppRange_where.type.d682d6.1 = facet_value %ConstRange, (%custom_witness.e7a31c.1, %custom_witness.d0da43.1, %custom_witness.a03, %custom_witness.6e8a2e.1, %custom_witness.78b, %custom_witness.746, %custom_witness.c55, %custom_witness.6e8a2e.2) [concrete] -// CHECK:STDOUT: %tuple.type.99f: type = tuple_type (%Iterator.260, %Sentinel.4c4) [concrete] +// CHECK:STDOUT: %custom_witness.a26: = custom_witness (%Equal.285b15.2, %NotEqual.119263.2), @EqWith, @EqWith(%Sentinel.b33) [concrete] +// CHECK:STDOUT: %Sentinel.Op.type.b7a: type = fn_type @Sentinel.Op.2 [concrete] +// CHECK:STDOUT: %Sentinel.Op.690: %Sentinel.Op.type.b7a = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.f7d4ff.2: = custom_witness (%Sentinel.Op.690), @Destroy [concrete] +// CHECK:STDOUT: %facet_value.733: %CppRange_where.type.d682d6.1 = facet_value %DiffConstRange, (%custom_witness.e7a31c.1, %custom_witness.d0da43.1, %custom_witness.7b4, %custom_witness.f7d4ff.1, %custom_witness.0c0, %custom_witness.ffb, %custom_witness.a26, %custom_witness.f7d4ff.2) [concrete] +// CHECK:STDOUT: %tuple.type.df5: type = tuple_type (%Iterator.a59, %Sentinel.b33) [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.9: type = fn_type @Destroy.Op.3 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.9: %Destroy.Op.type.1d8f74.9 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.df9cc1.9: = custom_witness (%Destroy.Op.1a2547.9), @Destroy [concrete] -// CHECK:STDOUT: %Destroy.facet.e08: %Destroy.type = facet_value %tuple.type.99f, (%custom_witness.df9cc1.9) [concrete] -// CHECK:STDOUT: %Iterate.impl_witness.c1f: = impl_witness imports.%Iterate.impl_witness_table.121, @T.as_type.as.Iterate.impl(%facet_value.782) [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.type.8f9: type = fn_type @T.as_type.as.Iterate.impl.NewCursor, @T.as_type.as.Iterate.impl(%facet_value.782) [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.c2e: %T.as_type.as.Iterate.impl.NewCursor.type.8f9 = struct_value () [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.type.4cc: type = fn_type @T.as_type.as.Iterate.impl.Next, @T.as_type.as.Iterate.impl(%facet_value.782) [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.760: %T.as_type.as.Iterate.impl.Next.type.4cc = struct_value () [concrete] -// CHECK:STDOUT: %Iterate.facet.f80: %Iterate.type = facet_value %ConstRange, (%Iterate.impl_witness.c1f) [concrete] -// CHECK:STDOUT: %facet_value.d5f: %Iterate_where.type.502 = facet_value %ConstRange, (%Iterate.impl_witness.c1f) [concrete] -// CHECK:STDOUT: %r.patt.36a: %pattern_type.0ba = ref_binding_pattern r [concrete] -// CHECK:STDOUT: %r.param_patt.501: %pattern_type.0ba = var_param_pattern %r.patt.36a [concrete] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.9da: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.180) [concrete] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type.171: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.180) [concrete] -// CHECK:STDOUT: %.1e1: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.9da, %Iterate.facet.180 [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.specific_fn.2ae: = specific_function %T.as_type.as.Iterate.impl.NewCursor.04f, @T.as_type.as.Iterate.impl.NewCursor(%facet_value.9f5) [concrete] -// CHECK:STDOUT: %ptr.d6b: type = ptr_type %tuple.type.829 [concrete] -// CHECK:STDOUT: %.c4e: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.171, %Iterate.facet.180 [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.specific_fn.b6b: = specific_function %T.as_type.as.Iterate.impl.Next.6bb, @T.as_type.as.Iterate.impl.Next(%facet_value.9f5) [concrete] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type.c89: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.305) [concrete] -// CHECK:STDOUT: %.e8a: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.c89, %Destroy.facet.305 [concrete] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.cd5: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.f80) [concrete] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type.1e9: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.f80) [concrete] -// CHECK:STDOUT: %.e96: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.cd5, %Iterate.facet.f80 [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.specific_fn.c09: = specific_function %T.as_type.as.Iterate.impl.NewCursor.c2e, @T.as_type.as.Iterate.impl.NewCursor(%facet_value.782) [concrete] -// CHECK:STDOUT: %ptr.2f7: type = ptr_type %tuple.type.99f [concrete] -// CHECK:STDOUT: %.5b1: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.1e9, %Iterate.facet.f80 [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.specific_fn.586: = specific_function %T.as_type.as.Iterate.impl.Next.760, @T.as_type.as.Iterate.impl.Next(%facet_value.782) [concrete] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type.e30: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.e08) [concrete] -// CHECK:STDOUT: %.987: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.e30, %Destroy.facet.e08 [concrete] -// CHECK:STDOUT: %complete_type.94f: = complete_type_witness %tuple.type.829 [concrete] -// CHECK:STDOUT: %complete_type.dea: = complete_type_witness %tuple.type.99f [concrete] +// CHECK:STDOUT: %Destroy.facet.1ed: %Destroy.type = facet_value %tuple.type.df5, (%custom_witness.df9cc1.9) [concrete] +// CHECK:STDOUT: %Iterate.impl_witness.f7f: = impl_witness imports.%Iterate.impl_witness_table.121, @T.as_type.as.Iterate.impl(%facet_value.733) [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.type.2bd: type = fn_type @T.as_type.as.Iterate.impl.NewCursor, @T.as_type.as.Iterate.impl(%facet_value.733) [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.1a9: %T.as_type.as.Iterate.impl.NewCursor.type.2bd = struct_value () [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.type.e26: type = fn_type @T.as_type.as.Iterate.impl.Next, @T.as_type.as.Iterate.impl(%facet_value.733) [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.59a: %T.as_type.as.Iterate.impl.Next.type.e26 = struct_value () [concrete] +// CHECK:STDOUT: %Iterate.facet.608: %Iterate.type = facet_value %DiffConstRange, (%Iterate.impl_witness.f7f) [concrete] +// CHECK:STDOUT: %facet_value.1e4: %Iterate_where.type.3fe = facet_value %DiffConstRange, (%Iterate.impl_witness.f7f) [concrete] +// CHECK:STDOUT: %r.patt.9c0: %pattern_type.7dd = ref_binding_pattern r [concrete] +// CHECK:STDOUT: %r.param_patt.992: %pattern_type.7dd = var_param_pattern %r.patt.9c0 [concrete] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.e9c: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.68a) [concrete] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type.a94: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.68a) [concrete] +// CHECK:STDOUT: %.cbf: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.e9c, %Iterate.facet.68a [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.specific_fn.7b5: = specific_function %T.as_type.as.Iterate.impl.NewCursor.136, @T.as_type.as.Iterate.impl.NewCursor(%facet_value.0a7) [concrete] +// CHECK:STDOUT: %ptr.3ce: type = ptr_type %tuple.type.b18 [concrete] +// CHECK:STDOUT: %.922: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.a94, %Iterate.facet.68a [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.specific_fn.a81: = specific_function %T.as_type.as.Iterate.impl.Next.31b, @T.as_type.as.Iterate.impl.Next(%facet_value.0a7) [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type.188: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.2c1) [concrete] +// CHECK:STDOUT: %.082: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.188, %Destroy.facet.2c1 [concrete] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.185: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.608) [concrete] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type.f38: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.608) [concrete] +// CHECK:STDOUT: %.f70: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.185, %Iterate.facet.608 [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.specific_fn.f9d: = specific_function %T.as_type.as.Iterate.impl.NewCursor.1a9, @T.as_type.as.Iterate.impl.NewCursor(%facet_value.733) [concrete] +// CHECK:STDOUT: %ptr.310: type = ptr_type %tuple.type.df5 [concrete] +// CHECK:STDOUT: %.802: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.f38, %Iterate.facet.608 [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.specific_fn.2ac: = specific_function %T.as_type.as.Iterate.impl.Next.59a, @T.as_type.as.Iterate.impl.Next(%facet_value.733) [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type.a81: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.1ed) [concrete] +// CHECK:STDOUT: %.471: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.a81, %Destroy.facet.1ed [concrete] +// CHECK:STDOUT: %complete_type.bfe: = complete_type_witness %tuple.type.b18 [concrete] +// CHECK:STDOUT: %complete_type.ad6: = complete_type_witness %tuple.type.df5 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .ValueType = %ValueType.decl -// CHECK:STDOUT: .MutableRange = %MutableRange.decl -// CHECK:STDOUT: .ConstRange = %ConstRange.decl +// CHECK:STDOUT: .DiffValueType = %DiffValueType.decl +// CHECK:STDOUT: .DiffMutableRange = %DiffMutableRange.decl +// CHECK:STDOUT: .DiffConstRange = %DiffConstRange.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import_ref.bb6: @Optional.%Optional.HasValue.type (%Optional.HasValue.type.e9e) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @Optional.%Optional.HasValue (constants.%Optional.HasValue.6cd)] @@ -1653,8 +1653,8 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Core.import_ref.fd1: @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.NewCursor.type (%T.as_type.as.Iterate.impl.NewCursor.type.953) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.NewCursor (constants.%T.as_type.as.Iterate.impl.NewCursor.544)] // CHECK:STDOUT: %Core.import_ref.273: @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.Next.type (%T.as_type.as.Iterate.impl.Next.type.b36) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.Next (constants.%T.as_type.as.Iterate.impl.Next.d6b)] // CHECK:STDOUT: %Iterate.impl_witness_table.121 = impl_witness_table (%Core.import_ref.eef, %Core.import_ref.fcc, %Core.import_ref.fd1, %Core.import_ref.273), @T.as_type.as.Iterate.impl [concrete] -// CHECK:STDOUT: %ValueType.decl: type = class_decl @ValueType [concrete = constants.%ValueType] {} {} -// CHECK:STDOUT: %ValueType.cpp_destructor.decl: %ValueType.cpp_destructor.type = fn_decl @ValueType.cpp_destructor [concrete = constants.%ValueType.cpp_destructor] { +// CHECK:STDOUT: %DiffValueType.decl: type = class_decl @DiffValueType [concrete = constants.%DiffValueType] {} {} +// CHECK:STDOUT: %DiffValueType.cpp_destructor.decl: %DiffValueType.cpp_destructor.type = fn_decl @DiffValueType.cpp_destructor [concrete = constants.%DiffValueType.cpp_destructor] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -1664,384 +1664,384 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: } { // CHECK:STDOUT: // CHECK:STDOUT: } -// CHECK:STDOUT: %MutableRange.decl: type = class_decl @MutableRange [concrete = constants.%MutableRange] {} {} -// CHECK:STDOUT: %ConstRange.decl: type = class_decl @ConstRange [concrete = constants.%ConstRange] {} {} +// CHECK:STDOUT: %DiffMutableRange.decl: type = class_decl @DiffMutableRange [concrete = constants.%DiffMutableRange] {} {} +// CHECK:STDOUT: %DiffConstRange.decl: type = class_decl @DiffConstRange [concrete = constants.%DiffConstRange] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @TestIterate(%R.loc40_17.2: %Iterate_where.type.502) { +// CHECK:STDOUT: generic fn @TestIterate(%R.loc40_17.2: %Iterate_where.type.3fe) { // CHECK:STDOUT: // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: -// CHECK:STDOUT: %Iterate.lookup_impl_witness: = lookup_impl_witness %R.loc40_17.1, @Iterate [symbolic = %Iterate.lookup_impl_witness (constants.%Iterate.lookup_impl_witness.06b)] -// CHECK:STDOUT: %Iterate.facet.loc44_29.5: %Iterate.type = facet_value %R.as_type.loc40_75.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc44_29.5 (constants.%Iterate.facet.dbf)] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc44_29.5) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.1b1)] -// CHECK:STDOUT: %.loc44_29.20: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc44_29.5 [symbolic = %.loc44_29.20 (constants.%.1c2)] -// CHECK:STDOUT: %impl.elem2.loc44_29.2: @TestIterate.%.loc44_29.20 (%.1c2) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc44_29.2 (constants.%impl.elem2.49b)] -// CHECK:STDOUT: %specific_impl_fn.loc44_29.4: = specific_impl_function %impl.elem2.loc44_29.2, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc44_29.5) [symbolic = %specific_impl_fn.loc44_29.4 (constants.%specific_impl_fn.6f3)] +// CHECK:STDOUT: %Iterate.lookup_impl_witness: = lookup_impl_witness %R.loc40_17.1, @Iterate [symbolic = %Iterate.lookup_impl_witness (constants.%Iterate.lookup_impl_witness.b8b)] +// CHECK:STDOUT: %Iterate.facet.loc44_33.5: %Iterate.type = facet_value %R.as_type.loc40_79.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc44_33.5 (constants.%Iterate.facet.6ec)] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc44_33.5) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.309)] +// CHECK:STDOUT: %.loc44_33.20: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc44_33.5 [symbolic = %.loc44_33.20 (constants.%.799)] +// CHECK:STDOUT: %impl.elem2.loc44_33.2: @TestIterate.%.loc44_33.20 (%.799) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc44_33.2 (constants.%impl.elem2.114)] +// CHECK:STDOUT: %specific_impl_fn.loc44_33.4: = specific_impl_function %impl.elem2.loc44_33.2, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc44_33.5) [symbolic = %specific_impl_fn.loc44_33.4 (constants.%specific_impl_fn.c74)] // CHECK:STDOUT: -// CHECK:STDOUT: %ptr: type = ptr_type %as_type [symbolic = %ptr (constants.%ptr.bde)] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc44_29.5) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.705)] -// CHECK:STDOUT: %.loc44_29.21: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc44_29.5 [symbolic = %.loc44_29.21 (constants.%.bd3)] -// CHECK:STDOUT: %impl.elem3.loc44_29.2: @TestIterate.%.loc44_29.21 (%.bd3) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc44_29.2 (constants.%impl.elem3.d57)] -// CHECK:STDOUT: %specific_impl_fn.loc44_29.5: = specific_impl_function %impl.elem3.loc44_29.2, @Iterate.WithSelf.Next(%Iterate.facet.loc44_29.5) [symbolic = %specific_impl_fn.loc44_29.5 (constants.%specific_impl_fn.fca)] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%impl.elem1) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.d9c)] -// CHECK:STDOUT: %.loc44_29.22: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %impl.elem1 [symbolic = %.loc44_29.22 (constants.%.98a)] -// CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %impl.elem1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.b29)] -// CHECK:STDOUT: %impl.elem0.loc44_29.2: @TestIterate.%.loc44_29.22 (%.98a) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc44_29.2 (constants.%impl.elem0.81b)] -// CHECK:STDOUT: %specific_impl_fn.loc44_29.6: = specific_impl_function %impl.elem0.loc44_29.2, @Destroy.WithSelf.Op(%impl.elem1) [symbolic = %specific_impl_fn.loc44_29.6 (constants.%specific_impl_fn.bf3)] +// CHECK:STDOUT: %ptr: type = ptr_type %as_type [symbolic = %ptr (constants.%ptr.38a)] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc44_33.5) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.75a)] +// CHECK:STDOUT: %.loc44_33.21: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc44_33.5 [symbolic = %.loc44_33.21 (constants.%.f06)] +// CHECK:STDOUT: %impl.elem3.loc44_33.2: @TestIterate.%.loc44_33.21 (%.f06) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc44_33.2 (constants.%impl.elem3.463)] +// CHECK:STDOUT: %specific_impl_fn.loc44_33.5: = specific_impl_function %impl.elem3.loc44_33.2, @Iterate.WithSelf.Next(%Iterate.facet.loc44_33.5) [symbolic = %specific_impl_fn.loc44_33.5 (constants.%specific_impl_fn.dcf)] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%impl.elem1) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.dbc)] +// CHECK:STDOUT: %.loc44_33.22: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %impl.elem1 [symbolic = %.loc44_33.22 (constants.%.763)] +// CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %impl.elem1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.38d)] +// CHECK:STDOUT: %impl.elem0.loc44_33.2: @TestIterate.%.loc44_33.22 (%.763) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc44_33.2 (constants.%impl.elem0.891)] +// CHECK:STDOUT: %specific_impl_fn.loc44_33.6: = specific_impl_function %impl.elem0.loc44_33.2, @Destroy.WithSelf.Op(%impl.elem1) [symbolic = %specific_impl_fn.loc44_33.6 (constants.%specific_impl_fn.b52)] // CHECK:STDOUT: -// CHECK:STDOUT: fn(%r.param: ref @TestIterate.%R.as_type.loc40_75.1 (%R.as_type)) { +// CHECK:STDOUT: fn(%r.param: ref @TestIterate.%R.as_type.loc40_79.1 (%R.as_type)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %pattern_type.e9f = value_binding_pattern i [concrete = constants.%i.patt] +// CHECK:STDOUT: %i.patt: %pattern_type.149 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %r.ref: ref @TestIterate.%R.as_type.loc40_75.1 (%R.as_type) = name_ref r, %r -// CHECK:STDOUT: %impl.elem2.loc44_29.1: @TestIterate.%.loc44_29.20 (%.1c2) = impl_witness_access constants.%Iterate.lookup_impl_witness.06b, element2 [symbolic = %impl.elem2.loc44_29.2 (constants.%impl.elem2.49b)] -// CHECK:STDOUT: %bound_method.loc44_29.1: = bound_method %r.ref, %impl.elem2.loc44_29.1 -// CHECK:STDOUT: %Iterate.facet.loc44_29.1: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.06b) [symbolic = %Iterate.facet.loc44_29.5 (constants.%Iterate.facet.dbf)] -// CHECK:STDOUT: %.loc44_29.1: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc44_29.1 [symbolic = %Iterate.facet.loc44_29.5 (constants.%Iterate.facet.dbf)] -// CHECK:STDOUT: %Iterate.facet.loc44_29.2: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.06b) [symbolic = %Iterate.facet.loc44_29.5 (constants.%Iterate.facet.dbf)] -// CHECK:STDOUT: %.loc44_29.2: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc44_29.2 [symbolic = %Iterate.facet.loc44_29.5 (constants.%Iterate.facet.dbf)] -// CHECK:STDOUT: %specific_impl_fn.loc44_29.1: = specific_impl_function %impl.elem2.loc44_29.1, @Iterate.WithSelf.NewCursor(constants.%Iterate.facet.dbf) [symbolic = %specific_impl_fn.loc44_29.4 (constants.%specific_impl_fn.6f3)] -// CHECK:STDOUT: %bound_method.loc44_29.2: = bound_method %r.ref, %specific_impl_fn.loc44_29.1 -// CHECK:STDOUT: %var: ref @TestIterate.%as_type (%as_type.dbb) = var_storage invalid -// CHECK:STDOUT: %.loc44_28.1: @TestIterate.%R.as_type.loc40_75.1 (%R.as_type) = acquire_value %r.ref -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.call: init @TestIterate.%as_type (%as_type.dbb) to %var = call %bound_method.loc44_29.2(%.loc44_28.1) +// CHECK:STDOUT: %r.ref: ref @TestIterate.%R.as_type.loc40_79.1 (%R.as_type) = name_ref r, %r +// CHECK:STDOUT: %impl.elem2.loc44_33.1: @TestIterate.%.loc44_33.20 (%.799) = impl_witness_access constants.%Iterate.lookup_impl_witness.b8b, element2 [symbolic = %impl.elem2.loc44_33.2 (constants.%impl.elem2.114)] +// CHECK:STDOUT: %bound_method.loc44_33.1: = bound_method %r.ref, %impl.elem2.loc44_33.1 +// CHECK:STDOUT: %Iterate.facet.loc44_33.1: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.b8b) [symbolic = %Iterate.facet.loc44_33.5 (constants.%Iterate.facet.6ec)] +// CHECK:STDOUT: %.loc44_33.1: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc44_33.1 [symbolic = %Iterate.facet.loc44_33.5 (constants.%Iterate.facet.6ec)] +// CHECK:STDOUT: %Iterate.facet.loc44_33.2: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.b8b) [symbolic = %Iterate.facet.loc44_33.5 (constants.%Iterate.facet.6ec)] +// CHECK:STDOUT: %.loc44_33.2: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc44_33.2 [symbolic = %Iterate.facet.loc44_33.5 (constants.%Iterate.facet.6ec)] +// CHECK:STDOUT: %specific_impl_fn.loc44_33.1: = specific_impl_function %impl.elem2.loc44_33.1, @Iterate.WithSelf.NewCursor(constants.%Iterate.facet.6ec) [symbolic = %specific_impl_fn.loc44_33.4 (constants.%specific_impl_fn.c74)] +// CHECK:STDOUT: %bound_method.loc44_33.2: = bound_method %r.ref, %specific_impl_fn.loc44_33.1 +// CHECK:STDOUT: %var: ref @TestIterate.%as_type (%as_type.59f) = var_storage invalid +// CHECK:STDOUT: %.loc44_32.1: @TestIterate.%R.as_type.loc40_79.1 (%R.as_type) = acquire_value %r.ref +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.call: init @TestIterate.%as_type (%as_type.59f) to %var = call %bound_method.loc44_33.2(%.loc44_32.1) // CHECK:STDOUT: assign %var, %Iterate.WithSelf.NewCursor.call // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.next: -// CHECK:STDOUT: %addr.loc44: @TestIterate.%ptr (%ptr.bde) = addr_of %var -// CHECK:STDOUT: %impl.elem3.loc44_29.1: @TestIterate.%.loc44_29.21 (%.bd3) = impl_witness_access constants.%Iterate.lookup_impl_witness.06b, element3 [symbolic = %impl.elem3.loc44_29.2 (constants.%impl.elem3.d57)] -// CHECK:STDOUT: %bound_method.loc44_29.3: = bound_method %r.ref, %impl.elem3.loc44_29.1 -// CHECK:STDOUT: %Iterate.facet.loc44_29.3: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.06b) [symbolic = %Iterate.facet.loc44_29.5 (constants.%Iterate.facet.dbf)] -// CHECK:STDOUT: %.loc44_29.3: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc44_29.3 [symbolic = %Iterate.facet.loc44_29.5 (constants.%Iterate.facet.dbf)] -// CHECK:STDOUT: %Iterate.facet.loc44_29.4: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.06b) [symbolic = %Iterate.facet.loc44_29.5 (constants.%Iterate.facet.dbf)] -// CHECK:STDOUT: %.loc44_29.4: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc44_29.4 [symbolic = %Iterate.facet.loc44_29.5 (constants.%Iterate.facet.dbf)] -// CHECK:STDOUT: %.loc44_29.5: %Destroy.type = converted constants.%as_type.dbb, constants.%impl.elem1.3cf [symbolic = %impl.elem1 (constants.%impl.elem1.3cf)] -// CHECK:STDOUT: %.loc44_29.6: %Destroy.type = converted constants.%as_type.dbb, constants.%impl.elem1.3cf [symbolic = %impl.elem1 (constants.%impl.elem1.3cf)] -// CHECK:STDOUT: %specific_impl_fn.loc44_29.2: = specific_impl_function %impl.elem3.loc44_29.1, @Iterate.WithSelf.Next(constants.%Iterate.facet.dbf) [symbolic = %specific_impl_fn.loc44_29.5 (constants.%specific_impl_fn.fca)] -// CHECK:STDOUT: %bound_method.loc44_29.4: = bound_method %r.ref, %specific_impl_fn.loc44_29.2 -// CHECK:STDOUT: %.loc44_29.7: ref %Optional.3c5 = temporary_storage -// CHECK:STDOUT: %.loc44_28.2: @TestIterate.%R.as_type.loc40_75.1 (%R.as_type) = acquire_value %r.ref -// CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.3c5 to %.loc44_29.7 = call %bound_method.loc44_29.4(%.loc44_28.2, %addr.loc44) -// CHECK:STDOUT: %.loc44_29.8: ref %Optional.3c5 = temporary %.loc44_29.7, %Iterate.WithSelf.Next.call -// CHECK:STDOUT: %.loc44_29.9: %Optional.HasValue.type.cca = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.a0c) [concrete = constants.%Optional.HasValue.6d0] -// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.cca = name_ref HasValue, %.loc44_29.9 [concrete = constants.%Optional.HasValue.6d0] -// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc44_29.8, %HasValue.ref -// CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.a0c) [concrete = constants.%Optional.HasValue.specific_fn.8b5] -// CHECK:STDOUT: %bound_method.loc44_29.5: = bound_method %.loc44_29.8, %Optional.HasValue.specific_fn -// CHECK:STDOUT: %.loc44_29.10: %Optional.3c5 = acquire_value %.loc44_29.8 -// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc44_29.5(%.loc44_29.10) -// CHECK:STDOUT: %.loc44_29.11: bool = value_of_initializer %Optional.HasValue.call -// CHECK:STDOUT: %.loc44_29.12: bool = converted %Optional.HasValue.call, %.loc44_29.11 -// CHECK:STDOUT: if %.loc44_29.12 br !for.body else br !for.done +// CHECK:STDOUT: %addr.loc44: @TestIterate.%ptr (%ptr.38a) = addr_of %var +// CHECK:STDOUT: %impl.elem3.loc44_33.1: @TestIterate.%.loc44_33.21 (%.f06) = impl_witness_access constants.%Iterate.lookup_impl_witness.b8b, element3 [symbolic = %impl.elem3.loc44_33.2 (constants.%impl.elem3.463)] +// CHECK:STDOUT: %bound_method.loc44_33.3: = bound_method %r.ref, %impl.elem3.loc44_33.1 +// CHECK:STDOUT: %Iterate.facet.loc44_33.3: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.b8b) [symbolic = %Iterate.facet.loc44_33.5 (constants.%Iterate.facet.6ec)] +// CHECK:STDOUT: %.loc44_33.3: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc44_33.3 [symbolic = %Iterate.facet.loc44_33.5 (constants.%Iterate.facet.6ec)] +// CHECK:STDOUT: %Iterate.facet.loc44_33.4: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.b8b) [symbolic = %Iterate.facet.loc44_33.5 (constants.%Iterate.facet.6ec)] +// CHECK:STDOUT: %.loc44_33.4: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc44_33.4 [symbolic = %Iterate.facet.loc44_33.5 (constants.%Iterate.facet.6ec)] +// CHECK:STDOUT: %.loc44_33.5: %Destroy.type = converted constants.%as_type.59f, constants.%impl.elem1.697 [symbolic = %impl.elem1 (constants.%impl.elem1.697)] +// CHECK:STDOUT: %.loc44_33.6: %Destroy.type = converted constants.%as_type.59f, constants.%impl.elem1.697 [symbolic = %impl.elem1 (constants.%impl.elem1.697)] +// CHECK:STDOUT: %specific_impl_fn.loc44_33.2: = specific_impl_function %impl.elem3.loc44_33.1, @Iterate.WithSelf.Next(constants.%Iterate.facet.6ec) [symbolic = %specific_impl_fn.loc44_33.5 (constants.%specific_impl_fn.dcf)] +// CHECK:STDOUT: %bound_method.loc44_33.4: = bound_method %r.ref, %specific_impl_fn.loc44_33.2 +// CHECK:STDOUT: %.loc44_33.7: ref %Optional.15a = temporary_storage +// CHECK:STDOUT: %.loc44_32.2: @TestIterate.%R.as_type.loc40_79.1 (%R.as_type) = acquire_value %r.ref +// CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.15a to %.loc44_33.7 = call %bound_method.loc44_33.4(%.loc44_32.2, %addr.loc44) +// CHECK:STDOUT: %.loc44_33.8: ref %Optional.15a = temporary %.loc44_33.7, %Iterate.WithSelf.Next.call +// CHECK:STDOUT: %.loc44_33.9: %Optional.HasValue.type.6f3 = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.c3f) [concrete = constants.%Optional.HasValue.038] +// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.6f3 = name_ref HasValue, %.loc44_33.9 [concrete = constants.%Optional.HasValue.038] +// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc44_33.8, %HasValue.ref +// CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.c3f) [concrete = constants.%Optional.HasValue.specific_fn.bc4] +// CHECK:STDOUT: %bound_method.loc44_33.5: = bound_method %.loc44_33.8, %Optional.HasValue.specific_fn +// CHECK:STDOUT: %.loc44_33.10: %Optional.15a = acquire_value %.loc44_33.8 +// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc44_33.5(%.loc44_33.10) +// CHECK:STDOUT: %.loc44_33.11: bool = value_of_initializer %Optional.HasValue.call +// CHECK:STDOUT: %.loc44_33.12: bool = converted %Optional.HasValue.call, %.loc44_33.11 +// CHECK:STDOUT: if %.loc44_33.12 br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: -// CHECK:STDOUT: %.loc44_29.13: %Optional.Get.type.c7a = specific_constant imports.%Core.import_ref.dab, @Optional(constants.%OptionalStorage.facet.a0c) [concrete = constants.%Optional.Get.6ac] -// CHECK:STDOUT: %Get.ref: %Optional.Get.type.c7a = name_ref Get, %.loc44_29.13 [concrete = constants.%Optional.Get.6ac] -// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc44_29.8, %Get.ref -// CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.a0c) [concrete = constants.%Optional.Get.specific_fn.ee5] -// CHECK:STDOUT: %bound_method.loc44_29.6: = bound_method %.loc44_29.8, %Optional.Get.specific_fn -// CHECK:STDOUT: %.loc44_29.14: ref %ValueType = temporary_storage -// CHECK:STDOUT: %.loc44_29.15: %Optional.3c5 = acquire_value %.loc44_29.8 -// CHECK:STDOUT: %Optional.Get.call: init %ValueType to %.loc44_29.14 = call %bound_method.loc44_29.6(%.loc44_29.15) -// CHECK:STDOUT: %.loc44_29.16: ref %ValueType = temporary %.loc44_29.14, %Optional.Get.call -// CHECK:STDOUT: %.loc44_29.17: %ValueType = acquire_value %.loc44_29.16 -// CHECK:STDOUT: %.loc44_14: type = splice_block %ValueType.ref.loc44 [concrete = constants.%ValueType] { +// CHECK:STDOUT: %.loc44_33.13: %Optional.Get.type.d3e = specific_constant imports.%Core.import_ref.dab, @Optional(constants.%OptionalStorage.facet.c3f) [concrete = constants.%Optional.Get.57f] +// CHECK:STDOUT: %Get.ref: %Optional.Get.type.d3e = name_ref Get, %.loc44_33.13 [concrete = constants.%Optional.Get.57f] +// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc44_33.8, %Get.ref +// CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.c3f) [concrete = constants.%Optional.Get.specific_fn.c49] +// CHECK:STDOUT: %bound_method.loc44_33.6: = bound_method %.loc44_33.8, %Optional.Get.specific_fn +// CHECK:STDOUT: %.loc44_33.14: ref %DiffValueType = temporary_storage +// CHECK:STDOUT: %.loc44_33.15: %Optional.15a = acquire_value %.loc44_33.8 +// CHECK:STDOUT: %Optional.Get.call: init %DiffValueType to %.loc44_33.14 = call %bound_method.loc44_33.6(%.loc44_33.15) +// CHECK:STDOUT: %.loc44_33.16: ref %DiffValueType = temporary %.loc44_33.14, %Optional.Get.call +// CHECK:STDOUT: %.loc44_33.17: %DiffValueType = acquire_value %.loc44_33.16 +// CHECK:STDOUT: %.loc44_14: type = splice_block %DiffValueType.ref.loc44 [concrete = constants.%DiffValueType] { // CHECK:STDOUT: %Cpp.ref.loc44: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %ValueType.ref.loc44: type = name_ref ValueType, imports.%ValueType.decl [concrete = constants.%ValueType] +// CHECK:STDOUT: %DiffValueType.ref.loc44: type = name_ref DiffValueType, imports.%DiffValueType.decl [concrete = constants.%DiffValueType] // CHECK:STDOUT: } -// CHECK:STDOUT: %i: %ValueType = wrapper_binding i, %.loc44_29.17 -// CHECK:STDOUT: %sum.ref: ref %ValueType = name_ref sum, %sum -// CHECK:STDOUT: %i.ref: %ValueType = name_ref i, %i -// CHECK:STDOUT: %.loc45_12: ref %ValueType = value_as_ref %i.ref -// CHECK:STDOUT: %addr.loc45: %ptr.a3d = addr_of %.loc45_12 -// CHECK:STDOUT: %.loc45_9.1: %ptr.6bf = as_compatible %addr.loc45 -// CHECK:STDOUT: %.loc45_9.2: %ptr.6bf = converted %addr.loc45, %.loc45_9.1 -// CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.call: ref %ValueType = call imports.%operator_PlusEqual__carbon_thunk.decl(%sum.ref, %.loc45_9.2) -// CHECK:STDOUT: %ValueType.Op.bound.loc44: = bound_method %.loc44_29.16, constants.%ValueType.Op.4dca31.1 -// CHECK:STDOUT: %Op.ref.loc44: %ValueType.cpp_destructor.type = name_ref Op, imports.%ValueType.cpp_destructor.decl [concrete = constants.%ValueType.cpp_destructor] -// CHECK:STDOUT: %ValueType.cpp_destructor.bound.loc44: = bound_method %.loc44_29.16, %Op.ref.loc44 -// CHECK:STDOUT: %ValueType.cpp_destructor.call.loc44: init %empty_tuple.type = call %ValueType.cpp_destructor.bound.loc44(%.loc44_29.16) -// CHECK:STDOUT: %Destroy.Op.bound.loc44_29.1: = bound_method %.loc44_29.8, constants.%Destroy.Op.1a2547.7 -// CHECK:STDOUT: %Destroy.Op.call.loc44_29.1: init %empty_tuple.type = call %Destroy.Op.bound.loc44_29.1(%.loc44_29.8) +// CHECK:STDOUT: %i: %DiffValueType = wrapper_binding i, %.loc44_33.17 +// CHECK:STDOUT: %sum.ref: ref %DiffValueType = name_ref sum, %sum +// CHECK:STDOUT: %i.ref: %DiffValueType = name_ref i, %i +// CHECK:STDOUT: %.loc45_12: ref %DiffValueType = value_as_ref %i.ref +// CHECK:STDOUT: %addr.loc45: %ptr.cd0 = addr_of %.loc45_12 +// CHECK:STDOUT: %.loc45_9.1: %ptr.816 = as_compatible %addr.loc45 +// CHECK:STDOUT: %.loc45_9.2: %ptr.816 = converted %addr.loc45, %.loc45_9.1 +// CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.call: ref %DiffValueType = call imports.%operator_PlusEqual__carbon_thunk.decl(%sum.ref, %.loc45_9.2) +// CHECK:STDOUT: %DiffValueType.Op.bound.loc44: = bound_method %.loc44_33.16, constants.%DiffValueType.Op.4dca31.1 +// CHECK:STDOUT: %Op.ref.loc44: %DiffValueType.cpp_destructor.type = name_ref Op, imports.%DiffValueType.cpp_destructor.decl [concrete = constants.%DiffValueType.cpp_destructor] +// CHECK:STDOUT: %DiffValueType.cpp_destructor.bound.loc44: = bound_method %.loc44_33.16, %Op.ref.loc44 +// CHECK:STDOUT: %DiffValueType.cpp_destructor.call.loc44: init %empty_tuple.type = call %DiffValueType.cpp_destructor.bound.loc44(%.loc44_33.16) +// CHECK:STDOUT: %Destroy.Op.bound.loc44_33.1: = bound_method %.loc44_33.8, constants.%Destroy.Op.1a2547.7 +// CHECK:STDOUT: %Destroy.Op.call.loc44_33.1: init %empty_tuple.type = call %Destroy.Op.bound.loc44_33.1(%.loc44_33.8) // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: -// CHECK:STDOUT: %Destroy.Op.bound.loc44_29.2: = bound_method %.loc44_29.8, constants.%Destroy.Op.1a2547.7 -// CHECK:STDOUT: %Destroy.Op.call.loc44_29.2: init %empty_tuple.type = call %Destroy.Op.bound.loc44_29.2(%.loc44_29.8) -// CHECK:STDOUT: %impl.elem0.loc44_29.1: @TestIterate.%.loc44_29.22 (%.98a) = impl_witness_access constants.%Destroy.lookup_impl_witness.b29, element0 [symbolic = %impl.elem0.loc44_29.2 (constants.%impl.elem0.81b)] -// CHECK:STDOUT: %bound_method.loc44_29.7: = bound_method %var, %impl.elem0.loc44_29.1 -// CHECK:STDOUT: %.loc44_29.18: %Destroy.type = converted constants.%as_type.dbb, constants.%impl.elem1.3cf [symbolic = %impl.elem1 (constants.%impl.elem1.3cf)] -// CHECK:STDOUT: %.loc44_29.19: %Destroy.type = converted constants.%as_type.dbb, constants.%impl.elem1.3cf [symbolic = %impl.elem1 (constants.%impl.elem1.3cf)] -// CHECK:STDOUT: %specific_impl_fn.loc44_29.3: = specific_impl_function %impl.elem0.loc44_29.1, @Destroy.WithSelf.Op(constants.%impl.elem1.3cf) [symbolic = %specific_impl_fn.loc44_29.6 (constants.%specific_impl_fn.bf3)] -// CHECK:STDOUT: %bound_method.loc44_29.8: = bound_method %var, %specific_impl_fn.loc44_29.3 -// CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc44_29.8(%var) +// CHECK:STDOUT: %Destroy.Op.bound.loc44_33.2: = bound_method %.loc44_33.8, constants.%Destroy.Op.1a2547.7 +// CHECK:STDOUT: %Destroy.Op.call.loc44_33.2: init %empty_tuple.type = call %Destroy.Op.bound.loc44_33.2(%.loc44_33.8) +// CHECK:STDOUT: %impl.elem0.loc44_33.1: @TestIterate.%.loc44_33.22 (%.763) = impl_witness_access constants.%Destroy.lookup_impl_witness.38d, element0 [symbolic = %impl.elem0.loc44_33.2 (constants.%impl.elem0.891)] +// CHECK:STDOUT: %bound_method.loc44_33.7: = bound_method %var, %impl.elem0.loc44_33.1 +// CHECK:STDOUT: %.loc44_33.18: %Destroy.type = converted constants.%as_type.59f, constants.%impl.elem1.697 [symbolic = %impl.elem1 (constants.%impl.elem1.697)] +// CHECK:STDOUT: %.loc44_33.19: %Destroy.type = converted constants.%as_type.59f, constants.%impl.elem1.697 [symbolic = %impl.elem1 (constants.%impl.elem1.697)] +// CHECK:STDOUT: %specific_impl_fn.loc44_33.3: = specific_impl_function %impl.elem0.loc44_33.1, @Destroy.WithSelf.Op(constants.%impl.elem1.697) [symbolic = %specific_impl_fn.loc44_33.6 (constants.%specific_impl_fn.b52)] +// CHECK:STDOUT: %bound_method.loc44_33.8: = bound_method %var, %specific_impl_fn.loc44_33.3 +// CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc44_33.8(%var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc44_29.1(%self.param: ref %.98c) { +// CHECK:STDOUT: fn @Destroy.Op.loc44_33.1(%self.param: ref %.a18) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc44_29.2(%self.param: ref %MaybeUnformed.02e) { +// CHECK:STDOUT: fn @Destroy.Op.loc44_33.2(%self.param: ref %MaybeUnformed.923) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc44_29.3(%self.param: ref bool) = "no_op"; +// CHECK:STDOUT: fn @Destroy.Op.loc44_33.3(%self.param: ref bool) = "no_op"; // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc44_29.4(%self.param: ref %struct_type.value.has_value.761) { +// CHECK:STDOUT: fn @Destroy.Op.loc44_33.4(%self.param: ref %struct_type.value.has_value.3cf) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc44_29.5(%self.param: ref %DefaultOptionalStorage.84c) { +// CHECK:STDOUT: fn @Destroy.Op.loc44_33.5(%self.param: ref %DefaultOptionalStorage.5e4) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc44_29.6(%self.param: ref %Optional.3c5) { +// CHECK:STDOUT: fn @Destroy.Op.loc44_33.6(%self.param: ref %Optional.15a) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @TestRangeFor(%m.param: ref %MutableRange, %c.param: %ConstRange) { +// CHECK:STDOUT: fn @TestRangeFor(%m.param: ref %DiffMutableRange, %c.param: %DiffConstRange) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt.loc59: %pattern_type.e9f = value_binding_pattern i [concrete = constants.%i.patt] +// CHECK:STDOUT: %i.patt.loc59: %pattern_type.149 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %m.ref: ref %MutableRange = name_ref m, %m -// CHECK:STDOUT: %impl.elem2.loc59: %.1e1 = impl_witness_access constants.%Iterate.impl_witness.cf3, element2 [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.04f] -// CHECK:STDOUT: %bound_method.loc59_29.1: = bound_method %m.ref, %impl.elem2.loc59 -// CHECK:STDOUT: %facet_value.loc59_29.1: %CppRange_where.type.d682d6.1 = facet_value constants.%MutableRange, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.6b6, constants.%custom_witness.95581e.1, constants.%custom_witness.90a, constants.%custom_witness.444, constants.%custom_witness.3e8, constants.%custom_witness.95581e.2) [concrete = constants.%facet_value.9f5] -// CHECK:STDOUT: %.loc59_29.1: %CppRange_where.type.d682d6.1 = converted constants.%MutableRange, %facet_value.loc59_29.1 [concrete = constants.%facet_value.9f5] -// CHECK:STDOUT: %facet_value.loc59_29.2: %CppRange_where.type.d682d6.1 = facet_value constants.%MutableRange, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.6b6, constants.%custom_witness.95581e.1, constants.%custom_witness.90a, constants.%custom_witness.444, constants.%custom_witness.3e8, constants.%custom_witness.95581e.2) [concrete = constants.%facet_value.9f5] -// CHECK:STDOUT: %.loc59_29.2: %CppRange_where.type.d682d6.1 = converted constants.%MutableRange, %facet_value.loc59_29.2 [concrete = constants.%facet_value.9f5] -// CHECK:STDOUT: %specific_fn.loc59_29.1: = specific_function %impl.elem2.loc59, @T.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.9f5) [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn.2ae] -// CHECK:STDOUT: %bound_method.loc59_29.2: = bound_method %m.ref, %specific_fn.loc59_29.1 -// CHECK:STDOUT: %var.loc59: ref %tuple.type.829 = var_storage invalid -// CHECK:STDOUT: %.loc59_28.1: %MutableRange = acquire_value %m.ref -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.call.loc59: init %tuple.type.829 to %var.loc59 = call %bound_method.loc59_29.2(%.loc59_28.1) +// CHECK:STDOUT: %m.ref: ref %DiffMutableRange = name_ref m, %m +// CHECK:STDOUT: %impl.elem2.loc59: %.cbf = impl_witness_access constants.%Iterate.impl_witness.747, element2 [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.136] +// CHECK:STDOUT: %bound_method.loc59_33.1: = bound_method %m.ref, %impl.elem2.loc59 +// CHECK:STDOUT: %facet_value.loc59_33.1: %CppRange_where.type.d682d6.1 = facet_value constants.%DiffMutableRange, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.aa8, constants.%custom_witness.9bb15e.1, constants.%custom_witness.392, constants.%custom_witness.1c9, constants.%custom_witness.723, constants.%custom_witness.9bb15e.2) [concrete = constants.%facet_value.0a7] +// CHECK:STDOUT: %.loc59_33.1: %CppRange_where.type.d682d6.1 = converted constants.%DiffMutableRange, %facet_value.loc59_33.1 [concrete = constants.%facet_value.0a7] +// CHECK:STDOUT: %facet_value.loc59_33.2: %CppRange_where.type.d682d6.1 = facet_value constants.%DiffMutableRange, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.aa8, constants.%custom_witness.9bb15e.1, constants.%custom_witness.392, constants.%custom_witness.1c9, constants.%custom_witness.723, constants.%custom_witness.9bb15e.2) [concrete = constants.%facet_value.0a7] +// CHECK:STDOUT: %.loc59_33.2: %CppRange_where.type.d682d6.1 = converted constants.%DiffMutableRange, %facet_value.loc59_33.2 [concrete = constants.%facet_value.0a7] +// CHECK:STDOUT: %specific_fn.loc59_33.1: = specific_function %impl.elem2.loc59, @T.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.0a7) [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn.7b5] +// CHECK:STDOUT: %bound_method.loc59_33.2: = bound_method %m.ref, %specific_fn.loc59_33.1 +// CHECK:STDOUT: %var.loc59: ref %tuple.type.b18 = var_storage invalid +// CHECK:STDOUT: %.loc59_32.1: %DiffMutableRange = acquire_value %m.ref +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.call.loc59: init %tuple.type.b18 to %var.loc59 = call %bound_method.loc59_33.2(%.loc59_32.1) // CHECK:STDOUT: assign %var.loc59, %T.as_type.as.Iterate.impl.NewCursor.call.loc59 // CHECK:STDOUT: br !for.next.loc59 // CHECK:STDOUT: // CHECK:STDOUT: !for.next.loc59: -// CHECK:STDOUT: %addr.loc59: %ptr.d6b = addr_of %var.loc59 -// CHECK:STDOUT: %impl.elem3.loc59: %.c4e = impl_witness_access constants.%Iterate.impl_witness.cf3, element3 [concrete = constants.%T.as_type.as.Iterate.impl.Next.6bb] -// CHECK:STDOUT: %bound_method.loc59_29.3: = bound_method %m.ref, %impl.elem3.loc59 -// CHECK:STDOUT: %facet_value.loc59_29.3: %CppRange_where.type.d682d6.1 = facet_value constants.%MutableRange, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.6b6, constants.%custom_witness.95581e.1, constants.%custom_witness.90a, constants.%custom_witness.444, constants.%custom_witness.3e8, constants.%custom_witness.95581e.2) [concrete = constants.%facet_value.9f5] -// CHECK:STDOUT: %.loc59_29.3: %CppRange_where.type.d682d6.1 = converted constants.%MutableRange, %facet_value.loc59_29.3 [concrete = constants.%facet_value.9f5] -// CHECK:STDOUT: %facet_value.loc59_29.4: %CppRange_where.type.d682d6.1 = facet_value constants.%MutableRange, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.6b6, constants.%custom_witness.95581e.1, constants.%custom_witness.90a, constants.%custom_witness.444, constants.%custom_witness.3e8, constants.%custom_witness.95581e.2) [concrete = constants.%facet_value.9f5] -// CHECK:STDOUT: %.loc59_29.4: %CppRange_where.type.d682d6.1 = converted constants.%MutableRange, %facet_value.loc59_29.4 [concrete = constants.%facet_value.9f5] -// CHECK:STDOUT: %specific_fn.loc59_29.2: = specific_function %impl.elem3.loc59, @T.as_type.as.Iterate.impl.Next(constants.%facet_value.9f5) [concrete = constants.%T.as_type.as.Iterate.impl.Next.specific_fn.b6b] -// CHECK:STDOUT: %bound_method.loc59_29.4: = bound_method %m.ref, %specific_fn.loc59_29.2 -// CHECK:STDOUT: %.loc59_29.5: ref %Optional.3c5 = temporary_storage -// CHECK:STDOUT: %.loc59_28.2: %MutableRange = acquire_value %m.ref -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.call.loc59: init %Optional.3c5 to %.loc59_29.5 = call %bound_method.loc59_29.4(%.loc59_28.2, %addr.loc59) -// CHECK:STDOUT: %.loc59_29.6: ref %Optional.3c5 = temporary %.loc59_29.5, %T.as_type.as.Iterate.impl.Next.call.loc59 -// CHECK:STDOUT: %.loc59_29.7: %Optional.HasValue.type.cca = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.a0c) [concrete = constants.%Optional.HasValue.6d0] -// CHECK:STDOUT: %HasValue.ref.loc59: %Optional.HasValue.type.cca = name_ref HasValue, %.loc59_29.7 [concrete = constants.%Optional.HasValue.6d0] -// CHECK:STDOUT: %Optional.HasValue.bound.loc59: = bound_method %.loc59_29.6, %HasValue.ref.loc59 -// CHECK:STDOUT: %Optional.HasValue.specific_fn.loc59: = specific_function %HasValue.ref.loc59, @Optional.HasValue(constants.%OptionalStorage.facet.a0c) [concrete = constants.%Optional.HasValue.specific_fn.8b5] -// CHECK:STDOUT: %bound_method.loc59_29.5: = bound_method %.loc59_29.6, %Optional.HasValue.specific_fn.loc59 -// CHECK:STDOUT: %.loc59_29.8: %Optional.3c5 = acquire_value %.loc59_29.6 -// CHECK:STDOUT: %Optional.HasValue.call.loc59: init bool = call %bound_method.loc59_29.5(%.loc59_29.8) -// CHECK:STDOUT: %.loc59_29.9: bool = value_of_initializer %Optional.HasValue.call.loc59 -// CHECK:STDOUT: %.loc59_29.10: bool = converted %Optional.HasValue.call.loc59, %.loc59_29.9 -// CHECK:STDOUT: if %.loc59_29.10 br !for.body.loc59 else br !for.done.loc59 +// CHECK:STDOUT: %addr.loc59: %ptr.3ce = addr_of %var.loc59 +// CHECK:STDOUT: %impl.elem3.loc59: %.922 = impl_witness_access constants.%Iterate.impl_witness.747, element3 [concrete = constants.%T.as_type.as.Iterate.impl.Next.31b] +// CHECK:STDOUT: %bound_method.loc59_33.3: = bound_method %m.ref, %impl.elem3.loc59 +// CHECK:STDOUT: %facet_value.loc59_33.3: %CppRange_where.type.d682d6.1 = facet_value constants.%DiffMutableRange, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.aa8, constants.%custom_witness.9bb15e.1, constants.%custom_witness.392, constants.%custom_witness.1c9, constants.%custom_witness.723, constants.%custom_witness.9bb15e.2) [concrete = constants.%facet_value.0a7] +// CHECK:STDOUT: %.loc59_33.3: %CppRange_where.type.d682d6.1 = converted constants.%DiffMutableRange, %facet_value.loc59_33.3 [concrete = constants.%facet_value.0a7] +// CHECK:STDOUT: %facet_value.loc59_33.4: %CppRange_where.type.d682d6.1 = facet_value constants.%DiffMutableRange, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.aa8, constants.%custom_witness.9bb15e.1, constants.%custom_witness.392, constants.%custom_witness.1c9, constants.%custom_witness.723, constants.%custom_witness.9bb15e.2) [concrete = constants.%facet_value.0a7] +// CHECK:STDOUT: %.loc59_33.4: %CppRange_where.type.d682d6.1 = converted constants.%DiffMutableRange, %facet_value.loc59_33.4 [concrete = constants.%facet_value.0a7] +// CHECK:STDOUT: %specific_fn.loc59_33.2: = specific_function %impl.elem3.loc59, @T.as_type.as.Iterate.impl.Next(constants.%facet_value.0a7) [concrete = constants.%T.as_type.as.Iterate.impl.Next.specific_fn.a81] +// CHECK:STDOUT: %bound_method.loc59_33.4: = bound_method %m.ref, %specific_fn.loc59_33.2 +// CHECK:STDOUT: %.loc59_33.5: ref %Optional.15a = temporary_storage +// CHECK:STDOUT: %.loc59_32.2: %DiffMutableRange = acquire_value %m.ref +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.call.loc59: init %Optional.15a to %.loc59_33.5 = call %bound_method.loc59_33.4(%.loc59_32.2, %addr.loc59) +// CHECK:STDOUT: %.loc59_33.6: ref %Optional.15a = temporary %.loc59_33.5, %T.as_type.as.Iterate.impl.Next.call.loc59 +// CHECK:STDOUT: %.loc59_33.7: %Optional.HasValue.type.6f3 = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.c3f) [concrete = constants.%Optional.HasValue.038] +// CHECK:STDOUT: %HasValue.ref.loc59: %Optional.HasValue.type.6f3 = name_ref HasValue, %.loc59_33.7 [concrete = constants.%Optional.HasValue.038] +// CHECK:STDOUT: %Optional.HasValue.bound.loc59: = bound_method %.loc59_33.6, %HasValue.ref.loc59 +// CHECK:STDOUT: %Optional.HasValue.specific_fn.loc59: = specific_function %HasValue.ref.loc59, @Optional.HasValue(constants.%OptionalStorage.facet.c3f) [concrete = constants.%Optional.HasValue.specific_fn.bc4] +// CHECK:STDOUT: %bound_method.loc59_33.5: = bound_method %.loc59_33.6, %Optional.HasValue.specific_fn.loc59 +// CHECK:STDOUT: %.loc59_33.8: %Optional.15a = acquire_value %.loc59_33.6 +// CHECK:STDOUT: %Optional.HasValue.call.loc59: init bool = call %bound_method.loc59_33.5(%.loc59_33.8) +// CHECK:STDOUT: %.loc59_33.9: bool = value_of_initializer %Optional.HasValue.call.loc59 +// CHECK:STDOUT: %.loc59_33.10: bool = converted %Optional.HasValue.call.loc59, %.loc59_33.9 +// CHECK:STDOUT: if %.loc59_33.10 br !for.body.loc59 else br !for.done.loc59 // CHECK:STDOUT: // CHECK:STDOUT: !for.body.loc59: -// CHECK:STDOUT: %.loc59_29.11: %Optional.Get.type.c7a = specific_constant imports.%Core.import_ref.dab, @Optional(constants.%OptionalStorage.facet.a0c) [concrete = constants.%Optional.Get.6ac] -// CHECK:STDOUT: %Get.ref.loc59: %Optional.Get.type.c7a = name_ref Get, %.loc59_29.11 [concrete = constants.%Optional.Get.6ac] -// CHECK:STDOUT: %Optional.Get.bound.loc59: = bound_method %.loc59_29.6, %Get.ref.loc59 -// CHECK:STDOUT: %Optional.Get.specific_fn.loc59: = specific_function %Get.ref.loc59, @Optional.Get(constants.%OptionalStorage.facet.a0c) [concrete = constants.%Optional.Get.specific_fn.ee5] -// CHECK:STDOUT: %bound_method.loc59_29.6: = bound_method %.loc59_29.6, %Optional.Get.specific_fn.loc59 -// CHECK:STDOUT: %.loc59_29.12: ref %ValueType = temporary_storage -// CHECK:STDOUT: %.loc59_29.13: %Optional.3c5 = acquire_value %.loc59_29.6 -// CHECK:STDOUT: %Optional.Get.call.loc59: init %ValueType to %.loc59_29.12 = call %bound_method.loc59_29.6(%.loc59_29.13) -// CHECK:STDOUT: %.loc59_29.14: ref %ValueType = temporary %.loc59_29.12, %Optional.Get.call.loc59 -// CHECK:STDOUT: %.loc59_29.15: %ValueType = acquire_value %.loc59_29.14 -// CHECK:STDOUT: %.loc59_14: type = splice_block %ValueType.ref.loc59 [concrete = constants.%ValueType] { +// CHECK:STDOUT: %.loc59_33.11: %Optional.Get.type.d3e = specific_constant imports.%Core.import_ref.dab, @Optional(constants.%OptionalStorage.facet.c3f) [concrete = constants.%Optional.Get.57f] +// CHECK:STDOUT: %Get.ref.loc59: %Optional.Get.type.d3e = name_ref Get, %.loc59_33.11 [concrete = constants.%Optional.Get.57f] +// CHECK:STDOUT: %Optional.Get.bound.loc59: = bound_method %.loc59_33.6, %Get.ref.loc59 +// CHECK:STDOUT: %Optional.Get.specific_fn.loc59: = specific_function %Get.ref.loc59, @Optional.Get(constants.%OptionalStorage.facet.c3f) [concrete = constants.%Optional.Get.specific_fn.c49] +// CHECK:STDOUT: %bound_method.loc59_33.6: = bound_method %.loc59_33.6, %Optional.Get.specific_fn.loc59 +// CHECK:STDOUT: %.loc59_33.12: ref %DiffValueType = temporary_storage +// CHECK:STDOUT: %.loc59_33.13: %Optional.15a = acquire_value %.loc59_33.6 +// CHECK:STDOUT: %Optional.Get.call.loc59: init %DiffValueType to %.loc59_33.12 = call %bound_method.loc59_33.6(%.loc59_33.13) +// CHECK:STDOUT: %.loc59_33.14: ref %DiffValueType = temporary %.loc59_33.12, %Optional.Get.call.loc59 +// CHECK:STDOUT: %.loc59_33.15: %DiffValueType = acquire_value %.loc59_33.14 +// CHECK:STDOUT: %.loc59_14: type = splice_block %DiffValueType.ref.loc59 [concrete = constants.%DiffValueType] { // CHECK:STDOUT: %Cpp.ref.loc59: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %ValueType.ref.loc59: type = name_ref ValueType, imports.%ValueType.decl [concrete = constants.%ValueType] +// CHECK:STDOUT: %DiffValueType.ref.loc59: type = name_ref DiffValueType, imports.%DiffValueType.decl [concrete = constants.%DiffValueType] // CHECK:STDOUT: } -// CHECK:STDOUT: %i.loc59: %ValueType = wrapper_binding i, %.loc59_29.15 -// CHECK:STDOUT: %sum.ref.loc60: ref %ValueType = name_ref sum, %sum -// CHECK:STDOUT: %i.ref.loc60: %ValueType = name_ref i, %i.loc59 -// CHECK:STDOUT: %.loc60_12: ref %ValueType = value_as_ref %i.ref.loc60 -// CHECK:STDOUT: %addr.loc60: %ptr.a3d = addr_of %.loc60_12 -// CHECK:STDOUT: %.loc60_9.1: %ptr.6bf = as_compatible %addr.loc60 -// CHECK:STDOUT: %.loc60_9.2: %ptr.6bf = converted %addr.loc60, %.loc60_9.1 -// CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.call.loc60: ref %ValueType = call imports.%operator_PlusEqual__carbon_thunk.decl(%sum.ref.loc60, %.loc60_9.2) -// CHECK:STDOUT: %ValueType.Op.bound.loc59: = bound_method %.loc59_29.14, constants.%ValueType.Op.4dca31.1 -// CHECK:STDOUT: %Op.ref.loc59: %ValueType.cpp_destructor.type = name_ref Op, imports.%ValueType.cpp_destructor.decl [concrete = constants.%ValueType.cpp_destructor] -// CHECK:STDOUT: %ValueType.cpp_destructor.bound.loc59: = bound_method %.loc59_29.14, %Op.ref.loc59 -// CHECK:STDOUT: %ValueType.cpp_destructor.call.loc59: init %empty_tuple.type = call %ValueType.cpp_destructor.bound.loc59(%.loc59_29.14) -// CHECK:STDOUT: %Destroy.Op.bound.loc59_29.1: = bound_method %.loc59_29.6, constants.%Destroy.Op.1a2547.7 -// CHECK:STDOUT: %Destroy.Op.call.loc59_29.1: init %empty_tuple.type = call %Destroy.Op.bound.loc59_29.1(%.loc59_29.6) +// CHECK:STDOUT: %i.loc59: %DiffValueType = wrapper_binding i, %.loc59_33.15 +// CHECK:STDOUT: %sum.ref.loc60: ref %DiffValueType = name_ref sum, %sum +// CHECK:STDOUT: %i.ref.loc60: %DiffValueType = name_ref i, %i.loc59 +// CHECK:STDOUT: %.loc60_12: ref %DiffValueType = value_as_ref %i.ref.loc60 +// CHECK:STDOUT: %addr.loc60: %ptr.cd0 = addr_of %.loc60_12 +// CHECK:STDOUT: %.loc60_9.1: %ptr.816 = as_compatible %addr.loc60 +// CHECK:STDOUT: %.loc60_9.2: %ptr.816 = converted %addr.loc60, %.loc60_9.1 +// CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.call.loc60: ref %DiffValueType = call imports.%operator_PlusEqual__carbon_thunk.decl(%sum.ref.loc60, %.loc60_9.2) +// CHECK:STDOUT: %DiffValueType.Op.bound.loc59: = bound_method %.loc59_33.14, constants.%DiffValueType.Op.4dca31.1 +// CHECK:STDOUT: %Op.ref.loc59: %DiffValueType.cpp_destructor.type = name_ref Op, imports.%DiffValueType.cpp_destructor.decl [concrete = constants.%DiffValueType.cpp_destructor] +// CHECK:STDOUT: %DiffValueType.cpp_destructor.bound.loc59: = bound_method %.loc59_33.14, %Op.ref.loc59 +// CHECK:STDOUT: %DiffValueType.cpp_destructor.call.loc59: init %empty_tuple.type = call %DiffValueType.cpp_destructor.bound.loc59(%.loc59_33.14) +// CHECK:STDOUT: %Destroy.Op.bound.loc59_33.1: = bound_method %.loc59_33.6, constants.%Destroy.Op.1a2547.7 +// CHECK:STDOUT: %Destroy.Op.call.loc59_33.1: init %empty_tuple.type = call %Destroy.Op.bound.loc59_33.1(%.loc59_33.6) // CHECK:STDOUT: br !for.next.loc59 // CHECK:STDOUT: // CHECK:STDOUT: !for.done.loc59: -// CHECK:STDOUT: %Destroy.Op.bound.loc59_29.2: = bound_method %.loc59_29.6, constants.%Destroy.Op.1a2547.7 -// CHECK:STDOUT: %Destroy.Op.call.loc59_29.2: init %empty_tuple.type = call %Destroy.Op.bound.loc59_29.2(%.loc59_29.6) -// CHECK:STDOUT: %Destroy.Op.bound.loc59_29.3: = bound_method %var.loc59, constants.%Destroy.Op.1a2547.8 -// CHECK:STDOUT: %Destroy.Op.call.loc59_29.3: init %empty_tuple.type = call %Destroy.Op.bound.loc59_29.3(%var.loc59) +// CHECK:STDOUT: %Destroy.Op.bound.loc59_33.2: = bound_method %.loc59_33.6, constants.%Destroy.Op.1a2547.7 +// CHECK:STDOUT: %Destroy.Op.call.loc59_33.2: init %empty_tuple.type = call %Destroy.Op.bound.loc59_33.2(%.loc59_33.6) +// CHECK:STDOUT: %Destroy.Op.bound.loc59_33.3: = bound_method %var.loc59, constants.%Destroy.Op.1a2547.8 +// CHECK:STDOUT: %Destroy.Op.call.loc59_33.3: init %empty_tuple.type = call %Destroy.Op.bound.loc59_33.3(%var.loc59) // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt.loc63: %pattern_type.e9f = value_binding_pattern i [concrete = constants.%i.patt] +// CHECK:STDOUT: %i.patt.loc63: %pattern_type.149 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %c.ref: %ConstRange = name_ref c, %c -// CHECK:STDOUT: %impl.elem2.loc63: %.e96 = impl_witness_access constants.%Iterate.impl_witness.c1f, element2 [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.c2e] -// CHECK:STDOUT: %bound_method.loc63_29.1: = bound_method %c.ref, %impl.elem2.loc63 -// CHECK:STDOUT: %facet_value.loc63_29.1: %CppRange_where.type.d682d6.1 = facet_value constants.%ConstRange, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.a03, constants.%custom_witness.6e8a2e.1, constants.%custom_witness.78b, constants.%custom_witness.746, constants.%custom_witness.c55, constants.%custom_witness.6e8a2e.2) [concrete = constants.%facet_value.782] -// CHECK:STDOUT: %.loc63_29.1: %CppRange_where.type.d682d6.1 = converted constants.%ConstRange, %facet_value.loc63_29.1 [concrete = constants.%facet_value.782] -// CHECK:STDOUT: %facet_value.loc63_29.2: %CppRange_where.type.d682d6.1 = facet_value constants.%ConstRange, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.a03, constants.%custom_witness.6e8a2e.1, constants.%custom_witness.78b, constants.%custom_witness.746, constants.%custom_witness.c55, constants.%custom_witness.6e8a2e.2) [concrete = constants.%facet_value.782] -// CHECK:STDOUT: %.loc63_29.2: %CppRange_where.type.d682d6.1 = converted constants.%ConstRange, %facet_value.loc63_29.2 [concrete = constants.%facet_value.782] -// CHECK:STDOUT: %specific_fn.loc63_29.1: = specific_function %impl.elem2.loc63, @T.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.782) [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn.c09] -// CHECK:STDOUT: %bound_method.loc63_29.2: = bound_method %c.ref, %specific_fn.loc63_29.1 -// CHECK:STDOUT: %var.loc63: ref %tuple.type.99f = var_storage invalid -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.call.loc63: init %tuple.type.99f to %var.loc63 = call %bound_method.loc63_29.2(%c.ref) +// CHECK:STDOUT: %c.ref: %DiffConstRange = name_ref c, %c +// CHECK:STDOUT: %impl.elem2.loc63: %.f70 = impl_witness_access constants.%Iterate.impl_witness.f7f, element2 [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.1a9] +// CHECK:STDOUT: %bound_method.loc63_33.1: = bound_method %c.ref, %impl.elem2.loc63 +// CHECK:STDOUT: %facet_value.loc63_33.1: %CppRange_where.type.d682d6.1 = facet_value constants.%DiffConstRange, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.7b4, constants.%custom_witness.f7d4ff.1, constants.%custom_witness.0c0, constants.%custom_witness.ffb, constants.%custom_witness.a26, constants.%custom_witness.f7d4ff.2) [concrete = constants.%facet_value.733] +// CHECK:STDOUT: %.loc63_33.1: %CppRange_where.type.d682d6.1 = converted constants.%DiffConstRange, %facet_value.loc63_33.1 [concrete = constants.%facet_value.733] +// CHECK:STDOUT: %facet_value.loc63_33.2: %CppRange_where.type.d682d6.1 = facet_value constants.%DiffConstRange, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.7b4, constants.%custom_witness.f7d4ff.1, constants.%custom_witness.0c0, constants.%custom_witness.ffb, constants.%custom_witness.a26, constants.%custom_witness.f7d4ff.2) [concrete = constants.%facet_value.733] +// CHECK:STDOUT: %.loc63_33.2: %CppRange_where.type.d682d6.1 = converted constants.%DiffConstRange, %facet_value.loc63_33.2 [concrete = constants.%facet_value.733] +// CHECK:STDOUT: %specific_fn.loc63_33.1: = specific_function %impl.elem2.loc63, @T.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.733) [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn.f9d] +// CHECK:STDOUT: %bound_method.loc63_33.2: = bound_method %c.ref, %specific_fn.loc63_33.1 +// CHECK:STDOUT: %var.loc63: ref %tuple.type.df5 = var_storage invalid +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.call.loc63: init %tuple.type.df5 to %var.loc63 = call %bound_method.loc63_33.2(%c.ref) // CHECK:STDOUT: assign %var.loc63, %T.as_type.as.Iterate.impl.NewCursor.call.loc63 // CHECK:STDOUT: br !for.next.loc63 // CHECK:STDOUT: // CHECK:STDOUT: !for.next.loc63: -// CHECK:STDOUT: %addr.loc63: %ptr.2f7 = addr_of %var.loc63 -// CHECK:STDOUT: %impl.elem3.loc63: %.5b1 = impl_witness_access constants.%Iterate.impl_witness.c1f, element3 [concrete = constants.%T.as_type.as.Iterate.impl.Next.760] -// CHECK:STDOUT: %bound_method.loc63_29.3: = bound_method %c.ref, %impl.elem3.loc63 -// CHECK:STDOUT: %facet_value.loc63_29.3: %CppRange_where.type.d682d6.1 = facet_value constants.%ConstRange, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.a03, constants.%custom_witness.6e8a2e.1, constants.%custom_witness.78b, constants.%custom_witness.746, constants.%custom_witness.c55, constants.%custom_witness.6e8a2e.2) [concrete = constants.%facet_value.782] -// CHECK:STDOUT: %.loc63_29.3: %CppRange_where.type.d682d6.1 = converted constants.%ConstRange, %facet_value.loc63_29.3 [concrete = constants.%facet_value.782] -// CHECK:STDOUT: %facet_value.loc63_29.4: %CppRange_where.type.d682d6.1 = facet_value constants.%ConstRange, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.a03, constants.%custom_witness.6e8a2e.1, constants.%custom_witness.78b, constants.%custom_witness.746, constants.%custom_witness.c55, constants.%custom_witness.6e8a2e.2) [concrete = constants.%facet_value.782] -// CHECK:STDOUT: %.loc63_29.4: %CppRange_where.type.d682d6.1 = converted constants.%ConstRange, %facet_value.loc63_29.4 [concrete = constants.%facet_value.782] -// CHECK:STDOUT: %specific_fn.loc63_29.2: = specific_function %impl.elem3.loc63, @T.as_type.as.Iterate.impl.Next(constants.%facet_value.782) [concrete = constants.%T.as_type.as.Iterate.impl.Next.specific_fn.586] -// CHECK:STDOUT: %bound_method.loc63_29.4: = bound_method %c.ref, %specific_fn.loc63_29.2 -// CHECK:STDOUT: %.loc63_29.5: ref %Optional.3c5 = temporary_storage -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.call.loc63: init %Optional.3c5 to %.loc63_29.5 = call %bound_method.loc63_29.4(%c.ref, %addr.loc63) -// CHECK:STDOUT: %.loc63_29.6: ref %Optional.3c5 = temporary %.loc63_29.5, %T.as_type.as.Iterate.impl.Next.call.loc63 -// CHECK:STDOUT: %.loc63_29.7: %Optional.HasValue.type.cca = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.a0c) [concrete = constants.%Optional.HasValue.6d0] -// CHECK:STDOUT: %HasValue.ref.loc63: %Optional.HasValue.type.cca = name_ref HasValue, %.loc63_29.7 [concrete = constants.%Optional.HasValue.6d0] -// CHECK:STDOUT: %Optional.HasValue.bound.loc63: = bound_method %.loc63_29.6, %HasValue.ref.loc63 -// CHECK:STDOUT: %Optional.HasValue.specific_fn.loc63: = specific_function %HasValue.ref.loc63, @Optional.HasValue(constants.%OptionalStorage.facet.a0c) [concrete = constants.%Optional.HasValue.specific_fn.8b5] -// CHECK:STDOUT: %bound_method.loc63_29.5: = bound_method %.loc63_29.6, %Optional.HasValue.specific_fn.loc63 -// CHECK:STDOUT: %.loc63_29.8: %Optional.3c5 = acquire_value %.loc63_29.6 -// CHECK:STDOUT: %Optional.HasValue.call.loc63: init bool = call %bound_method.loc63_29.5(%.loc63_29.8) -// CHECK:STDOUT: %.loc63_29.9: bool = value_of_initializer %Optional.HasValue.call.loc63 -// CHECK:STDOUT: %.loc63_29.10: bool = converted %Optional.HasValue.call.loc63, %.loc63_29.9 -// CHECK:STDOUT: if %.loc63_29.10 br !for.body.loc63 else br !for.done.loc63 +// CHECK:STDOUT: %addr.loc63: %ptr.310 = addr_of %var.loc63 +// CHECK:STDOUT: %impl.elem3.loc63: %.802 = impl_witness_access constants.%Iterate.impl_witness.f7f, element3 [concrete = constants.%T.as_type.as.Iterate.impl.Next.59a] +// CHECK:STDOUT: %bound_method.loc63_33.3: = bound_method %c.ref, %impl.elem3.loc63 +// CHECK:STDOUT: %facet_value.loc63_33.3: %CppRange_where.type.d682d6.1 = facet_value constants.%DiffConstRange, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.7b4, constants.%custom_witness.f7d4ff.1, constants.%custom_witness.0c0, constants.%custom_witness.ffb, constants.%custom_witness.a26, constants.%custom_witness.f7d4ff.2) [concrete = constants.%facet_value.733] +// CHECK:STDOUT: %.loc63_33.3: %CppRange_where.type.d682d6.1 = converted constants.%DiffConstRange, %facet_value.loc63_33.3 [concrete = constants.%facet_value.733] +// CHECK:STDOUT: %facet_value.loc63_33.4: %CppRange_where.type.d682d6.1 = facet_value constants.%DiffConstRange, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.7b4, constants.%custom_witness.f7d4ff.1, constants.%custom_witness.0c0, constants.%custom_witness.ffb, constants.%custom_witness.a26, constants.%custom_witness.f7d4ff.2) [concrete = constants.%facet_value.733] +// CHECK:STDOUT: %.loc63_33.4: %CppRange_where.type.d682d6.1 = converted constants.%DiffConstRange, %facet_value.loc63_33.4 [concrete = constants.%facet_value.733] +// CHECK:STDOUT: %specific_fn.loc63_33.2: = specific_function %impl.elem3.loc63, @T.as_type.as.Iterate.impl.Next(constants.%facet_value.733) [concrete = constants.%T.as_type.as.Iterate.impl.Next.specific_fn.2ac] +// CHECK:STDOUT: %bound_method.loc63_33.4: = bound_method %c.ref, %specific_fn.loc63_33.2 +// CHECK:STDOUT: %.loc63_33.5: ref %Optional.15a = temporary_storage +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.call.loc63: init %Optional.15a to %.loc63_33.5 = call %bound_method.loc63_33.4(%c.ref, %addr.loc63) +// CHECK:STDOUT: %.loc63_33.6: ref %Optional.15a = temporary %.loc63_33.5, %T.as_type.as.Iterate.impl.Next.call.loc63 +// CHECK:STDOUT: %.loc63_33.7: %Optional.HasValue.type.6f3 = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.c3f) [concrete = constants.%Optional.HasValue.038] +// CHECK:STDOUT: %HasValue.ref.loc63: %Optional.HasValue.type.6f3 = name_ref HasValue, %.loc63_33.7 [concrete = constants.%Optional.HasValue.038] +// CHECK:STDOUT: %Optional.HasValue.bound.loc63: = bound_method %.loc63_33.6, %HasValue.ref.loc63 +// CHECK:STDOUT: %Optional.HasValue.specific_fn.loc63: = specific_function %HasValue.ref.loc63, @Optional.HasValue(constants.%OptionalStorage.facet.c3f) [concrete = constants.%Optional.HasValue.specific_fn.bc4] +// CHECK:STDOUT: %bound_method.loc63_33.5: = bound_method %.loc63_33.6, %Optional.HasValue.specific_fn.loc63 +// CHECK:STDOUT: %.loc63_33.8: %Optional.15a = acquire_value %.loc63_33.6 +// CHECK:STDOUT: %Optional.HasValue.call.loc63: init bool = call %bound_method.loc63_33.5(%.loc63_33.8) +// CHECK:STDOUT: %.loc63_33.9: bool = value_of_initializer %Optional.HasValue.call.loc63 +// CHECK:STDOUT: %.loc63_33.10: bool = converted %Optional.HasValue.call.loc63, %.loc63_33.9 +// CHECK:STDOUT: if %.loc63_33.10 br !for.body.loc63 else br !for.done.loc63 // CHECK:STDOUT: // CHECK:STDOUT: !for.body.loc63: -// CHECK:STDOUT: %.loc63_29.11: %Optional.Get.type.c7a = specific_constant imports.%Core.import_ref.dab, @Optional(constants.%OptionalStorage.facet.a0c) [concrete = constants.%Optional.Get.6ac] -// CHECK:STDOUT: %Get.ref.loc63: %Optional.Get.type.c7a = name_ref Get, %.loc63_29.11 [concrete = constants.%Optional.Get.6ac] -// CHECK:STDOUT: %Optional.Get.bound.loc63: = bound_method %.loc63_29.6, %Get.ref.loc63 -// CHECK:STDOUT: %Optional.Get.specific_fn.loc63: = specific_function %Get.ref.loc63, @Optional.Get(constants.%OptionalStorage.facet.a0c) [concrete = constants.%Optional.Get.specific_fn.ee5] -// CHECK:STDOUT: %bound_method.loc63_29.6: = bound_method %.loc63_29.6, %Optional.Get.specific_fn.loc63 -// CHECK:STDOUT: %.loc63_29.12: ref %ValueType = temporary_storage -// CHECK:STDOUT: %.loc63_29.13: %Optional.3c5 = acquire_value %.loc63_29.6 -// CHECK:STDOUT: %Optional.Get.call.loc63: init %ValueType to %.loc63_29.12 = call %bound_method.loc63_29.6(%.loc63_29.13) -// CHECK:STDOUT: %.loc63_29.14: ref %ValueType = temporary %.loc63_29.12, %Optional.Get.call.loc63 -// CHECK:STDOUT: %.loc63_29.15: %ValueType = acquire_value %.loc63_29.14 -// CHECK:STDOUT: %.loc63_14: type = splice_block %ValueType.ref.loc63 [concrete = constants.%ValueType] { +// CHECK:STDOUT: %.loc63_33.11: %Optional.Get.type.d3e = specific_constant imports.%Core.import_ref.dab, @Optional(constants.%OptionalStorage.facet.c3f) [concrete = constants.%Optional.Get.57f] +// CHECK:STDOUT: %Get.ref.loc63: %Optional.Get.type.d3e = name_ref Get, %.loc63_33.11 [concrete = constants.%Optional.Get.57f] +// CHECK:STDOUT: %Optional.Get.bound.loc63: = bound_method %.loc63_33.6, %Get.ref.loc63 +// CHECK:STDOUT: %Optional.Get.specific_fn.loc63: = specific_function %Get.ref.loc63, @Optional.Get(constants.%OptionalStorage.facet.c3f) [concrete = constants.%Optional.Get.specific_fn.c49] +// CHECK:STDOUT: %bound_method.loc63_33.6: = bound_method %.loc63_33.6, %Optional.Get.specific_fn.loc63 +// CHECK:STDOUT: %.loc63_33.12: ref %DiffValueType = temporary_storage +// CHECK:STDOUT: %.loc63_33.13: %Optional.15a = acquire_value %.loc63_33.6 +// CHECK:STDOUT: %Optional.Get.call.loc63: init %DiffValueType to %.loc63_33.12 = call %bound_method.loc63_33.6(%.loc63_33.13) +// CHECK:STDOUT: %.loc63_33.14: ref %DiffValueType = temporary %.loc63_33.12, %Optional.Get.call.loc63 +// CHECK:STDOUT: %.loc63_33.15: %DiffValueType = acquire_value %.loc63_33.14 +// CHECK:STDOUT: %.loc63_14: type = splice_block %DiffValueType.ref.loc63 [concrete = constants.%DiffValueType] { // CHECK:STDOUT: %Cpp.ref.loc63: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %ValueType.ref.loc63: type = name_ref ValueType, imports.%ValueType.decl [concrete = constants.%ValueType] +// CHECK:STDOUT: %DiffValueType.ref.loc63: type = name_ref DiffValueType, imports.%DiffValueType.decl [concrete = constants.%DiffValueType] // CHECK:STDOUT: } -// CHECK:STDOUT: %i.loc63: %ValueType = wrapper_binding i, %.loc63_29.15 -// CHECK:STDOUT: %sum.ref.loc64: ref %ValueType = name_ref sum, %sum -// CHECK:STDOUT: %i.ref.loc64: %ValueType = name_ref i, %i.loc63 -// CHECK:STDOUT: %.loc64_12: ref %ValueType = value_as_ref %i.ref.loc64 -// CHECK:STDOUT: %addr.loc64: %ptr.a3d = addr_of %.loc64_12 -// CHECK:STDOUT: %.loc64_9.1: %ptr.6bf = as_compatible %addr.loc64 -// CHECK:STDOUT: %.loc64_9.2: %ptr.6bf = converted %addr.loc64, %.loc64_9.1 -// CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.call.loc64: ref %ValueType = call imports.%operator_PlusEqual__carbon_thunk.decl(%sum.ref.loc64, %.loc64_9.2) -// CHECK:STDOUT: %ValueType.Op.bound.loc63: = bound_method %.loc63_29.14, constants.%ValueType.Op.4dca31.1 -// CHECK:STDOUT: %Op.ref.loc63: %ValueType.cpp_destructor.type = name_ref Op, imports.%ValueType.cpp_destructor.decl [concrete = constants.%ValueType.cpp_destructor] -// CHECK:STDOUT: %ValueType.cpp_destructor.bound.loc63: = bound_method %.loc63_29.14, %Op.ref.loc63 -// CHECK:STDOUT: %ValueType.cpp_destructor.call.loc63: init %empty_tuple.type = call %ValueType.cpp_destructor.bound.loc63(%.loc63_29.14) -// CHECK:STDOUT: %Destroy.Op.bound.loc63_29.1: = bound_method %.loc63_29.6, constants.%Destroy.Op.1a2547.7 -// CHECK:STDOUT: %Destroy.Op.call.loc63_29.1: init %empty_tuple.type = call %Destroy.Op.bound.loc63_29.1(%.loc63_29.6) +// CHECK:STDOUT: %i.loc63: %DiffValueType = wrapper_binding i, %.loc63_33.15 +// CHECK:STDOUT: %sum.ref.loc64: ref %DiffValueType = name_ref sum, %sum +// CHECK:STDOUT: %i.ref.loc64: %DiffValueType = name_ref i, %i.loc63 +// CHECK:STDOUT: %.loc64_12: ref %DiffValueType = value_as_ref %i.ref.loc64 +// CHECK:STDOUT: %addr.loc64: %ptr.cd0 = addr_of %.loc64_12 +// CHECK:STDOUT: %.loc64_9.1: %ptr.816 = as_compatible %addr.loc64 +// CHECK:STDOUT: %.loc64_9.2: %ptr.816 = converted %addr.loc64, %.loc64_9.1 +// CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.call.loc64: ref %DiffValueType = call imports.%operator_PlusEqual__carbon_thunk.decl(%sum.ref.loc64, %.loc64_9.2) +// CHECK:STDOUT: %DiffValueType.Op.bound.loc63: = bound_method %.loc63_33.14, constants.%DiffValueType.Op.4dca31.1 +// CHECK:STDOUT: %Op.ref.loc63: %DiffValueType.cpp_destructor.type = name_ref Op, imports.%DiffValueType.cpp_destructor.decl [concrete = constants.%DiffValueType.cpp_destructor] +// CHECK:STDOUT: %DiffValueType.cpp_destructor.bound.loc63: = bound_method %.loc63_33.14, %Op.ref.loc63 +// CHECK:STDOUT: %DiffValueType.cpp_destructor.call.loc63: init %empty_tuple.type = call %DiffValueType.cpp_destructor.bound.loc63(%.loc63_33.14) +// CHECK:STDOUT: %Destroy.Op.bound.loc63_33.1: = bound_method %.loc63_33.6, constants.%Destroy.Op.1a2547.7 +// CHECK:STDOUT: %Destroy.Op.call.loc63_33.1: init %empty_tuple.type = call %Destroy.Op.bound.loc63_33.1(%.loc63_33.6) // CHECK:STDOUT: br !for.next.loc63 // CHECK:STDOUT: // CHECK:STDOUT: !for.done.loc63: -// CHECK:STDOUT: %Destroy.Op.bound.loc63_29.2: = bound_method %.loc63_29.6, constants.%Destroy.Op.1a2547.7 -// CHECK:STDOUT: %Destroy.Op.call.loc63_29.2: init %empty_tuple.type = call %Destroy.Op.bound.loc63_29.2(%.loc63_29.6) -// CHECK:STDOUT: %Destroy.Op.bound.loc63_29.3: = bound_method %var.loc63, constants.%Destroy.Op.1a2547.9 -// CHECK:STDOUT: %Destroy.Op.call.loc63_29.3: init %empty_tuple.type = call %Destroy.Op.bound.loc63_29.3(%var.loc63) +// CHECK:STDOUT: %Destroy.Op.bound.loc63_33.2: = bound_method %.loc63_33.6, constants.%Destroy.Op.1a2547.7 +// CHECK:STDOUT: %Destroy.Op.call.loc63_33.2: init %empty_tuple.type = call %Destroy.Op.bound.loc63_33.2(%.loc63_33.6) +// CHECK:STDOUT: %Destroy.Op.bound.loc63_33.3: = bound_method %var.loc63, constants.%Destroy.Op.1a2547.9 +// CHECK:STDOUT: %Destroy.Op.call.loc63_33.3: init %empty_tuple.type = call %Destroy.Op.bound.loc63_33.3(%var.loc63) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestIterate(constants.%R) { // CHECK:STDOUT: %R.patt.loc40_17.2 => constants.%R.patt // CHECK:STDOUT: %R.loc40_17.1 => constants.%R -// CHECK:STDOUT: %R.as_type.loc40_75.1 => constants.%R.as_type -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.d2d -// CHECK:STDOUT: %r.patt.loc40_73.2 => constants.%r.patt.d27 -// CHECK:STDOUT: %r.param_patt.loc40_68.2 => constants.%r.param_patt.a41 +// CHECK:STDOUT: %R.as_type.loc40_79.1 => constants.%R.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.20b +// CHECK:STDOUT: %r.patt.loc40_77.2 => constants.%r.patt.9f3 +// CHECK:STDOUT: %r.param_patt.loc40_72.2 => constants.%r.param_patt.b12 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @TestIterate(constants.%facet_value.068) { +// CHECK:STDOUT: specific @TestIterate(constants.%facet_value.753) { // CHECK:STDOUT: %R.patt.loc40_17.2 => constants.%R.patt -// CHECK:STDOUT: %R.loc40_17.1 => constants.%facet_value.068 -// CHECK:STDOUT: %R.as_type.loc40_75.1 => constants.%MutableRange -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.e635 -// CHECK:STDOUT: %r.patt.loc40_73.2 => constants.%r.patt.f69 -// CHECK:STDOUT: %r.param_patt.loc40_68.2 => constants.%r.param_patt.91e +// CHECK:STDOUT: %R.loc40_17.1 => constants.%facet_value.753 +// CHECK:STDOUT: %R.as_type.loc40_79.1 => constants.%DiffMutableRange +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.611 +// CHECK:STDOUT: %r.patt.loc40_77.2 => constants.%r.patt.5fe +// CHECK:STDOUT: %r.param_patt.loc40_72.2 => constants.%r.param_patt.a4b // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc40 => constants.%complete_type.357 -// CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.cf3 -// CHECK:STDOUT: %Iterate.facet.loc44_29.5 => constants.%Iterate.facet.180 -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.9da -// CHECK:STDOUT: %.loc44_29.20 => constants.%.1e1 -// CHECK:STDOUT: %impl.elem2.loc44_29.2 => constants.%T.as_type.as.Iterate.impl.NewCursor.04f -// CHECK:STDOUT: %specific_impl_fn.loc44_29.4 => constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn.2ae -// CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.305 -// CHECK:STDOUT: %as_type => constants.%tuple.type.829 -// CHECK:STDOUT: %require_complete.1 => constants.%complete_type.94f -// CHECK:STDOUT: %ptr => constants.%ptr.d6b -// CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.171 -// CHECK:STDOUT: %.loc44_29.21 => constants.%.c4e -// CHECK:STDOUT: %impl.elem3.loc44_29.2 => constants.%T.as_type.as.Iterate.impl.Next.6bb -// CHECK:STDOUT: %specific_impl_fn.loc44_29.5 => constants.%T.as_type.as.Iterate.impl.Next.specific_fn.b6b -// CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.c89 -// CHECK:STDOUT: %.loc44_29.22 => constants.%.e8a +// CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.747 +// CHECK:STDOUT: %Iterate.facet.loc44_33.5 => constants.%Iterate.facet.68a +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.e9c +// CHECK:STDOUT: %.loc44_33.20 => constants.%.cbf +// CHECK:STDOUT: %impl.elem2.loc44_33.2 => constants.%T.as_type.as.Iterate.impl.NewCursor.136 +// CHECK:STDOUT: %specific_impl_fn.loc44_33.4 => constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn.7b5 +// CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.2c1 +// CHECK:STDOUT: %as_type => constants.%tuple.type.b18 +// CHECK:STDOUT: %require_complete.1 => constants.%complete_type.bfe +// CHECK:STDOUT: %ptr => constants.%ptr.3ce +// CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.a94 +// CHECK:STDOUT: %.loc44_33.21 => constants.%.922 +// CHECK:STDOUT: %impl.elem3.loc44_33.2 => constants.%T.as_type.as.Iterate.impl.Next.31b +// CHECK:STDOUT: %specific_impl_fn.loc44_33.5 => constants.%T.as_type.as.Iterate.impl.Next.specific_fn.a81 +// CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.188 +// CHECK:STDOUT: %.loc44_33.22 => constants.%.082 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.df9cc1.8 -// CHECK:STDOUT: %impl.elem0.loc44_29.2 => constants.%Destroy.Op.1a2547.8 -// CHECK:STDOUT: %specific_impl_fn.loc44_29.6 => constants.%Destroy.Op.1a2547.8 +// CHECK:STDOUT: %impl.elem0.loc44_33.2 => constants.%Destroy.Op.1a2547.8 +// CHECK:STDOUT: %specific_impl_fn.loc44_33.6 => constants.%Destroy.Op.1a2547.8 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @TestIterate(constants.%facet_value.d5f) { +// CHECK:STDOUT: specific @TestIterate(constants.%facet_value.1e4) { // CHECK:STDOUT: %R.patt.loc40_17.2 => constants.%R.patt -// CHECK:STDOUT: %R.loc40_17.1 => constants.%facet_value.d5f -// CHECK:STDOUT: %R.as_type.loc40_75.1 => constants.%ConstRange -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.0ba -// CHECK:STDOUT: %r.patt.loc40_73.2 => constants.%r.patt.36a -// CHECK:STDOUT: %r.param_patt.loc40_68.2 => constants.%r.param_patt.501 +// CHECK:STDOUT: %R.loc40_17.1 => constants.%facet_value.1e4 +// CHECK:STDOUT: %R.as_type.loc40_79.1 => constants.%DiffConstRange +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.7dd +// CHECK:STDOUT: %r.patt.loc40_77.2 => constants.%r.patt.9c0 +// CHECK:STDOUT: %r.param_patt.loc40_72.2 => constants.%r.param_patt.992 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc40 => constants.%complete_type.357 -// CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.c1f -// CHECK:STDOUT: %Iterate.facet.loc44_29.5 => constants.%Iterate.facet.f80 -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.cd5 -// CHECK:STDOUT: %.loc44_29.20 => constants.%.e96 -// CHECK:STDOUT: %impl.elem2.loc44_29.2 => constants.%T.as_type.as.Iterate.impl.NewCursor.c2e -// CHECK:STDOUT: %specific_impl_fn.loc44_29.4 => constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn.c09 -// CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.e08 -// CHECK:STDOUT: %as_type => constants.%tuple.type.99f -// CHECK:STDOUT: %require_complete.1 => constants.%complete_type.dea -// CHECK:STDOUT: %ptr => constants.%ptr.2f7 -// CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.1e9 -// CHECK:STDOUT: %.loc44_29.21 => constants.%.5b1 -// CHECK:STDOUT: %impl.elem3.loc44_29.2 => constants.%T.as_type.as.Iterate.impl.Next.760 -// CHECK:STDOUT: %specific_impl_fn.loc44_29.5 => constants.%T.as_type.as.Iterate.impl.Next.specific_fn.586 -// CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.e30 -// CHECK:STDOUT: %.loc44_29.22 => constants.%.987 +// CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.f7f +// CHECK:STDOUT: %Iterate.facet.loc44_33.5 => constants.%Iterate.facet.608 +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.185 +// CHECK:STDOUT: %.loc44_33.20 => constants.%.f70 +// CHECK:STDOUT: %impl.elem2.loc44_33.2 => constants.%T.as_type.as.Iterate.impl.NewCursor.1a9 +// CHECK:STDOUT: %specific_impl_fn.loc44_33.4 => constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn.f9d +// CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.1ed +// CHECK:STDOUT: %as_type => constants.%tuple.type.df5 +// CHECK:STDOUT: %require_complete.1 => constants.%complete_type.ad6 +// CHECK:STDOUT: %ptr => constants.%ptr.310 +// CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.f38 +// CHECK:STDOUT: %.loc44_33.21 => constants.%.802 +// CHECK:STDOUT: %impl.elem3.loc44_33.2 => constants.%T.as_type.as.Iterate.impl.Next.59a +// CHECK:STDOUT: %specific_impl_fn.loc44_33.5 => constants.%T.as_type.as.Iterate.impl.Next.specific_fn.2ac +// CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.a81 +// CHECK:STDOUT: %.loc44_33.22 => constants.%.471 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.df9cc1.9 -// CHECK:STDOUT: %impl.elem0.loc44_29.2 => constants.%Destroy.Op.1a2547.9 -// CHECK:STDOUT: %specific_impl_fn.loc44_29.6 => constants.%Destroy.Op.1a2547.9 +// CHECK:STDOUT: %impl.elem0.loc44_33.2 => constants.%Destroy.Op.1a2547.9 +// CHECK:STDOUT: %specific_impl_fn.loc44_33.6 => constants.%Destroy.Op.1a2547.9 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- method_overloads.carbon @@ -2091,64 +2091,64 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Destroy.lookup_impl_witness.35816c.2: = lookup_impl_witness %impl.elem0.493765.2, @Destroy [symbolic] // CHECK:STDOUT: %Copy.lookup_impl_witness.167: = lookup_impl_witness %impl.elem0.493765.2, @Copy [symbolic] // CHECK:STDOUT: %facet_value.f93: %facet_type.f48 = facet_value %impl.elem0.493765.2, (%Destroy.lookup_impl_witness.35816c.2, %Copy.lookup_impl_witness.167) [symbolic] -// CHECK:STDOUT: %ValueType: type = class_type @ValueType [concrete] +// CHECK:STDOUT: %OverloadValueType: type = class_type @OverloadValueType [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] -// CHECK:STDOUT: %pattern_type.e9f: type = pattern_type %ValueType [concrete] -// CHECK:STDOUT: %ValueType.cpp_destructor.type: type = fn_type @ValueType.cpp_destructor [concrete] -// CHECK:STDOUT: %ValueType.cpp_destructor: %ValueType.cpp_destructor.type = struct_value () [concrete] -// CHECK:STDOUT: %ValueType.Op.type.83af6e.1: type = fn_type @ValueType.Op.1 [concrete] -// CHECK:STDOUT: %ValueType.Op.4dca31.1: %ValueType.Op.type.83af6e.1 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.e7a31c.1: = custom_witness (%ValueType.Op.4dca31.1), @Destroy [concrete] -// CHECK:STDOUT: %ValueType.Op.type.83af6e.2: type = fn_type @ValueType.Op.2 [concrete] -// CHECK:STDOUT: %ValueType.Op.4dca31.2: %ValueType.Op.type.83af6e.2 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.d0da43.1: = custom_witness (%ValueType.Op.4dca31.2), @Copy [concrete] -// CHECK:STDOUT: %facet_value.bf1: %facet_type.f48 = facet_value %ValueType, (%custom_witness.e7a31c.1, %custom_witness.d0da43.1) [concrete] +// CHECK:STDOUT: %pattern_type.804: type = pattern_type %OverloadValueType [concrete] +// CHECK:STDOUT: %OverloadValueType.cpp_destructor.type: type = fn_type @OverloadValueType.cpp_destructor [concrete] +// CHECK:STDOUT: %OverloadValueType.cpp_destructor: %OverloadValueType.cpp_destructor.type = struct_value () [concrete] +// CHECK:STDOUT: %OverloadValueType.Op.type.83af6e.1: type = fn_type @OverloadValueType.Op.1 [concrete] +// CHECK:STDOUT: %OverloadValueType.Op.4dca31.1: %OverloadValueType.Op.type.83af6e.1 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.e7a31c.1: = custom_witness (%OverloadValueType.Op.4dca31.1), @Destroy [concrete] +// CHECK:STDOUT: %OverloadValueType.Op.type.83af6e.2: type = fn_type @OverloadValueType.Op.2 [concrete] +// CHECK:STDOUT: %OverloadValueType.Op.4dca31.2: %OverloadValueType.Op.type.83af6e.2 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.d0da43.1: = custom_witness (%OverloadValueType.Op.4dca31.2), @Copy [concrete] +// CHECK:STDOUT: %facet_value.437: %facet_type.f48 = facet_value %OverloadValueType, (%custom_witness.e7a31c.1, %custom_witness.d0da43.1) [concrete] // CHECK:STDOUT: %Iterate.lookup_impl_witness.1d8: = lookup_impl_witness %.Self.500, @Iterate [symbolic_self] // CHECK:STDOUT: %impl.elem0.294: %facet_type.f48 = impl_witness_access %Iterate.lookup_impl_witness.1d8, element0 [symbolic_self] -// CHECK:STDOUT: %Iterate_where.type.502: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.bf1> [concrete] -// CHECK:STDOUT: %pattern_type.4c7: type = pattern_type %Iterate_where.type.502 [concrete] -// CHECK:STDOUT: %R.patt: %pattern_type.4c7 = symbolic_binding_pattern R, 0 [symbolic] -// CHECK:STDOUT: %R: %Iterate_where.type.502 = symbolic_binding R, 0 [symbolic] +// CHECK:STDOUT: %Iterate_where.type.494: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.437> [concrete] +// CHECK:STDOUT: %pattern_type.aac: type = pattern_type %Iterate_where.type.494 [concrete] +// CHECK:STDOUT: %R.patt: %pattern_type.aac = symbolic_binding_pattern R, 0 [symbolic] +// CHECK:STDOUT: %R: %Iterate_where.type.494 = symbolic_binding R, 0 [symbolic] // CHECK:STDOUT: %R.as_type: type = facet_access_type %R [symbolic] -// CHECK:STDOUT: %pattern_type.d2d: type = pattern_type %R.as_type [symbolic] -// CHECK:STDOUT: %r.patt.d27: %pattern_type.d2d = ref_binding_pattern r [symbolic] -// CHECK:STDOUT: %r.param_patt.a41: %pattern_type.d2d = var_param_pattern %r.patt.d27 [symbolic] -// CHECK:STDOUT: %_.patt.8ae: %pattern_type.e9f = value_binding_pattern _ [concrete] -// CHECK:STDOUT: %Iterate.lookup_impl_witness.06b: = lookup_impl_witness %R, @Iterate [symbolic] -// CHECK:STDOUT: %Iterate.facet.dbf: %Iterate.type = facet_value %R.as_type, (%Iterate.lookup_impl_witness.06b) [symbolic] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.1b1: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.dbf) [symbolic] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type.705: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.dbf) [symbolic] -// CHECK:STDOUT: %.1c2: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.1b1, %Iterate.facet.dbf [symbolic] -// CHECK:STDOUT: %impl.elem2.49b: %.1c2 = impl_witness_access %Iterate.lookup_impl_witness.06b, element2 [symbolic] -// CHECK:STDOUT: %impl.elem1.3cf: %Destroy.type = impl_witness_access %Iterate.lookup_impl_witness.06b, element1 [symbolic] -// CHECK:STDOUT: %as_type.dbb: type = facet_access_type %impl.elem1.3cf [symbolic] -// CHECK:STDOUT: %specific_impl_fn.6f3: = specific_impl_function %impl.elem2.49b, @Iterate.WithSelf.NewCursor(%Iterate.facet.dbf) [symbolic] -// CHECK:STDOUT: %ptr.bde: type = ptr_type %as_type.dbb [symbolic] -// CHECK:STDOUT: %.bd3: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.705, %Iterate.facet.dbf [symbolic] -// CHECK:STDOUT: %impl.elem3.d57: %.bd3 = impl_witness_access %Iterate.lookup_impl_witness.06b, element3 [symbolic] -// CHECK:STDOUT: %DefaultOptionalStorage.84c: type = class_type @DefaultOptionalStorage, @DefaultOptionalStorage(%facet_value.bf1) [concrete] -// CHECK:STDOUT: %OptionalStorage.impl_witness.9b5: = impl_witness imports.%OptionalStorage.impl_witness_table.460, @T.as_type.as.OptionalStorage.impl(%facet_value.bf1) [concrete] -// CHECK:STDOUT: %OptionalStorage.facet.a0c: %OptionalStorage.type = facet_value %ValueType, (%OptionalStorage.impl_witness.9b5) [concrete] -// CHECK:STDOUT: %Optional.3c5: type = class_type @Optional, @Optional(%OptionalStorage.facet.a0c) [concrete] -// CHECK:STDOUT: %specific_impl_fn.fca: = specific_impl_function %impl.elem3.d57, @Iterate.WithSelf.Next(%Iterate.facet.dbf) [symbolic] -// CHECK:STDOUT: %Optional.HasValue.type.cca: type = fn_type @Optional.HasValue, @Optional(%OptionalStorage.facet.a0c) [concrete] -// CHECK:STDOUT: %Optional.HasValue.6d0: %Optional.HasValue.type.cca = struct_value () [concrete] -// CHECK:STDOUT: %Optional.Get.type.c7a: type = fn_type @Optional.Get, @Optional(%OptionalStorage.facet.a0c) [concrete] -// CHECK:STDOUT: %Optional.Get.6ac: %Optional.Get.type.c7a = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.facet.4e5: %Destroy.type = facet_value %ValueType, (%custom_witness.e7a31c.1) [concrete] -// CHECK:STDOUT: %MaybeUnformed.02e: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.4e5) [concrete] -// CHECK:STDOUT: %.98c: type = maybe_unformed_type %ValueType [concrete] -// CHECK:STDOUT: %struct_type.value.has_value.761: type = struct_type {.value: %MaybeUnformed.02e, .has_value: bool} [concrete] -// CHECK:STDOUT: %Optional.HasValue.specific_fn.8b5: = specific_function %Optional.HasValue.6d0, @Optional.HasValue(%OptionalStorage.facet.a0c) [concrete] -// CHECK:STDOUT: %Optional.Get.specific_fn.ee5: = specific_function %Optional.Get.6ac, @Optional.Get(%OptionalStorage.facet.a0c) [concrete] -// CHECK:STDOUT: %Destroy.Op.type.1d8f74.7: type = fn_type @Destroy.Op.loc27_29.6 [concrete] +// CHECK:STDOUT: %pattern_type.def: type = pattern_type %R.as_type [symbolic] +// CHECK:STDOUT: %r.patt.bb3: %pattern_type.def = ref_binding_pattern r [symbolic] +// CHECK:STDOUT: %r.param_patt.9b2: %pattern_type.def = var_param_pattern %r.patt.bb3 [symbolic] +// CHECK:STDOUT: %_.patt.a10: %pattern_type.804 = value_binding_pattern _ [concrete] +// CHECK:STDOUT: %Iterate.lookup_impl_witness.eca: = lookup_impl_witness %R, @Iterate [symbolic] +// CHECK:STDOUT: %Iterate.facet.bb8: %Iterate.type = facet_value %R.as_type, (%Iterate.lookup_impl_witness.eca) [symbolic] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.c6e: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.bb8) [symbolic] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type.76f: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.bb8) [symbolic] +// CHECK:STDOUT: %.426: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.c6e, %Iterate.facet.bb8 [symbolic] +// CHECK:STDOUT: %impl.elem2.82f: %.426 = impl_witness_access %Iterate.lookup_impl_witness.eca, element2 [symbolic] +// CHECK:STDOUT: %impl.elem1.424: %Destroy.type = impl_witness_access %Iterate.lookup_impl_witness.eca, element1 [symbolic] +// CHECK:STDOUT: %as_type.810: type = facet_access_type %impl.elem1.424 [symbolic] +// CHECK:STDOUT: %specific_impl_fn.5f9: = specific_impl_function %impl.elem2.82f, @Iterate.WithSelf.NewCursor(%Iterate.facet.bb8) [symbolic] +// CHECK:STDOUT: %ptr.a41: type = ptr_type %as_type.810 [symbolic] +// CHECK:STDOUT: %.474: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.76f, %Iterate.facet.bb8 [symbolic] +// CHECK:STDOUT: %impl.elem3.316: %.474 = impl_witness_access %Iterate.lookup_impl_witness.eca, element3 [symbolic] +// CHECK:STDOUT: %DefaultOptionalStorage.799: type = class_type @DefaultOptionalStorage, @DefaultOptionalStorage(%facet_value.437) [concrete] +// CHECK:STDOUT: %OptionalStorage.impl_witness.1e9: = impl_witness imports.%OptionalStorage.impl_witness_table.460, @T.as_type.as.OptionalStorage.impl(%facet_value.437) [concrete] +// CHECK:STDOUT: %OptionalStorage.facet.496: %OptionalStorage.type = facet_value %OverloadValueType, (%OptionalStorage.impl_witness.1e9) [concrete] +// CHECK:STDOUT: %Optional.4e9: type = class_type @Optional, @Optional(%OptionalStorage.facet.496) [concrete] +// CHECK:STDOUT: %specific_impl_fn.754: = specific_impl_function %impl.elem3.316, @Iterate.WithSelf.Next(%Iterate.facet.bb8) [symbolic] +// CHECK:STDOUT: %Optional.HasValue.type.59f: type = fn_type @Optional.HasValue, @Optional(%OptionalStorage.facet.496) [concrete] +// CHECK:STDOUT: %Optional.HasValue.91a: %Optional.HasValue.type.59f = struct_value () [concrete] +// CHECK:STDOUT: %Optional.Get.type.cab: type = fn_type @Optional.Get, @Optional(%OptionalStorage.facet.496) [concrete] +// CHECK:STDOUT: %Optional.Get.2d3: %Optional.Get.type.cab = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.facet.7ac: %Destroy.type = facet_value %OverloadValueType, (%custom_witness.e7a31c.1) [concrete] +// CHECK:STDOUT: %MaybeUnformed.59c: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.7ac) [concrete] +// CHECK:STDOUT: %.8a2: type = maybe_unformed_type %OverloadValueType [concrete] +// CHECK:STDOUT: %struct_type.value.has_value.3e8: type = struct_type {.value: %MaybeUnformed.59c, .has_value: bool} [concrete] +// CHECK:STDOUT: %Optional.HasValue.specific_fn.bf1: = specific_function %Optional.HasValue.91a, @Optional.HasValue(%OptionalStorage.facet.496) [concrete] +// CHECK:STDOUT: %Optional.Get.specific_fn.548: = specific_function %Optional.Get.2d3, @Optional.Get(%OptionalStorage.facet.496) [concrete] +// CHECK:STDOUT: %Destroy.Op.type.1d8f74.7: type = fn_type @Destroy.Op.loc27_37.6 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.7: %Destroy.Op.type.1d8f74.7 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.lookup_impl_witness.b29: = lookup_impl_witness %impl.elem1.3cf, @Destroy [symbolic] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type.d9c: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%impl.elem1.3cf) [symbolic] -// CHECK:STDOUT: %.98a: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.d9c, %impl.elem1.3cf [symbolic] -// CHECK:STDOUT: %impl.elem0.81b: %.98a = impl_witness_access %Destroy.lookup_impl_witness.b29, element0 [symbolic] -// CHECK:STDOUT: %specific_impl_fn.bf3: = specific_impl_function %impl.elem0.81b, @Destroy.WithSelf.Op(%impl.elem1.3cf) [symbolic] +// CHECK:STDOUT: %Destroy.lookup_impl_witness.d2d: = lookup_impl_witness %impl.elem1.424, @Destroy [symbolic] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type.9de: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%impl.elem1.424) [symbolic] +// CHECK:STDOUT: %.696: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.9de, %impl.elem1.424 [symbolic] +// CHECK:STDOUT: %impl.elem0.18a: %.696 = impl_witness_access %Destroy.lookup_impl_witness.d2d, element0 [symbolic] +// CHECK:STDOUT: %specific_impl_fn.b04: = specific_impl_function %impl.elem0.18a, @Destroy.WithSelf.Op(%impl.elem1.424) [symbolic] // CHECK:STDOUT: %Range: type = class_type @Range [concrete] // CHECK:STDOUT: %pattern_type.23f: type = pattern_type %Range [concrete] // CHECK:STDOUT: %Iterator: type = class_type @Iterator.1 [concrete] @@ -2156,10 +2156,10 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Range.Begin: %Range.Begin.type = struct_value () [concrete] // CHECK:STDOUT: %Range.End.type: type = fn_type @Range.End [concrete] // CHECK:STDOUT: %Range.End: %Range.End.type = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.7d7: = custom_witness (%Iterator, %Iterator, %Range.Begin, %Range.End), @CppRangeForIterate [concrete] +// CHECK:STDOUT: %custom_witness.090: = custom_witness (%Iterator, %Iterator, %Range.Begin, %Range.End), @CppRangeForIterate [concrete] // CHECK:STDOUT: %Iterator.Op.type.4232e0.1: type = fn_type @Iterator.Op.1 [concrete] // CHECK:STDOUT: %Iterator.Op.e8caec.1: %Iterator.Op.type.4232e0.1 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.773: = custom_witness (%ValueType, %Iterator.Op.e8caec.1), @CppUnsafeDeref [concrete] +// CHECK:STDOUT: %custom_witness.6bd: = custom_witness (%OverloadValueType, %Iterator.Op.e8caec.1), @CppUnsafeDeref [concrete] // CHECK:STDOUT: %Iterator.Op.type.4232e0.2: type = fn_type @Iterator.Op.2 [concrete] // CHECK:STDOUT: %Iterator.Op.e8caec.2: %Iterator.Op.type.4232e0.2 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.f4a: = custom_witness (%Iterator.Op.e8caec.2), @Destroy [concrete] @@ -2170,37 +2170,37 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Equal: %Equal.type = struct_value () [concrete] // CHECK:STDOUT: %NotEqual.type: type = fn_type @NotEqual [concrete] // CHECK:STDOUT: %NotEqual: %NotEqual.type = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.297: = custom_witness (%Equal, %NotEqual), @EqWith, @EqWith(%Iterator) [concrete] -// CHECK:STDOUT: %facet_value.f81: %CppRange_where.type.d682d6.1 = facet_value %Range, (%custom_witness.e7a31c.1, %custom_witness.d0da43.1, %custom_witness.7d7, %custom_witness.f4a, %custom_witness.773, %custom_witness.716, %custom_witness.297) [concrete] -// CHECK:STDOUT: %tuple.type.2ad: type = tuple_type (%Iterator, %Iterator) [concrete] +// CHECK:STDOUT: %custom_witness.617: = custom_witness (%Equal, %NotEqual), @EqWith, @EqWith(%Iterator) [concrete] +// CHECK:STDOUT: %facet_value.cbe: %CppRange_where.type.d682d6.1 = facet_value %Range, (%custom_witness.e7a31c.1, %custom_witness.d0da43.1, %custom_witness.090, %custom_witness.f4a, %custom_witness.6bd, %custom_witness.716, %custom_witness.617) [concrete] +// CHECK:STDOUT: %tuple.type.9ef: type = tuple_type (%Iterator, %Iterator) [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.8: type = fn_type @Destroy.Op.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.8: %Destroy.Op.type.1d8f74.8 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.df9cc1.8: = custom_witness (%Destroy.Op.1a2547.8), @Destroy [concrete] -// CHECK:STDOUT: %Destroy.facet.301: %Destroy.type = facet_value %tuple.type.2ad, (%custom_witness.df9cc1.8) [concrete] -// CHECK:STDOUT: %Iterate.impl_witness.725: = impl_witness imports.%Iterate.impl_witness_table.121, @T.as_type.as.Iterate.impl(%facet_value.f81) [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.type.7da: type = fn_type @T.as_type.as.Iterate.impl.NewCursor, @T.as_type.as.Iterate.impl(%facet_value.f81) [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.568: %T.as_type.as.Iterate.impl.NewCursor.type.7da = struct_value () [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.type.6ab: type = fn_type @T.as_type.as.Iterate.impl.Next, @T.as_type.as.Iterate.impl(%facet_value.f81) [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.200: %T.as_type.as.Iterate.impl.Next.type.6ab = struct_value () [concrete] -// CHECK:STDOUT: %Iterate.facet.53e: %Iterate.type = facet_value %Range, (%Iterate.impl_witness.725) [concrete] -// CHECK:STDOUT: %facet_value.4a4: %Iterate_where.type.502 = facet_value %Range, (%Iterate.impl_witness.725) [concrete] +// CHECK:STDOUT: %Destroy.facet.15b: %Destroy.type = facet_value %tuple.type.9ef, (%custom_witness.df9cc1.8) [concrete] +// CHECK:STDOUT: %Iterate.impl_witness.175: = impl_witness imports.%Iterate.impl_witness_table.121, @T.as_type.as.Iterate.impl(%facet_value.cbe) [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.type.72c: type = fn_type @T.as_type.as.Iterate.impl.NewCursor, @T.as_type.as.Iterate.impl(%facet_value.cbe) [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.036: %T.as_type.as.Iterate.impl.NewCursor.type.72c = struct_value () [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.type.fb2: type = fn_type @T.as_type.as.Iterate.impl.Next, @T.as_type.as.Iterate.impl(%facet_value.cbe) [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.751: %T.as_type.as.Iterate.impl.Next.type.fb2 = struct_value () [concrete] +// CHECK:STDOUT: %Iterate.facet.cc4: %Iterate.type = facet_value %Range, (%Iterate.impl_witness.175) [concrete] +// CHECK:STDOUT: %facet_value.3af: %Iterate_where.type.494 = facet_value %Range, (%Iterate.impl_witness.175) [concrete] // CHECK:STDOUT: %r.patt.b9f: %pattern_type.23f = ref_binding_pattern r [concrete] // CHECK:STDOUT: %r.param_patt.466: %pattern_type.23f = var_param_pattern %r.patt.b9f [concrete] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.11d: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.53e) [concrete] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type.51e: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.53e) [concrete] -// CHECK:STDOUT: %.649: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.11d, %Iterate.facet.53e [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.specific_fn: = specific_function %T.as_type.as.Iterate.impl.NewCursor.568, @T.as_type.as.Iterate.impl.NewCursor(%facet_value.f81) [concrete] -// CHECK:STDOUT: %ptr.851: type = ptr_type %tuple.type.2ad [concrete] -// CHECK:STDOUT: %.085: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.51e, %Iterate.facet.53e [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.specific_fn: = specific_function %T.as_type.as.Iterate.impl.Next.200, @T.as_type.as.Iterate.impl.Next(%facet_value.f81) [concrete] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type.d8b: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.301) [concrete] -// CHECK:STDOUT: %.f12: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.d8b, %Destroy.facet.301 [concrete] -// CHECK:STDOUT: %complete_type.e55: = complete_type_witness %tuple.type.2ad [concrete] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.a44: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.cc4) [concrete] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type.1f9: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.cc4) [concrete] +// CHECK:STDOUT: %.687: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.a44, %Iterate.facet.cc4 [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.specific_fn: = specific_function %T.as_type.as.Iterate.impl.NewCursor.036, @T.as_type.as.Iterate.impl.NewCursor(%facet_value.cbe) [concrete] +// CHECK:STDOUT: %ptr.b18: type = ptr_type %tuple.type.9ef [concrete] +// CHECK:STDOUT: %.79c: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.1f9, %Iterate.facet.cc4 [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.specific_fn: = specific_function %T.as_type.as.Iterate.impl.Next.751, @T.as_type.as.Iterate.impl.Next(%facet_value.cbe) [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type.fd5: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.15b) [concrete] +// CHECK:STDOUT: %.fb6: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.fd5, %Destroy.facet.15b [concrete] +// CHECK:STDOUT: %complete_type.e35: = complete_type_witness %tuple.type.9ef [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .ValueType = %ValueType.decl +// CHECK:STDOUT: .OverloadValueType = %OverloadValueType.decl // CHECK:STDOUT: .Range = %Range.decl // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } @@ -2218,8 +2218,8 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Core.import_ref.fd1: @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.NewCursor.type (%T.as_type.as.Iterate.impl.NewCursor.type.953) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.NewCursor (constants.%T.as_type.as.Iterate.impl.NewCursor.544)] // CHECK:STDOUT: %Core.import_ref.273: @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.Next.type (%T.as_type.as.Iterate.impl.Next.type.b36) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.Next (constants.%T.as_type.as.Iterate.impl.Next.d6b)] // CHECK:STDOUT: %Iterate.impl_witness_table.121 = impl_witness_table (%Core.import_ref.eef, %Core.import_ref.fcc, %Core.import_ref.fd1, %Core.import_ref.273), @T.as_type.as.Iterate.impl [concrete] -// CHECK:STDOUT: %ValueType.decl: type = class_decl @ValueType [concrete = constants.%ValueType] {} {} -// CHECK:STDOUT: %ValueType.cpp_destructor.decl: %ValueType.cpp_destructor.type = fn_decl @ValueType.cpp_destructor [concrete = constants.%ValueType.cpp_destructor] { +// CHECK:STDOUT: %OverloadValueType.decl: type = class_decl @OverloadValueType [concrete = constants.%OverloadValueType] {} {} +// CHECK:STDOUT: %OverloadValueType.cpp_destructor.decl: %OverloadValueType.cpp_destructor.type = fn_decl @OverloadValueType.cpp_destructor [concrete = constants.%OverloadValueType.cpp_destructor] { // CHECK:STDOUT: // CHECK:STDOUT: } { // CHECK:STDOUT: @@ -2227,137 +2227,137 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Range.decl: type = class_decl @Range [concrete = constants.%Range] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @TestIterate(%R.loc25_17.2: %Iterate_where.type.502) { +// CHECK:STDOUT: generic fn @TestIterate(%R.loc25_17.2: %Iterate_where.type.494) { // CHECK:STDOUT: // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: -// CHECK:STDOUT: %Iterate.lookup_impl_witness: = lookup_impl_witness %R.loc25_17.1, @Iterate [symbolic = %Iterate.lookup_impl_witness (constants.%Iterate.lookup_impl_witness.06b)] -// CHECK:STDOUT: %Iterate.facet.loc27_29.5: %Iterate.type = facet_value %R.as_type.loc25_75.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc27_29.5 (constants.%Iterate.facet.dbf)] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc27_29.5) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.1b1)] -// CHECK:STDOUT: %.loc27_29.20: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc27_29.5 [symbolic = %.loc27_29.20 (constants.%.1c2)] -// CHECK:STDOUT: %impl.elem2.loc27_29.2: @TestIterate.%.loc27_29.20 (%.1c2) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc27_29.2 (constants.%impl.elem2.49b)] -// CHECK:STDOUT: %specific_impl_fn.loc27_29.4: = specific_impl_function %impl.elem2.loc27_29.2, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc27_29.5) [symbolic = %specific_impl_fn.loc27_29.4 (constants.%specific_impl_fn.6f3)] +// CHECK:STDOUT: %Iterate.lookup_impl_witness: = lookup_impl_witness %R.loc25_17.1, @Iterate [symbolic = %Iterate.lookup_impl_witness (constants.%Iterate.lookup_impl_witness.eca)] +// CHECK:STDOUT: %Iterate.facet.loc27_37.5: %Iterate.type = facet_value %R.as_type.loc25_83.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc27_37.5 (constants.%Iterate.facet.bb8)] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc27_37.5) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.c6e)] +// CHECK:STDOUT: %.loc27_37.20: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc27_37.5 [symbolic = %.loc27_37.20 (constants.%.426)] +// CHECK:STDOUT: %impl.elem2.loc27_37.2: @TestIterate.%.loc27_37.20 (%.426) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc27_37.2 (constants.%impl.elem2.82f)] +// CHECK:STDOUT: %specific_impl_fn.loc27_37.4: = specific_impl_function %impl.elem2.loc27_37.2, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc27_37.5) [symbolic = %specific_impl_fn.loc27_37.4 (constants.%specific_impl_fn.5f9)] // CHECK:STDOUT: -// CHECK:STDOUT: %ptr: type = ptr_type %as_type [symbolic = %ptr (constants.%ptr.bde)] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc27_29.5) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.705)] -// CHECK:STDOUT: %.loc27_29.21: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc27_29.5 [symbolic = %.loc27_29.21 (constants.%.bd3)] -// CHECK:STDOUT: %impl.elem3.loc27_29.2: @TestIterate.%.loc27_29.21 (%.bd3) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc27_29.2 (constants.%impl.elem3.d57)] -// CHECK:STDOUT: %specific_impl_fn.loc27_29.5: = specific_impl_function %impl.elem3.loc27_29.2, @Iterate.WithSelf.Next(%Iterate.facet.loc27_29.5) [symbolic = %specific_impl_fn.loc27_29.5 (constants.%specific_impl_fn.fca)] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%impl.elem1) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.d9c)] -// CHECK:STDOUT: %.loc27_29.22: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %impl.elem1 [symbolic = %.loc27_29.22 (constants.%.98a)] -// CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %impl.elem1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.b29)] -// CHECK:STDOUT: %impl.elem0.loc27_29.2: @TestIterate.%.loc27_29.22 (%.98a) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc27_29.2 (constants.%impl.elem0.81b)] -// CHECK:STDOUT: %specific_impl_fn.loc27_29.6: = specific_impl_function %impl.elem0.loc27_29.2, @Destroy.WithSelf.Op(%impl.elem1) [symbolic = %specific_impl_fn.loc27_29.6 (constants.%specific_impl_fn.bf3)] +// CHECK:STDOUT: %ptr: type = ptr_type %as_type [symbolic = %ptr (constants.%ptr.a41)] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc27_37.5) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.76f)] +// CHECK:STDOUT: %.loc27_37.21: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc27_37.5 [symbolic = %.loc27_37.21 (constants.%.474)] +// CHECK:STDOUT: %impl.elem3.loc27_37.2: @TestIterate.%.loc27_37.21 (%.474) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc27_37.2 (constants.%impl.elem3.316)] +// CHECK:STDOUT: %specific_impl_fn.loc27_37.5: = specific_impl_function %impl.elem3.loc27_37.2, @Iterate.WithSelf.Next(%Iterate.facet.loc27_37.5) [symbolic = %specific_impl_fn.loc27_37.5 (constants.%specific_impl_fn.754)] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%impl.elem1) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.9de)] +// CHECK:STDOUT: %.loc27_37.22: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %impl.elem1 [symbolic = %.loc27_37.22 (constants.%.696)] +// CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %impl.elem1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.d2d)] +// CHECK:STDOUT: %impl.elem0.loc27_37.2: @TestIterate.%.loc27_37.22 (%.696) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc27_37.2 (constants.%impl.elem0.18a)] +// CHECK:STDOUT: %specific_impl_fn.loc27_37.6: = specific_impl_function %impl.elem0.loc27_37.2, @Destroy.WithSelf.Op(%impl.elem1) [symbolic = %specific_impl_fn.loc27_37.6 (constants.%specific_impl_fn.b04)] // CHECK:STDOUT: -// CHECK:STDOUT: fn(%r.param: ref @TestIterate.%R.as_type.loc25_75.1 (%R.as_type)) { +// CHECK:STDOUT: fn(%r.param: ref @TestIterate.%R.as_type.loc25_83.1 (%R.as_type)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt: %pattern_type.e9f = value_binding_pattern _ [concrete = constants.%_.patt.8ae] +// CHECK:STDOUT: %_.patt: %pattern_type.804 = value_binding_pattern _ [concrete = constants.%_.patt.a10] // CHECK:STDOUT: } -// CHECK:STDOUT: %r.ref: ref @TestIterate.%R.as_type.loc25_75.1 (%R.as_type) = name_ref r, %r -// CHECK:STDOUT: %impl.elem2.loc27_29.1: @TestIterate.%.loc27_29.20 (%.1c2) = impl_witness_access constants.%Iterate.lookup_impl_witness.06b, element2 [symbolic = %impl.elem2.loc27_29.2 (constants.%impl.elem2.49b)] -// CHECK:STDOUT: %bound_method.loc27_29.1: = bound_method %r.ref, %impl.elem2.loc27_29.1 -// CHECK:STDOUT: %Iterate.facet.loc27_29.1: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.06b) [symbolic = %Iterate.facet.loc27_29.5 (constants.%Iterate.facet.dbf)] -// CHECK:STDOUT: %.loc27_29.1: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc27_29.1 [symbolic = %Iterate.facet.loc27_29.5 (constants.%Iterate.facet.dbf)] -// CHECK:STDOUT: %Iterate.facet.loc27_29.2: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.06b) [symbolic = %Iterate.facet.loc27_29.5 (constants.%Iterate.facet.dbf)] -// CHECK:STDOUT: %.loc27_29.2: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc27_29.2 [symbolic = %Iterate.facet.loc27_29.5 (constants.%Iterate.facet.dbf)] -// CHECK:STDOUT: %specific_impl_fn.loc27_29.1: = specific_impl_function %impl.elem2.loc27_29.1, @Iterate.WithSelf.NewCursor(constants.%Iterate.facet.dbf) [symbolic = %specific_impl_fn.loc27_29.4 (constants.%specific_impl_fn.6f3)] -// CHECK:STDOUT: %bound_method.loc27_29.2: = bound_method %r.ref, %specific_impl_fn.loc27_29.1 -// CHECK:STDOUT: %var: ref @TestIterate.%as_type (%as_type.dbb) = var_storage invalid -// CHECK:STDOUT: %.loc27_28.1: @TestIterate.%R.as_type.loc25_75.1 (%R.as_type) = acquire_value %r.ref -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.call: init @TestIterate.%as_type (%as_type.dbb) to %var = call %bound_method.loc27_29.2(%.loc27_28.1) +// CHECK:STDOUT: %r.ref: ref @TestIterate.%R.as_type.loc25_83.1 (%R.as_type) = name_ref r, %r +// CHECK:STDOUT: %impl.elem2.loc27_37.1: @TestIterate.%.loc27_37.20 (%.426) = impl_witness_access constants.%Iterate.lookup_impl_witness.eca, element2 [symbolic = %impl.elem2.loc27_37.2 (constants.%impl.elem2.82f)] +// CHECK:STDOUT: %bound_method.loc27_37.1: = bound_method %r.ref, %impl.elem2.loc27_37.1 +// CHECK:STDOUT: %Iterate.facet.loc27_37.1: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.eca) [symbolic = %Iterate.facet.loc27_37.5 (constants.%Iterate.facet.bb8)] +// CHECK:STDOUT: %.loc27_37.1: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc27_37.1 [symbolic = %Iterate.facet.loc27_37.5 (constants.%Iterate.facet.bb8)] +// CHECK:STDOUT: %Iterate.facet.loc27_37.2: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.eca) [symbolic = %Iterate.facet.loc27_37.5 (constants.%Iterate.facet.bb8)] +// CHECK:STDOUT: %.loc27_37.2: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc27_37.2 [symbolic = %Iterate.facet.loc27_37.5 (constants.%Iterate.facet.bb8)] +// CHECK:STDOUT: %specific_impl_fn.loc27_37.1: = specific_impl_function %impl.elem2.loc27_37.1, @Iterate.WithSelf.NewCursor(constants.%Iterate.facet.bb8) [symbolic = %specific_impl_fn.loc27_37.4 (constants.%specific_impl_fn.5f9)] +// CHECK:STDOUT: %bound_method.loc27_37.2: = bound_method %r.ref, %specific_impl_fn.loc27_37.1 +// CHECK:STDOUT: %var: ref @TestIterate.%as_type (%as_type.810) = var_storage invalid +// CHECK:STDOUT: %.loc27_36.1: @TestIterate.%R.as_type.loc25_83.1 (%R.as_type) = acquire_value %r.ref +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.call: init @TestIterate.%as_type (%as_type.810) to %var = call %bound_method.loc27_37.2(%.loc27_36.1) // CHECK:STDOUT: assign %var, %Iterate.WithSelf.NewCursor.call // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.next: -// CHECK:STDOUT: %addr: @TestIterate.%ptr (%ptr.bde) = addr_of %var -// CHECK:STDOUT: %impl.elem3.loc27_29.1: @TestIterate.%.loc27_29.21 (%.bd3) = impl_witness_access constants.%Iterate.lookup_impl_witness.06b, element3 [symbolic = %impl.elem3.loc27_29.2 (constants.%impl.elem3.d57)] -// CHECK:STDOUT: %bound_method.loc27_29.3: = bound_method %r.ref, %impl.elem3.loc27_29.1 -// CHECK:STDOUT: %Iterate.facet.loc27_29.3: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.06b) [symbolic = %Iterate.facet.loc27_29.5 (constants.%Iterate.facet.dbf)] -// CHECK:STDOUT: %.loc27_29.3: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc27_29.3 [symbolic = %Iterate.facet.loc27_29.5 (constants.%Iterate.facet.dbf)] -// CHECK:STDOUT: %Iterate.facet.loc27_29.4: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.06b) [symbolic = %Iterate.facet.loc27_29.5 (constants.%Iterate.facet.dbf)] -// CHECK:STDOUT: %.loc27_29.4: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc27_29.4 [symbolic = %Iterate.facet.loc27_29.5 (constants.%Iterate.facet.dbf)] -// CHECK:STDOUT: %.loc27_29.5: %Destroy.type = converted constants.%as_type.dbb, constants.%impl.elem1.3cf [symbolic = %impl.elem1 (constants.%impl.elem1.3cf)] -// CHECK:STDOUT: %.loc27_29.6: %Destroy.type = converted constants.%as_type.dbb, constants.%impl.elem1.3cf [symbolic = %impl.elem1 (constants.%impl.elem1.3cf)] -// CHECK:STDOUT: %specific_impl_fn.loc27_29.2: = specific_impl_function %impl.elem3.loc27_29.1, @Iterate.WithSelf.Next(constants.%Iterate.facet.dbf) [symbolic = %specific_impl_fn.loc27_29.5 (constants.%specific_impl_fn.fca)] -// CHECK:STDOUT: %bound_method.loc27_29.4: = bound_method %r.ref, %specific_impl_fn.loc27_29.2 -// CHECK:STDOUT: %.loc27_29.7: ref %Optional.3c5 = temporary_storage -// CHECK:STDOUT: %.loc27_28.2: @TestIterate.%R.as_type.loc25_75.1 (%R.as_type) = acquire_value %r.ref -// CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.3c5 to %.loc27_29.7 = call %bound_method.loc27_29.4(%.loc27_28.2, %addr) -// CHECK:STDOUT: %.loc27_29.8: ref %Optional.3c5 = temporary %.loc27_29.7, %Iterate.WithSelf.Next.call -// CHECK:STDOUT: %.loc27_29.9: %Optional.HasValue.type.cca = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.a0c) [concrete = constants.%Optional.HasValue.6d0] -// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.cca = name_ref HasValue, %.loc27_29.9 [concrete = constants.%Optional.HasValue.6d0] -// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc27_29.8, %HasValue.ref -// CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.a0c) [concrete = constants.%Optional.HasValue.specific_fn.8b5] -// CHECK:STDOUT: %bound_method.loc27_29.5: = bound_method %.loc27_29.8, %Optional.HasValue.specific_fn -// CHECK:STDOUT: %.loc27_29.10: %Optional.3c5 = acquire_value %.loc27_29.8 -// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc27_29.5(%.loc27_29.10) -// CHECK:STDOUT: %.loc27_29.11: bool = value_of_initializer %Optional.HasValue.call -// CHECK:STDOUT: %.loc27_29.12: bool = converted %Optional.HasValue.call, %.loc27_29.11 -// CHECK:STDOUT: if %.loc27_29.12 br !for.body else br !for.done +// CHECK:STDOUT: %addr: @TestIterate.%ptr (%ptr.a41) = addr_of %var +// CHECK:STDOUT: %impl.elem3.loc27_37.1: @TestIterate.%.loc27_37.21 (%.474) = impl_witness_access constants.%Iterate.lookup_impl_witness.eca, element3 [symbolic = %impl.elem3.loc27_37.2 (constants.%impl.elem3.316)] +// CHECK:STDOUT: %bound_method.loc27_37.3: = bound_method %r.ref, %impl.elem3.loc27_37.1 +// CHECK:STDOUT: %Iterate.facet.loc27_37.3: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.eca) [symbolic = %Iterate.facet.loc27_37.5 (constants.%Iterate.facet.bb8)] +// CHECK:STDOUT: %.loc27_37.3: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc27_37.3 [symbolic = %Iterate.facet.loc27_37.5 (constants.%Iterate.facet.bb8)] +// CHECK:STDOUT: %Iterate.facet.loc27_37.4: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.eca) [symbolic = %Iterate.facet.loc27_37.5 (constants.%Iterate.facet.bb8)] +// CHECK:STDOUT: %.loc27_37.4: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc27_37.4 [symbolic = %Iterate.facet.loc27_37.5 (constants.%Iterate.facet.bb8)] +// CHECK:STDOUT: %.loc27_37.5: %Destroy.type = converted constants.%as_type.810, constants.%impl.elem1.424 [symbolic = %impl.elem1 (constants.%impl.elem1.424)] +// CHECK:STDOUT: %.loc27_37.6: %Destroy.type = converted constants.%as_type.810, constants.%impl.elem1.424 [symbolic = %impl.elem1 (constants.%impl.elem1.424)] +// CHECK:STDOUT: %specific_impl_fn.loc27_37.2: = specific_impl_function %impl.elem3.loc27_37.1, @Iterate.WithSelf.Next(constants.%Iterate.facet.bb8) [symbolic = %specific_impl_fn.loc27_37.5 (constants.%specific_impl_fn.754)] +// CHECK:STDOUT: %bound_method.loc27_37.4: = bound_method %r.ref, %specific_impl_fn.loc27_37.2 +// CHECK:STDOUT: %.loc27_37.7: ref %Optional.4e9 = temporary_storage +// CHECK:STDOUT: %.loc27_36.2: @TestIterate.%R.as_type.loc25_83.1 (%R.as_type) = acquire_value %r.ref +// CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.4e9 to %.loc27_37.7 = call %bound_method.loc27_37.4(%.loc27_36.2, %addr) +// CHECK:STDOUT: %.loc27_37.8: ref %Optional.4e9 = temporary %.loc27_37.7, %Iterate.WithSelf.Next.call +// CHECK:STDOUT: %.loc27_37.9: %Optional.HasValue.type.59f = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.496) [concrete = constants.%Optional.HasValue.91a] +// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.59f = name_ref HasValue, %.loc27_37.9 [concrete = constants.%Optional.HasValue.91a] +// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc27_37.8, %HasValue.ref +// CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.496) [concrete = constants.%Optional.HasValue.specific_fn.bf1] +// CHECK:STDOUT: %bound_method.loc27_37.5: = bound_method %.loc27_37.8, %Optional.HasValue.specific_fn +// CHECK:STDOUT: %.loc27_37.10: %Optional.4e9 = acquire_value %.loc27_37.8 +// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc27_37.5(%.loc27_37.10) +// CHECK:STDOUT: %.loc27_37.11: bool = value_of_initializer %Optional.HasValue.call +// CHECK:STDOUT: %.loc27_37.12: bool = converted %Optional.HasValue.call, %.loc27_37.11 +// CHECK:STDOUT: if %.loc27_37.12 br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: -// CHECK:STDOUT: %.loc27_29.13: %Optional.Get.type.c7a = specific_constant imports.%Core.import_ref.dab, @Optional(constants.%OptionalStorage.facet.a0c) [concrete = constants.%Optional.Get.6ac] -// CHECK:STDOUT: %Get.ref: %Optional.Get.type.c7a = name_ref Get, %.loc27_29.13 [concrete = constants.%Optional.Get.6ac] -// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc27_29.8, %Get.ref -// CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.a0c) [concrete = constants.%Optional.Get.specific_fn.ee5] -// CHECK:STDOUT: %bound_method.loc27_29.6: = bound_method %.loc27_29.8, %Optional.Get.specific_fn -// CHECK:STDOUT: %.loc27_29.14: ref %ValueType = temporary_storage -// CHECK:STDOUT: %.loc27_29.15: %Optional.3c5 = acquire_value %.loc27_29.8 -// CHECK:STDOUT: %Optional.Get.call: init %ValueType to %.loc27_29.14 = call %bound_method.loc27_29.6(%.loc27_29.15) -// CHECK:STDOUT: %.loc27_29.16: ref %ValueType = temporary %.loc27_29.14, %Optional.Get.call -// CHECK:STDOUT: %.loc27_29.17: %ValueType = acquire_value %.loc27_29.16 -// CHECK:STDOUT: %.loc27_14: type = splice_block %ValueType.ref.loc27 [concrete = constants.%ValueType] { +// CHECK:STDOUT: %.loc27_37.13: %Optional.Get.type.cab = specific_constant imports.%Core.import_ref.dab, @Optional(constants.%OptionalStorage.facet.496) [concrete = constants.%Optional.Get.2d3] +// CHECK:STDOUT: %Get.ref: %Optional.Get.type.cab = name_ref Get, %.loc27_37.13 [concrete = constants.%Optional.Get.2d3] +// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc27_37.8, %Get.ref +// CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.496) [concrete = constants.%Optional.Get.specific_fn.548] +// CHECK:STDOUT: %bound_method.loc27_37.6: = bound_method %.loc27_37.8, %Optional.Get.specific_fn +// CHECK:STDOUT: %.loc27_37.14: ref %OverloadValueType = temporary_storage +// CHECK:STDOUT: %.loc27_37.15: %Optional.4e9 = acquire_value %.loc27_37.8 +// CHECK:STDOUT: %Optional.Get.call: init %OverloadValueType to %.loc27_37.14 = call %bound_method.loc27_37.6(%.loc27_37.15) +// CHECK:STDOUT: %.loc27_37.16: ref %OverloadValueType = temporary %.loc27_37.14, %Optional.Get.call +// CHECK:STDOUT: %.loc27_37.17: %OverloadValueType = acquire_value %.loc27_37.16 +// CHECK:STDOUT: %.loc27_14: type = splice_block %OverloadValueType.ref.loc27 [concrete = constants.%OverloadValueType] { // CHECK:STDOUT: %Cpp.ref.loc27: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %ValueType.ref.loc27: type = name_ref ValueType, imports.%ValueType.decl [concrete = constants.%ValueType] +// CHECK:STDOUT: %OverloadValueType.ref.loc27: type = name_ref OverloadValueType, imports.%OverloadValueType.decl [concrete = constants.%OverloadValueType] // CHECK:STDOUT: } -// CHECK:STDOUT: %_: %ValueType = wrapper_binding _, %.loc27_29.17 -// CHECK:STDOUT: %ValueType.Op.bound: = bound_method %.loc27_29.16, constants.%ValueType.Op.4dca31.1 -// CHECK:STDOUT: %Op.ref: %ValueType.cpp_destructor.type = name_ref Op, imports.%ValueType.cpp_destructor.decl [concrete = constants.%ValueType.cpp_destructor] -// CHECK:STDOUT: %ValueType.cpp_destructor.bound: = bound_method %.loc27_29.16, %Op.ref -// CHECK:STDOUT: %ValueType.cpp_destructor.call: init %empty_tuple.type = call %ValueType.cpp_destructor.bound(%.loc27_29.16) -// CHECK:STDOUT: %Destroy.Op.bound.loc27_29.1: = bound_method %.loc27_29.8, constants.%Destroy.Op.1a2547.7 -// CHECK:STDOUT: %Destroy.Op.call.loc27_29.1: init %empty_tuple.type = call %Destroy.Op.bound.loc27_29.1(%.loc27_29.8) +// CHECK:STDOUT: %_: %OverloadValueType = wrapper_binding _, %.loc27_37.17 +// CHECK:STDOUT: %OverloadValueType.Op.bound: = bound_method %.loc27_37.16, constants.%OverloadValueType.Op.4dca31.1 +// CHECK:STDOUT: %Op.ref: %OverloadValueType.cpp_destructor.type = name_ref Op, imports.%OverloadValueType.cpp_destructor.decl [concrete = constants.%OverloadValueType.cpp_destructor] +// CHECK:STDOUT: %OverloadValueType.cpp_destructor.bound: = bound_method %.loc27_37.16, %Op.ref +// CHECK:STDOUT: %OverloadValueType.cpp_destructor.call: init %empty_tuple.type = call %OverloadValueType.cpp_destructor.bound(%.loc27_37.16) +// CHECK:STDOUT: %Destroy.Op.bound.loc27_37.1: = bound_method %.loc27_37.8, constants.%Destroy.Op.1a2547.7 +// CHECK:STDOUT: %Destroy.Op.call.loc27_37.1: init %empty_tuple.type = call %Destroy.Op.bound.loc27_37.1(%.loc27_37.8) // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: -// CHECK:STDOUT: %Destroy.Op.bound.loc27_29.2: = bound_method %.loc27_29.8, constants.%Destroy.Op.1a2547.7 -// CHECK:STDOUT: %Destroy.Op.call.loc27_29.2: init %empty_tuple.type = call %Destroy.Op.bound.loc27_29.2(%.loc27_29.8) -// CHECK:STDOUT: %impl.elem0.loc27_29.1: @TestIterate.%.loc27_29.22 (%.98a) = impl_witness_access constants.%Destroy.lookup_impl_witness.b29, element0 [symbolic = %impl.elem0.loc27_29.2 (constants.%impl.elem0.81b)] -// CHECK:STDOUT: %bound_method.loc27_29.7: = bound_method %var, %impl.elem0.loc27_29.1 -// CHECK:STDOUT: %.loc27_29.18: %Destroy.type = converted constants.%as_type.dbb, constants.%impl.elem1.3cf [symbolic = %impl.elem1 (constants.%impl.elem1.3cf)] -// CHECK:STDOUT: %.loc27_29.19: %Destroy.type = converted constants.%as_type.dbb, constants.%impl.elem1.3cf [symbolic = %impl.elem1 (constants.%impl.elem1.3cf)] -// CHECK:STDOUT: %specific_impl_fn.loc27_29.3: = specific_impl_function %impl.elem0.loc27_29.1, @Destroy.WithSelf.Op(constants.%impl.elem1.3cf) [symbolic = %specific_impl_fn.loc27_29.6 (constants.%specific_impl_fn.bf3)] -// CHECK:STDOUT: %bound_method.loc27_29.8: = bound_method %var, %specific_impl_fn.loc27_29.3 -// CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc27_29.8(%var) +// CHECK:STDOUT: %Destroy.Op.bound.loc27_37.2: = bound_method %.loc27_37.8, constants.%Destroy.Op.1a2547.7 +// CHECK:STDOUT: %Destroy.Op.call.loc27_37.2: init %empty_tuple.type = call %Destroy.Op.bound.loc27_37.2(%.loc27_37.8) +// CHECK:STDOUT: %impl.elem0.loc27_37.1: @TestIterate.%.loc27_37.22 (%.696) = impl_witness_access constants.%Destroy.lookup_impl_witness.d2d, element0 [symbolic = %impl.elem0.loc27_37.2 (constants.%impl.elem0.18a)] +// CHECK:STDOUT: %bound_method.loc27_37.7: = bound_method %var, %impl.elem0.loc27_37.1 +// CHECK:STDOUT: %.loc27_37.18: %Destroy.type = converted constants.%as_type.810, constants.%impl.elem1.424 [symbolic = %impl.elem1 (constants.%impl.elem1.424)] +// CHECK:STDOUT: %.loc27_37.19: %Destroy.type = converted constants.%as_type.810, constants.%impl.elem1.424 [symbolic = %impl.elem1 (constants.%impl.elem1.424)] +// CHECK:STDOUT: %specific_impl_fn.loc27_37.3: = specific_impl_function %impl.elem0.loc27_37.1, @Destroy.WithSelf.Op(constants.%impl.elem1.424) [symbolic = %specific_impl_fn.loc27_37.6 (constants.%specific_impl_fn.b04)] +// CHECK:STDOUT: %bound_method.loc27_37.8: = bound_method %var, %specific_impl_fn.loc27_37.3 +// CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc27_37.8(%var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc27_29.1(%self.param: ref %.98c) { +// CHECK:STDOUT: fn @Destroy.Op.loc27_37.1(%self.param: ref %.8a2) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc27_29.2(%self.param: ref %MaybeUnformed.02e) { +// CHECK:STDOUT: fn @Destroy.Op.loc27_37.2(%self.param: ref %MaybeUnformed.59c) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc27_29.3(%self.param: ref bool) = "no_op"; +// CHECK:STDOUT: fn @Destroy.Op.loc27_37.3(%self.param: ref bool) = "no_op"; // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc27_29.4(%self.param: ref %struct_type.value.has_value.761) { +// CHECK:STDOUT: fn @Destroy.Op.loc27_37.4(%self.param: ref %struct_type.value.has_value.3e8) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc27_29.5(%self.param: ref %DefaultOptionalStorage.84c) { +// CHECK:STDOUT: fn @Destroy.Op.loc27_37.5(%self.param: ref %DefaultOptionalStorage.799) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc27_29.6(%self.param: ref %Optional.3c5) { +// CHECK:STDOUT: fn @Destroy.Op.loc27_37.6(%self.param: ref %Optional.4e9) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } @@ -2365,118 +2365,118 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: fn @TestRangeFor(%r.param: ref %Range) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %_.patt: %pattern_type.e9f = value_binding_pattern _ [concrete = constants.%_.patt.8ae] +// CHECK:STDOUT: %_.patt: %pattern_type.804 = value_binding_pattern _ [concrete = constants.%_.patt.a10] // CHECK:STDOUT: } // CHECK:STDOUT: %r.ref: ref %Range = name_ref r, %r -// CHECK:STDOUT: %impl.elem2: %.649 = impl_witness_access constants.%Iterate.impl_witness.725, element2 [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.568] -// CHECK:STDOUT: %bound_method.loc37_29.1: = bound_method %r.ref, %impl.elem2 -// CHECK:STDOUT: %facet_value.loc37_29.1: %CppRange_where.type.d682d6.1 = facet_value constants.%Range, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.7d7, constants.%custom_witness.f4a, constants.%custom_witness.773, constants.%custom_witness.716, constants.%custom_witness.297) [concrete = constants.%facet_value.f81] -// CHECK:STDOUT: %.loc37_29.1: %CppRange_where.type.d682d6.1 = converted constants.%Range, %facet_value.loc37_29.1 [concrete = constants.%facet_value.f81] -// CHECK:STDOUT: %facet_value.loc37_29.2: %CppRange_where.type.d682d6.1 = facet_value constants.%Range, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.7d7, constants.%custom_witness.f4a, constants.%custom_witness.773, constants.%custom_witness.716, constants.%custom_witness.297) [concrete = constants.%facet_value.f81] -// CHECK:STDOUT: %.loc37_29.2: %CppRange_where.type.d682d6.1 = converted constants.%Range, %facet_value.loc37_29.2 [concrete = constants.%facet_value.f81] -// CHECK:STDOUT: %specific_fn.loc37_29.1: = specific_function %impl.elem2, @T.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.f81) [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn] -// CHECK:STDOUT: %bound_method.loc37_29.2: = bound_method %r.ref, %specific_fn.loc37_29.1 -// CHECK:STDOUT: %var: ref %tuple.type.2ad = var_storage invalid -// CHECK:STDOUT: %.loc37_28.1: %Range = acquire_value %r.ref -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.call: init %tuple.type.2ad to %var = call %bound_method.loc37_29.2(%.loc37_28.1) +// CHECK:STDOUT: %impl.elem2: %.687 = impl_witness_access constants.%Iterate.impl_witness.175, element2 [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.036] +// CHECK:STDOUT: %bound_method.loc37_37.1: = bound_method %r.ref, %impl.elem2 +// CHECK:STDOUT: %facet_value.loc37_37.1: %CppRange_where.type.d682d6.1 = facet_value constants.%Range, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.090, constants.%custom_witness.f4a, constants.%custom_witness.6bd, constants.%custom_witness.716, constants.%custom_witness.617) [concrete = constants.%facet_value.cbe] +// CHECK:STDOUT: %.loc37_37.1: %CppRange_where.type.d682d6.1 = converted constants.%Range, %facet_value.loc37_37.1 [concrete = constants.%facet_value.cbe] +// CHECK:STDOUT: %facet_value.loc37_37.2: %CppRange_where.type.d682d6.1 = facet_value constants.%Range, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.090, constants.%custom_witness.f4a, constants.%custom_witness.6bd, constants.%custom_witness.716, constants.%custom_witness.617) [concrete = constants.%facet_value.cbe] +// CHECK:STDOUT: %.loc37_37.2: %CppRange_where.type.d682d6.1 = converted constants.%Range, %facet_value.loc37_37.2 [concrete = constants.%facet_value.cbe] +// CHECK:STDOUT: %specific_fn.loc37_37.1: = specific_function %impl.elem2, @T.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.cbe) [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn] +// CHECK:STDOUT: %bound_method.loc37_37.2: = bound_method %r.ref, %specific_fn.loc37_37.1 +// CHECK:STDOUT: %var: ref %tuple.type.9ef = var_storage invalid +// CHECK:STDOUT: %.loc37_36.1: %Range = acquire_value %r.ref +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.call: init %tuple.type.9ef to %var = call %bound_method.loc37_37.2(%.loc37_36.1) // CHECK:STDOUT: assign %var, %T.as_type.as.Iterate.impl.NewCursor.call // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.next: -// CHECK:STDOUT: %addr: %ptr.851 = addr_of %var -// CHECK:STDOUT: %impl.elem3: %.085 = impl_witness_access constants.%Iterate.impl_witness.725, element3 [concrete = constants.%T.as_type.as.Iterate.impl.Next.200] -// CHECK:STDOUT: %bound_method.loc37_29.3: = bound_method %r.ref, %impl.elem3 -// CHECK:STDOUT: %facet_value.loc37_29.3: %CppRange_where.type.d682d6.1 = facet_value constants.%Range, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.7d7, constants.%custom_witness.f4a, constants.%custom_witness.773, constants.%custom_witness.716, constants.%custom_witness.297) [concrete = constants.%facet_value.f81] -// CHECK:STDOUT: %.loc37_29.3: %CppRange_where.type.d682d6.1 = converted constants.%Range, %facet_value.loc37_29.3 [concrete = constants.%facet_value.f81] -// CHECK:STDOUT: %facet_value.loc37_29.4: %CppRange_where.type.d682d6.1 = facet_value constants.%Range, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.7d7, constants.%custom_witness.f4a, constants.%custom_witness.773, constants.%custom_witness.716, constants.%custom_witness.297) [concrete = constants.%facet_value.f81] -// CHECK:STDOUT: %.loc37_29.4: %CppRange_where.type.d682d6.1 = converted constants.%Range, %facet_value.loc37_29.4 [concrete = constants.%facet_value.f81] -// CHECK:STDOUT: %specific_fn.loc37_29.2: = specific_function %impl.elem3, @T.as_type.as.Iterate.impl.Next(constants.%facet_value.f81) [concrete = constants.%T.as_type.as.Iterate.impl.Next.specific_fn] -// CHECK:STDOUT: %bound_method.loc37_29.4: = bound_method %r.ref, %specific_fn.loc37_29.2 -// CHECK:STDOUT: %.loc37_29.5: ref %Optional.3c5 = temporary_storage -// CHECK:STDOUT: %.loc37_28.2: %Range = acquire_value %r.ref -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.call: init %Optional.3c5 to %.loc37_29.5 = call %bound_method.loc37_29.4(%.loc37_28.2, %addr) -// CHECK:STDOUT: %.loc37_29.6: ref %Optional.3c5 = temporary %.loc37_29.5, %T.as_type.as.Iterate.impl.Next.call -// CHECK:STDOUT: %.loc37_29.7: %Optional.HasValue.type.cca = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.a0c) [concrete = constants.%Optional.HasValue.6d0] -// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.cca = name_ref HasValue, %.loc37_29.7 [concrete = constants.%Optional.HasValue.6d0] -// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc37_29.6, %HasValue.ref -// CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.a0c) [concrete = constants.%Optional.HasValue.specific_fn.8b5] -// CHECK:STDOUT: %bound_method.loc37_29.5: = bound_method %.loc37_29.6, %Optional.HasValue.specific_fn -// CHECK:STDOUT: %.loc37_29.8: %Optional.3c5 = acquire_value %.loc37_29.6 -// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc37_29.5(%.loc37_29.8) -// CHECK:STDOUT: %.loc37_29.9: bool = value_of_initializer %Optional.HasValue.call -// CHECK:STDOUT: %.loc37_29.10: bool = converted %Optional.HasValue.call, %.loc37_29.9 -// CHECK:STDOUT: if %.loc37_29.10 br !for.body else br !for.done +// CHECK:STDOUT: %addr: %ptr.b18 = addr_of %var +// CHECK:STDOUT: %impl.elem3: %.79c = impl_witness_access constants.%Iterate.impl_witness.175, element3 [concrete = constants.%T.as_type.as.Iterate.impl.Next.751] +// CHECK:STDOUT: %bound_method.loc37_37.3: = bound_method %r.ref, %impl.elem3 +// CHECK:STDOUT: %facet_value.loc37_37.3: %CppRange_where.type.d682d6.1 = facet_value constants.%Range, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.090, constants.%custom_witness.f4a, constants.%custom_witness.6bd, constants.%custom_witness.716, constants.%custom_witness.617) [concrete = constants.%facet_value.cbe] +// CHECK:STDOUT: %.loc37_37.3: %CppRange_where.type.d682d6.1 = converted constants.%Range, %facet_value.loc37_37.3 [concrete = constants.%facet_value.cbe] +// CHECK:STDOUT: %facet_value.loc37_37.4: %CppRange_where.type.d682d6.1 = facet_value constants.%Range, (constants.%custom_witness.e7a31c.1, constants.%custom_witness.d0da43.1, constants.%custom_witness.090, constants.%custom_witness.f4a, constants.%custom_witness.6bd, constants.%custom_witness.716, constants.%custom_witness.617) [concrete = constants.%facet_value.cbe] +// CHECK:STDOUT: %.loc37_37.4: %CppRange_where.type.d682d6.1 = converted constants.%Range, %facet_value.loc37_37.4 [concrete = constants.%facet_value.cbe] +// CHECK:STDOUT: %specific_fn.loc37_37.2: = specific_function %impl.elem3, @T.as_type.as.Iterate.impl.Next(constants.%facet_value.cbe) [concrete = constants.%T.as_type.as.Iterate.impl.Next.specific_fn] +// CHECK:STDOUT: %bound_method.loc37_37.4: = bound_method %r.ref, %specific_fn.loc37_37.2 +// CHECK:STDOUT: %.loc37_37.5: ref %Optional.4e9 = temporary_storage +// CHECK:STDOUT: %.loc37_36.2: %Range = acquire_value %r.ref +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.call: init %Optional.4e9 to %.loc37_37.5 = call %bound_method.loc37_37.4(%.loc37_36.2, %addr) +// CHECK:STDOUT: %.loc37_37.6: ref %Optional.4e9 = temporary %.loc37_37.5, %T.as_type.as.Iterate.impl.Next.call +// CHECK:STDOUT: %.loc37_37.7: %Optional.HasValue.type.59f = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.496) [concrete = constants.%Optional.HasValue.91a] +// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.59f = name_ref HasValue, %.loc37_37.7 [concrete = constants.%Optional.HasValue.91a] +// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc37_37.6, %HasValue.ref +// CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.496) [concrete = constants.%Optional.HasValue.specific_fn.bf1] +// CHECK:STDOUT: %bound_method.loc37_37.5: = bound_method %.loc37_37.6, %Optional.HasValue.specific_fn +// CHECK:STDOUT: %.loc37_37.8: %Optional.4e9 = acquire_value %.loc37_37.6 +// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc37_37.5(%.loc37_37.8) +// CHECK:STDOUT: %.loc37_37.9: bool = value_of_initializer %Optional.HasValue.call +// CHECK:STDOUT: %.loc37_37.10: bool = converted %Optional.HasValue.call, %.loc37_37.9 +// CHECK:STDOUT: if %.loc37_37.10 br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: -// CHECK:STDOUT: %.loc37_29.11: %Optional.Get.type.c7a = specific_constant imports.%Core.import_ref.dab, @Optional(constants.%OptionalStorage.facet.a0c) [concrete = constants.%Optional.Get.6ac] -// CHECK:STDOUT: %Get.ref: %Optional.Get.type.c7a = name_ref Get, %.loc37_29.11 [concrete = constants.%Optional.Get.6ac] -// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc37_29.6, %Get.ref -// CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.a0c) [concrete = constants.%Optional.Get.specific_fn.ee5] -// CHECK:STDOUT: %bound_method.loc37_29.6: = bound_method %.loc37_29.6, %Optional.Get.specific_fn -// CHECK:STDOUT: %.loc37_29.12: ref %ValueType = temporary_storage -// CHECK:STDOUT: %.loc37_29.13: %Optional.3c5 = acquire_value %.loc37_29.6 -// CHECK:STDOUT: %Optional.Get.call: init %ValueType to %.loc37_29.12 = call %bound_method.loc37_29.6(%.loc37_29.13) -// CHECK:STDOUT: %.loc37_29.14: ref %ValueType = temporary %.loc37_29.12, %Optional.Get.call -// CHECK:STDOUT: %.loc37_29.15: %ValueType = acquire_value %.loc37_29.14 -// CHECK:STDOUT: %.loc37_14: type = splice_block %ValueType.ref [concrete = constants.%ValueType] { +// CHECK:STDOUT: %.loc37_37.11: %Optional.Get.type.cab = specific_constant imports.%Core.import_ref.dab, @Optional(constants.%OptionalStorage.facet.496) [concrete = constants.%Optional.Get.2d3] +// CHECK:STDOUT: %Get.ref: %Optional.Get.type.cab = name_ref Get, %.loc37_37.11 [concrete = constants.%Optional.Get.2d3] +// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc37_37.6, %Get.ref +// CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.496) [concrete = constants.%Optional.Get.specific_fn.548] +// CHECK:STDOUT: %bound_method.loc37_37.6: = bound_method %.loc37_37.6, %Optional.Get.specific_fn +// CHECK:STDOUT: %.loc37_37.12: ref %OverloadValueType = temporary_storage +// CHECK:STDOUT: %.loc37_37.13: %Optional.4e9 = acquire_value %.loc37_37.6 +// CHECK:STDOUT: %Optional.Get.call: init %OverloadValueType to %.loc37_37.12 = call %bound_method.loc37_37.6(%.loc37_37.13) +// CHECK:STDOUT: %.loc37_37.14: ref %OverloadValueType = temporary %.loc37_37.12, %Optional.Get.call +// CHECK:STDOUT: %.loc37_37.15: %OverloadValueType = acquire_value %.loc37_37.14 +// CHECK:STDOUT: %.loc37_14: type = splice_block %OverloadValueType.ref [concrete = constants.%OverloadValueType] { // CHECK:STDOUT: %Cpp.ref.loc37: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %ValueType.ref: type = name_ref ValueType, imports.%ValueType.decl [concrete = constants.%ValueType] +// CHECK:STDOUT: %OverloadValueType.ref: type = name_ref OverloadValueType, imports.%OverloadValueType.decl [concrete = constants.%OverloadValueType] // CHECK:STDOUT: } -// CHECK:STDOUT: %_: %ValueType = wrapper_binding _, %.loc37_29.15 -// CHECK:STDOUT: %ValueType.Op.bound: = bound_method %.loc37_29.14, constants.%ValueType.Op.4dca31.1 -// CHECK:STDOUT: %Op.ref: %ValueType.cpp_destructor.type = name_ref Op, imports.%ValueType.cpp_destructor.decl [concrete = constants.%ValueType.cpp_destructor] -// CHECK:STDOUT: %ValueType.cpp_destructor.bound: = bound_method %.loc37_29.14, %Op.ref -// CHECK:STDOUT: %ValueType.cpp_destructor.call: init %empty_tuple.type = call %ValueType.cpp_destructor.bound(%.loc37_29.14) -// CHECK:STDOUT: %Destroy.Op.bound.loc37_29.1: = bound_method %.loc37_29.6, constants.%Destroy.Op.1a2547.7 -// CHECK:STDOUT: %Destroy.Op.call.loc37_29.1: init %empty_tuple.type = call %Destroy.Op.bound.loc37_29.1(%.loc37_29.6) +// CHECK:STDOUT: %_: %OverloadValueType = wrapper_binding _, %.loc37_37.15 +// CHECK:STDOUT: %OverloadValueType.Op.bound: = bound_method %.loc37_37.14, constants.%OverloadValueType.Op.4dca31.1 +// CHECK:STDOUT: %Op.ref: %OverloadValueType.cpp_destructor.type = name_ref Op, imports.%OverloadValueType.cpp_destructor.decl [concrete = constants.%OverloadValueType.cpp_destructor] +// CHECK:STDOUT: %OverloadValueType.cpp_destructor.bound: = bound_method %.loc37_37.14, %Op.ref +// CHECK:STDOUT: %OverloadValueType.cpp_destructor.call: init %empty_tuple.type = call %OverloadValueType.cpp_destructor.bound(%.loc37_37.14) +// CHECK:STDOUT: %Destroy.Op.bound.loc37_37.1: = bound_method %.loc37_37.6, constants.%Destroy.Op.1a2547.7 +// CHECK:STDOUT: %Destroy.Op.call.loc37_37.1: init %empty_tuple.type = call %Destroy.Op.bound.loc37_37.1(%.loc37_37.6) // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: -// CHECK:STDOUT: %Destroy.Op.bound.loc37_29.2: = bound_method %.loc37_29.6, constants.%Destroy.Op.1a2547.7 -// CHECK:STDOUT: %Destroy.Op.call.loc37_29.2: init %empty_tuple.type = call %Destroy.Op.bound.loc37_29.2(%.loc37_29.6) -// CHECK:STDOUT: %Destroy.Op.bound.loc37_29.3: = bound_method %var, constants.%Destroy.Op.1a2547.8 -// CHECK:STDOUT: %Destroy.Op.call.loc37_29.3: init %empty_tuple.type = call %Destroy.Op.bound.loc37_29.3(%var) +// CHECK:STDOUT: %Destroy.Op.bound.loc37_37.2: = bound_method %.loc37_37.6, constants.%Destroy.Op.1a2547.7 +// CHECK:STDOUT: %Destroy.Op.call.loc37_37.2: init %empty_tuple.type = call %Destroy.Op.bound.loc37_37.2(%.loc37_37.6) +// CHECK:STDOUT: %Destroy.Op.bound.loc37_37.3: = bound_method %var, constants.%Destroy.Op.1a2547.8 +// CHECK:STDOUT: %Destroy.Op.call.loc37_37.3: init %empty_tuple.type = call %Destroy.Op.bound.loc37_37.3(%var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestIterate(constants.%R) { // CHECK:STDOUT: %R.patt.loc25_17.2 => constants.%R.patt // CHECK:STDOUT: %R.loc25_17.1 => constants.%R -// CHECK:STDOUT: %R.as_type.loc25_75.1 => constants.%R.as_type -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.d2d -// CHECK:STDOUT: %r.patt.loc25_73.2 => constants.%r.patt.d27 -// CHECK:STDOUT: %r.param_patt.loc25_68.2 => constants.%r.param_patt.a41 +// CHECK:STDOUT: %R.as_type.loc25_83.1 => constants.%R.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.def +// CHECK:STDOUT: %r.patt.loc25_81.2 => constants.%r.patt.bb3 +// CHECK:STDOUT: %r.param_patt.loc25_76.2 => constants.%r.param_patt.9b2 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @TestIterate(constants.%facet_value.4a4) { +// CHECK:STDOUT: specific @TestIterate(constants.%facet_value.3af) { // CHECK:STDOUT: %R.patt.loc25_17.2 => constants.%R.patt -// CHECK:STDOUT: %R.loc25_17.1 => constants.%facet_value.4a4 -// CHECK:STDOUT: %R.as_type.loc25_75.1 => constants.%Range +// CHECK:STDOUT: %R.loc25_17.1 => constants.%facet_value.3af +// CHECK:STDOUT: %R.as_type.loc25_83.1 => constants.%Range // CHECK:STDOUT: %pattern_type => constants.%pattern_type.23f -// CHECK:STDOUT: %r.patt.loc25_73.2 => constants.%r.patt.b9f -// CHECK:STDOUT: %r.param_patt.loc25_68.2 => constants.%r.param_patt.466 +// CHECK:STDOUT: %r.patt.loc25_81.2 => constants.%r.patt.b9f +// CHECK:STDOUT: %r.param_patt.loc25_76.2 => constants.%r.param_patt.466 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc25 => constants.%complete_type.357 -// CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.725 -// CHECK:STDOUT: %Iterate.facet.loc27_29.5 => constants.%Iterate.facet.53e -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.11d -// CHECK:STDOUT: %.loc27_29.20 => constants.%.649 -// CHECK:STDOUT: %impl.elem2.loc27_29.2 => constants.%T.as_type.as.Iterate.impl.NewCursor.568 -// CHECK:STDOUT: %specific_impl_fn.loc27_29.4 => constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn -// CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.301 -// CHECK:STDOUT: %as_type => constants.%tuple.type.2ad -// CHECK:STDOUT: %require_complete.1 => constants.%complete_type.e55 -// CHECK:STDOUT: %ptr => constants.%ptr.851 -// CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.51e -// CHECK:STDOUT: %.loc27_29.21 => constants.%.085 -// CHECK:STDOUT: %impl.elem3.loc27_29.2 => constants.%T.as_type.as.Iterate.impl.Next.200 -// CHECK:STDOUT: %specific_impl_fn.loc27_29.5 => constants.%T.as_type.as.Iterate.impl.Next.specific_fn -// CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.d8b -// CHECK:STDOUT: %.loc27_29.22 => constants.%.f12 +// CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.175 +// CHECK:STDOUT: %Iterate.facet.loc27_37.5 => constants.%Iterate.facet.cc4 +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.a44 +// CHECK:STDOUT: %.loc27_37.20 => constants.%.687 +// CHECK:STDOUT: %impl.elem2.loc27_37.2 => constants.%T.as_type.as.Iterate.impl.NewCursor.036 +// CHECK:STDOUT: %specific_impl_fn.loc27_37.4 => constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn +// CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.15b +// CHECK:STDOUT: %as_type => constants.%tuple.type.9ef +// CHECK:STDOUT: %require_complete.1 => constants.%complete_type.e35 +// CHECK:STDOUT: %ptr => constants.%ptr.b18 +// CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.1f9 +// CHECK:STDOUT: %.loc27_37.21 => constants.%.79c +// CHECK:STDOUT: %impl.elem3.loc27_37.2 => constants.%T.as_type.as.Iterate.impl.Next.751 +// CHECK:STDOUT: %specific_impl_fn.loc27_37.5 => constants.%T.as_type.as.Iterate.impl.Next.specific_fn +// CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.fd5 +// CHECK:STDOUT: %.loc27_37.22 => constants.%.fb6 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.df9cc1.8 -// CHECK:STDOUT: %impl.elem0.loc27_29.2 => constants.%Destroy.Op.1a2547.8 -// CHECK:STDOUT: %specific_impl_fn.loc27_29.6 => constants.%Destroy.Op.1a2547.8 +// CHECK:STDOUT: %impl.elem0.loc27_37.2 => constants.%Destroy.Op.1a2547.8 +// CHECK:STDOUT: %specific_impl_fn.loc27_37.6 => constants.%Destroy.Op.1a2547.8 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- adl_return_same_types.carbon @@ -3397,122 +3397,122 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %ValueType: type = class_type @ValueType [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] -// CHECK:STDOUT: %pattern_type.e41: type = pattern_type %ValueType [concrete] +// CHECK:STDOUT: %pattern_type.c43: type = pattern_type %ValueType [concrete] // CHECK:STDOUT: %ValueType.cpp_destructor.type: type = fn_type @ValueType.cpp_destructor [concrete] // CHECK:STDOUT: %ValueType.cpp_destructor: %ValueType.cpp_destructor.type = struct_value () [concrete] -// CHECK:STDOUT: %ValueType.Op.type.79266b.1: type = fn_type @ValueType.Op.1 [concrete] -// CHECK:STDOUT: %ValueType.Op.4c94b9.1: %ValueType.Op.type.79266b.1 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.fef: = custom_witness (%ValueType.Op.4c94b9.1), @Destroy [concrete] -// CHECK:STDOUT: %const.773: type = const_type %ValueType [concrete] -// CHECK:STDOUT: %ptr.32e: type = ptr_type %const.773 [concrete] -// CHECK:STDOUT: %ptr.9d3: type = ptr_type %ValueType [concrete] -// CHECK:STDOUT: %ValueType.Op.type.79266b.2: type = fn_type @ValueType.Op.2 [concrete] -// CHECK:STDOUT: %ValueType.Op.4c94b9.2: %ValueType.Op.type.79266b.2 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.c19: = custom_witness (%ValueType.Op.4c94b9.2), @Copy [concrete] -// CHECK:STDOUT: %facet_value.ccb: %facet_type.f48 = facet_value %ValueType, (%custom_witness.fef, %custom_witness.c19) [concrete] +// CHECK:STDOUT: %ValueType.Op.type.4c0699.1: type = fn_type @ValueType.Op.1 [concrete] +// CHECK:STDOUT: %ValueType.Op.4ec7f2.1: %ValueType.Op.type.4c0699.1 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.c4c: = custom_witness (%ValueType.Op.4ec7f2.1), @Destroy [concrete] +// CHECK:STDOUT: %const.dd6: type = const_type %ValueType [concrete] +// CHECK:STDOUT: %ptr.69c: type = ptr_type %const.dd6 [concrete] +// CHECK:STDOUT: %ptr.233: type = ptr_type %ValueType [concrete] +// CHECK:STDOUT: %ValueType.Op.type.4c0699.2: type = fn_type @ValueType.Op.2 [concrete] +// CHECK:STDOUT: %ValueType.Op.4ec7f2.2: %ValueType.Op.type.4c0699.2 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.202: = custom_witness (%ValueType.Op.4ec7f2.2), @Copy [concrete] +// CHECK:STDOUT: %facet_value.9f0: %facet_type.f48 = facet_value %ValueType, (%custom_witness.c4c, %custom_witness.202) [concrete] // CHECK:STDOUT: %Iterate.lookup_impl_witness.1d8: = lookup_impl_witness %.Self.500, @Iterate [symbolic_self] // CHECK:STDOUT: %impl.elem0.294: %facet_type.f48 = impl_witness_access %Iterate.lookup_impl_witness.1d8, element0 [symbolic_self] -// CHECK:STDOUT: %Iterate_where.type.f9d: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.ccb> [concrete] -// CHECK:STDOUT: %pattern_type.c7b: type = pattern_type %Iterate_where.type.f9d [concrete] -// CHECK:STDOUT: %R.patt: %pattern_type.c7b = symbolic_binding_pattern R, 0 [symbolic] -// CHECK:STDOUT: %R: %Iterate_where.type.f9d = symbolic_binding R, 0 [symbolic] +// CHECK:STDOUT: %Iterate_where.type.081: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.9f0> [concrete] +// CHECK:STDOUT: %pattern_type.d57: type = pattern_type %Iterate_where.type.081 [concrete] +// CHECK:STDOUT: %R.patt: %pattern_type.d57 = symbolic_binding_pattern R, 0 [symbolic] +// CHECK:STDOUT: %R: %Iterate_where.type.081 = symbolic_binding R, 0 [symbolic] // CHECK:STDOUT: %R.as_type: type = facet_access_type %R [symbolic] -// CHECK:STDOUT: %pattern_type.17d: type = pattern_type %R.as_type [symbolic] -// CHECK:STDOUT: %r.param_patt.90c: %pattern_type.17d = value_param_pattern [symbolic] -// CHECK:STDOUT: %r.patt.db8: %pattern_type.17d = wrapper_binding_pattern r, %r.param_patt.90c [symbolic] -// CHECK:STDOUT: %i.patt: %pattern_type.e41 = value_binding_pattern i [concrete] -// CHECK:STDOUT: %Iterate.lookup_impl_witness.173: = lookup_impl_witness %R, @Iterate [symbolic] -// CHECK:STDOUT: %Iterate.facet.b38: %Iterate.type = facet_value %R.as_type, (%Iterate.lookup_impl_witness.173) [symbolic] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.5cd: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.b38) [symbolic] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type.d51: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.b38) [symbolic] -// CHECK:STDOUT: %.592: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.5cd, %Iterate.facet.b38 [symbolic] -// CHECK:STDOUT: %impl.elem2.ae2: %.592 = impl_witness_access %Iterate.lookup_impl_witness.173, element2 [symbolic] -// CHECK:STDOUT: %impl.elem1.834: %Destroy.type = impl_witness_access %Iterate.lookup_impl_witness.173, element1 [symbolic] -// CHECK:STDOUT: %as_type.e41: type = facet_access_type %impl.elem1.834 [symbolic] -// CHECK:STDOUT: %specific_impl_fn.06e: = specific_impl_function %impl.elem2.ae2, @Iterate.WithSelf.NewCursor(%Iterate.facet.b38) [symbolic] -// CHECK:STDOUT: %ptr.d27: type = ptr_type %as_type.e41 [symbolic] -// CHECK:STDOUT: %.524: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.d51, %Iterate.facet.b38 [symbolic] -// CHECK:STDOUT: %impl.elem3.7a5: %.524 = impl_witness_access %Iterate.lookup_impl_witness.173, element3 [symbolic] -// CHECK:STDOUT: %DefaultOptionalStorage.257: type = class_type @DefaultOptionalStorage, @DefaultOptionalStorage(%facet_value.ccb) [concrete] -// CHECK:STDOUT: %OptionalStorage.impl_witness.1bc: = impl_witness imports.%OptionalStorage.impl_witness_table.460, @T.as_type.as.OptionalStorage.impl(%facet_value.ccb) [concrete] -// CHECK:STDOUT: %OptionalStorage.facet.8dd: %OptionalStorage.type = facet_value %ValueType, (%OptionalStorage.impl_witness.1bc) [concrete] -// CHECK:STDOUT: %Optional.1f5: type = class_type @Optional, @Optional(%OptionalStorage.facet.8dd) [concrete] -// CHECK:STDOUT: %specific_impl_fn.24b: = specific_impl_function %impl.elem3.7a5, @Iterate.WithSelf.Next(%Iterate.facet.b38) [symbolic] -// CHECK:STDOUT: %Optional.HasValue.type.527: type = fn_type @Optional.HasValue, @Optional(%OptionalStorage.facet.8dd) [concrete] -// CHECK:STDOUT: %Optional.HasValue.017: %Optional.HasValue.type.527 = struct_value () [concrete] -// CHECK:STDOUT: %Optional.Get.type.226: type = fn_type @Optional.Get, @Optional(%OptionalStorage.facet.8dd) [concrete] -// CHECK:STDOUT: %Optional.Get.0db: %Optional.Get.type.226 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.facet.306: %Destroy.type = facet_value %ValueType, (%custom_witness.fef) [concrete] -// CHECK:STDOUT: %MaybeUnformed.669: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.306) [concrete] -// CHECK:STDOUT: %.b36: type = maybe_unformed_type %ValueType [concrete] -// CHECK:STDOUT: %struct_type.value.has_value.5a1: type = struct_type {.value: %MaybeUnformed.669, .has_value: bool} [concrete] -// CHECK:STDOUT: %Optional.HasValue.specific_fn.2f1: = specific_function %Optional.HasValue.017, @Optional.HasValue(%OptionalStorage.facet.8dd) [concrete] -// CHECK:STDOUT: %Optional.Get.specific_fn.b3f: = specific_function %Optional.Get.0db, @Optional.Get(%OptionalStorage.facet.8dd) [concrete] +// CHECK:STDOUT: %pattern_type.a97: type = pattern_type %R.as_type [symbolic] +// CHECK:STDOUT: %r.param_patt.8bc: %pattern_type.a97 = value_param_pattern [symbolic] +// CHECK:STDOUT: %r.patt.440: %pattern_type.a97 = wrapper_binding_pattern r, %r.param_patt.8bc [symbolic] +// CHECK:STDOUT: %i.patt: %pattern_type.c43 = value_binding_pattern i [concrete] +// CHECK:STDOUT: %Iterate.lookup_impl_witness.bda: = lookup_impl_witness %R, @Iterate [symbolic] +// CHECK:STDOUT: %Iterate.facet.5c3: %Iterate.type = facet_value %R.as_type, (%Iterate.lookup_impl_witness.bda) [symbolic] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.825: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.5c3) [symbolic] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type.37e: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.5c3) [symbolic] +// CHECK:STDOUT: %.ca5: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.825, %Iterate.facet.5c3 [symbolic] +// CHECK:STDOUT: %impl.elem2.60f: %.ca5 = impl_witness_access %Iterate.lookup_impl_witness.bda, element2 [symbolic] +// CHECK:STDOUT: %impl.elem1.75b: %Destroy.type = impl_witness_access %Iterate.lookup_impl_witness.bda, element1 [symbolic] +// CHECK:STDOUT: %as_type.aee: type = facet_access_type %impl.elem1.75b [symbolic] +// CHECK:STDOUT: %specific_impl_fn.979: = specific_impl_function %impl.elem2.60f, @Iterate.WithSelf.NewCursor(%Iterate.facet.5c3) [symbolic] +// CHECK:STDOUT: %ptr.779: type = ptr_type %as_type.aee [symbolic] +// CHECK:STDOUT: %.493: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.37e, %Iterate.facet.5c3 [symbolic] +// CHECK:STDOUT: %impl.elem3.e03: %.493 = impl_witness_access %Iterate.lookup_impl_witness.bda, element3 [symbolic] +// CHECK:STDOUT: %DefaultOptionalStorage.8b2: type = class_type @DefaultOptionalStorage, @DefaultOptionalStorage(%facet_value.9f0) [concrete] +// CHECK:STDOUT: %OptionalStorage.impl_witness.986: = impl_witness imports.%OptionalStorage.impl_witness_table.460, @T.as_type.as.OptionalStorage.impl(%facet_value.9f0) [concrete] +// CHECK:STDOUT: %OptionalStorage.facet.b3f: %OptionalStorage.type = facet_value %ValueType, (%OptionalStorage.impl_witness.986) [concrete] +// CHECK:STDOUT: %Optional.a40: type = class_type @Optional, @Optional(%OptionalStorage.facet.b3f) [concrete] +// CHECK:STDOUT: %specific_impl_fn.80c: = specific_impl_function %impl.elem3.e03, @Iterate.WithSelf.Next(%Iterate.facet.5c3) [symbolic] +// CHECK:STDOUT: %Optional.HasValue.type.fe3: type = fn_type @Optional.HasValue, @Optional(%OptionalStorage.facet.b3f) [concrete] +// CHECK:STDOUT: %Optional.HasValue.cb1: %Optional.HasValue.type.fe3 = struct_value () [concrete] +// CHECK:STDOUT: %Optional.Get.type.316: type = fn_type @Optional.Get, @Optional(%OptionalStorage.facet.b3f) [concrete] +// CHECK:STDOUT: %Optional.Get.4e3: %Optional.Get.type.316 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.facet.c02: %Destroy.type = facet_value %ValueType, (%custom_witness.c4c) [concrete] +// CHECK:STDOUT: %MaybeUnformed.e16: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.c02) [concrete] +// CHECK:STDOUT: %.be1: type = maybe_unformed_type %ValueType [concrete] +// CHECK:STDOUT: %struct_type.value.has_value.baa: type = struct_type {.value: %MaybeUnformed.e16, .has_value: bool} [concrete] +// CHECK:STDOUT: %Optional.HasValue.specific_fn.048: = specific_function %Optional.HasValue.cb1, @Optional.HasValue(%OptionalStorage.facet.b3f) [concrete] +// CHECK:STDOUT: %Optional.Get.specific_fn.5ce: = specific_function %Optional.Get.4e3, @Optional.Get(%OptionalStorage.facet.b3f) [concrete] // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.type: type = fn_type @operator_PlusEqual__carbon_thunk [concrete] // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk: %operator_PlusEqual__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.Op.type.1d8f74.7: type = fn_type @Destroy.Op.loc31_31.6 [concrete] +// CHECK:STDOUT: %Destroy.Op.type.1d8f74.7: type = fn_type @Destroy.Op.loc31_37.6 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.7: %Destroy.Op.type.1d8f74.7 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.lookup_impl_witness.198: = lookup_impl_witness %impl.elem1.834, @Destroy [symbolic] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type.9d6: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%impl.elem1.834) [symbolic] -// CHECK:STDOUT: %.57c: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.9d6, %impl.elem1.834 [symbolic] -// CHECK:STDOUT: %impl.elem0.152: %.57c = impl_witness_access %Destroy.lookup_impl_witness.198, element0 [symbolic] -// CHECK:STDOUT: %specific_impl_fn.9fb: = specific_impl_function %impl.elem0.152, @Destroy.WithSelf.Op(%impl.elem1.834) [symbolic] +// CHECK:STDOUT: %Destroy.lookup_impl_witness.3ea: = lookup_impl_witness %impl.elem1.75b, @Destroy [symbolic] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type.696: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%impl.elem1.75b) [symbolic] +// CHECK:STDOUT: %.fbd: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.696, %impl.elem1.75b [symbolic] +// CHECK:STDOUT: %impl.elem0.bb2: %.fbd = impl_witness_access %Destroy.lookup_impl_witness.3ea, element0 [symbolic] +// CHECK:STDOUT: %specific_impl_fn.fa3: = specific_impl_function %impl.elem0.bb2, @Destroy.WithSelf.Op(%impl.elem1.75b) [symbolic] // CHECK:STDOUT: %ConstRange: type = class_type @ConstRange [concrete] -// CHECK:STDOUT: %pattern_type.025: type = pattern_type %ConstRange [concrete] +// CHECK:STDOUT: %pattern_type.c1d: type = pattern_type %ConstRange [concrete] // CHECK:STDOUT: %Iterator: type = class_type @Iterator.1 [concrete] // CHECK:STDOUT: %Sentinel: type = class_type @Sentinel.1 [concrete] // CHECK:STDOUT: %Begin.type: type = fn_type @Begin [concrete] // CHECK:STDOUT: %Begin: %Begin.type = struct_value () [concrete] // CHECK:STDOUT: %End.type: type = fn_type @End [concrete] // CHECK:STDOUT: %End: %End.type = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.c2f: = custom_witness (%Iterator, %Sentinel, %Begin, %End), @CppRangeForIterate [concrete] -// CHECK:STDOUT: %Iterator.Op.type.ac7e09.1: type = fn_type @Iterator.Op.1 [concrete] -// CHECK:STDOUT: %Iterator.Op.583fda.1: %Iterator.Op.type.ac7e09.1 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.1d3: = custom_witness (%ValueType, %Iterator.Op.583fda.1), @CppUnsafeDeref [concrete] -// CHECK:STDOUT: %Iterator.Op.type.ac7e09.2: type = fn_type @Iterator.Op.2 [concrete] -// CHECK:STDOUT: %Iterator.Op.583fda.2: %Iterator.Op.type.ac7e09.2 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.21358e.1: = custom_witness (%Iterator.Op.583fda.2), @Destroy [concrete] -// CHECK:STDOUT: %Iterator.Op.type.ac7e09.3: type = fn_type @Iterator.Op.3 [concrete] -// CHECK:STDOUT: %Iterator.Op.583fda.3: %Iterator.Op.type.ac7e09.3 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.393: = custom_witness (%Iterator.Op.583fda.3), @Inc [concrete] +// CHECK:STDOUT: %custom_witness.116: = custom_witness (%Iterator, %Sentinel, %Begin, %End), @CppRangeForIterate [concrete] +// CHECK:STDOUT: %Iterator.Op.type.3f6dc2.1: type = fn_type @Iterator.Op.1 [concrete] +// CHECK:STDOUT: %Iterator.Op.240e50.1: %Iterator.Op.type.3f6dc2.1 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.5be: = custom_witness (%ValueType, %Iterator.Op.240e50.1), @CppUnsafeDeref [concrete] +// CHECK:STDOUT: %Iterator.Op.type.3f6dc2.2: type = fn_type @Iterator.Op.2 [concrete] +// CHECK:STDOUT: %Iterator.Op.240e50.2: %Iterator.Op.type.3f6dc2.2 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.a147d4.1: = custom_witness (%Iterator.Op.240e50.2), @Destroy [concrete] +// CHECK:STDOUT: %Iterator.Op.type.3f6dc2.3: type = fn_type @Iterator.Op.3 [concrete] +// CHECK:STDOUT: %Iterator.Op.240e50.3: %Iterator.Op.type.3f6dc2.3 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.c31: = custom_witness (%Iterator.Op.240e50.3), @Inc [concrete] // CHECK:STDOUT: %Equal.type: type = fn_type @Equal [concrete] // CHECK:STDOUT: %Equal: %Equal.type = struct_value () [concrete] // CHECK:STDOUT: %NotEqual.type: type = fn_type @NotEqual [concrete] // CHECK:STDOUT: %NotEqual: %NotEqual.type = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.aa4: = custom_witness (%Equal, %NotEqual), @EqWith, @EqWith(%Sentinel) [concrete] +// CHECK:STDOUT: %custom_witness.e21: = custom_witness (%Equal, %NotEqual), @EqWith, @EqWith(%Sentinel) [concrete] // CHECK:STDOUT: %Sentinel.Op.type: type = fn_type @Sentinel.Op [concrete] // CHECK:STDOUT: %Sentinel.Op: %Sentinel.Op.type = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.21358e.2: = custom_witness (%Sentinel.Op), @Destroy [concrete] -// CHECK:STDOUT: %facet_value.2b3: %CppRange_where.type.d682d6.1 = facet_value %ConstRange, (%custom_witness.fef, %custom_witness.c19, %custom_witness.c2f, %custom_witness.21358e.1, %custom_witness.1d3, %custom_witness.393, %custom_witness.aa4, %custom_witness.21358e.2) [concrete] -// CHECK:STDOUT: %tuple.type.df8: type = tuple_type (%Iterator, %Sentinel) [concrete] +// CHECK:STDOUT: %custom_witness.a147d4.2: = custom_witness (%Sentinel.Op), @Destroy [concrete] +// CHECK:STDOUT: %facet_value.289: %CppRange_where.type.d682d6.1 = facet_value %ConstRange, (%custom_witness.c4c, %custom_witness.202, %custom_witness.116, %custom_witness.a147d4.1, %custom_witness.5be, %custom_witness.c31, %custom_witness.e21, %custom_witness.a147d4.2) [concrete] +// CHECK:STDOUT: %tuple.type.7a6: type = tuple_type (%Iterator, %Sentinel) [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.8: type = fn_type @Destroy.Op.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.8: %Destroy.Op.type.1d8f74.8 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.df9cc1.8: = custom_witness (%Destroy.Op.1a2547.8), @Destroy [concrete] -// CHECK:STDOUT: %Destroy.facet.777: %Destroy.type = facet_value %tuple.type.df8, (%custom_witness.df9cc1.8) [concrete] -// CHECK:STDOUT: %Iterate.impl_witness.228: = impl_witness imports.%Iterate.impl_witness_table.121, @T.as_type.as.Iterate.impl(%facet_value.2b3) [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.type.ee9: type = fn_type @T.as_type.as.Iterate.impl.NewCursor, @T.as_type.as.Iterate.impl(%facet_value.2b3) [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.9b6: %T.as_type.as.Iterate.impl.NewCursor.type.ee9 = struct_value () [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.type.381: type = fn_type @T.as_type.as.Iterate.impl.Next, @T.as_type.as.Iterate.impl(%facet_value.2b3) [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.9cd: %T.as_type.as.Iterate.impl.Next.type.381 = struct_value () [concrete] -// CHECK:STDOUT: %Iterate.facet.eeb: %Iterate.type = facet_value %ConstRange, (%Iterate.impl_witness.228) [concrete] -// CHECK:STDOUT: %facet_value.811: %Iterate_where.type.f9d = facet_value %ConstRange, (%Iterate.impl_witness.228) [concrete] -// CHECK:STDOUT: %r.param_patt.a73: %pattern_type.025 = value_param_pattern [concrete] -// CHECK:STDOUT: %r.patt.0b5: %pattern_type.025 = wrapper_binding_pattern r, %r.param_patt.a73 [concrete] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.3de: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.eeb) [concrete] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type.6bd: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.eeb) [concrete] -// CHECK:STDOUT: %.f54: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.3de, %Iterate.facet.eeb [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.specific_fn: = specific_function %T.as_type.as.Iterate.impl.NewCursor.9b6, @T.as_type.as.Iterate.impl.NewCursor(%facet_value.2b3) [concrete] -// CHECK:STDOUT: %ptr.fc0: type = ptr_type %tuple.type.df8 [concrete] -// CHECK:STDOUT: %.47c7: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.6bd, %Iterate.facet.eeb [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.specific_fn: = specific_function %T.as_type.as.Iterate.impl.Next.9cd, @T.as_type.as.Iterate.impl.Next(%facet_value.2b3) [concrete] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type.589: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.777) [concrete] -// CHECK:STDOUT: %.4e1: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.589, %Destroy.facet.777 [concrete] -// CHECK:STDOUT: %complete_type.e35: = complete_type_witness %tuple.type.df8 [concrete] +// CHECK:STDOUT: %Destroy.facet.2fb: %Destroy.type = facet_value %tuple.type.7a6, (%custom_witness.df9cc1.8) [concrete] +// CHECK:STDOUT: %Iterate.impl_witness.6f6: = impl_witness imports.%Iterate.impl_witness_table.121, @T.as_type.as.Iterate.impl(%facet_value.289) [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.type.0fb: type = fn_type @T.as_type.as.Iterate.impl.NewCursor, @T.as_type.as.Iterate.impl(%facet_value.289) [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.126: %T.as_type.as.Iterate.impl.NewCursor.type.0fb = struct_value () [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.type.846: type = fn_type @T.as_type.as.Iterate.impl.Next, @T.as_type.as.Iterate.impl(%facet_value.289) [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.c7f: %T.as_type.as.Iterate.impl.Next.type.846 = struct_value () [concrete] +// CHECK:STDOUT: %Iterate.facet.8d2: %Iterate.type = facet_value %ConstRange, (%Iterate.impl_witness.6f6) [concrete] +// CHECK:STDOUT: %facet_value.142: %Iterate_where.type.081 = facet_value %ConstRange, (%Iterate.impl_witness.6f6) [concrete] +// CHECK:STDOUT: %r.param_patt.ac5: %pattern_type.c1d = value_param_pattern [concrete] +// CHECK:STDOUT: %r.patt.97f: %pattern_type.c1d = wrapper_binding_pattern r, %r.param_patt.ac5 [concrete] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.c36: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.8d2) [concrete] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type.01e: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.8d2) [concrete] +// CHECK:STDOUT: %.a1c: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.c36, %Iterate.facet.8d2 [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.specific_fn: = specific_function %T.as_type.as.Iterate.impl.NewCursor.126, @T.as_type.as.Iterate.impl.NewCursor(%facet_value.289) [concrete] +// CHECK:STDOUT: %ptr.d33: type = ptr_type %tuple.type.7a6 [concrete] +// CHECK:STDOUT: %.eab: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.01e, %Iterate.facet.8d2 [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.specific_fn: = specific_function %T.as_type.as.Iterate.impl.Next.c7f, @T.as_type.as.Iterate.impl.Next(%facet_value.289) [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type.2d5: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.2fb) [concrete] +// CHECK:STDOUT: %.b07: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.2d5, %Destroy.facet.2fb [concrete] +// CHECK:STDOUT: %complete_type.cf0: = complete_type_witness %tuple.type.7a6 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .N = %N +// CHECK:STDOUT: .DiffADL = %DiffADL // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import_ref.bb6: @Optional.%Optional.HasValue.type (%Optional.HasValue.type.e9e) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @Optional.%Optional.HasValue (constants.%Optional.HasValue.6cd)] @@ -3529,7 +3529,7 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Core.import_ref.fd1: @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.NewCursor.type (%T.as_type.as.Iterate.impl.NewCursor.type.953) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.NewCursor (constants.%T.as_type.as.Iterate.impl.NewCursor.544)] // CHECK:STDOUT: %Core.import_ref.273: @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.Next.type (%T.as_type.as.Iterate.impl.Next.type.b36) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.Next (constants.%T.as_type.as.Iterate.impl.Next.d6b)] // CHECK:STDOUT: %Iterate.impl_witness_table.121 = impl_witness_table (%Core.import_ref.eef, %Core.import_ref.fcc, %Core.import_ref.fd1, %Core.import_ref.273), @T.as_type.as.Iterate.impl [concrete] -// CHECK:STDOUT: %N: = namespace [concrete] { +// CHECK:STDOUT: %DiffADL: = namespace [concrete] { // CHECK:STDOUT: .ValueType = %ValueType.decl // CHECK:STDOUT: .ConstRange = %ConstRange.decl // CHECK:STDOUT: import Cpp//... @@ -3548,144 +3548,144 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %ConstRange.decl: type = class_decl @ConstRange [concrete = constants.%ConstRange] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @TestIterate(%R.loc27_17.2: %Iterate_where.type.f9d) { +// CHECK:STDOUT: generic fn @TestIterate(%R.loc27_17.2: %Iterate_where.type.081) { // CHECK:STDOUT: // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: -// CHECK:STDOUT: %Iterate.lookup_impl_witness: = lookup_impl_witness %R.loc27_17.1, @Iterate [symbolic = %Iterate.lookup_impl_witness (constants.%Iterate.lookup_impl_witness.173)] -// CHECK:STDOUT: %Iterate.facet.loc31_31.5: %Iterate.type = facet_value %R.as_type.loc27_73.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc31_31.5 (constants.%Iterate.facet.b38)] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc31_31.5) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.5cd)] -// CHECK:STDOUT: %.loc31_31.20: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc31_31.5 [symbolic = %.loc31_31.20 (constants.%.592)] -// CHECK:STDOUT: %impl.elem2.loc31_31.2: @TestIterate.%.loc31_31.20 (%.592) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc31_31.2 (constants.%impl.elem2.ae2)] -// CHECK:STDOUT: %specific_impl_fn.loc31_31.4: = specific_impl_function %impl.elem2.loc31_31.2, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc31_31.5) [symbolic = %specific_impl_fn.loc31_31.4 (constants.%specific_impl_fn.06e)] +// CHECK:STDOUT: %Iterate.lookup_impl_witness: = lookup_impl_witness %R.loc27_17.1, @Iterate [symbolic = %Iterate.lookup_impl_witness (constants.%Iterate.lookup_impl_witness.bda)] +// CHECK:STDOUT: %Iterate.facet.loc31_37.5: %Iterate.type = facet_value %R.as_type.loc27_79.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc31_37.5 (constants.%Iterate.facet.5c3)] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc31_37.5) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.825)] +// CHECK:STDOUT: %.loc31_37.20: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc31_37.5 [symbolic = %.loc31_37.20 (constants.%.ca5)] +// CHECK:STDOUT: %impl.elem2.loc31_37.2: @TestIterate.%.loc31_37.20 (%.ca5) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc31_37.2 (constants.%impl.elem2.60f)] +// CHECK:STDOUT: %specific_impl_fn.loc31_37.4: = specific_impl_function %impl.elem2.loc31_37.2, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc31_37.5) [symbolic = %specific_impl_fn.loc31_37.4 (constants.%specific_impl_fn.979)] // CHECK:STDOUT: -// CHECK:STDOUT: %ptr: type = ptr_type %as_type [symbolic = %ptr (constants.%ptr.d27)] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc31_31.5) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.d51)] -// CHECK:STDOUT: %.loc31_31.21: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc31_31.5 [symbolic = %.loc31_31.21 (constants.%.524)] -// CHECK:STDOUT: %impl.elem3.loc31_31.2: @TestIterate.%.loc31_31.21 (%.524) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc31_31.2 (constants.%impl.elem3.7a5)] -// CHECK:STDOUT: %specific_impl_fn.loc31_31.5: = specific_impl_function %impl.elem3.loc31_31.2, @Iterate.WithSelf.Next(%Iterate.facet.loc31_31.5) [symbolic = %specific_impl_fn.loc31_31.5 (constants.%specific_impl_fn.24b)] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%impl.elem1) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.9d6)] -// CHECK:STDOUT: %.loc31_31.22: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %impl.elem1 [symbolic = %.loc31_31.22 (constants.%.57c)] -// CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %impl.elem1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.198)] -// CHECK:STDOUT: %impl.elem0.loc31_31.2: @TestIterate.%.loc31_31.22 (%.57c) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc31_31.2 (constants.%impl.elem0.152)] -// CHECK:STDOUT: %specific_impl_fn.loc31_31.6: = specific_impl_function %impl.elem0.loc31_31.2, @Destroy.WithSelf.Op(%impl.elem1) [symbolic = %specific_impl_fn.loc31_31.6 (constants.%specific_impl_fn.9fb)] +// CHECK:STDOUT: %ptr: type = ptr_type %as_type [symbolic = %ptr (constants.%ptr.779)] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc31_37.5) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.37e)] +// CHECK:STDOUT: %.loc31_37.21: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc31_37.5 [symbolic = %.loc31_37.21 (constants.%.493)] +// CHECK:STDOUT: %impl.elem3.loc31_37.2: @TestIterate.%.loc31_37.21 (%.493) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc31_37.2 (constants.%impl.elem3.e03)] +// CHECK:STDOUT: %specific_impl_fn.loc31_37.5: = specific_impl_function %impl.elem3.loc31_37.2, @Iterate.WithSelf.Next(%Iterate.facet.loc31_37.5) [symbolic = %specific_impl_fn.loc31_37.5 (constants.%specific_impl_fn.80c)] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%impl.elem1) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.696)] +// CHECK:STDOUT: %.loc31_37.22: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %impl.elem1 [symbolic = %.loc31_37.22 (constants.%.fbd)] +// CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %impl.elem1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.3ea)] +// CHECK:STDOUT: %impl.elem0.loc31_37.2: @TestIterate.%.loc31_37.22 (%.fbd) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc31_37.2 (constants.%impl.elem0.bb2)] +// CHECK:STDOUT: %specific_impl_fn.loc31_37.6: = specific_impl_function %impl.elem0.loc31_37.2, @Destroy.WithSelf.Op(%impl.elem1) [symbolic = %specific_impl_fn.loc31_37.6 (constants.%specific_impl_fn.fa3)] // CHECK:STDOUT: -// CHECK:STDOUT: fn(%r.param: @TestIterate.%R.as_type.loc27_73.1 (%R.as_type)) { +// CHECK:STDOUT: fn(%r.param: @TestIterate.%R.as_type.loc27_79.1 (%R.as_type)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %pattern_type.e41 = value_binding_pattern i [concrete = constants.%i.patt] +// CHECK:STDOUT: %i.patt: %pattern_type.c43 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %r.ref: @TestIterate.%R.as_type.loc27_73.1 (%R.as_type) = name_ref r, %r -// CHECK:STDOUT: %impl.elem2.loc31_31.1: @TestIterate.%.loc31_31.20 (%.592) = impl_witness_access constants.%Iterate.lookup_impl_witness.173, element2 [symbolic = %impl.elem2.loc31_31.2 (constants.%impl.elem2.ae2)] -// CHECK:STDOUT: %bound_method.loc31_31.1: = bound_method %r.ref, %impl.elem2.loc31_31.1 -// CHECK:STDOUT: %Iterate.facet.loc31_31.1: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.173) [symbolic = %Iterate.facet.loc31_31.5 (constants.%Iterate.facet.b38)] -// CHECK:STDOUT: %.loc31_31.1: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc31_31.1 [symbolic = %Iterate.facet.loc31_31.5 (constants.%Iterate.facet.b38)] -// CHECK:STDOUT: %Iterate.facet.loc31_31.2: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.173) [symbolic = %Iterate.facet.loc31_31.5 (constants.%Iterate.facet.b38)] -// CHECK:STDOUT: %.loc31_31.2: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc31_31.2 [symbolic = %Iterate.facet.loc31_31.5 (constants.%Iterate.facet.b38)] -// CHECK:STDOUT: %specific_impl_fn.loc31_31.1: = specific_impl_function %impl.elem2.loc31_31.1, @Iterate.WithSelf.NewCursor(constants.%Iterate.facet.b38) [symbolic = %specific_impl_fn.loc31_31.4 (constants.%specific_impl_fn.06e)] -// CHECK:STDOUT: %bound_method.loc31_31.2: = bound_method %r.ref, %specific_impl_fn.loc31_31.1 -// CHECK:STDOUT: %var: ref @TestIterate.%as_type (%as_type.e41) = var_storage invalid -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.call: init @TestIterate.%as_type (%as_type.e41) to %var = call %bound_method.loc31_31.2(%r.ref) +// CHECK:STDOUT: %r.ref: @TestIterate.%R.as_type.loc27_79.1 (%R.as_type) = name_ref r, %r +// CHECK:STDOUT: %impl.elem2.loc31_37.1: @TestIterate.%.loc31_37.20 (%.ca5) = impl_witness_access constants.%Iterate.lookup_impl_witness.bda, element2 [symbolic = %impl.elem2.loc31_37.2 (constants.%impl.elem2.60f)] +// CHECK:STDOUT: %bound_method.loc31_37.1: = bound_method %r.ref, %impl.elem2.loc31_37.1 +// CHECK:STDOUT: %Iterate.facet.loc31_37.1: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.bda) [symbolic = %Iterate.facet.loc31_37.5 (constants.%Iterate.facet.5c3)] +// CHECK:STDOUT: %.loc31_37.1: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc31_37.1 [symbolic = %Iterate.facet.loc31_37.5 (constants.%Iterate.facet.5c3)] +// CHECK:STDOUT: %Iterate.facet.loc31_37.2: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.bda) [symbolic = %Iterate.facet.loc31_37.5 (constants.%Iterate.facet.5c3)] +// CHECK:STDOUT: %.loc31_37.2: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc31_37.2 [symbolic = %Iterate.facet.loc31_37.5 (constants.%Iterate.facet.5c3)] +// CHECK:STDOUT: %specific_impl_fn.loc31_37.1: = specific_impl_function %impl.elem2.loc31_37.1, @Iterate.WithSelf.NewCursor(constants.%Iterate.facet.5c3) [symbolic = %specific_impl_fn.loc31_37.4 (constants.%specific_impl_fn.979)] +// CHECK:STDOUT: %bound_method.loc31_37.2: = bound_method %r.ref, %specific_impl_fn.loc31_37.1 +// CHECK:STDOUT: %var: ref @TestIterate.%as_type (%as_type.aee) = var_storage invalid +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.call: init @TestIterate.%as_type (%as_type.aee) to %var = call %bound_method.loc31_37.2(%r.ref) // CHECK:STDOUT: assign %var, %Iterate.WithSelf.NewCursor.call // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.next: -// CHECK:STDOUT: %addr.loc31: @TestIterate.%ptr (%ptr.d27) = addr_of %var -// CHECK:STDOUT: %impl.elem3.loc31_31.1: @TestIterate.%.loc31_31.21 (%.524) = impl_witness_access constants.%Iterate.lookup_impl_witness.173, element3 [symbolic = %impl.elem3.loc31_31.2 (constants.%impl.elem3.7a5)] -// CHECK:STDOUT: %bound_method.loc31_31.3: = bound_method %r.ref, %impl.elem3.loc31_31.1 -// CHECK:STDOUT: %Iterate.facet.loc31_31.3: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.173) [symbolic = %Iterate.facet.loc31_31.5 (constants.%Iterate.facet.b38)] -// CHECK:STDOUT: %.loc31_31.3: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc31_31.3 [symbolic = %Iterate.facet.loc31_31.5 (constants.%Iterate.facet.b38)] -// CHECK:STDOUT: %Iterate.facet.loc31_31.4: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.173) [symbolic = %Iterate.facet.loc31_31.5 (constants.%Iterate.facet.b38)] -// CHECK:STDOUT: %.loc31_31.4: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc31_31.4 [symbolic = %Iterate.facet.loc31_31.5 (constants.%Iterate.facet.b38)] -// CHECK:STDOUT: %.loc31_31.5: %Destroy.type = converted constants.%as_type.e41, constants.%impl.elem1.834 [symbolic = %impl.elem1 (constants.%impl.elem1.834)] -// CHECK:STDOUT: %.loc31_31.6: %Destroy.type = converted constants.%as_type.e41, constants.%impl.elem1.834 [symbolic = %impl.elem1 (constants.%impl.elem1.834)] -// CHECK:STDOUT: %specific_impl_fn.loc31_31.2: = specific_impl_function %impl.elem3.loc31_31.1, @Iterate.WithSelf.Next(constants.%Iterate.facet.b38) [symbolic = %specific_impl_fn.loc31_31.5 (constants.%specific_impl_fn.24b)] -// CHECK:STDOUT: %bound_method.loc31_31.4: = bound_method %r.ref, %specific_impl_fn.loc31_31.2 -// CHECK:STDOUT: %.loc31_31.7: ref %Optional.1f5 = temporary_storage -// CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.1f5 to %.loc31_31.7 = call %bound_method.loc31_31.4(%r.ref, %addr.loc31) -// CHECK:STDOUT: %.loc31_31.8: ref %Optional.1f5 = temporary %.loc31_31.7, %Iterate.WithSelf.Next.call -// CHECK:STDOUT: %.loc31_31.9: %Optional.HasValue.type.527 = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.8dd) [concrete = constants.%Optional.HasValue.017] -// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.527 = name_ref HasValue, %.loc31_31.9 [concrete = constants.%Optional.HasValue.017] -// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc31_31.8, %HasValue.ref -// CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.8dd) [concrete = constants.%Optional.HasValue.specific_fn.2f1] -// CHECK:STDOUT: %bound_method.loc31_31.5: = bound_method %.loc31_31.8, %Optional.HasValue.specific_fn -// CHECK:STDOUT: %.loc31_31.10: %Optional.1f5 = acquire_value %.loc31_31.8 -// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc31_31.5(%.loc31_31.10) -// CHECK:STDOUT: %.loc31_31.11: bool = value_of_initializer %Optional.HasValue.call -// CHECK:STDOUT: %.loc31_31.12: bool = converted %Optional.HasValue.call, %.loc31_31.11 -// CHECK:STDOUT: if %.loc31_31.12 br !for.body else br !for.done +// CHECK:STDOUT: %addr.loc31: @TestIterate.%ptr (%ptr.779) = addr_of %var +// CHECK:STDOUT: %impl.elem3.loc31_37.1: @TestIterate.%.loc31_37.21 (%.493) = impl_witness_access constants.%Iterate.lookup_impl_witness.bda, element3 [symbolic = %impl.elem3.loc31_37.2 (constants.%impl.elem3.e03)] +// CHECK:STDOUT: %bound_method.loc31_37.3: = bound_method %r.ref, %impl.elem3.loc31_37.1 +// CHECK:STDOUT: %Iterate.facet.loc31_37.3: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.bda) [symbolic = %Iterate.facet.loc31_37.5 (constants.%Iterate.facet.5c3)] +// CHECK:STDOUT: %.loc31_37.3: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc31_37.3 [symbolic = %Iterate.facet.loc31_37.5 (constants.%Iterate.facet.5c3)] +// CHECK:STDOUT: %Iterate.facet.loc31_37.4: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.bda) [symbolic = %Iterate.facet.loc31_37.5 (constants.%Iterate.facet.5c3)] +// CHECK:STDOUT: %.loc31_37.4: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc31_37.4 [symbolic = %Iterate.facet.loc31_37.5 (constants.%Iterate.facet.5c3)] +// CHECK:STDOUT: %.loc31_37.5: %Destroy.type = converted constants.%as_type.aee, constants.%impl.elem1.75b [symbolic = %impl.elem1 (constants.%impl.elem1.75b)] +// CHECK:STDOUT: %.loc31_37.6: %Destroy.type = converted constants.%as_type.aee, constants.%impl.elem1.75b [symbolic = %impl.elem1 (constants.%impl.elem1.75b)] +// CHECK:STDOUT: %specific_impl_fn.loc31_37.2: = specific_impl_function %impl.elem3.loc31_37.1, @Iterate.WithSelf.Next(constants.%Iterate.facet.5c3) [symbolic = %specific_impl_fn.loc31_37.5 (constants.%specific_impl_fn.80c)] +// CHECK:STDOUT: %bound_method.loc31_37.4: = bound_method %r.ref, %specific_impl_fn.loc31_37.2 +// CHECK:STDOUT: %.loc31_37.7: ref %Optional.a40 = temporary_storage +// CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.a40 to %.loc31_37.7 = call %bound_method.loc31_37.4(%r.ref, %addr.loc31) +// CHECK:STDOUT: %.loc31_37.8: ref %Optional.a40 = temporary %.loc31_37.7, %Iterate.WithSelf.Next.call +// CHECK:STDOUT: %.loc31_37.9: %Optional.HasValue.type.fe3 = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.b3f) [concrete = constants.%Optional.HasValue.cb1] +// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.fe3 = name_ref HasValue, %.loc31_37.9 [concrete = constants.%Optional.HasValue.cb1] +// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc31_37.8, %HasValue.ref +// CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.b3f) [concrete = constants.%Optional.HasValue.specific_fn.048] +// CHECK:STDOUT: %bound_method.loc31_37.5: = bound_method %.loc31_37.8, %Optional.HasValue.specific_fn +// CHECK:STDOUT: %.loc31_37.10: %Optional.a40 = acquire_value %.loc31_37.8 +// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc31_37.5(%.loc31_37.10) +// CHECK:STDOUT: %.loc31_37.11: bool = value_of_initializer %Optional.HasValue.call +// CHECK:STDOUT: %.loc31_37.12: bool = converted %Optional.HasValue.call, %.loc31_37.11 +// CHECK:STDOUT: if %.loc31_37.12 br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: -// CHECK:STDOUT: %.loc31_31.13: %Optional.Get.type.226 = specific_constant imports.%Core.import_ref.dab, @Optional(constants.%OptionalStorage.facet.8dd) [concrete = constants.%Optional.Get.0db] -// CHECK:STDOUT: %Get.ref: %Optional.Get.type.226 = name_ref Get, %.loc31_31.13 [concrete = constants.%Optional.Get.0db] -// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc31_31.8, %Get.ref -// CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.8dd) [concrete = constants.%Optional.Get.specific_fn.b3f] -// CHECK:STDOUT: %bound_method.loc31_31.6: = bound_method %.loc31_31.8, %Optional.Get.specific_fn -// CHECK:STDOUT: %.loc31_31.14: ref %ValueType = temporary_storage -// CHECK:STDOUT: %.loc31_31.15: %Optional.1f5 = acquire_value %.loc31_31.8 -// CHECK:STDOUT: %Optional.Get.call: init %ValueType to %.loc31_31.14 = call %bound_method.loc31_31.6(%.loc31_31.15) -// CHECK:STDOUT: %.loc31_31.16: ref %ValueType = temporary %.loc31_31.14, %Optional.Get.call -// CHECK:STDOUT: %.loc31_31.17: %ValueType = acquire_value %.loc31_31.16 -// CHECK:STDOUT: %.loc31_16: type = splice_block %ValueType.ref.loc31 [concrete = constants.%ValueType] { +// CHECK:STDOUT: %.loc31_37.13: %Optional.Get.type.316 = specific_constant imports.%Core.import_ref.dab, @Optional(constants.%OptionalStorage.facet.b3f) [concrete = constants.%Optional.Get.4e3] +// CHECK:STDOUT: %Get.ref: %Optional.Get.type.316 = name_ref Get, %.loc31_37.13 [concrete = constants.%Optional.Get.4e3] +// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc31_37.8, %Get.ref +// CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.b3f) [concrete = constants.%Optional.Get.specific_fn.5ce] +// CHECK:STDOUT: %bound_method.loc31_37.6: = bound_method %.loc31_37.8, %Optional.Get.specific_fn +// CHECK:STDOUT: %.loc31_37.14: ref %ValueType = temporary_storage +// CHECK:STDOUT: %.loc31_37.15: %Optional.a40 = acquire_value %.loc31_37.8 +// CHECK:STDOUT: %Optional.Get.call: init %ValueType to %.loc31_37.14 = call %bound_method.loc31_37.6(%.loc31_37.15) +// CHECK:STDOUT: %.loc31_37.16: ref %ValueType = temporary %.loc31_37.14, %Optional.Get.call +// CHECK:STDOUT: %.loc31_37.17: %ValueType = acquire_value %.loc31_37.16 +// CHECK:STDOUT: %.loc31_22: type = splice_block %ValueType.ref.loc31 [concrete = constants.%ValueType] { // CHECK:STDOUT: %Cpp.ref.loc31: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %N.ref.loc31: = name_ref N, imports.%N [concrete = imports.%N] +// CHECK:STDOUT: %DiffADL.ref.loc31: = name_ref DiffADL, imports.%DiffADL [concrete = imports.%DiffADL] // CHECK:STDOUT: %ValueType.ref.loc31: type = name_ref ValueType, imports.%ValueType.decl [concrete = constants.%ValueType] // CHECK:STDOUT: } -// CHECK:STDOUT: %i: %ValueType = wrapper_binding i, %.loc31_31.17 +// CHECK:STDOUT: %i: %ValueType = wrapper_binding i, %.loc31_37.17 // CHECK:STDOUT: %sum.ref: ref %ValueType = name_ref sum, %sum // CHECK:STDOUT: %i.ref: %ValueType = name_ref i, %i // CHECK:STDOUT: %.loc32_12: ref %ValueType = value_as_ref %i.ref -// CHECK:STDOUT: %addr.loc32: %ptr.9d3 = addr_of %.loc32_12 -// CHECK:STDOUT: %.loc32_9.1: %ptr.32e = as_compatible %addr.loc32 -// CHECK:STDOUT: %.loc32_9.2: %ptr.32e = converted %addr.loc32, %.loc32_9.1 +// CHECK:STDOUT: %addr.loc32: %ptr.233 = addr_of %.loc32_12 +// CHECK:STDOUT: %.loc32_9.1: %ptr.69c = as_compatible %addr.loc32 +// CHECK:STDOUT: %.loc32_9.2: %ptr.69c = converted %addr.loc32, %.loc32_9.1 // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.call: ref %ValueType = call imports.%operator_PlusEqual__carbon_thunk.decl(%sum.ref, %.loc32_9.2) -// CHECK:STDOUT: %ValueType.Op.bound.loc31: = bound_method %.loc31_31.16, constants.%ValueType.Op.4c94b9.1 +// CHECK:STDOUT: %ValueType.Op.bound.loc31: = bound_method %.loc31_37.16, constants.%ValueType.Op.4ec7f2.1 // CHECK:STDOUT: %Op.ref.loc31: %ValueType.cpp_destructor.type = name_ref Op, imports.%ValueType.cpp_destructor.decl [concrete = constants.%ValueType.cpp_destructor] -// CHECK:STDOUT: %ValueType.cpp_destructor.bound.loc31: = bound_method %.loc31_31.16, %Op.ref.loc31 -// CHECK:STDOUT: %ValueType.cpp_destructor.call.loc31: init %empty_tuple.type = call %ValueType.cpp_destructor.bound.loc31(%.loc31_31.16) -// CHECK:STDOUT: %Destroy.Op.bound.loc31_31.1: = bound_method %.loc31_31.8, constants.%Destroy.Op.1a2547.7 -// CHECK:STDOUT: %Destroy.Op.call.loc31_31.1: init %empty_tuple.type = call %Destroy.Op.bound.loc31_31.1(%.loc31_31.8) +// CHECK:STDOUT: %ValueType.cpp_destructor.bound.loc31: = bound_method %.loc31_37.16, %Op.ref.loc31 +// CHECK:STDOUT: %ValueType.cpp_destructor.call.loc31: init %empty_tuple.type = call %ValueType.cpp_destructor.bound.loc31(%.loc31_37.16) +// CHECK:STDOUT: %Destroy.Op.bound.loc31_37.1: = bound_method %.loc31_37.8, constants.%Destroy.Op.1a2547.7 +// CHECK:STDOUT: %Destroy.Op.call.loc31_37.1: init %empty_tuple.type = call %Destroy.Op.bound.loc31_37.1(%.loc31_37.8) // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: -// CHECK:STDOUT: %Destroy.Op.bound.loc31_31.2: = bound_method %.loc31_31.8, constants.%Destroy.Op.1a2547.7 -// CHECK:STDOUT: %Destroy.Op.call.loc31_31.2: init %empty_tuple.type = call %Destroy.Op.bound.loc31_31.2(%.loc31_31.8) -// CHECK:STDOUT: %impl.elem0.loc31_31.1: @TestIterate.%.loc31_31.22 (%.57c) = impl_witness_access constants.%Destroy.lookup_impl_witness.198, element0 [symbolic = %impl.elem0.loc31_31.2 (constants.%impl.elem0.152)] -// CHECK:STDOUT: %bound_method.loc31_31.7: = bound_method %var, %impl.elem0.loc31_31.1 -// CHECK:STDOUT: %.loc31_31.18: %Destroy.type = converted constants.%as_type.e41, constants.%impl.elem1.834 [symbolic = %impl.elem1 (constants.%impl.elem1.834)] -// CHECK:STDOUT: %.loc31_31.19: %Destroy.type = converted constants.%as_type.e41, constants.%impl.elem1.834 [symbolic = %impl.elem1 (constants.%impl.elem1.834)] -// CHECK:STDOUT: %specific_impl_fn.loc31_31.3: = specific_impl_function %impl.elem0.loc31_31.1, @Destroy.WithSelf.Op(constants.%impl.elem1.834) [symbolic = %specific_impl_fn.loc31_31.6 (constants.%specific_impl_fn.9fb)] -// CHECK:STDOUT: %bound_method.loc31_31.8: = bound_method %var, %specific_impl_fn.loc31_31.3 -// CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc31_31.8(%var) +// CHECK:STDOUT: %Destroy.Op.bound.loc31_37.2: = bound_method %.loc31_37.8, constants.%Destroy.Op.1a2547.7 +// CHECK:STDOUT: %Destroy.Op.call.loc31_37.2: init %empty_tuple.type = call %Destroy.Op.bound.loc31_37.2(%.loc31_37.8) +// CHECK:STDOUT: %impl.elem0.loc31_37.1: @TestIterate.%.loc31_37.22 (%.fbd) = impl_witness_access constants.%Destroy.lookup_impl_witness.3ea, element0 [symbolic = %impl.elem0.loc31_37.2 (constants.%impl.elem0.bb2)] +// CHECK:STDOUT: %bound_method.loc31_37.7: = bound_method %var, %impl.elem0.loc31_37.1 +// CHECK:STDOUT: %.loc31_37.18: %Destroy.type = converted constants.%as_type.aee, constants.%impl.elem1.75b [symbolic = %impl.elem1 (constants.%impl.elem1.75b)] +// CHECK:STDOUT: %.loc31_37.19: %Destroy.type = converted constants.%as_type.aee, constants.%impl.elem1.75b [symbolic = %impl.elem1 (constants.%impl.elem1.75b)] +// CHECK:STDOUT: %specific_impl_fn.loc31_37.3: = specific_impl_function %impl.elem0.loc31_37.1, @Destroy.WithSelf.Op(constants.%impl.elem1.75b) [symbolic = %specific_impl_fn.loc31_37.6 (constants.%specific_impl_fn.fa3)] +// CHECK:STDOUT: %bound_method.loc31_37.8: = bound_method %var, %specific_impl_fn.loc31_37.3 +// CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc31_37.8(%var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc31_31.1(%self.param: ref %.b36) { +// CHECK:STDOUT: fn @Destroy.Op.loc31_37.1(%self.param: ref %.be1) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc31_31.2(%self.param: ref %MaybeUnformed.669) { +// CHECK:STDOUT: fn @Destroy.Op.loc31_37.2(%self.param: ref %MaybeUnformed.e16) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc31_31.3(%self.param: ref bool) = "no_op"; +// CHECK:STDOUT: fn @Destroy.Op.loc31_37.3(%self.param: ref bool) = "no_op"; // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc31_31.4(%self.param: ref %struct_type.value.has_value.5a1) { +// CHECK:STDOUT: fn @Destroy.Op.loc31_37.4(%self.param: ref %struct_type.value.has_value.baa) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc31_31.5(%self.param: ref %DefaultOptionalStorage.257) { +// CHECK:STDOUT: fn @Destroy.Op.loc31_37.5(%self.param: ref %DefaultOptionalStorage.8b2) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc31_31.6(%self.param: ref %Optional.1f5) { +// CHECK:STDOUT: fn @Destroy.Op.loc31_37.6(%self.param: ref %Optional.a40) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } @@ -3694,124 +3694,124 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %pattern_type.e41 = value_binding_pattern i [concrete = constants.%i.patt] +// CHECK:STDOUT: %i.patt: %pattern_type.c43 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %c.ref: %ConstRange = name_ref c, %c -// CHECK:STDOUT: %impl.elem2: %.f54 = impl_witness_access constants.%Iterate.impl_witness.228, element2 [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.9b6] -// CHECK:STDOUT: %bound_method.loc45_31.1: = bound_method %c.ref, %impl.elem2 -// CHECK:STDOUT: %facet_value.loc45_31.1: %CppRange_where.type.d682d6.1 = facet_value constants.%ConstRange, (constants.%custom_witness.fef, constants.%custom_witness.c19, constants.%custom_witness.c2f, constants.%custom_witness.21358e.1, constants.%custom_witness.1d3, constants.%custom_witness.393, constants.%custom_witness.aa4, constants.%custom_witness.21358e.2) [concrete = constants.%facet_value.2b3] -// CHECK:STDOUT: %.loc45_31.1: %CppRange_where.type.d682d6.1 = converted constants.%ConstRange, %facet_value.loc45_31.1 [concrete = constants.%facet_value.2b3] -// CHECK:STDOUT: %facet_value.loc45_31.2: %CppRange_where.type.d682d6.1 = facet_value constants.%ConstRange, (constants.%custom_witness.fef, constants.%custom_witness.c19, constants.%custom_witness.c2f, constants.%custom_witness.21358e.1, constants.%custom_witness.1d3, constants.%custom_witness.393, constants.%custom_witness.aa4, constants.%custom_witness.21358e.2) [concrete = constants.%facet_value.2b3] -// CHECK:STDOUT: %.loc45_31.2: %CppRange_where.type.d682d6.1 = converted constants.%ConstRange, %facet_value.loc45_31.2 [concrete = constants.%facet_value.2b3] -// CHECK:STDOUT: %specific_fn.loc45_31.1: = specific_function %impl.elem2, @T.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.2b3) [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn] -// CHECK:STDOUT: %bound_method.loc45_31.2: = bound_method %c.ref, %specific_fn.loc45_31.1 -// CHECK:STDOUT: %var: ref %tuple.type.df8 = var_storage invalid -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.call: init %tuple.type.df8 to %var = call %bound_method.loc45_31.2(%c.ref) +// CHECK:STDOUT: %impl.elem2: %.a1c = impl_witness_access constants.%Iterate.impl_witness.6f6, element2 [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.126] +// CHECK:STDOUT: %bound_method.loc45_37.1: = bound_method %c.ref, %impl.elem2 +// CHECK:STDOUT: %facet_value.loc45_37.1: %CppRange_where.type.d682d6.1 = facet_value constants.%ConstRange, (constants.%custom_witness.c4c, constants.%custom_witness.202, constants.%custom_witness.116, constants.%custom_witness.a147d4.1, constants.%custom_witness.5be, constants.%custom_witness.c31, constants.%custom_witness.e21, constants.%custom_witness.a147d4.2) [concrete = constants.%facet_value.289] +// CHECK:STDOUT: %.loc45_37.1: %CppRange_where.type.d682d6.1 = converted constants.%ConstRange, %facet_value.loc45_37.1 [concrete = constants.%facet_value.289] +// CHECK:STDOUT: %facet_value.loc45_37.2: %CppRange_where.type.d682d6.1 = facet_value constants.%ConstRange, (constants.%custom_witness.c4c, constants.%custom_witness.202, constants.%custom_witness.116, constants.%custom_witness.a147d4.1, constants.%custom_witness.5be, constants.%custom_witness.c31, constants.%custom_witness.e21, constants.%custom_witness.a147d4.2) [concrete = constants.%facet_value.289] +// CHECK:STDOUT: %.loc45_37.2: %CppRange_where.type.d682d6.1 = converted constants.%ConstRange, %facet_value.loc45_37.2 [concrete = constants.%facet_value.289] +// CHECK:STDOUT: %specific_fn.loc45_37.1: = specific_function %impl.elem2, @T.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.289) [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn] +// CHECK:STDOUT: %bound_method.loc45_37.2: = bound_method %c.ref, %specific_fn.loc45_37.1 +// CHECK:STDOUT: %var: ref %tuple.type.7a6 = var_storage invalid +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.call: init %tuple.type.7a6 to %var = call %bound_method.loc45_37.2(%c.ref) // CHECK:STDOUT: assign %var, %T.as_type.as.Iterate.impl.NewCursor.call // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.next: -// CHECK:STDOUT: %addr.loc45: %ptr.fc0 = addr_of %var -// CHECK:STDOUT: %impl.elem3: %.47c7 = impl_witness_access constants.%Iterate.impl_witness.228, element3 [concrete = constants.%T.as_type.as.Iterate.impl.Next.9cd] -// CHECK:STDOUT: %bound_method.loc45_31.3: = bound_method %c.ref, %impl.elem3 -// CHECK:STDOUT: %facet_value.loc45_31.3: %CppRange_where.type.d682d6.1 = facet_value constants.%ConstRange, (constants.%custom_witness.fef, constants.%custom_witness.c19, constants.%custom_witness.c2f, constants.%custom_witness.21358e.1, constants.%custom_witness.1d3, constants.%custom_witness.393, constants.%custom_witness.aa4, constants.%custom_witness.21358e.2) [concrete = constants.%facet_value.2b3] -// CHECK:STDOUT: %.loc45_31.3: %CppRange_where.type.d682d6.1 = converted constants.%ConstRange, %facet_value.loc45_31.3 [concrete = constants.%facet_value.2b3] -// CHECK:STDOUT: %facet_value.loc45_31.4: %CppRange_where.type.d682d6.1 = facet_value constants.%ConstRange, (constants.%custom_witness.fef, constants.%custom_witness.c19, constants.%custom_witness.c2f, constants.%custom_witness.21358e.1, constants.%custom_witness.1d3, constants.%custom_witness.393, constants.%custom_witness.aa4, constants.%custom_witness.21358e.2) [concrete = constants.%facet_value.2b3] -// CHECK:STDOUT: %.loc45_31.4: %CppRange_where.type.d682d6.1 = converted constants.%ConstRange, %facet_value.loc45_31.4 [concrete = constants.%facet_value.2b3] -// CHECK:STDOUT: %specific_fn.loc45_31.2: = specific_function %impl.elem3, @T.as_type.as.Iterate.impl.Next(constants.%facet_value.2b3) [concrete = constants.%T.as_type.as.Iterate.impl.Next.specific_fn] -// CHECK:STDOUT: %bound_method.loc45_31.4: = bound_method %c.ref, %specific_fn.loc45_31.2 -// CHECK:STDOUT: %.loc45_31.5: ref %Optional.1f5 = temporary_storage -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.call: init %Optional.1f5 to %.loc45_31.5 = call %bound_method.loc45_31.4(%c.ref, %addr.loc45) -// CHECK:STDOUT: %.loc45_31.6: ref %Optional.1f5 = temporary %.loc45_31.5, %T.as_type.as.Iterate.impl.Next.call -// CHECK:STDOUT: %.loc45_31.7: %Optional.HasValue.type.527 = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.8dd) [concrete = constants.%Optional.HasValue.017] -// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.527 = name_ref HasValue, %.loc45_31.7 [concrete = constants.%Optional.HasValue.017] -// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc45_31.6, %HasValue.ref -// CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.8dd) [concrete = constants.%Optional.HasValue.specific_fn.2f1] -// CHECK:STDOUT: %bound_method.loc45_31.5: = bound_method %.loc45_31.6, %Optional.HasValue.specific_fn -// CHECK:STDOUT: %.loc45_31.8: %Optional.1f5 = acquire_value %.loc45_31.6 -// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc45_31.5(%.loc45_31.8) -// CHECK:STDOUT: %.loc45_31.9: bool = value_of_initializer %Optional.HasValue.call -// CHECK:STDOUT: %.loc45_31.10: bool = converted %Optional.HasValue.call, %.loc45_31.9 -// CHECK:STDOUT: if %.loc45_31.10 br !for.body else br !for.done +// CHECK:STDOUT: %addr.loc45: %ptr.d33 = addr_of %var +// CHECK:STDOUT: %impl.elem3: %.eab = impl_witness_access constants.%Iterate.impl_witness.6f6, element3 [concrete = constants.%T.as_type.as.Iterate.impl.Next.c7f] +// CHECK:STDOUT: %bound_method.loc45_37.3: = bound_method %c.ref, %impl.elem3 +// CHECK:STDOUT: %facet_value.loc45_37.3: %CppRange_where.type.d682d6.1 = facet_value constants.%ConstRange, (constants.%custom_witness.c4c, constants.%custom_witness.202, constants.%custom_witness.116, constants.%custom_witness.a147d4.1, constants.%custom_witness.5be, constants.%custom_witness.c31, constants.%custom_witness.e21, constants.%custom_witness.a147d4.2) [concrete = constants.%facet_value.289] +// CHECK:STDOUT: %.loc45_37.3: %CppRange_where.type.d682d6.1 = converted constants.%ConstRange, %facet_value.loc45_37.3 [concrete = constants.%facet_value.289] +// CHECK:STDOUT: %facet_value.loc45_37.4: %CppRange_where.type.d682d6.1 = facet_value constants.%ConstRange, (constants.%custom_witness.c4c, constants.%custom_witness.202, constants.%custom_witness.116, constants.%custom_witness.a147d4.1, constants.%custom_witness.5be, constants.%custom_witness.c31, constants.%custom_witness.e21, constants.%custom_witness.a147d4.2) [concrete = constants.%facet_value.289] +// CHECK:STDOUT: %.loc45_37.4: %CppRange_where.type.d682d6.1 = converted constants.%ConstRange, %facet_value.loc45_37.4 [concrete = constants.%facet_value.289] +// CHECK:STDOUT: %specific_fn.loc45_37.2: = specific_function %impl.elem3, @T.as_type.as.Iterate.impl.Next(constants.%facet_value.289) [concrete = constants.%T.as_type.as.Iterate.impl.Next.specific_fn] +// CHECK:STDOUT: %bound_method.loc45_37.4: = bound_method %c.ref, %specific_fn.loc45_37.2 +// CHECK:STDOUT: %.loc45_37.5: ref %Optional.a40 = temporary_storage +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.call: init %Optional.a40 to %.loc45_37.5 = call %bound_method.loc45_37.4(%c.ref, %addr.loc45) +// CHECK:STDOUT: %.loc45_37.6: ref %Optional.a40 = temporary %.loc45_37.5, %T.as_type.as.Iterate.impl.Next.call +// CHECK:STDOUT: %.loc45_37.7: %Optional.HasValue.type.fe3 = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.b3f) [concrete = constants.%Optional.HasValue.cb1] +// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.fe3 = name_ref HasValue, %.loc45_37.7 [concrete = constants.%Optional.HasValue.cb1] +// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc45_37.6, %HasValue.ref +// CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.b3f) [concrete = constants.%Optional.HasValue.specific_fn.048] +// CHECK:STDOUT: %bound_method.loc45_37.5: = bound_method %.loc45_37.6, %Optional.HasValue.specific_fn +// CHECK:STDOUT: %.loc45_37.8: %Optional.a40 = acquire_value %.loc45_37.6 +// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc45_37.5(%.loc45_37.8) +// CHECK:STDOUT: %.loc45_37.9: bool = value_of_initializer %Optional.HasValue.call +// CHECK:STDOUT: %.loc45_37.10: bool = converted %Optional.HasValue.call, %.loc45_37.9 +// CHECK:STDOUT: if %.loc45_37.10 br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: -// CHECK:STDOUT: %.loc45_31.11: %Optional.Get.type.226 = specific_constant imports.%Core.import_ref.dab, @Optional(constants.%OptionalStorage.facet.8dd) [concrete = constants.%Optional.Get.0db] -// CHECK:STDOUT: %Get.ref: %Optional.Get.type.226 = name_ref Get, %.loc45_31.11 [concrete = constants.%Optional.Get.0db] -// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc45_31.6, %Get.ref -// CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.8dd) [concrete = constants.%Optional.Get.specific_fn.b3f] -// CHECK:STDOUT: %bound_method.loc45_31.6: = bound_method %.loc45_31.6, %Optional.Get.specific_fn -// CHECK:STDOUT: %.loc45_31.12: ref %ValueType = temporary_storage -// CHECK:STDOUT: %.loc45_31.13: %Optional.1f5 = acquire_value %.loc45_31.6 -// CHECK:STDOUT: %Optional.Get.call: init %ValueType to %.loc45_31.12 = call %bound_method.loc45_31.6(%.loc45_31.13) -// CHECK:STDOUT: %.loc45_31.14: ref %ValueType = temporary %.loc45_31.12, %Optional.Get.call -// CHECK:STDOUT: %.loc45_31.15: %ValueType = acquire_value %.loc45_31.14 -// CHECK:STDOUT: %.loc45_16: type = splice_block %ValueType.ref.loc45 [concrete = constants.%ValueType] { +// CHECK:STDOUT: %.loc45_37.11: %Optional.Get.type.316 = specific_constant imports.%Core.import_ref.dab, @Optional(constants.%OptionalStorage.facet.b3f) [concrete = constants.%Optional.Get.4e3] +// CHECK:STDOUT: %Get.ref: %Optional.Get.type.316 = name_ref Get, %.loc45_37.11 [concrete = constants.%Optional.Get.4e3] +// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc45_37.6, %Get.ref +// CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.b3f) [concrete = constants.%Optional.Get.specific_fn.5ce] +// CHECK:STDOUT: %bound_method.loc45_37.6: = bound_method %.loc45_37.6, %Optional.Get.specific_fn +// CHECK:STDOUT: %.loc45_37.12: ref %ValueType = temporary_storage +// CHECK:STDOUT: %.loc45_37.13: %Optional.a40 = acquire_value %.loc45_37.6 +// CHECK:STDOUT: %Optional.Get.call: init %ValueType to %.loc45_37.12 = call %bound_method.loc45_37.6(%.loc45_37.13) +// CHECK:STDOUT: %.loc45_37.14: ref %ValueType = temporary %.loc45_37.12, %Optional.Get.call +// CHECK:STDOUT: %.loc45_37.15: %ValueType = acquire_value %.loc45_37.14 +// CHECK:STDOUT: %.loc45_22: type = splice_block %ValueType.ref.loc45 [concrete = constants.%ValueType] { // CHECK:STDOUT: %Cpp.ref.loc45: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %N.ref.loc45: = name_ref N, imports.%N [concrete = imports.%N] +// CHECK:STDOUT: %DiffADL.ref.loc45: = name_ref DiffADL, imports.%DiffADL [concrete = imports.%DiffADL] // CHECK:STDOUT: %ValueType.ref.loc45: type = name_ref ValueType, imports.%ValueType.decl [concrete = constants.%ValueType] // CHECK:STDOUT: } -// CHECK:STDOUT: %i: %ValueType = wrapper_binding i, %.loc45_31.15 +// CHECK:STDOUT: %i: %ValueType = wrapper_binding i, %.loc45_37.15 // CHECK:STDOUT: %sum.ref: ref %ValueType = name_ref sum, %sum // CHECK:STDOUT: %i.ref: %ValueType = name_ref i, %i // CHECK:STDOUT: %.loc46_12: ref %ValueType = value_as_ref %i.ref -// CHECK:STDOUT: %addr.loc46: %ptr.9d3 = addr_of %.loc46_12 -// CHECK:STDOUT: %.loc46_9.1: %ptr.32e = as_compatible %addr.loc46 -// CHECK:STDOUT: %.loc46_9.2: %ptr.32e = converted %addr.loc46, %.loc46_9.1 +// CHECK:STDOUT: %addr.loc46: %ptr.233 = addr_of %.loc46_12 +// CHECK:STDOUT: %.loc46_9.1: %ptr.69c = as_compatible %addr.loc46 +// CHECK:STDOUT: %.loc46_9.2: %ptr.69c = converted %addr.loc46, %.loc46_9.1 // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.call: ref %ValueType = call imports.%operator_PlusEqual__carbon_thunk.decl(%sum.ref, %.loc46_9.2) -// CHECK:STDOUT: %ValueType.Op.bound.loc45: = bound_method %.loc45_31.14, constants.%ValueType.Op.4c94b9.1 +// CHECK:STDOUT: %ValueType.Op.bound.loc45: = bound_method %.loc45_37.14, constants.%ValueType.Op.4ec7f2.1 // CHECK:STDOUT: %Op.ref.loc45: %ValueType.cpp_destructor.type = name_ref Op, imports.%ValueType.cpp_destructor.decl [concrete = constants.%ValueType.cpp_destructor] -// CHECK:STDOUT: %ValueType.cpp_destructor.bound.loc45: = bound_method %.loc45_31.14, %Op.ref.loc45 -// CHECK:STDOUT: %ValueType.cpp_destructor.call.loc45: init %empty_tuple.type = call %ValueType.cpp_destructor.bound.loc45(%.loc45_31.14) -// CHECK:STDOUT: %Destroy.Op.bound.loc45_31.1: = bound_method %.loc45_31.6, constants.%Destroy.Op.1a2547.7 -// CHECK:STDOUT: %Destroy.Op.call.loc45_31.1: init %empty_tuple.type = call %Destroy.Op.bound.loc45_31.1(%.loc45_31.6) +// CHECK:STDOUT: %ValueType.cpp_destructor.bound.loc45: = bound_method %.loc45_37.14, %Op.ref.loc45 +// CHECK:STDOUT: %ValueType.cpp_destructor.call.loc45: init %empty_tuple.type = call %ValueType.cpp_destructor.bound.loc45(%.loc45_37.14) +// CHECK:STDOUT: %Destroy.Op.bound.loc45_37.1: = bound_method %.loc45_37.6, constants.%Destroy.Op.1a2547.7 +// CHECK:STDOUT: %Destroy.Op.call.loc45_37.1: init %empty_tuple.type = call %Destroy.Op.bound.loc45_37.1(%.loc45_37.6) // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: -// CHECK:STDOUT: %Destroy.Op.bound.loc45_31.2: = bound_method %.loc45_31.6, constants.%Destroy.Op.1a2547.7 -// CHECK:STDOUT: %Destroy.Op.call.loc45_31.2: init %empty_tuple.type = call %Destroy.Op.bound.loc45_31.2(%.loc45_31.6) -// CHECK:STDOUT: %Destroy.Op.bound.loc45_31.3: = bound_method %var, constants.%Destroy.Op.1a2547.8 -// CHECK:STDOUT: %Destroy.Op.call.loc45_31.3: init %empty_tuple.type = call %Destroy.Op.bound.loc45_31.3(%var) +// CHECK:STDOUT: %Destroy.Op.bound.loc45_37.2: = bound_method %.loc45_37.6, constants.%Destroy.Op.1a2547.7 +// CHECK:STDOUT: %Destroy.Op.call.loc45_37.2: init %empty_tuple.type = call %Destroy.Op.bound.loc45_37.2(%.loc45_37.6) +// CHECK:STDOUT: %Destroy.Op.bound.loc45_37.3: = bound_method %var, constants.%Destroy.Op.1a2547.8 +// CHECK:STDOUT: %Destroy.Op.call.loc45_37.3: init %empty_tuple.type = call %Destroy.Op.bound.loc45_37.3(%var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestIterate(constants.%R) { // CHECK:STDOUT: %R.patt.loc27_17.2 => constants.%R.patt // CHECK:STDOUT: %R.loc27_17.1 => constants.%R -// CHECK:STDOUT: %R.as_type.loc27_73.1 => constants.%R.as_type -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.17d -// CHECK:STDOUT: %r.param_patt.loc27_71.2 => constants.%r.param_patt.90c -// CHECK:STDOUT: %r.patt.loc27_71.2 => constants.%r.patt.db8 +// CHECK:STDOUT: %R.as_type.loc27_79.1 => constants.%R.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.a97 +// CHECK:STDOUT: %r.param_patt.loc27_77.2 => constants.%r.param_patt.8bc +// CHECK:STDOUT: %r.patt.loc27_77.2 => constants.%r.patt.440 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @TestIterate(constants.%facet_value.811) { +// CHECK:STDOUT: specific @TestIterate(constants.%facet_value.142) { // CHECK:STDOUT: %R.patt.loc27_17.2 => constants.%R.patt -// CHECK:STDOUT: %R.loc27_17.1 => constants.%facet_value.811 -// CHECK:STDOUT: %R.as_type.loc27_73.1 => constants.%ConstRange -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.025 -// CHECK:STDOUT: %r.param_patt.loc27_71.2 => constants.%r.param_patt.a73 -// CHECK:STDOUT: %r.patt.loc27_71.2 => constants.%r.patt.0b5 +// CHECK:STDOUT: %R.loc27_17.1 => constants.%facet_value.142 +// CHECK:STDOUT: %R.as_type.loc27_79.1 => constants.%ConstRange +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.c1d +// CHECK:STDOUT: %r.param_patt.loc27_77.2 => constants.%r.param_patt.ac5 +// CHECK:STDOUT: %r.patt.loc27_77.2 => constants.%r.patt.97f // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc27 => constants.%complete_type.357 -// CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.228 -// CHECK:STDOUT: %Iterate.facet.loc31_31.5 => constants.%Iterate.facet.eeb -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.3de -// CHECK:STDOUT: %.loc31_31.20 => constants.%.f54 -// CHECK:STDOUT: %impl.elem2.loc31_31.2 => constants.%T.as_type.as.Iterate.impl.NewCursor.9b6 -// CHECK:STDOUT: %specific_impl_fn.loc31_31.4 => constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn -// CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.777 -// CHECK:STDOUT: %as_type => constants.%tuple.type.df8 -// CHECK:STDOUT: %require_complete.1 => constants.%complete_type.e35 -// CHECK:STDOUT: %ptr => constants.%ptr.fc0 -// CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.6bd -// CHECK:STDOUT: %.loc31_31.21 => constants.%.47c7 -// CHECK:STDOUT: %impl.elem3.loc31_31.2 => constants.%T.as_type.as.Iterate.impl.Next.9cd -// CHECK:STDOUT: %specific_impl_fn.loc31_31.5 => constants.%T.as_type.as.Iterate.impl.Next.specific_fn -// CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.589 -// CHECK:STDOUT: %.loc31_31.22 => constants.%.4e1 +// CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.6f6 +// CHECK:STDOUT: %Iterate.facet.loc31_37.5 => constants.%Iterate.facet.8d2 +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.c36 +// CHECK:STDOUT: %.loc31_37.20 => constants.%.a1c +// CHECK:STDOUT: %impl.elem2.loc31_37.2 => constants.%T.as_type.as.Iterate.impl.NewCursor.126 +// CHECK:STDOUT: %specific_impl_fn.loc31_37.4 => constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn +// CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.2fb +// CHECK:STDOUT: %as_type => constants.%tuple.type.7a6 +// CHECK:STDOUT: %require_complete.1 => constants.%complete_type.cf0 +// CHECK:STDOUT: %ptr => constants.%ptr.d33 +// CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.01e +// CHECK:STDOUT: %.loc31_37.21 => constants.%.eab +// CHECK:STDOUT: %impl.elem3.loc31_37.2 => constants.%T.as_type.as.Iterate.impl.Next.c7f +// CHECK:STDOUT: %specific_impl_fn.loc31_37.5 => constants.%T.as_type.as.Iterate.impl.Next.specific_fn +// CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.2d5 +// CHECK:STDOUT: %.loc31_37.22 => constants.%.b07 // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.df9cc1.8 -// CHECK:STDOUT: %impl.elem0.loc31_31.2 => constants.%Destroy.Op.1a2547.8 -// CHECK:STDOUT: %specific_impl_fn.loc31_31.6 => constants.%Destroy.Op.1a2547.8 +// CHECK:STDOUT: %impl.elem0.loc31_37.2 => constants.%Destroy.Op.1a2547.8 +// CHECK:STDOUT: %specific_impl_fn.loc31_37.6 => constants.%Destroy.Op.1a2547.8 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_adl_returns_different_types_mutable.carbon @@ -3835,72 +3835,72 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %T.as_type.as.OptionalStorage.impl.Has.4ee: %T.as_type.as.OptionalStorage.impl.Has.type.e5a = struct_value () [symbolic] // CHECK:STDOUT: %.Self.500: %Iterate.type = symbolic_binding .Self [symbolic_self] // CHECK:STDOUT: %ValueType: type = class_type @ValueType [concrete] -// CHECK:STDOUT: %pattern_type.e41: type = pattern_type %ValueType [concrete] +// CHECK:STDOUT: %pattern_type.d2d: type = pattern_type %ValueType [concrete] // CHECK:STDOUT: %ValueType.cpp_destructor.type: type = fn_type @ValueType.cpp_destructor [concrete] // CHECK:STDOUT: %ValueType.cpp_destructor: %ValueType.cpp_destructor.type = struct_value () [concrete] -// CHECK:STDOUT: %ValueType.Op.type.79266b.1: type = fn_type @ValueType.Op.1 [concrete] -// CHECK:STDOUT: %ValueType.Op.4c94b9.1: %ValueType.Op.type.79266b.1 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.fef: = custom_witness (%ValueType.Op.4c94b9.1), @Destroy [concrete] -// CHECK:STDOUT: %const.773: type = const_type %ValueType [concrete] -// CHECK:STDOUT: %ptr.32e: type = ptr_type %const.773 [concrete] -// CHECK:STDOUT: %ptr.9d3: type = ptr_type %ValueType [concrete] -// CHECK:STDOUT: %ValueType.Op.type.79266b.2: type = fn_type @ValueType.Op.2 [concrete] -// CHECK:STDOUT: %ValueType.Op.4c94b9.2: %ValueType.Op.type.79266b.2 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.c19: = custom_witness (%ValueType.Op.4c94b9.2), @Copy [concrete] -// CHECK:STDOUT: %facet_value.ccb: %facet_type.f48 = facet_value %ValueType, (%custom_witness.fef, %custom_witness.c19) [concrete] +// CHECK:STDOUT: %ValueType.Op.type.db6aa9.1: type = fn_type @ValueType.Op.1 [concrete] +// CHECK:STDOUT: %ValueType.Op.4590ed.1: %ValueType.Op.type.db6aa9.1 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.d86: = custom_witness (%ValueType.Op.4590ed.1), @Destroy [concrete] +// CHECK:STDOUT: %const.91f: type = const_type %ValueType [concrete] +// CHECK:STDOUT: %ptr.5f4: type = ptr_type %const.91f [concrete] +// CHECK:STDOUT: %ptr.9c6: type = ptr_type %ValueType [concrete] +// CHECK:STDOUT: %ValueType.Op.type.db6aa9.2: type = fn_type @ValueType.Op.2 [concrete] +// CHECK:STDOUT: %ValueType.Op.4590ed.2: %ValueType.Op.type.db6aa9.2 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.587: = custom_witness (%ValueType.Op.4590ed.2), @Copy [concrete] +// CHECK:STDOUT: %facet_value.56f: %facet_type.f48 = facet_value %ValueType, (%custom_witness.d86, %custom_witness.587) [concrete] // CHECK:STDOUT: %Iterate.lookup_impl_witness.1d8: = lookup_impl_witness %.Self.500, @Iterate [symbolic_self] // CHECK:STDOUT: %impl.elem0.294: %facet_type.f48 = impl_witness_access %Iterate.lookup_impl_witness.1d8, element0 [symbolic_self] -// CHECK:STDOUT: %Iterate_where.type.f9d: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.ccb> [concrete] -// CHECK:STDOUT: %pattern_type.c7b: type = pattern_type %Iterate_where.type.f9d [concrete] -// CHECK:STDOUT: %R.patt: %pattern_type.c7b = symbolic_binding_pattern R, 0 [symbolic] -// CHECK:STDOUT: %R: %Iterate_where.type.f9d = symbolic_binding R, 0 [symbolic] +// CHECK:STDOUT: %Iterate_where.type.f03: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.56f> [concrete] +// CHECK:STDOUT: %pattern_type.dde: type = pattern_type %Iterate_where.type.f03 [concrete] +// CHECK:STDOUT: %R.patt: %pattern_type.dde = symbolic_binding_pattern R, 0 [symbolic] +// CHECK:STDOUT: %R: %Iterate_where.type.f03 = symbolic_binding R, 0 [symbolic] // CHECK:STDOUT: %R.as_type: type = facet_access_type %R [symbolic] -// CHECK:STDOUT: %pattern_type.17d: type = pattern_type %R.as_type [symbolic] -// CHECK:STDOUT: %r.param_patt: %pattern_type.17d = value_param_pattern [symbolic] -// CHECK:STDOUT: %r.patt: %pattern_type.17d = wrapper_binding_pattern r, %r.param_patt [symbolic] -// CHECK:STDOUT: %i.patt: %pattern_type.e41 = value_binding_pattern i [concrete] -// CHECK:STDOUT: %Iterate.lookup_impl_witness.173: = lookup_impl_witness %R, @Iterate [symbolic] -// CHECK:STDOUT: %Iterate.facet.b38: %Iterate.type = facet_value %R.as_type, (%Iterate.lookup_impl_witness.173) [symbolic] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.5cd: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.b38) [symbolic] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type.d51: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.b38) [symbolic] -// CHECK:STDOUT: %.592: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.5cd, %Iterate.facet.b38 [symbolic] -// CHECK:STDOUT: %impl.elem2.ae2: %.592 = impl_witness_access %Iterate.lookup_impl_witness.173, element2 [symbolic] -// CHECK:STDOUT: %impl.elem1.834: %Destroy.type = impl_witness_access %Iterate.lookup_impl_witness.173, element1 [symbolic] -// CHECK:STDOUT: %as_type.e41: type = facet_access_type %impl.elem1.834 [symbolic] -// CHECK:STDOUT: %specific_impl_fn.06e: = specific_impl_function %impl.elem2.ae2, @Iterate.WithSelf.NewCursor(%Iterate.facet.b38) [symbolic] -// CHECK:STDOUT: %ptr.d27: type = ptr_type %as_type.e41 [symbolic] -// CHECK:STDOUT: %.524: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.d51, %Iterate.facet.b38 [symbolic] -// CHECK:STDOUT: %impl.elem3.7a5: %.524 = impl_witness_access %Iterate.lookup_impl_witness.173, element3 [symbolic] -// CHECK:STDOUT: %DefaultOptionalStorage.257: type = class_type @DefaultOptionalStorage, @DefaultOptionalStorage(%facet_value.ccb) [concrete] -// CHECK:STDOUT: %OptionalStorage.impl_witness.1bc: = impl_witness imports.%OptionalStorage.impl_witness_table.460, @T.as_type.as.OptionalStorage.impl(%facet_value.ccb) [concrete] -// CHECK:STDOUT: %OptionalStorage.facet.8dd: %OptionalStorage.type = facet_value %ValueType, (%OptionalStorage.impl_witness.1bc) [concrete] -// CHECK:STDOUT: %Optional.1f5: type = class_type @Optional, @Optional(%OptionalStorage.facet.8dd) [concrete] -// CHECK:STDOUT: %specific_impl_fn.24b: = specific_impl_function %impl.elem3.7a5, @Iterate.WithSelf.Next(%Iterate.facet.b38) [symbolic] -// CHECK:STDOUT: %Optional.HasValue.type.527: type = fn_type @Optional.HasValue, @Optional(%OptionalStorage.facet.8dd) [concrete] -// CHECK:STDOUT: %Optional.HasValue.017: %Optional.HasValue.type.527 = struct_value () [concrete] -// CHECK:STDOUT: %Optional.Get.type.226: type = fn_type @Optional.Get, @Optional(%OptionalStorage.facet.8dd) [concrete] -// CHECK:STDOUT: %Optional.Get.0db: %Optional.Get.type.226 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.facet.306: %Destroy.type = facet_value %ValueType, (%custom_witness.fef) [concrete] -// CHECK:STDOUT: %MaybeUnformed.669: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.306) [concrete] -// CHECK:STDOUT: %.b36: type = maybe_unformed_type %ValueType [concrete] -// CHECK:STDOUT: %struct_type.value.has_value.5a1: type = struct_type {.value: %MaybeUnformed.669, .has_value: bool} [concrete] -// CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %Optional.HasValue.017, @Optional.HasValue(%OptionalStorage.facet.8dd) [concrete] -// CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Optional.Get.0db, @Optional.Get(%OptionalStorage.facet.8dd) [concrete] +// CHECK:STDOUT: %pattern_type.acd: type = pattern_type %R.as_type [symbolic] +// CHECK:STDOUT: %r.param_patt: %pattern_type.acd = value_param_pattern [symbolic] +// CHECK:STDOUT: %r.patt: %pattern_type.acd = wrapper_binding_pattern r, %r.param_patt [symbolic] +// CHECK:STDOUT: %i.patt: %pattern_type.d2d = value_binding_pattern i [concrete] +// CHECK:STDOUT: %Iterate.lookup_impl_witness.698: = lookup_impl_witness %R, @Iterate [symbolic] +// CHECK:STDOUT: %Iterate.facet.122: %Iterate.type = facet_value %R.as_type, (%Iterate.lookup_impl_witness.698) [symbolic] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.d16: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.122) [symbolic] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type.2f3: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.122) [symbolic] +// CHECK:STDOUT: %.26d: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.d16, %Iterate.facet.122 [symbolic] +// CHECK:STDOUT: %impl.elem2.d05: %.26d = impl_witness_access %Iterate.lookup_impl_witness.698, element2 [symbolic] +// CHECK:STDOUT: %impl.elem1.127: %Destroy.type = impl_witness_access %Iterate.lookup_impl_witness.698, element1 [symbolic] +// CHECK:STDOUT: %as_type.d08: type = facet_access_type %impl.elem1.127 [symbolic] +// CHECK:STDOUT: %specific_impl_fn.342: = specific_impl_function %impl.elem2.d05, @Iterate.WithSelf.NewCursor(%Iterate.facet.122) [symbolic] +// CHECK:STDOUT: %ptr.2f2: type = ptr_type %as_type.d08 [symbolic] +// CHECK:STDOUT: %.25b: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.2f3, %Iterate.facet.122 [symbolic] +// CHECK:STDOUT: %impl.elem3.9e9: %.25b = impl_witness_access %Iterate.lookup_impl_witness.698, element3 [symbolic] +// CHECK:STDOUT: %DefaultOptionalStorage.d67: type = class_type @DefaultOptionalStorage, @DefaultOptionalStorage(%facet_value.56f) [concrete] +// CHECK:STDOUT: %OptionalStorage.impl_witness.2c9: = impl_witness imports.%OptionalStorage.impl_witness_table.460, @T.as_type.as.OptionalStorage.impl(%facet_value.56f) [concrete] +// CHECK:STDOUT: %OptionalStorage.facet.19b: %OptionalStorage.type = facet_value %ValueType, (%OptionalStorage.impl_witness.2c9) [concrete] +// CHECK:STDOUT: %Optional.40d: type = class_type @Optional, @Optional(%OptionalStorage.facet.19b) [concrete] +// CHECK:STDOUT: %specific_impl_fn.ee9: = specific_impl_function %impl.elem3.9e9, @Iterate.WithSelf.Next(%Iterate.facet.122) [symbolic] +// CHECK:STDOUT: %Optional.HasValue.type.5e1: type = fn_type @Optional.HasValue, @Optional(%OptionalStorage.facet.19b) [concrete] +// CHECK:STDOUT: %Optional.HasValue.d7c: %Optional.HasValue.type.5e1 = struct_value () [concrete] +// CHECK:STDOUT: %Optional.Get.type.1fe: type = fn_type @Optional.Get, @Optional(%OptionalStorage.facet.19b) [concrete] +// CHECK:STDOUT: %Optional.Get.6fd: %Optional.Get.type.1fe = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.facet.10d: %Destroy.type = facet_value %ValueType, (%custom_witness.d86) [concrete] +// CHECK:STDOUT: %MaybeUnformed.09f: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.10d) [concrete] +// CHECK:STDOUT: %.dd1: type = maybe_unformed_type %ValueType [concrete] +// CHECK:STDOUT: %struct_type.value.has_value.d6e: type = struct_type {.value: %MaybeUnformed.09f, .has_value: bool} [concrete] +// CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %Optional.HasValue.d7c, @Optional.HasValue(%OptionalStorage.facet.19b) [concrete] +// CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Optional.Get.6fd, @Optional.Get(%OptionalStorage.facet.19b) [concrete] // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.type: type = fn_type @operator_PlusEqual__carbon_thunk [concrete] // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk: %operator_PlusEqual__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.Op.type.1d8f74.7: type = fn_type @Destroy.Op.loc31_31.6 [concrete] +// CHECK:STDOUT: %Destroy.Op.type.1d8f74.7: type = fn_type @Destroy.Op.loc31_44.6 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.7: %Destroy.Op.type.1d8f74.7 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.lookup_impl_witness.198: = lookup_impl_witness %impl.elem1.834, @Destroy [symbolic] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type.9d6: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%impl.elem1.834) [symbolic] -// CHECK:STDOUT: %.57c: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.9d6, %impl.elem1.834 [symbolic] -// CHECK:STDOUT: %impl.elem0.152: %.57c = impl_witness_access %Destroy.lookup_impl_witness.198, element0 [symbolic] -// CHECK:STDOUT: %specific_impl_fn.9fb: = specific_impl_function %impl.elem0.152, @Destroy.WithSelf.Op(%impl.elem1.834) [symbolic] +// CHECK:STDOUT: %Destroy.lookup_impl_witness.80c: = lookup_impl_witness %impl.elem1.127, @Destroy [symbolic] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type.678: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%impl.elem1.127) [symbolic] +// CHECK:STDOUT: %.195: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.678, %impl.elem1.127 [symbolic] +// CHECK:STDOUT: %impl.elem0.d51: %.195 = impl_witness_access %Destroy.lookup_impl_witness.80c, element0 [symbolic] +// CHECK:STDOUT: %specific_impl_fn.9d5: = specific_impl_function %impl.elem0.d51, @Destroy.WithSelf.Op(%impl.elem1.127) [symbolic] // CHECK:STDOUT: %MutableRange: type = class_type @MutableRange [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .N = %N +// CHECK:STDOUT: .DiffMutableADL = %DiffMutableADL // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import_ref.bb6: @Optional.%Optional.HasValue.type (%Optional.HasValue.type.e9e) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @Optional.%Optional.HasValue (constants.%Optional.HasValue.6cd)] @@ -3912,7 +3912,7 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Core.import_ref.e9c: @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Get.type (%T.as_type.as.OptionalStorage.impl.Get.type.a12) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @T.as_type.as.OptionalStorage.impl.%T.as_type.as.OptionalStorage.impl.Get (constants.%T.as_type.as.OptionalStorage.impl.Get.d32)] // CHECK:STDOUT: %Core.import_ref.0b2 = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], unloaded // CHECK:STDOUT: %OptionalStorage.impl_witness_table.460 = impl_witness_table (%Core.import_ref.0c6, %Core.import_ref.daf, %Core.import_ref.bd4, %Core.import_ref.ed4, %Core.import_ref.e9c, %Core.import_ref.0b2), @T.as_type.as.OptionalStorage.impl [concrete] -// CHECK:STDOUT: %N: = namespace [concrete] { +// CHECK:STDOUT: %DiffMutableADL: = namespace [concrete] { // CHECK:STDOUT: .ValueType = %ValueType.decl // CHECK:STDOUT: .MutableRange = %MutableRange.decl // CHECK:STDOUT: import Cpp//... @@ -3931,144 +3931,144 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %MutableRange.decl: type = class_decl @MutableRange [concrete = constants.%MutableRange] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @TestIterate(%R.loc27_17.2: %Iterate_where.type.f9d) { +// CHECK:STDOUT: generic fn @TestIterate(%R.loc27_17.2: %Iterate_where.type.f03) { // CHECK:STDOUT: // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: -// CHECK:STDOUT: %Iterate.lookup_impl_witness: = lookup_impl_witness %R.loc27_17.1, @Iterate [symbolic = %Iterate.lookup_impl_witness (constants.%Iterate.lookup_impl_witness.173)] -// CHECK:STDOUT: %Iterate.facet.loc31_31.5: %Iterate.type = facet_value %R.as_type.loc27_73.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc31_31.5 (constants.%Iterate.facet.b38)] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc31_31.5) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.5cd)] -// CHECK:STDOUT: %.loc31_31.20: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc31_31.5 [symbolic = %.loc31_31.20 (constants.%.592)] -// CHECK:STDOUT: %impl.elem2.loc31_31.2: @TestIterate.%.loc31_31.20 (%.592) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc31_31.2 (constants.%impl.elem2.ae2)] -// CHECK:STDOUT: %specific_impl_fn.loc31_31.4: = specific_impl_function %impl.elem2.loc31_31.2, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc31_31.5) [symbolic = %specific_impl_fn.loc31_31.4 (constants.%specific_impl_fn.06e)] +// CHECK:STDOUT: %Iterate.lookup_impl_witness: = lookup_impl_witness %R.loc27_17.1, @Iterate [symbolic = %Iterate.lookup_impl_witness (constants.%Iterate.lookup_impl_witness.698)] +// CHECK:STDOUT: %Iterate.facet.loc31_44.5: %Iterate.type = facet_value %R.as_type.loc27_86.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc31_44.5 (constants.%Iterate.facet.122)] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc31_44.5) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.d16)] +// CHECK:STDOUT: %.loc31_44.20: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc31_44.5 [symbolic = %.loc31_44.20 (constants.%.26d)] +// CHECK:STDOUT: %impl.elem2.loc31_44.2: @TestIterate.%.loc31_44.20 (%.26d) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc31_44.2 (constants.%impl.elem2.d05)] +// CHECK:STDOUT: %specific_impl_fn.loc31_44.4: = specific_impl_function %impl.elem2.loc31_44.2, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc31_44.5) [symbolic = %specific_impl_fn.loc31_44.4 (constants.%specific_impl_fn.342)] // CHECK:STDOUT: -// CHECK:STDOUT: %ptr: type = ptr_type %as_type [symbolic = %ptr (constants.%ptr.d27)] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc31_31.5) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.d51)] -// CHECK:STDOUT: %.loc31_31.21: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc31_31.5 [symbolic = %.loc31_31.21 (constants.%.524)] -// CHECK:STDOUT: %impl.elem3.loc31_31.2: @TestIterate.%.loc31_31.21 (%.524) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc31_31.2 (constants.%impl.elem3.7a5)] -// CHECK:STDOUT: %specific_impl_fn.loc31_31.5: = specific_impl_function %impl.elem3.loc31_31.2, @Iterate.WithSelf.Next(%Iterate.facet.loc31_31.5) [symbolic = %specific_impl_fn.loc31_31.5 (constants.%specific_impl_fn.24b)] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%impl.elem1) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.9d6)] -// CHECK:STDOUT: %.loc31_31.22: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %impl.elem1 [symbolic = %.loc31_31.22 (constants.%.57c)] -// CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %impl.elem1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.198)] -// CHECK:STDOUT: %impl.elem0.loc31_31.2: @TestIterate.%.loc31_31.22 (%.57c) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc31_31.2 (constants.%impl.elem0.152)] -// CHECK:STDOUT: %specific_impl_fn.loc31_31.6: = specific_impl_function %impl.elem0.loc31_31.2, @Destroy.WithSelf.Op(%impl.elem1) [symbolic = %specific_impl_fn.loc31_31.6 (constants.%specific_impl_fn.9fb)] +// CHECK:STDOUT: %ptr: type = ptr_type %as_type [symbolic = %ptr (constants.%ptr.2f2)] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc31_44.5) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.2f3)] +// CHECK:STDOUT: %.loc31_44.21: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc31_44.5 [symbolic = %.loc31_44.21 (constants.%.25b)] +// CHECK:STDOUT: %impl.elem3.loc31_44.2: @TestIterate.%.loc31_44.21 (%.25b) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc31_44.2 (constants.%impl.elem3.9e9)] +// CHECK:STDOUT: %specific_impl_fn.loc31_44.5: = specific_impl_function %impl.elem3.loc31_44.2, @Iterate.WithSelf.Next(%Iterate.facet.loc31_44.5) [symbolic = %specific_impl_fn.loc31_44.5 (constants.%specific_impl_fn.ee9)] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%impl.elem1) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.678)] +// CHECK:STDOUT: %.loc31_44.22: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %impl.elem1 [symbolic = %.loc31_44.22 (constants.%.195)] +// CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %impl.elem1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.80c)] +// CHECK:STDOUT: %impl.elem0.loc31_44.2: @TestIterate.%.loc31_44.22 (%.195) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc31_44.2 (constants.%impl.elem0.d51)] +// CHECK:STDOUT: %specific_impl_fn.loc31_44.6: = specific_impl_function %impl.elem0.loc31_44.2, @Destroy.WithSelf.Op(%impl.elem1) [symbolic = %specific_impl_fn.loc31_44.6 (constants.%specific_impl_fn.9d5)] // CHECK:STDOUT: -// CHECK:STDOUT: fn(%r.param: @TestIterate.%R.as_type.loc27_73.1 (%R.as_type)) { +// CHECK:STDOUT: fn(%r.param: @TestIterate.%R.as_type.loc27_86.1 (%R.as_type)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %pattern_type.e41 = value_binding_pattern i [concrete = constants.%i.patt] +// CHECK:STDOUT: %i.patt: %pattern_type.d2d = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %r.ref: @TestIterate.%R.as_type.loc27_73.1 (%R.as_type) = name_ref r, %r -// CHECK:STDOUT: %impl.elem2.loc31_31.1: @TestIterate.%.loc31_31.20 (%.592) = impl_witness_access constants.%Iterate.lookup_impl_witness.173, element2 [symbolic = %impl.elem2.loc31_31.2 (constants.%impl.elem2.ae2)] -// CHECK:STDOUT: %bound_method.loc31_31.1: = bound_method %r.ref, %impl.elem2.loc31_31.1 -// CHECK:STDOUT: %Iterate.facet.loc31_31.1: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.173) [symbolic = %Iterate.facet.loc31_31.5 (constants.%Iterate.facet.b38)] -// CHECK:STDOUT: %.loc31_31.1: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc31_31.1 [symbolic = %Iterate.facet.loc31_31.5 (constants.%Iterate.facet.b38)] -// CHECK:STDOUT: %Iterate.facet.loc31_31.2: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.173) [symbolic = %Iterate.facet.loc31_31.5 (constants.%Iterate.facet.b38)] -// CHECK:STDOUT: %.loc31_31.2: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc31_31.2 [symbolic = %Iterate.facet.loc31_31.5 (constants.%Iterate.facet.b38)] -// CHECK:STDOUT: %specific_impl_fn.loc31_31.1: = specific_impl_function %impl.elem2.loc31_31.1, @Iterate.WithSelf.NewCursor(constants.%Iterate.facet.b38) [symbolic = %specific_impl_fn.loc31_31.4 (constants.%specific_impl_fn.06e)] -// CHECK:STDOUT: %bound_method.loc31_31.2: = bound_method %r.ref, %specific_impl_fn.loc31_31.1 -// CHECK:STDOUT: %var: ref @TestIterate.%as_type (%as_type.e41) = var_storage invalid -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.call: init @TestIterate.%as_type (%as_type.e41) to %var = call %bound_method.loc31_31.2(%r.ref) +// CHECK:STDOUT: %r.ref: @TestIterate.%R.as_type.loc27_86.1 (%R.as_type) = name_ref r, %r +// CHECK:STDOUT: %impl.elem2.loc31_44.1: @TestIterate.%.loc31_44.20 (%.26d) = impl_witness_access constants.%Iterate.lookup_impl_witness.698, element2 [symbolic = %impl.elem2.loc31_44.2 (constants.%impl.elem2.d05)] +// CHECK:STDOUT: %bound_method.loc31_44.1: = bound_method %r.ref, %impl.elem2.loc31_44.1 +// CHECK:STDOUT: %Iterate.facet.loc31_44.1: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.698) [symbolic = %Iterate.facet.loc31_44.5 (constants.%Iterate.facet.122)] +// CHECK:STDOUT: %.loc31_44.1: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc31_44.1 [symbolic = %Iterate.facet.loc31_44.5 (constants.%Iterate.facet.122)] +// CHECK:STDOUT: %Iterate.facet.loc31_44.2: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.698) [symbolic = %Iterate.facet.loc31_44.5 (constants.%Iterate.facet.122)] +// CHECK:STDOUT: %.loc31_44.2: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc31_44.2 [symbolic = %Iterate.facet.loc31_44.5 (constants.%Iterate.facet.122)] +// CHECK:STDOUT: %specific_impl_fn.loc31_44.1: = specific_impl_function %impl.elem2.loc31_44.1, @Iterate.WithSelf.NewCursor(constants.%Iterate.facet.122) [symbolic = %specific_impl_fn.loc31_44.4 (constants.%specific_impl_fn.342)] +// CHECK:STDOUT: %bound_method.loc31_44.2: = bound_method %r.ref, %specific_impl_fn.loc31_44.1 +// CHECK:STDOUT: %var: ref @TestIterate.%as_type (%as_type.d08) = var_storage invalid +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.call: init @TestIterate.%as_type (%as_type.d08) to %var = call %bound_method.loc31_44.2(%r.ref) // CHECK:STDOUT: assign %var, %Iterate.WithSelf.NewCursor.call // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.next: -// CHECK:STDOUT: %addr.loc31: @TestIterate.%ptr (%ptr.d27) = addr_of %var -// CHECK:STDOUT: %impl.elem3.loc31_31.1: @TestIterate.%.loc31_31.21 (%.524) = impl_witness_access constants.%Iterate.lookup_impl_witness.173, element3 [symbolic = %impl.elem3.loc31_31.2 (constants.%impl.elem3.7a5)] -// CHECK:STDOUT: %bound_method.loc31_31.3: = bound_method %r.ref, %impl.elem3.loc31_31.1 -// CHECK:STDOUT: %Iterate.facet.loc31_31.3: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.173) [symbolic = %Iterate.facet.loc31_31.5 (constants.%Iterate.facet.b38)] -// CHECK:STDOUT: %.loc31_31.3: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc31_31.3 [symbolic = %Iterate.facet.loc31_31.5 (constants.%Iterate.facet.b38)] -// CHECK:STDOUT: %Iterate.facet.loc31_31.4: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.173) [symbolic = %Iterate.facet.loc31_31.5 (constants.%Iterate.facet.b38)] -// CHECK:STDOUT: %.loc31_31.4: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc31_31.4 [symbolic = %Iterate.facet.loc31_31.5 (constants.%Iterate.facet.b38)] -// CHECK:STDOUT: %.loc31_31.5: %Destroy.type = converted constants.%as_type.e41, constants.%impl.elem1.834 [symbolic = %impl.elem1 (constants.%impl.elem1.834)] -// CHECK:STDOUT: %.loc31_31.6: %Destroy.type = converted constants.%as_type.e41, constants.%impl.elem1.834 [symbolic = %impl.elem1 (constants.%impl.elem1.834)] -// CHECK:STDOUT: %specific_impl_fn.loc31_31.2: = specific_impl_function %impl.elem3.loc31_31.1, @Iterate.WithSelf.Next(constants.%Iterate.facet.b38) [symbolic = %specific_impl_fn.loc31_31.5 (constants.%specific_impl_fn.24b)] -// CHECK:STDOUT: %bound_method.loc31_31.4: = bound_method %r.ref, %specific_impl_fn.loc31_31.2 -// CHECK:STDOUT: %.loc31_31.7: ref %Optional.1f5 = temporary_storage -// CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.1f5 to %.loc31_31.7 = call %bound_method.loc31_31.4(%r.ref, %addr.loc31) -// CHECK:STDOUT: %.loc31_31.8: ref %Optional.1f5 = temporary %.loc31_31.7, %Iterate.WithSelf.Next.call -// CHECK:STDOUT: %.loc31_31.9: %Optional.HasValue.type.527 = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.8dd) [concrete = constants.%Optional.HasValue.017] -// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.527 = name_ref HasValue, %.loc31_31.9 [concrete = constants.%Optional.HasValue.017] -// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc31_31.8, %HasValue.ref -// CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.8dd) [concrete = constants.%Optional.HasValue.specific_fn] -// CHECK:STDOUT: %bound_method.loc31_31.5: = bound_method %.loc31_31.8, %Optional.HasValue.specific_fn -// CHECK:STDOUT: %.loc31_31.10: %Optional.1f5 = acquire_value %.loc31_31.8 -// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc31_31.5(%.loc31_31.10) -// CHECK:STDOUT: %.loc31_31.11: bool = value_of_initializer %Optional.HasValue.call -// CHECK:STDOUT: %.loc31_31.12: bool = converted %Optional.HasValue.call, %.loc31_31.11 -// CHECK:STDOUT: if %.loc31_31.12 br !for.body else br !for.done +// CHECK:STDOUT: %addr.loc31: @TestIterate.%ptr (%ptr.2f2) = addr_of %var +// CHECK:STDOUT: %impl.elem3.loc31_44.1: @TestIterate.%.loc31_44.21 (%.25b) = impl_witness_access constants.%Iterate.lookup_impl_witness.698, element3 [symbolic = %impl.elem3.loc31_44.2 (constants.%impl.elem3.9e9)] +// CHECK:STDOUT: %bound_method.loc31_44.3: = bound_method %r.ref, %impl.elem3.loc31_44.1 +// CHECK:STDOUT: %Iterate.facet.loc31_44.3: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.698) [symbolic = %Iterate.facet.loc31_44.5 (constants.%Iterate.facet.122)] +// CHECK:STDOUT: %.loc31_44.3: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc31_44.3 [symbolic = %Iterate.facet.loc31_44.5 (constants.%Iterate.facet.122)] +// CHECK:STDOUT: %Iterate.facet.loc31_44.4: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.698) [symbolic = %Iterate.facet.loc31_44.5 (constants.%Iterate.facet.122)] +// CHECK:STDOUT: %.loc31_44.4: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc31_44.4 [symbolic = %Iterate.facet.loc31_44.5 (constants.%Iterate.facet.122)] +// CHECK:STDOUT: %.loc31_44.5: %Destroy.type = converted constants.%as_type.d08, constants.%impl.elem1.127 [symbolic = %impl.elem1 (constants.%impl.elem1.127)] +// CHECK:STDOUT: %.loc31_44.6: %Destroy.type = converted constants.%as_type.d08, constants.%impl.elem1.127 [symbolic = %impl.elem1 (constants.%impl.elem1.127)] +// CHECK:STDOUT: %specific_impl_fn.loc31_44.2: = specific_impl_function %impl.elem3.loc31_44.1, @Iterate.WithSelf.Next(constants.%Iterate.facet.122) [symbolic = %specific_impl_fn.loc31_44.5 (constants.%specific_impl_fn.ee9)] +// CHECK:STDOUT: %bound_method.loc31_44.4: = bound_method %r.ref, %specific_impl_fn.loc31_44.2 +// CHECK:STDOUT: %.loc31_44.7: ref %Optional.40d = temporary_storage +// CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.40d to %.loc31_44.7 = call %bound_method.loc31_44.4(%r.ref, %addr.loc31) +// CHECK:STDOUT: %.loc31_44.8: ref %Optional.40d = temporary %.loc31_44.7, %Iterate.WithSelf.Next.call +// CHECK:STDOUT: %.loc31_44.9: %Optional.HasValue.type.5e1 = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.19b) [concrete = constants.%Optional.HasValue.d7c] +// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.5e1 = name_ref HasValue, %.loc31_44.9 [concrete = constants.%Optional.HasValue.d7c] +// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc31_44.8, %HasValue.ref +// CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.19b) [concrete = constants.%Optional.HasValue.specific_fn] +// CHECK:STDOUT: %bound_method.loc31_44.5: = bound_method %.loc31_44.8, %Optional.HasValue.specific_fn +// CHECK:STDOUT: %.loc31_44.10: %Optional.40d = acquire_value %.loc31_44.8 +// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc31_44.5(%.loc31_44.10) +// CHECK:STDOUT: %.loc31_44.11: bool = value_of_initializer %Optional.HasValue.call +// CHECK:STDOUT: %.loc31_44.12: bool = converted %Optional.HasValue.call, %.loc31_44.11 +// CHECK:STDOUT: if %.loc31_44.12 br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: -// CHECK:STDOUT: %.loc31_31.13: %Optional.Get.type.226 = specific_constant imports.%Core.import_ref.dab, @Optional(constants.%OptionalStorage.facet.8dd) [concrete = constants.%Optional.Get.0db] -// CHECK:STDOUT: %Get.ref: %Optional.Get.type.226 = name_ref Get, %.loc31_31.13 [concrete = constants.%Optional.Get.0db] -// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc31_31.8, %Get.ref -// CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.8dd) [concrete = constants.%Optional.Get.specific_fn] -// CHECK:STDOUT: %bound_method.loc31_31.6: = bound_method %.loc31_31.8, %Optional.Get.specific_fn -// CHECK:STDOUT: %.loc31_31.14: ref %ValueType = temporary_storage -// CHECK:STDOUT: %.loc31_31.15: %Optional.1f5 = acquire_value %.loc31_31.8 -// CHECK:STDOUT: %Optional.Get.call: init %ValueType to %.loc31_31.14 = call %bound_method.loc31_31.6(%.loc31_31.15) -// CHECK:STDOUT: %.loc31_31.16: ref %ValueType = temporary %.loc31_31.14, %Optional.Get.call -// CHECK:STDOUT: %.loc31_31.17: %ValueType = acquire_value %.loc31_31.16 -// CHECK:STDOUT: %.loc31_16: type = splice_block %ValueType.ref.loc31 [concrete = constants.%ValueType] { +// CHECK:STDOUT: %.loc31_44.13: %Optional.Get.type.1fe = specific_constant imports.%Core.import_ref.dab, @Optional(constants.%OptionalStorage.facet.19b) [concrete = constants.%Optional.Get.6fd] +// CHECK:STDOUT: %Get.ref: %Optional.Get.type.1fe = name_ref Get, %.loc31_44.13 [concrete = constants.%Optional.Get.6fd] +// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc31_44.8, %Get.ref +// CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.19b) [concrete = constants.%Optional.Get.specific_fn] +// CHECK:STDOUT: %bound_method.loc31_44.6: = bound_method %.loc31_44.8, %Optional.Get.specific_fn +// CHECK:STDOUT: %.loc31_44.14: ref %ValueType = temporary_storage +// CHECK:STDOUT: %.loc31_44.15: %Optional.40d = acquire_value %.loc31_44.8 +// CHECK:STDOUT: %Optional.Get.call: init %ValueType to %.loc31_44.14 = call %bound_method.loc31_44.6(%.loc31_44.15) +// CHECK:STDOUT: %.loc31_44.16: ref %ValueType = temporary %.loc31_44.14, %Optional.Get.call +// CHECK:STDOUT: %.loc31_44.17: %ValueType = acquire_value %.loc31_44.16 +// CHECK:STDOUT: %.loc31_29: type = splice_block %ValueType.ref.loc31 [concrete = constants.%ValueType] { // CHECK:STDOUT: %Cpp.ref.loc31: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %N.ref.loc31: = name_ref N, imports.%N [concrete = imports.%N] +// CHECK:STDOUT: %DiffMutableADL.ref.loc31: = name_ref DiffMutableADL, imports.%DiffMutableADL [concrete = imports.%DiffMutableADL] // CHECK:STDOUT: %ValueType.ref.loc31: type = name_ref ValueType, imports.%ValueType.decl [concrete = constants.%ValueType] // CHECK:STDOUT: } -// CHECK:STDOUT: %i: %ValueType = wrapper_binding i, %.loc31_31.17 +// CHECK:STDOUT: %i: %ValueType = wrapper_binding i, %.loc31_44.17 // CHECK:STDOUT: %sum.ref: ref %ValueType = name_ref sum, %sum // CHECK:STDOUT: %i.ref: %ValueType = name_ref i, %i // CHECK:STDOUT: %.loc32_12: ref %ValueType = value_as_ref %i.ref -// CHECK:STDOUT: %addr.loc32: %ptr.9d3 = addr_of %.loc32_12 -// CHECK:STDOUT: %.loc32_9.1: %ptr.32e = as_compatible %addr.loc32 -// CHECK:STDOUT: %.loc32_9.2: %ptr.32e = converted %addr.loc32, %.loc32_9.1 +// CHECK:STDOUT: %addr.loc32: %ptr.9c6 = addr_of %.loc32_12 +// CHECK:STDOUT: %.loc32_9.1: %ptr.5f4 = as_compatible %addr.loc32 +// CHECK:STDOUT: %.loc32_9.2: %ptr.5f4 = converted %addr.loc32, %.loc32_9.1 // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.call: ref %ValueType = call imports.%operator_PlusEqual__carbon_thunk.decl(%sum.ref, %.loc32_9.2) -// CHECK:STDOUT: %ValueType.Op.bound.loc31: = bound_method %.loc31_31.16, constants.%ValueType.Op.4c94b9.1 +// CHECK:STDOUT: %ValueType.Op.bound.loc31: = bound_method %.loc31_44.16, constants.%ValueType.Op.4590ed.1 // CHECK:STDOUT: %Op.ref.loc31: %ValueType.cpp_destructor.type = name_ref Op, imports.%ValueType.cpp_destructor.decl [concrete = constants.%ValueType.cpp_destructor] -// CHECK:STDOUT: %ValueType.cpp_destructor.bound.loc31: = bound_method %.loc31_31.16, %Op.ref.loc31 -// CHECK:STDOUT: %ValueType.cpp_destructor.call.loc31: init %empty_tuple.type = call %ValueType.cpp_destructor.bound.loc31(%.loc31_31.16) -// CHECK:STDOUT: %Destroy.Op.bound.loc31_31.1: = bound_method %.loc31_31.8, constants.%Destroy.Op.1a2547.7 -// CHECK:STDOUT: %Destroy.Op.call.loc31_31.1: init %empty_tuple.type = call %Destroy.Op.bound.loc31_31.1(%.loc31_31.8) +// CHECK:STDOUT: %ValueType.cpp_destructor.bound.loc31: = bound_method %.loc31_44.16, %Op.ref.loc31 +// CHECK:STDOUT: %ValueType.cpp_destructor.call.loc31: init %empty_tuple.type = call %ValueType.cpp_destructor.bound.loc31(%.loc31_44.16) +// CHECK:STDOUT: %Destroy.Op.bound.loc31_44.1: = bound_method %.loc31_44.8, constants.%Destroy.Op.1a2547.7 +// CHECK:STDOUT: %Destroy.Op.call.loc31_44.1: init %empty_tuple.type = call %Destroy.Op.bound.loc31_44.1(%.loc31_44.8) // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: -// CHECK:STDOUT: %Destroy.Op.bound.loc31_31.2: = bound_method %.loc31_31.8, constants.%Destroy.Op.1a2547.7 -// CHECK:STDOUT: %Destroy.Op.call.loc31_31.2: init %empty_tuple.type = call %Destroy.Op.bound.loc31_31.2(%.loc31_31.8) -// CHECK:STDOUT: %impl.elem0.loc31_31.1: @TestIterate.%.loc31_31.22 (%.57c) = impl_witness_access constants.%Destroy.lookup_impl_witness.198, element0 [symbolic = %impl.elem0.loc31_31.2 (constants.%impl.elem0.152)] -// CHECK:STDOUT: %bound_method.loc31_31.7: = bound_method %var, %impl.elem0.loc31_31.1 -// CHECK:STDOUT: %.loc31_31.18: %Destroy.type = converted constants.%as_type.e41, constants.%impl.elem1.834 [symbolic = %impl.elem1 (constants.%impl.elem1.834)] -// CHECK:STDOUT: %.loc31_31.19: %Destroy.type = converted constants.%as_type.e41, constants.%impl.elem1.834 [symbolic = %impl.elem1 (constants.%impl.elem1.834)] -// CHECK:STDOUT: %specific_impl_fn.loc31_31.3: = specific_impl_function %impl.elem0.loc31_31.1, @Destroy.WithSelf.Op(constants.%impl.elem1.834) [symbolic = %specific_impl_fn.loc31_31.6 (constants.%specific_impl_fn.9fb)] -// CHECK:STDOUT: %bound_method.loc31_31.8: = bound_method %var, %specific_impl_fn.loc31_31.3 -// CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc31_31.8(%var) +// CHECK:STDOUT: %Destroy.Op.bound.loc31_44.2: = bound_method %.loc31_44.8, constants.%Destroy.Op.1a2547.7 +// CHECK:STDOUT: %Destroy.Op.call.loc31_44.2: init %empty_tuple.type = call %Destroy.Op.bound.loc31_44.2(%.loc31_44.8) +// CHECK:STDOUT: %impl.elem0.loc31_44.1: @TestIterate.%.loc31_44.22 (%.195) = impl_witness_access constants.%Destroy.lookup_impl_witness.80c, element0 [symbolic = %impl.elem0.loc31_44.2 (constants.%impl.elem0.d51)] +// CHECK:STDOUT: %bound_method.loc31_44.7: = bound_method %var, %impl.elem0.loc31_44.1 +// CHECK:STDOUT: %.loc31_44.18: %Destroy.type = converted constants.%as_type.d08, constants.%impl.elem1.127 [symbolic = %impl.elem1 (constants.%impl.elem1.127)] +// CHECK:STDOUT: %.loc31_44.19: %Destroy.type = converted constants.%as_type.d08, constants.%impl.elem1.127 [symbolic = %impl.elem1 (constants.%impl.elem1.127)] +// CHECK:STDOUT: %specific_impl_fn.loc31_44.3: = specific_impl_function %impl.elem0.loc31_44.1, @Destroy.WithSelf.Op(constants.%impl.elem1.127) [symbolic = %specific_impl_fn.loc31_44.6 (constants.%specific_impl_fn.9d5)] +// CHECK:STDOUT: %bound_method.loc31_44.8: = bound_method %var, %specific_impl_fn.loc31_44.3 +// CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc31_44.8(%var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc31_31.1(%self.param: ref %.b36) { +// CHECK:STDOUT: fn @Destroy.Op.loc31_44.1(%self.param: ref %.dd1) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc31_31.2(%self.param: ref %MaybeUnformed.669) { +// CHECK:STDOUT: fn @Destroy.Op.loc31_44.2(%self.param: ref %MaybeUnformed.09f) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc31_31.3(%self.param: ref bool) = "no_op"; +// CHECK:STDOUT: fn @Destroy.Op.loc31_44.3(%self.param: ref bool) = "no_op"; // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc31_31.4(%self.param: ref %struct_type.value.has_value.5a1) { +// CHECK:STDOUT: fn @Destroy.Op.loc31_44.4(%self.param: ref %struct_type.value.has_value.d6e) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc31_31.5(%self.param: ref %DefaultOptionalStorage.257) { +// CHECK:STDOUT: fn @Destroy.Op.loc31_44.5(%self.param: ref %DefaultOptionalStorage.d67) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc31_31.6(%self.param: ref %Optional.1f5) { +// CHECK:STDOUT: fn @Destroy.Op.loc31_44.6(%self.param: ref %Optional.40d) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } @@ -4077,7 +4077,7 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %pattern_type.e41 = value_binding_pattern i [concrete = constants.%i.patt] +// CHECK:STDOUT: %i.patt: %pattern_type.d2d = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %m.ref: ref %MutableRange = name_ref m, %m // CHECK:STDOUT: %var: ref = var_storage invalid [concrete = ] @@ -4093,7 +4093,7 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Get.ref: = name_ref Get, [concrete = ] // CHECK:STDOUT: %.loc98: type = splice_block %ValueType.ref.loc98 [concrete = constants.%ValueType] { // CHECK:STDOUT: %Cpp.ref.loc98: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %N.ref.loc98: = name_ref N, imports.%N [concrete = imports.%N] +// CHECK:STDOUT: %DiffMutableADL.ref.loc98: = name_ref DiffMutableADL, imports.%DiffMutableADL [concrete = imports.%DiffMutableADL] // CHECK:STDOUT: %ValueType.ref.loc98: type = name_ref ValueType, imports.%ValueType.decl [concrete = constants.%ValueType] // CHECK:STDOUT: } // CHECK:STDOUT: %i: %ValueType = wrapper_binding i, [concrete = ] @@ -4108,10 +4108,10 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: specific @TestIterate(constants.%R) { // CHECK:STDOUT: %R.patt.loc27_17.2 => constants.%R.patt // CHECK:STDOUT: %R.loc27_17.1 => constants.%R -// CHECK:STDOUT: %R.as_type.loc27_73.1 => constants.%R.as_type -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.17d -// CHECK:STDOUT: %r.param_patt.loc27_71.2 => constants.%r.param_patt -// CHECK:STDOUT: %r.patt.loc27_71.2 => constants.%r.patt +// CHECK:STDOUT: %R.as_type.loc27_86.1 => constants.%R.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.acd +// CHECK:STDOUT: %r.param_patt.loc27_84.2 => constants.%r.param_patt +// CHECK:STDOUT: %r.patt.loc27_84.2 => constants.%r.patt // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_adl_overloads.carbon @@ -4164,118 +4164,118 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %ValueType: type = class_type @ValueType [concrete] // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type.357: = complete_type_witness %empty_struct_type [concrete] -// CHECK:STDOUT: %pattern_type.e41: type = pattern_type %ValueType [concrete] +// CHECK:STDOUT: %pattern_type.e09: type = pattern_type %ValueType [concrete] // CHECK:STDOUT: %ValueType.cpp_destructor.type: type = fn_type @ValueType.cpp_destructor [concrete] // CHECK:STDOUT: %ValueType.cpp_destructor: %ValueType.cpp_destructor.type = struct_value () [concrete] -// CHECK:STDOUT: %ValueType.Op.type.79266b.1: type = fn_type @ValueType.Op.1 [concrete] -// CHECK:STDOUT: %ValueType.Op.4c94b9.1: %ValueType.Op.type.79266b.1 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.fef: = custom_witness (%ValueType.Op.4c94b9.1), @Destroy [concrete] -// CHECK:STDOUT: %const.773: type = const_type %ValueType [concrete] -// CHECK:STDOUT: %ptr.32e: type = ptr_type %const.773 [concrete] -// CHECK:STDOUT: %ptr.9d3: type = ptr_type %ValueType [concrete] -// CHECK:STDOUT: %ValueType.Op.type.79266b.2: type = fn_type @ValueType.Op.2 [concrete] -// CHECK:STDOUT: %ValueType.Op.4c94b9.2: %ValueType.Op.type.79266b.2 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.c19: = custom_witness (%ValueType.Op.4c94b9.2), @Copy [concrete] -// CHECK:STDOUT: %facet_value.ccb: %facet_type.f48 = facet_value %ValueType, (%custom_witness.fef, %custom_witness.c19) [concrete] +// CHECK:STDOUT: %ValueType.Op.type.9ce105.1: type = fn_type @ValueType.Op.1 [concrete] +// CHECK:STDOUT: %ValueType.Op.038ea9.1: %ValueType.Op.type.9ce105.1 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.ca2: = custom_witness (%ValueType.Op.038ea9.1), @Destroy [concrete] +// CHECK:STDOUT: %const.924: type = const_type %ValueType [concrete] +// CHECK:STDOUT: %ptr.403: type = ptr_type %const.924 [concrete] +// CHECK:STDOUT: %ptr.6ed: type = ptr_type %ValueType [concrete] +// CHECK:STDOUT: %ValueType.Op.type.9ce105.2: type = fn_type @ValueType.Op.2 [concrete] +// CHECK:STDOUT: %ValueType.Op.038ea9.2: %ValueType.Op.type.9ce105.2 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.1c5: = custom_witness (%ValueType.Op.038ea9.2), @Copy [concrete] +// CHECK:STDOUT: %facet_value.851: %facet_type.f48 = facet_value %ValueType, (%custom_witness.ca2, %custom_witness.1c5) [concrete] // CHECK:STDOUT: %Iterate.lookup_impl_witness.1d8: = lookup_impl_witness %.Self.500, @Iterate [symbolic_self] // CHECK:STDOUT: %impl.elem0.294: %facet_type.f48 = impl_witness_access %Iterate.lookup_impl_witness.1d8, element0 [symbolic_self] -// CHECK:STDOUT: %Iterate_where.type.f9d: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.ccb> [concrete] -// CHECK:STDOUT: %pattern_type.c7b: type = pattern_type %Iterate_where.type.f9d [concrete] -// CHECK:STDOUT: %R.patt: %pattern_type.c7b = symbolic_binding_pattern R, 0 [symbolic] -// CHECK:STDOUT: %R: %Iterate_where.type.f9d = symbolic_binding R, 0 [symbolic] +// CHECK:STDOUT: %Iterate_where.type.290: type = facet_type <@Iterate where %impl.elem0.294 = %facet_value.851> [concrete] +// CHECK:STDOUT: %pattern_type.9fd: type = pattern_type %Iterate_where.type.290 [concrete] +// CHECK:STDOUT: %R.patt: %pattern_type.9fd = symbolic_binding_pattern R, 0 [symbolic] +// CHECK:STDOUT: %R: %Iterate_where.type.290 = symbolic_binding R, 0 [symbolic] // CHECK:STDOUT: %R.as_type: type = facet_access_type %R [symbolic] -// CHECK:STDOUT: %pattern_type.17d: type = pattern_type %R.as_type [symbolic] -// CHECK:STDOUT: %r.param_patt.90c: %pattern_type.17d = value_param_pattern [symbolic] -// CHECK:STDOUT: %r.patt.db8: %pattern_type.17d = wrapper_binding_pattern r, %r.param_patt.90c [symbolic] -// CHECK:STDOUT: %i.patt: %pattern_type.e41 = value_binding_pattern i [concrete] -// CHECK:STDOUT: %Iterate.lookup_impl_witness.173: = lookup_impl_witness %R, @Iterate [symbolic] -// CHECK:STDOUT: %Iterate.facet.b38: %Iterate.type = facet_value %R.as_type, (%Iterate.lookup_impl_witness.173) [symbolic] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.5cd: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.b38) [symbolic] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type.d51: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.b38) [symbolic] -// CHECK:STDOUT: %.592: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.5cd, %Iterate.facet.b38 [symbolic] -// CHECK:STDOUT: %impl.elem2.ae2: %.592 = impl_witness_access %Iterate.lookup_impl_witness.173, element2 [symbolic] -// CHECK:STDOUT: %impl.elem1.834: %Destroy.type = impl_witness_access %Iterate.lookup_impl_witness.173, element1 [symbolic] -// CHECK:STDOUT: %as_type.e41: type = facet_access_type %impl.elem1.834 [symbolic] -// CHECK:STDOUT: %specific_impl_fn.06e: = specific_impl_function %impl.elem2.ae2, @Iterate.WithSelf.NewCursor(%Iterate.facet.b38) [symbolic] -// CHECK:STDOUT: %ptr.d27: type = ptr_type %as_type.e41 [symbolic] -// CHECK:STDOUT: %.524: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.d51, %Iterate.facet.b38 [symbolic] -// CHECK:STDOUT: %impl.elem3.7a5: %.524 = impl_witness_access %Iterate.lookup_impl_witness.173, element3 [symbolic] -// CHECK:STDOUT: %DefaultOptionalStorage.257: type = class_type @DefaultOptionalStorage, @DefaultOptionalStorage(%facet_value.ccb) [concrete] -// CHECK:STDOUT: %OptionalStorage.impl_witness.1bc: = impl_witness imports.%OptionalStorage.impl_witness_table.460, @T.as_type.as.OptionalStorage.impl(%facet_value.ccb) [concrete] -// CHECK:STDOUT: %OptionalStorage.facet.8dd: %OptionalStorage.type = facet_value %ValueType, (%OptionalStorage.impl_witness.1bc) [concrete] -// CHECK:STDOUT: %Optional.1f5: type = class_type @Optional, @Optional(%OptionalStorage.facet.8dd) [concrete] -// CHECK:STDOUT: %specific_impl_fn.24b: = specific_impl_function %impl.elem3.7a5, @Iterate.WithSelf.Next(%Iterate.facet.b38) [symbolic] -// CHECK:STDOUT: %Optional.HasValue.type.527: type = fn_type @Optional.HasValue, @Optional(%OptionalStorage.facet.8dd) [concrete] -// CHECK:STDOUT: %Optional.HasValue.017: %Optional.HasValue.type.527 = struct_value () [concrete] -// CHECK:STDOUT: %Optional.Get.type.226: type = fn_type @Optional.Get, @Optional(%OptionalStorage.facet.8dd) [concrete] -// CHECK:STDOUT: %Optional.Get.0db: %Optional.Get.type.226 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.facet.306: %Destroy.type = facet_value %ValueType, (%custom_witness.fef) [concrete] -// CHECK:STDOUT: %MaybeUnformed.669: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.306) [concrete] -// CHECK:STDOUT: %.b36: type = maybe_unformed_type %ValueType [concrete] -// CHECK:STDOUT: %struct_type.value.has_value.5a1: type = struct_type {.value: %MaybeUnformed.669, .has_value: bool} [concrete] -// CHECK:STDOUT: %Optional.HasValue.specific_fn.2f1: = specific_function %Optional.HasValue.017, @Optional.HasValue(%OptionalStorage.facet.8dd) [concrete] -// CHECK:STDOUT: %Optional.Get.specific_fn.b3f: = specific_function %Optional.Get.0db, @Optional.Get(%OptionalStorage.facet.8dd) [concrete] +// CHECK:STDOUT: %pattern_type.447: type = pattern_type %R.as_type [symbolic] +// CHECK:STDOUT: %r.param_patt.207: %pattern_type.447 = value_param_pattern [symbolic] +// CHECK:STDOUT: %r.patt.e8b: %pattern_type.447 = wrapper_binding_pattern r, %r.param_patt.207 [symbolic] +// CHECK:STDOUT: %i.patt: %pattern_type.e09 = value_binding_pattern i [concrete] +// CHECK:STDOUT: %Iterate.lookup_impl_witness.116: = lookup_impl_witness %R, @Iterate [symbolic] +// CHECK:STDOUT: %Iterate.facet.401: %Iterate.type = facet_value %R.as_type, (%Iterate.lookup_impl_witness.116) [symbolic] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.e10: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.401) [symbolic] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type.7bd: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.401) [symbolic] +// CHECK:STDOUT: %.4ab: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.e10, %Iterate.facet.401 [symbolic] +// CHECK:STDOUT: %impl.elem2.739: %.4ab = impl_witness_access %Iterate.lookup_impl_witness.116, element2 [symbolic] +// CHECK:STDOUT: %impl.elem1.9b3: %Destroy.type = impl_witness_access %Iterate.lookup_impl_witness.116, element1 [symbolic] +// CHECK:STDOUT: %as_type.04b: type = facet_access_type %impl.elem1.9b3 [symbolic] +// CHECK:STDOUT: %specific_impl_fn.2b2: = specific_impl_function %impl.elem2.739, @Iterate.WithSelf.NewCursor(%Iterate.facet.401) [symbolic] +// CHECK:STDOUT: %ptr.494: type = ptr_type %as_type.04b [symbolic] +// CHECK:STDOUT: %.8ee: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.7bd, %Iterate.facet.401 [symbolic] +// CHECK:STDOUT: %impl.elem3.65d: %.8ee = impl_witness_access %Iterate.lookup_impl_witness.116, element3 [symbolic] +// CHECK:STDOUT: %DefaultOptionalStorage.338: type = class_type @DefaultOptionalStorage, @DefaultOptionalStorage(%facet_value.851) [concrete] +// CHECK:STDOUT: %OptionalStorage.impl_witness.26a: = impl_witness imports.%OptionalStorage.impl_witness_table.460, @T.as_type.as.OptionalStorage.impl(%facet_value.851) [concrete] +// CHECK:STDOUT: %OptionalStorage.facet.33d: %OptionalStorage.type = facet_value %ValueType, (%OptionalStorage.impl_witness.26a) [concrete] +// CHECK:STDOUT: %Optional.3cc: type = class_type @Optional, @Optional(%OptionalStorage.facet.33d) [concrete] +// CHECK:STDOUT: %specific_impl_fn.30e: = specific_impl_function %impl.elem3.65d, @Iterate.WithSelf.Next(%Iterate.facet.401) [symbolic] +// CHECK:STDOUT: %Optional.HasValue.type.f78: type = fn_type @Optional.HasValue, @Optional(%OptionalStorage.facet.33d) [concrete] +// CHECK:STDOUT: %Optional.HasValue.519: %Optional.HasValue.type.f78 = struct_value () [concrete] +// CHECK:STDOUT: %Optional.Get.type.9c5: type = fn_type @Optional.Get, @Optional(%OptionalStorage.facet.33d) [concrete] +// CHECK:STDOUT: %Optional.Get.323: %Optional.Get.type.9c5 = struct_value () [concrete] +// CHECK:STDOUT: %Destroy.facet.b42: %Destroy.type = facet_value %ValueType, (%custom_witness.ca2) [concrete] +// CHECK:STDOUT: %MaybeUnformed.5d7: type = class_type @MaybeUnformed, @MaybeUnformed(%Destroy.facet.b42) [concrete] +// CHECK:STDOUT: %.8f3: type = maybe_unformed_type %ValueType [concrete] +// CHECK:STDOUT: %struct_type.value.has_value.bd1: type = struct_type {.value: %MaybeUnformed.5d7, .has_value: bool} [concrete] +// CHECK:STDOUT: %Optional.HasValue.specific_fn.b3a: = specific_function %Optional.HasValue.519, @Optional.HasValue(%OptionalStorage.facet.33d) [concrete] +// CHECK:STDOUT: %Optional.Get.specific_fn.d62: = specific_function %Optional.Get.323, @Optional.Get(%OptionalStorage.facet.33d) [concrete] // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.type: type = fn_type @operator_PlusEqual__carbon_thunk [concrete] // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk: %operator_PlusEqual__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.Op.type.1d8f74.7: type = fn_type @Destroy.Op.loc38_31.6 [concrete] +// CHECK:STDOUT: %Destroy.Op.type.1d8f74.7: type = fn_type @Destroy.Op.loc38_41.6 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.7: %Destroy.Op.type.1d8f74.7 = struct_value () [concrete] -// CHECK:STDOUT: %Destroy.lookup_impl_witness.198: = lookup_impl_witness %impl.elem1.834, @Destroy [symbolic] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type.9d6: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%impl.elem1.834) [symbolic] -// CHECK:STDOUT: %.57c: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.9d6, %impl.elem1.834 [symbolic] -// CHECK:STDOUT: %impl.elem0.152: %.57c = impl_witness_access %Destroy.lookup_impl_witness.198, element0 [symbolic] -// CHECK:STDOUT: %specific_impl_fn.9fb: = specific_impl_function %impl.elem0.152, @Destroy.WithSelf.Op(%impl.elem1.834) [symbolic] +// CHECK:STDOUT: %Destroy.lookup_impl_witness.95e: = lookup_impl_witness %impl.elem1.9b3, @Destroy [symbolic] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type.223: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%impl.elem1.9b3) [symbolic] +// CHECK:STDOUT: %.32e: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.223, %impl.elem1.9b3 [symbolic] +// CHECK:STDOUT: %impl.elem0.87c: %.32e = impl_witness_access %Destroy.lookup_impl_witness.95e, element0 [symbolic] +// CHECK:STDOUT: %specific_impl_fn.65a: = specific_impl_function %impl.elem0.87c, @Destroy.WithSelf.Op(%impl.elem1.9b3) [symbolic] // CHECK:STDOUT: %MutableAndConstRange: type = class_type @MutableAndConstRange [concrete] -// CHECK:STDOUT: %pattern_type.394: type = pattern_type %MutableAndConstRange [concrete] +// CHECK:STDOUT: %pattern_type.fdb: type = pattern_type %MutableAndConstRange [concrete] // CHECK:STDOUT: %Iterator: type = class_type @Iterator.1 [concrete] // CHECK:STDOUT: %Begin.type: type = fn_type @Begin [concrete] // CHECK:STDOUT: %Begin: %Begin.type = struct_value () [concrete] // CHECK:STDOUT: %End.type: type = fn_type @End [concrete] // CHECK:STDOUT: %End: %End.type = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.a40: = custom_witness (%Iterator, %Iterator, %Begin, %End), @CppRangeForIterate [concrete] -// CHECK:STDOUT: %Iterator.Op.type.fa7609.1: type = fn_type @Iterator.Op.1 [concrete] -// CHECK:STDOUT: %Iterator.Op.549055.1: %Iterator.Op.type.fa7609.1 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.dd5: = custom_witness (%ValueType, %Iterator.Op.549055.1), @CppUnsafeDeref [concrete] -// CHECK:STDOUT: %Iterator.Op.type.fa7609.2: type = fn_type @Iterator.Op.2 [concrete] -// CHECK:STDOUT: %Iterator.Op.549055.2: %Iterator.Op.type.fa7609.2 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.04a: = custom_witness (%Iterator.Op.549055.2), @Destroy [concrete] -// CHECK:STDOUT: %Iterator.Op.type.fa7609.3: type = fn_type @Iterator.Op.3 [concrete] -// CHECK:STDOUT: %Iterator.Op.549055.3: %Iterator.Op.type.fa7609.3 = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.01a: = custom_witness (%Iterator.Op.549055.3), @Inc [concrete] +// CHECK:STDOUT: %custom_witness.660: = custom_witness (%Iterator, %Iterator, %Begin, %End), @CppRangeForIterate [concrete] +// CHECK:STDOUT: %Iterator.Op.type.c95ff6.1: type = fn_type @Iterator.Op.1 [concrete] +// CHECK:STDOUT: %Iterator.Op.c90ac2.1: %Iterator.Op.type.c95ff6.1 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.d56: = custom_witness (%ValueType, %Iterator.Op.c90ac2.1), @CppUnsafeDeref [concrete] +// CHECK:STDOUT: %Iterator.Op.type.c95ff6.2: type = fn_type @Iterator.Op.2 [concrete] +// CHECK:STDOUT: %Iterator.Op.c90ac2.2: %Iterator.Op.type.c95ff6.2 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.a79: = custom_witness (%Iterator.Op.c90ac2.2), @Destroy [concrete] +// CHECK:STDOUT: %Iterator.Op.type.c95ff6.3: type = fn_type @Iterator.Op.3 [concrete] +// CHECK:STDOUT: %Iterator.Op.c90ac2.3: %Iterator.Op.type.c95ff6.3 = struct_value () [concrete] +// CHECK:STDOUT: %custom_witness.68a: = custom_witness (%Iterator.Op.c90ac2.3), @Inc [concrete] // CHECK:STDOUT: %Equal.type: type = fn_type @Equal [concrete] // CHECK:STDOUT: %Equal: %Equal.type = struct_value () [concrete] // CHECK:STDOUT: %NotEqual.type: type = fn_type @NotEqual [concrete] // CHECK:STDOUT: %NotEqual: %NotEqual.type = struct_value () [concrete] -// CHECK:STDOUT: %custom_witness.c66: = custom_witness (%Equal, %NotEqual), @EqWith, @EqWith(%Iterator) [concrete] -// CHECK:STDOUT: %facet_value.32f: %CppRange_where.type.d682d6.1 = facet_value %MutableAndConstRange, (%custom_witness.fef, %custom_witness.c19, %custom_witness.a40, %custom_witness.04a, %custom_witness.dd5, %custom_witness.01a, %custom_witness.c66) [concrete] -// CHECK:STDOUT: %tuple.type.56e: type = tuple_type (%Iterator, %Iterator) [concrete] +// CHECK:STDOUT: %custom_witness.2ef: = custom_witness (%Equal, %NotEqual), @EqWith, @EqWith(%Iterator) [concrete] +// CHECK:STDOUT: %facet_value.94c: %CppRange_where.type.d682d6.1 = facet_value %MutableAndConstRange, (%custom_witness.ca2, %custom_witness.1c5, %custom_witness.660, %custom_witness.a79, %custom_witness.d56, %custom_witness.68a, %custom_witness.2ef) [concrete] +// CHECK:STDOUT: %tuple.type.de6: type = tuple_type (%Iterator, %Iterator) [concrete] // CHECK:STDOUT: %Destroy.Op.type.1d8f74.8: type = fn_type @Destroy.Op.2 [concrete] // CHECK:STDOUT: %Destroy.Op.1a2547.8: %Destroy.Op.type.1d8f74.8 = struct_value () [concrete] // CHECK:STDOUT: %custom_witness.df9cc1.8: = custom_witness (%Destroy.Op.1a2547.8), @Destroy [concrete] -// CHECK:STDOUT: %Destroy.facet.7aa: %Destroy.type = facet_value %tuple.type.56e, (%custom_witness.df9cc1.8) [concrete] -// CHECK:STDOUT: %Iterate.impl_witness.c1c: = impl_witness imports.%Iterate.impl_witness_table.121, @T.as_type.as.Iterate.impl(%facet_value.32f) [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.type.ad1: type = fn_type @T.as_type.as.Iterate.impl.NewCursor, @T.as_type.as.Iterate.impl(%facet_value.32f) [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.d87: %T.as_type.as.Iterate.impl.NewCursor.type.ad1 = struct_value () [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.type.946: type = fn_type @T.as_type.as.Iterate.impl.Next, @T.as_type.as.Iterate.impl(%facet_value.32f) [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.a1a: %T.as_type.as.Iterate.impl.Next.type.946 = struct_value () [concrete] -// CHECK:STDOUT: %Iterate.facet.878: %Iterate.type = facet_value %MutableAndConstRange, (%Iterate.impl_witness.c1c) [concrete] -// CHECK:STDOUT: %facet_value.530: %Iterate_where.type.f9d = facet_value %MutableAndConstRange, (%Iterate.impl_witness.c1c) [concrete] -// CHECK:STDOUT: %r.param_patt.8bb: %pattern_type.394 = value_param_pattern [concrete] -// CHECK:STDOUT: %r.patt.429: %pattern_type.394 = wrapper_binding_pattern r, %r.param_patt.8bb [concrete] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.5d8: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.878) [concrete] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type.1eb: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.878) [concrete] -// CHECK:STDOUT: %.2a5: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.5d8, %Iterate.facet.878 [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.specific_fn: = specific_function %T.as_type.as.Iterate.impl.NewCursor.d87, @T.as_type.as.Iterate.impl.NewCursor(%facet_value.32f) [concrete] -// CHECK:STDOUT: %ptr.484: type = ptr_type %tuple.type.56e [concrete] -// CHECK:STDOUT: %.0b8: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.1eb, %Iterate.facet.878 [concrete] -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.specific_fn: = specific_function %T.as_type.as.Iterate.impl.Next.a1a, @T.as_type.as.Iterate.impl.Next(%facet_value.32f) [concrete] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type.b7b: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.7aa) [concrete] -// CHECK:STDOUT: %.1ad: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.b7b, %Destroy.facet.7aa [concrete] -// CHECK:STDOUT: %complete_type.1b5: = complete_type_witness %tuple.type.56e [concrete] +// CHECK:STDOUT: %Destroy.facet.84a: %Destroy.type = facet_value %tuple.type.de6, (%custom_witness.df9cc1.8) [concrete] +// CHECK:STDOUT: %Iterate.impl_witness.e93: = impl_witness imports.%Iterate.impl_witness_table.121, @T.as_type.as.Iterate.impl(%facet_value.94c) [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.type.c35: type = fn_type @T.as_type.as.Iterate.impl.NewCursor, @T.as_type.as.Iterate.impl(%facet_value.94c) [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.237: %T.as_type.as.Iterate.impl.NewCursor.type.c35 = struct_value () [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.type.50f: type = fn_type @T.as_type.as.Iterate.impl.Next, @T.as_type.as.Iterate.impl(%facet_value.94c) [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.1b2: %T.as_type.as.Iterate.impl.Next.type.50f = struct_value () [concrete] +// CHECK:STDOUT: %Iterate.facet.c00: %Iterate.type = facet_value %MutableAndConstRange, (%Iterate.impl_witness.e93) [concrete] +// CHECK:STDOUT: %facet_value.266: %Iterate_where.type.290 = facet_value %MutableAndConstRange, (%Iterate.impl_witness.e93) [concrete] +// CHECK:STDOUT: %r.param_patt.3a6: %pattern_type.fdb = value_param_pattern [concrete] +// CHECK:STDOUT: %r.patt.403: %pattern_type.fdb = wrapper_binding_pattern r, %r.param_patt.3a6 [concrete] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type.d86: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.c00) [concrete] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type.4a6: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.c00) [concrete] +// CHECK:STDOUT: %.e94: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type.d86, %Iterate.facet.c00 [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.specific_fn: = specific_function %T.as_type.as.Iterate.impl.NewCursor.237, @T.as_type.as.Iterate.impl.NewCursor(%facet_value.94c) [concrete] +// CHECK:STDOUT: %ptr.b95: type = ptr_type %tuple.type.de6 [concrete] +// CHECK:STDOUT: %.d53: type = fn_type_with_self_type %Iterate.WithSelf.Next.type.4a6, %Iterate.facet.c00 [concrete] +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.specific_fn: = specific_function %T.as_type.as.Iterate.impl.Next.1b2, @T.as_type.as.Iterate.impl.Next(%facet_value.94c) [concrete] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type.544: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%Destroy.facet.84a) [concrete] +// CHECK:STDOUT: %.a9c: type = fn_type_with_self_type %Destroy.WithSelf.Op.type.544, %Destroy.facet.84a [concrete] +// CHECK:STDOUT: %complete_type.95d: = complete_type_witness %tuple.type.de6 [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { -// CHECK:STDOUT: .N = %N +// CHECK:STDOUT: .OverloadADL = %OverloadADL // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: %Core.import_ref.bb6: @Optional.%Optional.HasValue.type (%Optional.HasValue.type.e9e) = import_ref Core//prelude/iterate, inst{{[0-9A-F]+}} [indirect], loaded [symbolic = @Optional.%Optional.HasValue (constants.%Optional.HasValue.6cd)] @@ -4292,7 +4292,7 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %Core.import_ref.fd1: @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.NewCursor.type (%T.as_type.as.Iterate.impl.NewCursor.type.953) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.NewCursor (constants.%T.as_type.as.Iterate.impl.NewCursor.544)] // CHECK:STDOUT: %Core.import_ref.273: @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.Next.type (%T.as_type.as.Iterate.impl.Next.type.b36) = import_ref Core//prelude/iterate, loc{{\d+_\d+}}, loaded [symbolic = @T.as_type.as.Iterate.impl.%T.as_type.as.Iterate.impl.Next (constants.%T.as_type.as.Iterate.impl.Next.d6b)] // CHECK:STDOUT: %Iterate.impl_witness_table.121 = impl_witness_table (%Core.import_ref.eef, %Core.import_ref.fcc, %Core.import_ref.fd1, %Core.import_ref.273), @T.as_type.as.Iterate.impl [concrete] -// CHECK:STDOUT: %N: = namespace [concrete] { +// CHECK:STDOUT: %OverloadADL: = namespace [concrete] { // CHECK:STDOUT: .ValueType = %ValueType.decl // CHECK:STDOUT: .MutableAndConstRange = %MutableAndConstRange.decl // CHECK:STDOUT: import Cpp//... @@ -4311,144 +4311,144 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: %MutableAndConstRange.decl: type = class_decl @MutableAndConstRange [concrete = constants.%MutableAndConstRange] {} {} // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: generic fn @TestIterate(%R.loc34_17.2: %Iterate_where.type.f9d) { +// CHECK:STDOUT: generic fn @TestIterate(%R.loc34_17.2: %Iterate_where.type.290) { // CHECK:STDOUT: // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: -// CHECK:STDOUT: %Iterate.lookup_impl_witness: = lookup_impl_witness %R.loc34_17.1, @Iterate [symbolic = %Iterate.lookup_impl_witness (constants.%Iterate.lookup_impl_witness.173)] -// CHECK:STDOUT: %Iterate.facet.loc38_31.5: %Iterate.type = facet_value %R.as_type.loc34_73.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc38_31.5 (constants.%Iterate.facet.b38)] -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc38_31.5) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.5cd)] -// CHECK:STDOUT: %.loc38_31.20: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc38_31.5 [symbolic = %.loc38_31.20 (constants.%.592)] -// CHECK:STDOUT: %impl.elem2.loc38_31.2: @TestIterate.%.loc38_31.20 (%.592) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc38_31.2 (constants.%impl.elem2.ae2)] -// CHECK:STDOUT: %specific_impl_fn.loc38_31.4: = specific_impl_function %impl.elem2.loc38_31.2, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc38_31.5) [symbolic = %specific_impl_fn.loc38_31.4 (constants.%specific_impl_fn.06e)] +// CHECK:STDOUT: %Iterate.lookup_impl_witness: = lookup_impl_witness %R.loc34_17.1, @Iterate [symbolic = %Iterate.lookup_impl_witness (constants.%Iterate.lookup_impl_witness.116)] +// CHECK:STDOUT: %Iterate.facet.loc38_41.5: %Iterate.type = facet_value %R.as_type.loc34_83.1, (%Iterate.lookup_impl_witness) [symbolic = %Iterate.facet.loc38_41.5 (constants.%Iterate.facet.401)] +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type: type = fn_type @Iterate.WithSelf.NewCursor, @Iterate.WithSelf(%Iterate.facet.loc38_41.5) [symbolic = %Iterate.WithSelf.NewCursor.type (constants.%Iterate.WithSelf.NewCursor.type.e10)] +// CHECK:STDOUT: %.loc38_41.20: type = fn_type_with_self_type %Iterate.WithSelf.NewCursor.type, %Iterate.facet.loc38_41.5 [symbolic = %.loc38_41.20 (constants.%.4ab)] +// CHECK:STDOUT: %impl.elem2.loc38_41.2: @TestIterate.%.loc38_41.20 (%.4ab) = impl_witness_access %Iterate.lookup_impl_witness, element2 [symbolic = %impl.elem2.loc38_41.2 (constants.%impl.elem2.739)] +// CHECK:STDOUT: %specific_impl_fn.loc38_41.4: = specific_impl_function %impl.elem2.loc38_41.2, @Iterate.WithSelf.NewCursor(%Iterate.facet.loc38_41.5) [symbolic = %specific_impl_fn.loc38_41.4 (constants.%specific_impl_fn.2b2)] // CHECK:STDOUT: -// CHECK:STDOUT: %ptr: type = ptr_type %as_type [symbolic = %ptr (constants.%ptr.d27)] -// CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc38_31.5) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.d51)] -// CHECK:STDOUT: %.loc38_31.21: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc38_31.5 [symbolic = %.loc38_31.21 (constants.%.524)] -// CHECK:STDOUT: %impl.elem3.loc38_31.2: @TestIterate.%.loc38_31.21 (%.524) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc38_31.2 (constants.%impl.elem3.7a5)] -// CHECK:STDOUT: %specific_impl_fn.loc38_31.5: = specific_impl_function %impl.elem3.loc38_31.2, @Iterate.WithSelf.Next(%Iterate.facet.loc38_31.5) [symbolic = %specific_impl_fn.loc38_31.5 (constants.%specific_impl_fn.24b)] -// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%impl.elem1) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.9d6)] -// CHECK:STDOUT: %.loc38_31.22: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %impl.elem1 [symbolic = %.loc38_31.22 (constants.%.57c)] -// CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %impl.elem1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.198)] -// CHECK:STDOUT: %impl.elem0.loc38_31.2: @TestIterate.%.loc38_31.22 (%.57c) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc38_31.2 (constants.%impl.elem0.152)] -// CHECK:STDOUT: %specific_impl_fn.loc38_31.6: = specific_impl_function %impl.elem0.loc38_31.2, @Destroy.WithSelf.Op(%impl.elem1) [symbolic = %specific_impl_fn.loc38_31.6 (constants.%specific_impl_fn.9fb)] +// CHECK:STDOUT: %ptr: type = ptr_type %as_type [symbolic = %ptr (constants.%ptr.494)] +// CHECK:STDOUT: %Iterate.WithSelf.Next.type: type = fn_type @Iterate.WithSelf.Next, @Iterate.WithSelf(%Iterate.facet.loc38_41.5) [symbolic = %Iterate.WithSelf.Next.type (constants.%Iterate.WithSelf.Next.type.7bd)] +// CHECK:STDOUT: %.loc38_41.21: type = fn_type_with_self_type %Iterate.WithSelf.Next.type, %Iterate.facet.loc38_41.5 [symbolic = %.loc38_41.21 (constants.%.8ee)] +// CHECK:STDOUT: %impl.elem3.loc38_41.2: @TestIterate.%.loc38_41.21 (%.8ee) = impl_witness_access %Iterate.lookup_impl_witness, element3 [symbolic = %impl.elem3.loc38_41.2 (constants.%impl.elem3.65d)] +// CHECK:STDOUT: %specific_impl_fn.loc38_41.5: = specific_impl_function %impl.elem3.loc38_41.2, @Iterate.WithSelf.Next(%Iterate.facet.loc38_41.5) [symbolic = %specific_impl_fn.loc38_41.5 (constants.%specific_impl_fn.30e)] +// CHECK:STDOUT: %Destroy.WithSelf.Op.type: type = fn_type @Destroy.WithSelf.Op, @Destroy.WithSelf(%impl.elem1) [symbolic = %Destroy.WithSelf.Op.type (constants.%Destroy.WithSelf.Op.type.223)] +// CHECK:STDOUT: %.loc38_41.22: type = fn_type_with_self_type %Destroy.WithSelf.Op.type, %impl.elem1 [symbolic = %.loc38_41.22 (constants.%.32e)] +// CHECK:STDOUT: %Destroy.lookup_impl_witness: = lookup_impl_witness %impl.elem1, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness.95e)] +// CHECK:STDOUT: %impl.elem0.loc38_41.2: @TestIterate.%.loc38_41.22 (%.32e) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc38_41.2 (constants.%impl.elem0.87c)] +// CHECK:STDOUT: %specific_impl_fn.loc38_41.6: = specific_impl_function %impl.elem0.loc38_41.2, @Destroy.WithSelf.Op(%impl.elem1) [symbolic = %specific_impl_fn.loc38_41.6 (constants.%specific_impl_fn.65a)] // CHECK:STDOUT: -// CHECK:STDOUT: fn(%r.param: @TestIterate.%R.as_type.loc34_73.1 (%R.as_type)) { +// CHECK:STDOUT: fn(%r.param: @TestIterate.%R.as_type.loc34_83.1 (%R.as_type)) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %pattern_type.e41 = value_binding_pattern i [concrete = constants.%i.patt] +// CHECK:STDOUT: %i.patt: %pattern_type.e09 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } -// CHECK:STDOUT: %r.ref: @TestIterate.%R.as_type.loc34_73.1 (%R.as_type) = name_ref r, %r -// CHECK:STDOUT: %impl.elem2.loc38_31.1: @TestIterate.%.loc38_31.20 (%.592) = impl_witness_access constants.%Iterate.lookup_impl_witness.173, element2 [symbolic = %impl.elem2.loc38_31.2 (constants.%impl.elem2.ae2)] -// CHECK:STDOUT: %bound_method.loc38_31.1: = bound_method %r.ref, %impl.elem2.loc38_31.1 -// CHECK:STDOUT: %Iterate.facet.loc38_31.1: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.173) [symbolic = %Iterate.facet.loc38_31.5 (constants.%Iterate.facet.b38)] -// CHECK:STDOUT: %.loc38_31.1: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc38_31.1 [symbolic = %Iterate.facet.loc38_31.5 (constants.%Iterate.facet.b38)] -// CHECK:STDOUT: %Iterate.facet.loc38_31.2: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.173) [symbolic = %Iterate.facet.loc38_31.5 (constants.%Iterate.facet.b38)] -// CHECK:STDOUT: %.loc38_31.2: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc38_31.2 [symbolic = %Iterate.facet.loc38_31.5 (constants.%Iterate.facet.b38)] -// CHECK:STDOUT: %specific_impl_fn.loc38_31.1: = specific_impl_function %impl.elem2.loc38_31.1, @Iterate.WithSelf.NewCursor(constants.%Iterate.facet.b38) [symbolic = %specific_impl_fn.loc38_31.4 (constants.%specific_impl_fn.06e)] -// CHECK:STDOUT: %bound_method.loc38_31.2: = bound_method %r.ref, %specific_impl_fn.loc38_31.1 -// CHECK:STDOUT: %var: ref @TestIterate.%as_type (%as_type.e41) = var_storage invalid -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.call: init @TestIterate.%as_type (%as_type.e41) to %var = call %bound_method.loc38_31.2(%r.ref) +// CHECK:STDOUT: %r.ref: @TestIterate.%R.as_type.loc34_83.1 (%R.as_type) = name_ref r, %r +// CHECK:STDOUT: %impl.elem2.loc38_41.1: @TestIterate.%.loc38_41.20 (%.4ab) = impl_witness_access constants.%Iterate.lookup_impl_witness.116, element2 [symbolic = %impl.elem2.loc38_41.2 (constants.%impl.elem2.739)] +// CHECK:STDOUT: %bound_method.loc38_41.1: = bound_method %r.ref, %impl.elem2.loc38_41.1 +// CHECK:STDOUT: %Iterate.facet.loc38_41.1: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.116) [symbolic = %Iterate.facet.loc38_41.5 (constants.%Iterate.facet.401)] +// CHECK:STDOUT: %.loc38_41.1: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc38_41.1 [symbolic = %Iterate.facet.loc38_41.5 (constants.%Iterate.facet.401)] +// CHECK:STDOUT: %Iterate.facet.loc38_41.2: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.116) [symbolic = %Iterate.facet.loc38_41.5 (constants.%Iterate.facet.401)] +// CHECK:STDOUT: %.loc38_41.2: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc38_41.2 [symbolic = %Iterate.facet.loc38_41.5 (constants.%Iterate.facet.401)] +// CHECK:STDOUT: %specific_impl_fn.loc38_41.1: = specific_impl_function %impl.elem2.loc38_41.1, @Iterate.WithSelf.NewCursor(constants.%Iterate.facet.401) [symbolic = %specific_impl_fn.loc38_41.4 (constants.%specific_impl_fn.2b2)] +// CHECK:STDOUT: %bound_method.loc38_41.2: = bound_method %r.ref, %specific_impl_fn.loc38_41.1 +// CHECK:STDOUT: %var: ref @TestIterate.%as_type (%as_type.04b) = var_storage invalid +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.call: init @TestIterate.%as_type (%as_type.04b) to %var = call %bound_method.loc38_41.2(%r.ref) // CHECK:STDOUT: assign %var, %Iterate.WithSelf.NewCursor.call // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.next: -// CHECK:STDOUT: %addr.loc38: @TestIterate.%ptr (%ptr.d27) = addr_of %var -// CHECK:STDOUT: %impl.elem3.loc38_31.1: @TestIterate.%.loc38_31.21 (%.524) = impl_witness_access constants.%Iterate.lookup_impl_witness.173, element3 [symbolic = %impl.elem3.loc38_31.2 (constants.%impl.elem3.7a5)] -// CHECK:STDOUT: %bound_method.loc38_31.3: = bound_method %r.ref, %impl.elem3.loc38_31.1 -// CHECK:STDOUT: %Iterate.facet.loc38_31.3: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.173) [symbolic = %Iterate.facet.loc38_31.5 (constants.%Iterate.facet.b38)] -// CHECK:STDOUT: %.loc38_31.3: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc38_31.3 [symbolic = %Iterate.facet.loc38_31.5 (constants.%Iterate.facet.b38)] -// CHECK:STDOUT: %Iterate.facet.loc38_31.4: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.173) [symbolic = %Iterate.facet.loc38_31.5 (constants.%Iterate.facet.b38)] -// CHECK:STDOUT: %.loc38_31.4: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc38_31.4 [symbolic = %Iterate.facet.loc38_31.5 (constants.%Iterate.facet.b38)] -// CHECK:STDOUT: %.loc38_31.5: %Destroy.type = converted constants.%as_type.e41, constants.%impl.elem1.834 [symbolic = %impl.elem1 (constants.%impl.elem1.834)] -// CHECK:STDOUT: %.loc38_31.6: %Destroy.type = converted constants.%as_type.e41, constants.%impl.elem1.834 [symbolic = %impl.elem1 (constants.%impl.elem1.834)] -// CHECK:STDOUT: %specific_impl_fn.loc38_31.2: = specific_impl_function %impl.elem3.loc38_31.1, @Iterate.WithSelf.Next(constants.%Iterate.facet.b38) [symbolic = %specific_impl_fn.loc38_31.5 (constants.%specific_impl_fn.24b)] -// CHECK:STDOUT: %bound_method.loc38_31.4: = bound_method %r.ref, %specific_impl_fn.loc38_31.2 -// CHECK:STDOUT: %.loc38_31.7: ref %Optional.1f5 = temporary_storage -// CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.1f5 to %.loc38_31.7 = call %bound_method.loc38_31.4(%r.ref, %addr.loc38) -// CHECK:STDOUT: %.loc38_31.8: ref %Optional.1f5 = temporary %.loc38_31.7, %Iterate.WithSelf.Next.call -// CHECK:STDOUT: %.loc38_31.9: %Optional.HasValue.type.527 = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.8dd) [concrete = constants.%Optional.HasValue.017] -// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.527 = name_ref HasValue, %.loc38_31.9 [concrete = constants.%Optional.HasValue.017] -// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc38_31.8, %HasValue.ref -// CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.8dd) [concrete = constants.%Optional.HasValue.specific_fn.2f1] -// CHECK:STDOUT: %bound_method.loc38_31.5: = bound_method %.loc38_31.8, %Optional.HasValue.specific_fn -// CHECK:STDOUT: %.loc38_31.10: %Optional.1f5 = acquire_value %.loc38_31.8 -// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc38_31.5(%.loc38_31.10) -// CHECK:STDOUT: %.loc38_31.11: bool = value_of_initializer %Optional.HasValue.call -// CHECK:STDOUT: %.loc38_31.12: bool = converted %Optional.HasValue.call, %.loc38_31.11 -// CHECK:STDOUT: if %.loc38_31.12 br !for.body else br !for.done +// CHECK:STDOUT: %addr.loc38: @TestIterate.%ptr (%ptr.494) = addr_of %var +// CHECK:STDOUT: %impl.elem3.loc38_41.1: @TestIterate.%.loc38_41.21 (%.8ee) = impl_witness_access constants.%Iterate.lookup_impl_witness.116, element3 [symbolic = %impl.elem3.loc38_41.2 (constants.%impl.elem3.65d)] +// CHECK:STDOUT: %bound_method.loc38_41.3: = bound_method %r.ref, %impl.elem3.loc38_41.1 +// CHECK:STDOUT: %Iterate.facet.loc38_41.3: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.116) [symbolic = %Iterate.facet.loc38_41.5 (constants.%Iterate.facet.401)] +// CHECK:STDOUT: %.loc38_41.3: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc38_41.3 [symbolic = %Iterate.facet.loc38_41.5 (constants.%Iterate.facet.401)] +// CHECK:STDOUT: %Iterate.facet.loc38_41.4: %Iterate.type = facet_value constants.%R.as_type, (constants.%Iterate.lookup_impl_witness.116) [symbolic = %Iterate.facet.loc38_41.5 (constants.%Iterate.facet.401)] +// CHECK:STDOUT: %.loc38_41.4: %Iterate.type = converted constants.%R.as_type, %Iterate.facet.loc38_41.4 [symbolic = %Iterate.facet.loc38_41.5 (constants.%Iterate.facet.401)] +// CHECK:STDOUT: %.loc38_41.5: %Destroy.type = converted constants.%as_type.04b, constants.%impl.elem1.9b3 [symbolic = %impl.elem1 (constants.%impl.elem1.9b3)] +// CHECK:STDOUT: %.loc38_41.6: %Destroy.type = converted constants.%as_type.04b, constants.%impl.elem1.9b3 [symbolic = %impl.elem1 (constants.%impl.elem1.9b3)] +// CHECK:STDOUT: %specific_impl_fn.loc38_41.2: = specific_impl_function %impl.elem3.loc38_41.1, @Iterate.WithSelf.Next(constants.%Iterate.facet.401) [symbolic = %specific_impl_fn.loc38_41.5 (constants.%specific_impl_fn.30e)] +// CHECK:STDOUT: %bound_method.loc38_41.4: = bound_method %r.ref, %specific_impl_fn.loc38_41.2 +// CHECK:STDOUT: %.loc38_41.7: ref %Optional.3cc = temporary_storage +// CHECK:STDOUT: %Iterate.WithSelf.Next.call: init %Optional.3cc to %.loc38_41.7 = call %bound_method.loc38_41.4(%r.ref, %addr.loc38) +// CHECK:STDOUT: %.loc38_41.8: ref %Optional.3cc = temporary %.loc38_41.7, %Iterate.WithSelf.Next.call +// CHECK:STDOUT: %.loc38_41.9: %Optional.HasValue.type.f78 = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.33d) [concrete = constants.%Optional.HasValue.519] +// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.f78 = name_ref HasValue, %.loc38_41.9 [concrete = constants.%Optional.HasValue.519] +// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc38_41.8, %HasValue.ref +// CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.33d) [concrete = constants.%Optional.HasValue.specific_fn.b3a] +// CHECK:STDOUT: %bound_method.loc38_41.5: = bound_method %.loc38_41.8, %Optional.HasValue.specific_fn +// CHECK:STDOUT: %.loc38_41.10: %Optional.3cc = acquire_value %.loc38_41.8 +// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc38_41.5(%.loc38_41.10) +// CHECK:STDOUT: %.loc38_41.11: bool = value_of_initializer %Optional.HasValue.call +// CHECK:STDOUT: %.loc38_41.12: bool = converted %Optional.HasValue.call, %.loc38_41.11 +// CHECK:STDOUT: if %.loc38_41.12 br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: -// CHECK:STDOUT: %.loc38_31.13: %Optional.Get.type.226 = specific_constant imports.%Core.import_ref.dab, @Optional(constants.%OptionalStorage.facet.8dd) [concrete = constants.%Optional.Get.0db] -// CHECK:STDOUT: %Get.ref: %Optional.Get.type.226 = name_ref Get, %.loc38_31.13 [concrete = constants.%Optional.Get.0db] -// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc38_31.8, %Get.ref -// CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.8dd) [concrete = constants.%Optional.Get.specific_fn.b3f] -// CHECK:STDOUT: %bound_method.loc38_31.6: = bound_method %.loc38_31.8, %Optional.Get.specific_fn -// CHECK:STDOUT: %.loc38_31.14: ref %ValueType = temporary_storage -// CHECK:STDOUT: %.loc38_31.15: %Optional.1f5 = acquire_value %.loc38_31.8 -// CHECK:STDOUT: %Optional.Get.call: init %ValueType to %.loc38_31.14 = call %bound_method.loc38_31.6(%.loc38_31.15) -// CHECK:STDOUT: %.loc38_31.16: ref %ValueType = temporary %.loc38_31.14, %Optional.Get.call -// CHECK:STDOUT: %.loc38_31.17: %ValueType = acquire_value %.loc38_31.16 -// CHECK:STDOUT: %.loc38_16: type = splice_block %ValueType.ref.loc38 [concrete = constants.%ValueType] { +// CHECK:STDOUT: %.loc38_41.13: %Optional.Get.type.9c5 = specific_constant imports.%Core.import_ref.dab, @Optional(constants.%OptionalStorage.facet.33d) [concrete = constants.%Optional.Get.323] +// CHECK:STDOUT: %Get.ref: %Optional.Get.type.9c5 = name_ref Get, %.loc38_41.13 [concrete = constants.%Optional.Get.323] +// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc38_41.8, %Get.ref +// CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.33d) [concrete = constants.%Optional.Get.specific_fn.d62] +// CHECK:STDOUT: %bound_method.loc38_41.6: = bound_method %.loc38_41.8, %Optional.Get.specific_fn +// CHECK:STDOUT: %.loc38_41.14: ref %ValueType = temporary_storage +// CHECK:STDOUT: %.loc38_41.15: %Optional.3cc = acquire_value %.loc38_41.8 +// CHECK:STDOUT: %Optional.Get.call: init %ValueType to %.loc38_41.14 = call %bound_method.loc38_41.6(%.loc38_41.15) +// CHECK:STDOUT: %.loc38_41.16: ref %ValueType = temporary %.loc38_41.14, %Optional.Get.call +// CHECK:STDOUT: %.loc38_41.17: %ValueType = acquire_value %.loc38_41.16 +// CHECK:STDOUT: %.loc38_26: type = splice_block %ValueType.ref.loc38 [concrete = constants.%ValueType] { // CHECK:STDOUT: %Cpp.ref.loc38: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %N.ref.loc38: = name_ref N, imports.%N [concrete = imports.%N] +// CHECK:STDOUT: %OverloadADL.ref.loc38: = name_ref OverloadADL, imports.%OverloadADL [concrete = imports.%OverloadADL] // CHECK:STDOUT: %ValueType.ref.loc38: type = name_ref ValueType, imports.%ValueType.decl [concrete = constants.%ValueType] // CHECK:STDOUT: } -// CHECK:STDOUT: %i: %ValueType = wrapper_binding i, %.loc38_31.17 +// CHECK:STDOUT: %i: %ValueType = wrapper_binding i, %.loc38_41.17 // CHECK:STDOUT: %sum.ref: ref %ValueType = name_ref sum, %sum // CHECK:STDOUT: %i.ref: %ValueType = name_ref i, %i // CHECK:STDOUT: %.loc39_12: ref %ValueType = value_as_ref %i.ref -// CHECK:STDOUT: %addr.loc39: %ptr.9d3 = addr_of %.loc39_12 -// CHECK:STDOUT: %.loc39_9.1: %ptr.32e = as_compatible %addr.loc39 -// CHECK:STDOUT: %.loc39_9.2: %ptr.32e = converted %addr.loc39, %.loc39_9.1 +// CHECK:STDOUT: %addr.loc39: %ptr.6ed = addr_of %.loc39_12 +// CHECK:STDOUT: %.loc39_9.1: %ptr.403 = as_compatible %addr.loc39 +// CHECK:STDOUT: %.loc39_9.2: %ptr.403 = converted %addr.loc39, %.loc39_9.1 // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.call: ref %ValueType = call imports.%operator_PlusEqual__carbon_thunk.decl(%sum.ref, %.loc39_9.2) -// CHECK:STDOUT: %ValueType.Op.bound.loc38: = bound_method %.loc38_31.16, constants.%ValueType.Op.4c94b9.1 +// CHECK:STDOUT: %ValueType.Op.bound.loc38: = bound_method %.loc38_41.16, constants.%ValueType.Op.038ea9.1 // CHECK:STDOUT: %Op.ref.loc38: %ValueType.cpp_destructor.type = name_ref Op, imports.%ValueType.cpp_destructor.decl [concrete = constants.%ValueType.cpp_destructor] -// CHECK:STDOUT: %ValueType.cpp_destructor.bound.loc38: = bound_method %.loc38_31.16, %Op.ref.loc38 -// CHECK:STDOUT: %ValueType.cpp_destructor.call.loc38: init %empty_tuple.type = call %ValueType.cpp_destructor.bound.loc38(%.loc38_31.16) -// CHECK:STDOUT: %Destroy.Op.bound.loc38_31.1: = bound_method %.loc38_31.8, constants.%Destroy.Op.1a2547.7 -// CHECK:STDOUT: %Destroy.Op.call.loc38_31.1: init %empty_tuple.type = call %Destroy.Op.bound.loc38_31.1(%.loc38_31.8) +// CHECK:STDOUT: %ValueType.cpp_destructor.bound.loc38: = bound_method %.loc38_41.16, %Op.ref.loc38 +// CHECK:STDOUT: %ValueType.cpp_destructor.call.loc38: init %empty_tuple.type = call %ValueType.cpp_destructor.bound.loc38(%.loc38_41.16) +// CHECK:STDOUT: %Destroy.Op.bound.loc38_41.1: = bound_method %.loc38_41.8, constants.%Destroy.Op.1a2547.7 +// CHECK:STDOUT: %Destroy.Op.call.loc38_41.1: init %empty_tuple.type = call %Destroy.Op.bound.loc38_41.1(%.loc38_41.8) // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: -// CHECK:STDOUT: %Destroy.Op.bound.loc38_31.2: = bound_method %.loc38_31.8, constants.%Destroy.Op.1a2547.7 -// CHECK:STDOUT: %Destroy.Op.call.loc38_31.2: init %empty_tuple.type = call %Destroy.Op.bound.loc38_31.2(%.loc38_31.8) -// CHECK:STDOUT: %impl.elem0.loc38_31.1: @TestIterate.%.loc38_31.22 (%.57c) = impl_witness_access constants.%Destroy.lookup_impl_witness.198, element0 [symbolic = %impl.elem0.loc38_31.2 (constants.%impl.elem0.152)] -// CHECK:STDOUT: %bound_method.loc38_31.7: = bound_method %var, %impl.elem0.loc38_31.1 -// CHECK:STDOUT: %.loc38_31.18: %Destroy.type = converted constants.%as_type.e41, constants.%impl.elem1.834 [symbolic = %impl.elem1 (constants.%impl.elem1.834)] -// CHECK:STDOUT: %.loc38_31.19: %Destroy.type = converted constants.%as_type.e41, constants.%impl.elem1.834 [symbolic = %impl.elem1 (constants.%impl.elem1.834)] -// CHECK:STDOUT: %specific_impl_fn.loc38_31.3: = specific_impl_function %impl.elem0.loc38_31.1, @Destroy.WithSelf.Op(constants.%impl.elem1.834) [symbolic = %specific_impl_fn.loc38_31.6 (constants.%specific_impl_fn.9fb)] -// CHECK:STDOUT: %bound_method.loc38_31.8: = bound_method %var, %specific_impl_fn.loc38_31.3 -// CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc38_31.8(%var) +// CHECK:STDOUT: %Destroy.Op.bound.loc38_41.2: = bound_method %.loc38_41.8, constants.%Destroy.Op.1a2547.7 +// CHECK:STDOUT: %Destroy.Op.call.loc38_41.2: init %empty_tuple.type = call %Destroy.Op.bound.loc38_41.2(%.loc38_41.8) +// CHECK:STDOUT: %impl.elem0.loc38_41.1: @TestIterate.%.loc38_41.22 (%.32e) = impl_witness_access constants.%Destroy.lookup_impl_witness.95e, element0 [symbolic = %impl.elem0.loc38_41.2 (constants.%impl.elem0.87c)] +// CHECK:STDOUT: %bound_method.loc38_41.7: = bound_method %var, %impl.elem0.loc38_41.1 +// CHECK:STDOUT: %.loc38_41.18: %Destroy.type = converted constants.%as_type.04b, constants.%impl.elem1.9b3 [symbolic = %impl.elem1 (constants.%impl.elem1.9b3)] +// CHECK:STDOUT: %.loc38_41.19: %Destroy.type = converted constants.%as_type.04b, constants.%impl.elem1.9b3 [symbolic = %impl.elem1 (constants.%impl.elem1.9b3)] +// CHECK:STDOUT: %specific_impl_fn.loc38_41.3: = specific_impl_function %impl.elem0.loc38_41.1, @Destroy.WithSelf.Op(constants.%impl.elem1.9b3) [symbolic = %specific_impl_fn.loc38_41.6 (constants.%specific_impl_fn.65a)] +// CHECK:STDOUT: %bound_method.loc38_41.8: = bound_method %var, %specific_impl_fn.loc38_41.3 +// CHECK:STDOUT: %Destroy.WithSelf.Op.call: init %empty_tuple.type = call %bound_method.loc38_41.8(%var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc38_31.1(%self.param: ref %.b36) { +// CHECK:STDOUT: fn @Destroy.Op.loc38_41.1(%self.param: ref %.8f3) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc38_31.2(%self.param: ref %MaybeUnformed.669) { +// CHECK:STDOUT: fn @Destroy.Op.loc38_41.2(%self.param: ref %MaybeUnformed.5d7) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc38_31.3(%self.param: ref bool) = "no_op"; +// CHECK:STDOUT: fn @Destroy.Op.loc38_41.3(%self.param: ref bool) = "no_op"; // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc38_31.4(%self.param: ref %struct_type.value.has_value.5a1) { +// CHECK:STDOUT: fn @Destroy.Op.loc38_41.4(%self.param: ref %struct_type.value.has_value.bd1) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc38_31.5(%self.param: ref %DefaultOptionalStorage.257) { +// CHECK:STDOUT: fn @Destroy.Op.loc38_41.5(%self.param: ref %DefaultOptionalStorage.338) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @Destroy.Op.loc38_31.6(%self.param: ref %Optional.1f5) { +// CHECK:STDOUT: fn @Destroy.Op.loc38_41.6(%self.param: ref %Optional.3cc) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: return // CHECK:STDOUT: } @@ -4457,125 +4457,125 @@ fn TestDriver(var no_begin_end: Cpp.NoBeginEnd, // CHECK:STDOUT: !entry: // CHECK:STDOUT: // CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %i.patt: %pattern_type.e41 = value_binding_pattern i [concrete = constants.%i.patt] +// CHECK:STDOUT: %i.patt: %pattern_type.e09 = value_binding_pattern i [concrete = constants.%i.patt] // CHECK:STDOUT: } // CHECK:STDOUT: %mc.ref: ref %MutableAndConstRange = name_ref mc, %mc -// CHECK:STDOUT: %impl.elem2: %.2a5 = impl_witness_access constants.%Iterate.impl_witness.c1c, element2 [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.d87] -// CHECK:STDOUT: %bound_method.loc80_32.1: = bound_method %mc.ref, %impl.elem2 -// CHECK:STDOUT: %facet_value.loc80_32.1: %CppRange_where.type.d682d6.1 = facet_value constants.%MutableAndConstRange, (constants.%custom_witness.fef, constants.%custom_witness.c19, constants.%custom_witness.a40, constants.%custom_witness.04a, constants.%custom_witness.dd5, constants.%custom_witness.01a, constants.%custom_witness.c66) [concrete = constants.%facet_value.32f] -// CHECK:STDOUT: %.loc80_32.1: %CppRange_where.type.d682d6.1 = converted constants.%MutableAndConstRange, %facet_value.loc80_32.1 [concrete = constants.%facet_value.32f] -// CHECK:STDOUT: %facet_value.loc80_32.2: %CppRange_where.type.d682d6.1 = facet_value constants.%MutableAndConstRange, (constants.%custom_witness.fef, constants.%custom_witness.c19, constants.%custom_witness.a40, constants.%custom_witness.04a, constants.%custom_witness.dd5, constants.%custom_witness.01a, constants.%custom_witness.c66) [concrete = constants.%facet_value.32f] -// CHECK:STDOUT: %.loc80_32.2: %CppRange_where.type.d682d6.1 = converted constants.%MutableAndConstRange, %facet_value.loc80_32.2 [concrete = constants.%facet_value.32f] -// CHECK:STDOUT: %specific_fn.loc80_32.1: = specific_function %impl.elem2, @T.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.32f) [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn] -// CHECK:STDOUT: %bound_method.loc80_32.2: = bound_method %mc.ref, %specific_fn.loc80_32.1 -// CHECK:STDOUT: %var: ref %tuple.type.56e = var_storage invalid -// CHECK:STDOUT: %.loc80_30.1: %MutableAndConstRange = acquire_value %mc.ref -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.call: init %tuple.type.56e to %var = call %bound_method.loc80_32.2(%.loc80_30.1) +// CHECK:STDOUT: %impl.elem2: %.e94 = impl_witness_access constants.%Iterate.impl_witness.e93, element2 [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.237] +// CHECK:STDOUT: %bound_method.loc80_42.1: = bound_method %mc.ref, %impl.elem2 +// CHECK:STDOUT: %facet_value.loc80_42.1: %CppRange_where.type.d682d6.1 = facet_value constants.%MutableAndConstRange, (constants.%custom_witness.ca2, constants.%custom_witness.1c5, constants.%custom_witness.660, constants.%custom_witness.a79, constants.%custom_witness.d56, constants.%custom_witness.68a, constants.%custom_witness.2ef) [concrete = constants.%facet_value.94c] +// CHECK:STDOUT: %.loc80_42.1: %CppRange_where.type.d682d6.1 = converted constants.%MutableAndConstRange, %facet_value.loc80_42.1 [concrete = constants.%facet_value.94c] +// CHECK:STDOUT: %facet_value.loc80_42.2: %CppRange_where.type.d682d6.1 = facet_value constants.%MutableAndConstRange, (constants.%custom_witness.ca2, constants.%custom_witness.1c5, constants.%custom_witness.660, constants.%custom_witness.a79, constants.%custom_witness.d56, constants.%custom_witness.68a, constants.%custom_witness.2ef) [concrete = constants.%facet_value.94c] +// CHECK:STDOUT: %.loc80_42.2: %CppRange_where.type.d682d6.1 = converted constants.%MutableAndConstRange, %facet_value.loc80_42.2 [concrete = constants.%facet_value.94c] +// CHECK:STDOUT: %specific_fn.loc80_42.1: = specific_function %impl.elem2, @T.as_type.as.Iterate.impl.NewCursor(constants.%facet_value.94c) [concrete = constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn] +// CHECK:STDOUT: %bound_method.loc80_42.2: = bound_method %mc.ref, %specific_fn.loc80_42.1 +// CHECK:STDOUT: %var: ref %tuple.type.de6 = var_storage invalid +// CHECK:STDOUT: %.loc80_40.1: %MutableAndConstRange = acquire_value %mc.ref +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.NewCursor.call: init %tuple.type.de6 to %var = call %bound_method.loc80_42.2(%.loc80_40.1) // CHECK:STDOUT: assign %var, %T.as_type.as.Iterate.impl.NewCursor.call // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.next: -// CHECK:STDOUT: %addr.loc80: %ptr.484 = addr_of %var -// CHECK:STDOUT: %impl.elem3: %.0b8 = impl_witness_access constants.%Iterate.impl_witness.c1c, element3 [concrete = constants.%T.as_type.as.Iterate.impl.Next.a1a] -// CHECK:STDOUT: %bound_method.loc80_32.3: = bound_method %mc.ref, %impl.elem3 -// CHECK:STDOUT: %facet_value.loc80_32.3: %CppRange_where.type.d682d6.1 = facet_value constants.%MutableAndConstRange, (constants.%custom_witness.fef, constants.%custom_witness.c19, constants.%custom_witness.a40, constants.%custom_witness.04a, constants.%custom_witness.dd5, constants.%custom_witness.01a, constants.%custom_witness.c66) [concrete = constants.%facet_value.32f] -// CHECK:STDOUT: %.loc80_32.3: %CppRange_where.type.d682d6.1 = converted constants.%MutableAndConstRange, %facet_value.loc80_32.3 [concrete = constants.%facet_value.32f] -// CHECK:STDOUT: %facet_value.loc80_32.4: %CppRange_where.type.d682d6.1 = facet_value constants.%MutableAndConstRange, (constants.%custom_witness.fef, constants.%custom_witness.c19, constants.%custom_witness.a40, constants.%custom_witness.04a, constants.%custom_witness.dd5, constants.%custom_witness.01a, constants.%custom_witness.c66) [concrete = constants.%facet_value.32f] -// CHECK:STDOUT: %.loc80_32.4: %CppRange_where.type.d682d6.1 = converted constants.%MutableAndConstRange, %facet_value.loc80_32.4 [concrete = constants.%facet_value.32f] -// CHECK:STDOUT: %specific_fn.loc80_32.2: = specific_function %impl.elem3, @T.as_type.as.Iterate.impl.Next(constants.%facet_value.32f) [concrete = constants.%T.as_type.as.Iterate.impl.Next.specific_fn] -// CHECK:STDOUT: %bound_method.loc80_32.4: = bound_method %mc.ref, %specific_fn.loc80_32.2 -// CHECK:STDOUT: %.loc80_32.5: ref %Optional.1f5 = temporary_storage -// CHECK:STDOUT: %.loc80_30.2: %MutableAndConstRange = acquire_value %mc.ref -// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.call: init %Optional.1f5 to %.loc80_32.5 = call %bound_method.loc80_32.4(%.loc80_30.2, %addr.loc80) -// CHECK:STDOUT: %.loc80_32.6: ref %Optional.1f5 = temporary %.loc80_32.5, %T.as_type.as.Iterate.impl.Next.call -// CHECK:STDOUT: %.loc80_32.7: %Optional.HasValue.type.527 = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.8dd) [concrete = constants.%Optional.HasValue.017] -// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.527 = name_ref HasValue, %.loc80_32.7 [concrete = constants.%Optional.HasValue.017] -// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc80_32.6, %HasValue.ref -// CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.8dd) [concrete = constants.%Optional.HasValue.specific_fn.2f1] -// CHECK:STDOUT: %bound_method.loc80_32.5: = bound_method %.loc80_32.6, %Optional.HasValue.specific_fn -// CHECK:STDOUT: %.loc80_32.8: %Optional.1f5 = acquire_value %.loc80_32.6 -// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc80_32.5(%.loc80_32.8) -// CHECK:STDOUT: %.loc80_32.9: bool = value_of_initializer %Optional.HasValue.call -// CHECK:STDOUT: %.loc80_32.10: bool = converted %Optional.HasValue.call, %.loc80_32.9 -// CHECK:STDOUT: if %.loc80_32.10 br !for.body else br !for.done +// CHECK:STDOUT: %addr.loc80: %ptr.b95 = addr_of %var +// CHECK:STDOUT: %impl.elem3: %.d53 = impl_witness_access constants.%Iterate.impl_witness.e93, element3 [concrete = constants.%T.as_type.as.Iterate.impl.Next.1b2] +// CHECK:STDOUT: %bound_method.loc80_42.3: = bound_method %mc.ref, %impl.elem3 +// CHECK:STDOUT: %facet_value.loc80_42.3: %CppRange_where.type.d682d6.1 = facet_value constants.%MutableAndConstRange, (constants.%custom_witness.ca2, constants.%custom_witness.1c5, constants.%custom_witness.660, constants.%custom_witness.a79, constants.%custom_witness.d56, constants.%custom_witness.68a, constants.%custom_witness.2ef) [concrete = constants.%facet_value.94c] +// CHECK:STDOUT: %.loc80_42.3: %CppRange_where.type.d682d6.1 = converted constants.%MutableAndConstRange, %facet_value.loc80_42.3 [concrete = constants.%facet_value.94c] +// CHECK:STDOUT: %facet_value.loc80_42.4: %CppRange_where.type.d682d6.1 = facet_value constants.%MutableAndConstRange, (constants.%custom_witness.ca2, constants.%custom_witness.1c5, constants.%custom_witness.660, constants.%custom_witness.a79, constants.%custom_witness.d56, constants.%custom_witness.68a, constants.%custom_witness.2ef) [concrete = constants.%facet_value.94c] +// CHECK:STDOUT: %.loc80_42.4: %CppRange_where.type.d682d6.1 = converted constants.%MutableAndConstRange, %facet_value.loc80_42.4 [concrete = constants.%facet_value.94c] +// CHECK:STDOUT: %specific_fn.loc80_42.2: = specific_function %impl.elem3, @T.as_type.as.Iterate.impl.Next(constants.%facet_value.94c) [concrete = constants.%T.as_type.as.Iterate.impl.Next.specific_fn] +// CHECK:STDOUT: %bound_method.loc80_42.4: = bound_method %mc.ref, %specific_fn.loc80_42.2 +// CHECK:STDOUT: %.loc80_42.5: ref %Optional.3cc = temporary_storage +// CHECK:STDOUT: %.loc80_40.2: %MutableAndConstRange = acquire_value %mc.ref +// CHECK:STDOUT: %T.as_type.as.Iterate.impl.Next.call: init %Optional.3cc to %.loc80_42.5 = call %bound_method.loc80_42.4(%.loc80_40.2, %addr.loc80) +// CHECK:STDOUT: %.loc80_42.6: ref %Optional.3cc = temporary %.loc80_42.5, %T.as_type.as.Iterate.impl.Next.call +// CHECK:STDOUT: %.loc80_42.7: %Optional.HasValue.type.f78 = specific_constant imports.%Core.import_ref.bb6, @Optional(constants.%OptionalStorage.facet.33d) [concrete = constants.%Optional.HasValue.519] +// CHECK:STDOUT: %HasValue.ref: %Optional.HasValue.type.f78 = name_ref HasValue, %.loc80_42.7 [concrete = constants.%Optional.HasValue.519] +// CHECK:STDOUT: %Optional.HasValue.bound: = bound_method %.loc80_42.6, %HasValue.ref +// CHECK:STDOUT: %Optional.HasValue.specific_fn: = specific_function %HasValue.ref, @Optional.HasValue(constants.%OptionalStorage.facet.33d) [concrete = constants.%Optional.HasValue.specific_fn.b3a] +// CHECK:STDOUT: %bound_method.loc80_42.5: = bound_method %.loc80_42.6, %Optional.HasValue.specific_fn +// CHECK:STDOUT: %.loc80_42.8: %Optional.3cc = acquire_value %.loc80_42.6 +// CHECK:STDOUT: %Optional.HasValue.call: init bool = call %bound_method.loc80_42.5(%.loc80_42.8) +// CHECK:STDOUT: %.loc80_42.9: bool = value_of_initializer %Optional.HasValue.call +// CHECK:STDOUT: %.loc80_42.10: bool = converted %Optional.HasValue.call, %.loc80_42.9 +// CHECK:STDOUT: if %.loc80_42.10 br !for.body else br !for.done // CHECK:STDOUT: // CHECK:STDOUT: !for.body: -// CHECK:STDOUT: %.loc80_32.11: %Optional.Get.type.226 = specific_constant imports.%Core.import_ref.dab, @Optional(constants.%OptionalStorage.facet.8dd) [concrete = constants.%Optional.Get.0db] -// CHECK:STDOUT: %Get.ref: %Optional.Get.type.226 = name_ref Get, %.loc80_32.11 [concrete = constants.%Optional.Get.0db] -// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc80_32.6, %Get.ref -// CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.8dd) [concrete = constants.%Optional.Get.specific_fn.b3f] -// CHECK:STDOUT: %bound_method.loc80_32.6: = bound_method %.loc80_32.6, %Optional.Get.specific_fn -// CHECK:STDOUT: %.loc80_32.12: ref %ValueType = temporary_storage -// CHECK:STDOUT: %.loc80_32.13: %Optional.1f5 = acquire_value %.loc80_32.6 -// CHECK:STDOUT: %Optional.Get.call: init %ValueType to %.loc80_32.12 = call %bound_method.loc80_32.6(%.loc80_32.13) -// CHECK:STDOUT: %.loc80_32.14: ref %ValueType = temporary %.loc80_32.12, %Optional.Get.call -// CHECK:STDOUT: %.loc80_32.15: %ValueType = acquire_value %.loc80_32.14 -// CHECK:STDOUT: %.loc80_16: type = splice_block %ValueType.ref.loc80 [concrete = constants.%ValueType] { +// CHECK:STDOUT: %.loc80_42.11: %Optional.Get.type.9c5 = specific_constant imports.%Core.import_ref.dab, @Optional(constants.%OptionalStorage.facet.33d) [concrete = constants.%Optional.Get.323] +// CHECK:STDOUT: %Get.ref: %Optional.Get.type.9c5 = name_ref Get, %.loc80_42.11 [concrete = constants.%Optional.Get.323] +// CHECK:STDOUT: %Optional.Get.bound: = bound_method %.loc80_42.6, %Get.ref +// CHECK:STDOUT: %Optional.Get.specific_fn: = specific_function %Get.ref, @Optional.Get(constants.%OptionalStorage.facet.33d) [concrete = constants.%Optional.Get.specific_fn.d62] +// CHECK:STDOUT: %bound_method.loc80_42.6: = bound_method %.loc80_42.6, %Optional.Get.specific_fn +// CHECK:STDOUT: %.loc80_42.12: ref %ValueType = temporary_storage +// CHECK:STDOUT: %.loc80_42.13: %Optional.3cc = acquire_value %.loc80_42.6 +// CHECK:STDOUT: %Optional.Get.call: init %ValueType to %.loc80_42.12 = call %bound_method.loc80_42.6(%.loc80_42.13) +// CHECK:STDOUT: %.loc80_42.14: ref %ValueType = temporary %.loc80_42.12, %Optional.Get.call +// CHECK:STDOUT: %.loc80_42.15: %ValueType = acquire_value %.loc80_42.14 +// CHECK:STDOUT: %.loc80_26: type = splice_block %ValueType.ref.loc80 [concrete = constants.%ValueType] { // CHECK:STDOUT: %Cpp.ref.loc80: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %N.ref.loc80: = name_ref N, imports.%N [concrete = imports.%N] +// CHECK:STDOUT: %OverloadADL.ref.loc80: = name_ref OverloadADL, imports.%OverloadADL [concrete = imports.%OverloadADL] // CHECK:STDOUT: %ValueType.ref.loc80: type = name_ref ValueType, imports.%ValueType.decl [concrete = constants.%ValueType] // CHECK:STDOUT: } -// CHECK:STDOUT: %i: %ValueType = wrapper_binding i, %.loc80_32.15 +// CHECK:STDOUT: %i: %ValueType = wrapper_binding i, %.loc80_42.15 // CHECK:STDOUT: %sum.ref: ref %ValueType = name_ref sum, %sum // CHECK:STDOUT: %i.ref: %ValueType = name_ref i, %i // CHECK:STDOUT: %.loc81_12: ref %ValueType = value_as_ref %i.ref -// CHECK:STDOUT: %addr.loc81: %ptr.9d3 = addr_of %.loc81_12 -// CHECK:STDOUT: %.loc81_9.1: %ptr.32e = as_compatible %addr.loc81 -// CHECK:STDOUT: %.loc81_9.2: %ptr.32e = converted %addr.loc81, %.loc81_9.1 +// CHECK:STDOUT: %addr.loc81: %ptr.6ed = addr_of %.loc81_12 +// CHECK:STDOUT: %.loc81_9.1: %ptr.403 = as_compatible %addr.loc81 +// CHECK:STDOUT: %.loc81_9.2: %ptr.403 = converted %addr.loc81, %.loc81_9.1 // CHECK:STDOUT: %operator_PlusEqual__carbon_thunk.call: ref %ValueType = call imports.%operator_PlusEqual__carbon_thunk.decl(%sum.ref, %.loc81_9.2) -// CHECK:STDOUT: %ValueType.Op.bound.loc80: = bound_method %.loc80_32.14, constants.%ValueType.Op.4c94b9.1 +// CHECK:STDOUT: %ValueType.Op.bound.loc80: = bound_method %.loc80_42.14, constants.%ValueType.Op.038ea9.1 // CHECK:STDOUT: %Op.ref.loc80: %ValueType.cpp_destructor.type = name_ref Op, imports.%ValueType.cpp_destructor.decl [concrete = constants.%ValueType.cpp_destructor] -// CHECK:STDOUT: %ValueType.cpp_destructor.bound.loc80: = bound_method %.loc80_32.14, %Op.ref.loc80 -// CHECK:STDOUT: %ValueType.cpp_destructor.call.loc80: init %empty_tuple.type = call %ValueType.cpp_destructor.bound.loc80(%.loc80_32.14) -// CHECK:STDOUT: %Destroy.Op.bound.loc80_32.1: = bound_method %.loc80_32.6, constants.%Destroy.Op.1a2547.7 -// CHECK:STDOUT: %Destroy.Op.call.loc80_32.1: init %empty_tuple.type = call %Destroy.Op.bound.loc80_32.1(%.loc80_32.6) +// CHECK:STDOUT: %ValueType.cpp_destructor.bound.loc80: = bound_method %.loc80_42.14, %Op.ref.loc80 +// CHECK:STDOUT: %ValueType.cpp_destructor.call.loc80: init %empty_tuple.type = call %ValueType.cpp_destructor.bound.loc80(%.loc80_42.14) +// CHECK:STDOUT: %Destroy.Op.bound.loc80_42.1: = bound_method %.loc80_42.6, constants.%Destroy.Op.1a2547.7 +// CHECK:STDOUT: %Destroy.Op.call.loc80_42.1: init %empty_tuple.type = call %Destroy.Op.bound.loc80_42.1(%.loc80_42.6) // CHECK:STDOUT: br !for.next // CHECK:STDOUT: // CHECK:STDOUT: !for.done: -// CHECK:STDOUT: %Destroy.Op.bound.loc80_32.2: = bound_method %.loc80_32.6, constants.%Destroy.Op.1a2547.7 -// CHECK:STDOUT: %Destroy.Op.call.loc80_32.2: init %empty_tuple.type = call %Destroy.Op.bound.loc80_32.2(%.loc80_32.6) -// CHECK:STDOUT: %Destroy.Op.bound.loc80_32.3: = bound_method %var, constants.%Destroy.Op.1a2547.8 -// CHECK:STDOUT: %Destroy.Op.call.loc80_32.3: init %empty_tuple.type = call %Destroy.Op.bound.loc80_32.3(%var) +// CHECK:STDOUT: %Destroy.Op.bound.loc80_42.2: = bound_method %.loc80_42.6, constants.%Destroy.Op.1a2547.7 +// CHECK:STDOUT: %Destroy.Op.call.loc80_42.2: init %empty_tuple.type = call %Destroy.Op.bound.loc80_42.2(%.loc80_42.6) +// CHECK:STDOUT: %Destroy.Op.bound.loc80_42.3: = bound_method %var, constants.%Destroy.Op.1a2547.8 +// CHECK:STDOUT: %Destroy.Op.call.loc80_42.3: init %empty_tuple.type = call %Destroy.Op.bound.loc80_42.3(%var) // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: specific @TestIterate(constants.%R) { // CHECK:STDOUT: %R.patt.loc34_17.2 => constants.%R.patt // CHECK:STDOUT: %R.loc34_17.1 => constants.%R -// CHECK:STDOUT: %R.as_type.loc34_73.1 => constants.%R.as_type -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.17d -// CHECK:STDOUT: %r.param_patt.loc34_71.2 => constants.%r.param_patt.90c -// CHECK:STDOUT: %r.patt.loc34_71.2 => constants.%r.patt.db8 +// CHECK:STDOUT: %R.as_type.loc34_83.1 => constants.%R.as_type +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.447 +// CHECK:STDOUT: %r.param_patt.loc34_81.2 => constants.%r.param_patt.207 +// CHECK:STDOUT: %r.patt.loc34_81.2 => constants.%r.patt.e8b // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: specific @TestIterate(constants.%facet_value.530) { +// CHECK:STDOUT: specific @TestIterate(constants.%facet_value.266) { // CHECK:STDOUT: %R.patt.loc34_17.2 => constants.%R.patt -// CHECK:STDOUT: %R.loc34_17.1 => constants.%facet_value.530 -// CHECK:STDOUT: %R.as_type.loc34_73.1 => constants.%MutableAndConstRange -// CHECK:STDOUT: %pattern_type => constants.%pattern_type.394 -// CHECK:STDOUT: %r.param_patt.loc34_71.2 => constants.%r.param_patt.8bb -// CHECK:STDOUT: %r.patt.loc34_71.2 => constants.%r.patt.429 +// CHECK:STDOUT: %R.loc34_17.1 => constants.%facet_value.266 +// CHECK:STDOUT: %R.as_type.loc34_83.1 => constants.%MutableAndConstRange +// CHECK:STDOUT: %pattern_type => constants.%pattern_type.fdb +// CHECK:STDOUT: %r.param_patt.loc34_81.2 => constants.%r.param_patt.3a6 +// CHECK:STDOUT: %r.patt.loc34_81.2 => constants.%r.patt.403 // CHECK:STDOUT: // CHECK:STDOUT: !definition: // CHECK:STDOUT: %require_complete.loc34 => constants.%complete_type.357 -// CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.c1c -// CHECK:STDOUT: %Iterate.facet.loc38_31.5 => constants.%Iterate.facet.878 -// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.5d8 -// CHECK:STDOUT: %.loc38_31.20 => constants.%.2a5 -// CHECK:STDOUT: %impl.elem2.loc38_31.2 => constants.%T.as_type.as.Iterate.impl.NewCursor.d87 -// CHECK:STDOUT: %specific_impl_fn.loc38_31.4 => constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn -// CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.7aa -// CHECK:STDOUT: %as_type => constants.%tuple.type.56e -// CHECK:STDOUT: %require_complete.1 => constants.%complete_type.1b5 -// CHECK:STDOUT: %ptr => constants.%ptr.484 -// CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.1eb -// CHECK:STDOUT: %.loc38_31.21 => constants.%.0b8 -// CHECK:STDOUT: %impl.elem3.loc38_31.2 => constants.%T.as_type.as.Iterate.impl.Next.a1a -// CHECK:STDOUT: %specific_impl_fn.loc38_31.5 => constants.%T.as_type.as.Iterate.impl.Next.specific_fn -// CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.b7b -// CHECK:STDOUT: %.loc38_31.22 => constants.%.1ad +// CHECK:STDOUT: %Iterate.lookup_impl_witness => constants.%Iterate.impl_witness.e93 +// CHECK:STDOUT: %Iterate.facet.loc38_41.5 => constants.%Iterate.facet.c00 +// CHECK:STDOUT: %Iterate.WithSelf.NewCursor.type => constants.%Iterate.WithSelf.NewCursor.type.d86 +// CHECK:STDOUT: %.loc38_41.20 => constants.%.e94 +// CHECK:STDOUT: %impl.elem2.loc38_41.2 => constants.%T.as_type.as.Iterate.impl.NewCursor.237 +// CHECK:STDOUT: %specific_impl_fn.loc38_41.4 => constants.%T.as_type.as.Iterate.impl.NewCursor.specific_fn +// CHECK:STDOUT: %impl.elem1 => constants.%Destroy.facet.84a +// CHECK:STDOUT: %as_type => constants.%tuple.type.de6 +// CHECK:STDOUT: %require_complete.1 => constants.%complete_type.95d +// CHECK:STDOUT: %ptr => constants.%ptr.b95 +// CHECK:STDOUT: %Iterate.WithSelf.Next.type => constants.%Iterate.WithSelf.Next.type.4a6 +// CHECK:STDOUT: %.loc38_41.21 => constants.%.d53 +// CHECK:STDOUT: %impl.elem3.loc38_41.2 => constants.%T.as_type.as.Iterate.impl.Next.1b2 +// CHECK:STDOUT: %specific_impl_fn.loc38_41.5 => constants.%T.as_type.as.Iterate.impl.Next.specific_fn +// CHECK:STDOUT: %Destroy.WithSelf.Op.type => constants.%Destroy.WithSelf.Op.type.544 +// CHECK:STDOUT: %.loc38_41.22 => constants.%.a9c // CHECK:STDOUT: %Destroy.lookup_impl_witness => constants.%custom_witness.df9cc1.8 -// CHECK:STDOUT: %impl.elem0.loc38_31.2 => constants.%Destroy.Op.1a2547.8 -// CHECK:STDOUT: %specific_impl_fn.loc38_31.6 => constants.%Destroy.Op.1a2547.8 +// CHECK:STDOUT: %impl.elem0.loc38_41.2 => constants.%Destroy.Op.1a2547.8 +// CHECK:STDOUT: %specific_impl_fn.loc38_41.6 => constants.%Destroy.Op.1a2547.8 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/template/non_type_param.carbon b/toolchain/check/testdata/interop/cpp/template/non_type_param.carbon index 61d289b9d26e..b34f29df2eda 100644 --- a/toolchain/check/testdata/interop/cpp/template/non_type_param.carbon +++ b/toolchain/check/testdata/interop/cpp/template/non_type_param.carbon @@ -83,33 +83,34 @@ var s: Cpp.Simple({} as C) = Cpp.MakeSimple123(); library "[[@TEST_NAME]]"; import Cpp inline ''' -template struct Struct {}; -Struct MakeStruct() { return Struct(); } +template struct BoolStruct {}; +BoolStruct MakeBoolStruct() { return BoolStruct(); } '''; -var s: Cpp.Struct(true) = Cpp.MakeStruct(); +var s: Cpp.BoolStruct(true) = Cpp.MakeBoolStruct(); // --- float.carbon library "[[@TEST_NAME]]"; import Cpp inline ''' -template struct Struct {}; -Struct<123.5f> MakeStruct() { return Struct<123.5f>(); } +template struct FloatStruct {}; +FloatStruct<123.5f> MakeFloatStruct() { return FloatStruct<123.5f>(); } '''; -let v: Cpp.Struct(123.5) = Cpp.MakeStruct(); + +let v: Cpp.FloatStruct(123.5) = Cpp.MakeFloatStruct(); // --- pointer.carbon library "[[@TEST_NAME]]"; import Cpp inline ''' -template struct Struct {}; +template struct PtrStruct {}; static int i = 123; -Struct<&i> MakeStruct() { return Struct<&i>(); } +PtrStruct<&i> MakePtrStruct() { return PtrStruct<&i>(); } '''; -let xyz: Cpp.Struct(&Cpp.i) = Cpp.MakeStruct(); +let xyz: Cpp.PtrStruct(&Cpp.i) = Cpp.MakePtrStruct(); // --- valid.carbon diff --git a/toolchain/check/testdata/interop/cpp/var/export/var.carbon b/toolchain/check/testdata/interop/cpp/var/export/var.carbon index 8f4d64fac370..4a6d75e234b2 100644 --- a/toolchain/check/testdata/interop/cpp/var/export/var.carbon +++ b/toolchain/check/testdata/interop/cpp/var/export/var.carbon @@ -29,17 +29,17 @@ library "[[@TEST_NAME]]"; import Cpp; // CHECK:STDERR: fail_var_unsupported_type.carbon:[[@LINE+4]]:5: error: semantics TODO: `failed to map Carbon type to C++` [SemanticsTodo] -// CHECK:STDERR: var x: () = (); -// CHECK:STDERR: ^~~~~ +// CHECK:STDERR: var unsupported_x: () = (); +// CHECK:STDERR: ^~~~~~~~~~~~~~~~~ // CHECK:STDERR: -var x: () = (); +var unsupported_x: () = (); inline Cpp ''' void F() { - // CHECK:STDERR: fail_var_unsupported_type.carbon:[[@LINE+4]]:11: error: no member named 'x' in namespace 'Carbon' [CppInteropParseError] - // CHECK:STDERR: 17 | Carbon::x; - // CHECK:STDERR: | ^ + // CHECK:STDERR: fail_var_unsupported_type.carbon:[[@LINE+4]]:11: error: no member named 'unsupported_x' in namespace 'Carbon' [CppInteropParseError] + // CHECK:STDERR: 17 | Carbon::unsupported_x; + // CHECK:STDERR: | ^~~~~~~~~~~~~ // CHECK:STDERR: - Carbon::x; + Carbon::unsupported_x; } '''; diff --git a/toolchain/check/testdata/interop/cpp/var/import/global.carbon b/toolchain/check/testdata/interop/cpp/var/import/global.carbon index aefc2b1a9e42..93e26bcc7030 100644 --- a/toolchain/check/testdata/interop/cpp/var/import/global.carbon +++ b/toolchain/check/testdata/interop/cpp/var/import/global.carbon @@ -42,7 +42,7 @@ fn MyF() { // --- unsupported_type.h using UnusupportedType = _BitInt(23); -UnusupportedType global; +UnusupportedType unsupported_global; // --- fail_import_unsupported_type.carbon @@ -56,17 +56,17 @@ import Cpp library "unsupported_type.h"; fn MyF() { // CHECK:STDERR: fail_import_unsupported_type.carbon:[[@LINE+11]]:21: note: in `Cpp` name lookup for `UnusupportedType` [InCppNameLookup] - // CHECK:STDERR: let unused local: Cpp.UnusupportedType = Cpp.global; + // CHECK:STDERR: let unused local: Cpp.UnusupportedType = Cpp.unsupported_global; // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: // CHECK:STDERR: fail_import_unsupported_type.carbon:[[@LINE+7]]:44: error: semantics TODO: `Unsupported: var type: UnusupportedType` [SemanticsTodo] - // CHECK:STDERR: let unused local: Cpp.UnusupportedType = Cpp.global; - // CHECK:STDERR: ^~~~~~~~~~ - // CHECK:STDERR: fail_import_unsupported_type.carbon:[[@LINE+4]]:44: note: in `Cpp` name lookup for `global` [InCppNameLookup] - // CHECK:STDERR: let unused local: Cpp.UnusupportedType = Cpp.global; - // CHECK:STDERR: ^~~~~~~~~~ + // CHECK:STDERR: let unused local: Cpp.UnusupportedType = Cpp.unsupported_global; + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: fail_import_unsupported_type.carbon:[[@LINE+4]]:44: note: in `Cpp` name lookup for `unsupported_global` [InCppNameLookup] + // CHECK:STDERR: let unused local: Cpp.UnusupportedType = Cpp.unsupported_global; + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: - let unused local: Cpp.UnusupportedType = Cpp.global; + let unused local: Cpp.UnusupportedType = Cpp.unsupported_global; } // CHECK:STDOUT: --- import_global_scope.carbon @@ -198,7 +198,7 @@ fn MyF() { // CHECK:STDOUT: } // CHECK:STDOUT: %Cpp: = namespace file.%Cpp.import_cpp, [concrete] { // CHECK:STDOUT: .UnusupportedType = -// CHECK:STDOUT: .global = +// CHECK:STDOUT: .unsupported_global = // CHECK:STDOUT: import Cpp//... // CHECK:STDOUT: } // CHECK:STDOUT: } @@ -219,7 +219,7 @@ fn MyF() { // CHECK:STDOUT: fn @MyF() { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Cpp.ref.loc22_44: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %global.ref: = name_ref global, [concrete = ] +// CHECK:STDOUT: %unsupported_global.ref: = name_ref unsupported_global, [concrete = ] // CHECK:STDOUT: %.1: = splice_block [concrete = ] { // CHECK:STDOUT: %Cpp.ref.loc22_21: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] // CHECK:STDOUT: %UnusupportedType.ref: = name_ref UnusupportedType, [concrete = ] diff --git a/toolchain/lower/testdata/interop/cpp/class/export/class.carbon b/toolchain/lower/testdata/interop/cpp/class/export/class.carbon index 6a7a31aa309c..80c1ea6e5ce7 100644 --- a/toolchain/lower/testdata/interop/cpp/class/export/class.carbon +++ b/toolchain/lower/testdata/interop/cpp/class/export/class.carbon @@ -34,40 +34,40 @@ library "[[@TEST_NAME]]"; import Cpp; -base class A { +base class LayoutA { var x: i32*; var y: i32; } -class B { - var a: A; +class LayoutB { + var a: LayoutA; var b: i32; } -class C { - extend base: A; +class LayoutC { + extend base: LayoutA; var c: i32; } -fn CallA(a: A*); -fn CallB(b: B*); -fn CallC(b: C*); +fn CallLayoutA(a: LayoutA*); +fn CallLayoutB(b: LayoutB*); +fn CallLayoutC(b: LayoutC*); inline Cpp ''' void f() { - Carbon::A a; - Carbon::CallA(&a); + Carbon::LayoutA a; + Carbon::CallLayoutA(&a); } void g() { - Carbon::B b; - Carbon::CallB(&b); + Carbon::LayoutB b; + Carbon::CallLayoutB(&b); } void h() { - Carbon::C c; - Carbon::CallC(&c); - Carbon::CallA(&c); + Carbon::LayoutC c; + Carbon::CallLayoutC(&c); + Carbon::CallLayoutA(&c); } '''; @@ -77,20 +77,20 @@ library "[[@TEST_NAME]]"; import Cpp; -class C { +class FieldC { var a: i32; var b: i32; } inline Cpp ''' -void F(Carbon::C& c) { +void F(Carbon::FieldC& c) { c.a = 12; c.b = 34; } '''; fn G() { - var c: C = {.a = 0, .b = 0}; + var c: FieldC = {.a = 0, .b = 0}; Cpp.F(ref c); } @@ -157,23 +157,23 @@ fn G() { // CHECK:STDOUT: target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" // CHECK:STDOUT: target triple = "x86_64-unknown-linux-gnu" // CHECK:STDOUT: -// CHECK:STDOUT: %"class.Carbon::A" = type <{ ptr, i32 }> -// CHECK:STDOUT: %"class.Carbon::B" = type { %"class.Carbon::A", i32 } -// CHECK:STDOUT: %"class.Carbon::C" = type { %"class.Carbon::A", i32 } +// CHECK:STDOUT: %"class.Carbon::LayoutA" = type <{ ptr, i32 }> +// CHECK:STDOUT: %"class.Carbon::LayoutB" = type { %"class.Carbon::LayoutA", i32 } +// CHECK:STDOUT: %"class.Carbon::LayoutC" = type { %"class.Carbon::LayoutA", i32 } // CHECK:STDOUT: -// CHECK:STDOUT: $_ZN6Carbon1AD2Ev = comdat any +// CHECK:STDOUT: $_ZN6Carbon7LayoutAD2Ev = comdat any // CHECK:STDOUT: -// CHECK:STDOUT: $_ZN6Carbon1BD2Ev = comdat any +// CHECK:STDOUT: $_ZN6Carbon7LayoutBD2Ev = comdat any // CHECK:STDOUT: -// CHECK:STDOUT: $_ZN6Carbon1CD2Ev = comdat any +// CHECK:STDOUT: $_ZN6Carbon7LayoutCD2Ev = comdat any // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: mustprogress nounwind uwtable // CHECK:STDOUT: define dso_local void @_Z1fv() #0 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %a = alloca %"class.Carbon::A", align 8 +// CHECK:STDOUT: %a = alloca %"class.Carbon::LayoutA", align 8 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %a) #5 -// CHECK:STDOUT: call void @_ZN6CarbonL5CallAEPNS_1AE(ptr noundef %a) -// CHECK:STDOUT: call void @_ZN6Carbon1AD2Ev(ptr noundef nonnull align 8 dead_on_return(12) dereferenceable(12) %a) #5 +// CHECK:STDOUT: call void @_ZN6CarbonL11CallLayoutAEPNS_7LayoutAE(ptr noundef %a) +// CHECK:STDOUT: call void @_ZN6Carbon7LayoutAD2Ev(ptr noundef nonnull align 8 dead_on_return(12) dereferenceable(12) %a) #5 // CHECK:STDOUT: call void @llvm.lifetime.end.p0(ptr %a) #5 // CHECK:STDOUT: ret void // CHECK:STDOUT: } @@ -182,21 +182,21 @@ fn G() { // CHECK:STDOUT: declare void @llvm.lifetime.start.p0(ptr captures(none)) #1 // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress nounwind uwtable -// CHECK:STDOUT: define internal void @_ZN6CarbonL5CallAEPNS_1AE(ptr noundef %0) #2 { +// CHECK:STDOUT: define internal void @_ZN6CarbonL11CallLayoutAEPNS_7LayoutAE(ptr noundef %0) #2 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.addr = alloca ptr, align 8 // CHECK:STDOUT: store ptr %0, ptr %.addr, align 8, !tbaa !12 -// CHECK:STDOUT: call void @_CCallA__carbon_thunk.Main(ptr noundef nonnull align 8 dereferenceable(8) %.addr) +// CHECK:STDOUT: call void @_CCallLayoutA__carbon_thunk.Main(ptr noundef nonnull align 8 dereferenceable(8) %.addr) // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: inlinehint mustprogress nounwind uwtable -// CHECK:STDOUT: define linkonce_odr dso_local void @_ZN6Carbon1AD2Ev(ptr noundef nonnull align 8 dead_on_return(12) dereferenceable(12) %this) unnamed_addr #3 comdat align 2 { +// CHECK:STDOUT: define linkonce_odr dso_local void @_ZN6Carbon7LayoutAD2Ev(ptr noundef nonnull align 8 dead_on_return(12) dereferenceable(12) %this) unnamed_addr #3 comdat align 2 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %this.addr = alloca ptr, align 8 // CHECK:STDOUT: store ptr %this, ptr %this.addr, align 8, !tbaa !12 // CHECK:STDOUT: %this1 = load ptr, ptr %this.addr, align 8 -// CHECK:STDOUT: call void @"_C__destroy_thunk:thunk.A.Main"(ptr noundef nonnull align 8 dereferenceable(12) %this1) +// CHECK:STDOUT: call void @"_C__destroy_thunk:thunk.LayoutA.Main"(ptr noundef nonnull align 8 dereferenceable(12) %this1) // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: @@ -206,77 +206,77 @@ fn G() { // CHECK:STDOUT: ; Function Attrs: mustprogress nounwind uwtable // CHECK:STDOUT: define dso_local void @_Z1gv() #0 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %b = alloca %"class.Carbon::B", align 8 +// CHECK:STDOUT: %b = alloca %"class.Carbon::LayoutB", align 8 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %b) #5 -// CHECK:STDOUT: call void @_ZN6CarbonL5CallBEPNS_1BE(ptr noundef %b) -// CHECK:STDOUT: call void @_ZN6Carbon1BD2Ev(ptr noundef nonnull align 8 dead_on_return(16) dereferenceable(16) %b) #5 +// CHECK:STDOUT: call void @_ZN6CarbonL11CallLayoutBEPNS_7LayoutBE(ptr noundef %b) +// CHECK:STDOUT: call void @_ZN6Carbon7LayoutBD2Ev(ptr noundef nonnull align 8 dead_on_return(16) dereferenceable(16) %b) #5 // CHECK:STDOUT: call void @llvm.lifetime.end.p0(ptr %b) #5 // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress nounwind uwtable -// CHECK:STDOUT: define internal void @_ZN6CarbonL5CallBEPNS_1BE(ptr noundef %0) #2 { +// CHECK:STDOUT: define internal void @_ZN6CarbonL11CallLayoutBEPNS_7LayoutBE(ptr noundef %0) #2 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.addr = alloca ptr, align 8 // CHECK:STDOUT: store ptr %0, ptr %.addr, align 8, !tbaa !15 -// CHECK:STDOUT: call void @_CCallB__carbon_thunk.Main(ptr noundef nonnull align 8 dereferenceable(8) %.addr) +// CHECK:STDOUT: call void @_CCallLayoutB__carbon_thunk.Main(ptr noundef nonnull align 8 dereferenceable(8) %.addr) // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: inlinehint mustprogress nounwind uwtable -// CHECK:STDOUT: define linkonce_odr dso_local void @_ZN6Carbon1BD2Ev(ptr noundef nonnull align 8 dead_on_return(16) dereferenceable(16) %this) unnamed_addr #3 comdat align 2 { +// CHECK:STDOUT: define linkonce_odr dso_local void @_ZN6Carbon7LayoutBD2Ev(ptr noundef nonnull align 8 dead_on_return(16) dereferenceable(16) %this) unnamed_addr #3 comdat align 2 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %this.addr = alloca ptr, align 8 // CHECK:STDOUT: store ptr %this, ptr %this.addr, align 8, !tbaa !15 // CHECK:STDOUT: %this1 = load ptr, ptr %this.addr, align 8 -// CHECK:STDOUT: call void @"_C__destroy_thunk:thunk.B.Main"(ptr noundef nonnull align 8 dereferenceable(16) %this1) -// CHECK:STDOUT: %a = getelementptr inbounds nuw %"class.Carbon::B", ptr %this1, i32 0, i32 0 -// CHECK:STDOUT: call void @_ZN6Carbon1AD2Ev(ptr noundef nonnull align 8 dead_on_return(12) dereferenceable(12) %a) #5 +// CHECK:STDOUT: call void @"_C__destroy_thunk:thunk.LayoutB.Main"(ptr noundef nonnull align 8 dereferenceable(16) %this1) +// CHECK:STDOUT: %a = getelementptr inbounds nuw %"class.Carbon::LayoutB", ptr %this1, i32 0, i32 0 +// CHECK:STDOUT: call void @_ZN6Carbon7LayoutAD2Ev(ptr noundef nonnull align 8 dead_on_return(12) dereferenceable(12) %a) #5 // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: mustprogress nounwind uwtable // CHECK:STDOUT: define dso_local void @_Z1hv() #0 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %c = alloca %"class.Carbon::C", align 8 +// CHECK:STDOUT: %c = alloca %"class.Carbon::LayoutC", align 8 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %c) #5 -// CHECK:STDOUT: call void @_ZN6CarbonL5CallCEPNS_1CE(ptr noundef %c) -// CHECK:STDOUT: call void @_ZN6CarbonL5CallAEPNS_1AE(ptr noundef %c) -// CHECK:STDOUT: call void @_ZN6Carbon1CD2Ev(ptr noundef nonnull align 8 dead_on_return(16) dereferenceable(16) %c) #5 +// CHECK:STDOUT: call void @_ZN6CarbonL11CallLayoutCEPNS_7LayoutCE(ptr noundef %c) +// CHECK:STDOUT: call void @_ZN6CarbonL11CallLayoutAEPNS_7LayoutAE(ptr noundef %c) +// CHECK:STDOUT: call void @_ZN6Carbon7LayoutCD2Ev(ptr noundef nonnull align 8 dead_on_return(16) dereferenceable(16) %c) #5 // CHECK:STDOUT: call void @llvm.lifetime.end.p0(ptr %c) #5 // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress nounwind uwtable -// CHECK:STDOUT: define internal void @_ZN6CarbonL5CallCEPNS_1CE(ptr noundef %0) #2 { +// CHECK:STDOUT: define internal void @_ZN6CarbonL11CallLayoutCEPNS_7LayoutCE(ptr noundef %0) #2 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.addr = alloca ptr, align 8 // CHECK:STDOUT: store ptr %0, ptr %.addr, align 8, !tbaa !17 -// CHECK:STDOUT: call void @_CCallC__carbon_thunk.Main(ptr noundef nonnull align 8 dereferenceable(8) %.addr) +// CHECK:STDOUT: call void @_CCallLayoutC__carbon_thunk.Main(ptr noundef nonnull align 8 dereferenceable(8) %.addr) // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: inlinehint mustprogress nounwind uwtable -// CHECK:STDOUT: define linkonce_odr dso_local void @_ZN6Carbon1CD2Ev(ptr noundef nonnull align 8 dead_on_return(16) dereferenceable(16) %this) unnamed_addr #3 comdat align 2 { +// CHECK:STDOUT: define linkonce_odr dso_local void @_ZN6Carbon7LayoutCD2Ev(ptr noundef nonnull align 8 dead_on_return(16) dereferenceable(16) %this) unnamed_addr #3 comdat align 2 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %this.addr = alloca ptr, align 8 // CHECK:STDOUT: store ptr %this, ptr %this.addr, align 8, !tbaa !17 // CHECK:STDOUT: %this1 = load ptr, ptr %this.addr, align 8 -// CHECK:STDOUT: call void @"_C__destroy_thunk:thunk.C.Main"(ptr noundef nonnull align 8 dereferenceable(16) %this1) -// CHECK:STDOUT: call void @_ZN6Carbon1AD2Ev(ptr noundef nonnull align 8 dead_on_return(12) dereferenceable(12) %this1) #5 +// CHECK:STDOUT: call void @"_C__destroy_thunk:thunk.LayoutC.Main"(ptr noundef nonnull align 8 dereferenceable(16) %this1) +// CHECK:STDOUT: call void @_ZN6Carbon7LayoutAD2Ev(ptr noundef nonnull align 8 dead_on_return(12) dereferenceable(12) %this1) #5 // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: declare void @_CCallA.Main(ptr) +// CHECK:STDOUT: declare void @_CCallLayoutA.Main(ptr) // CHECK:STDOUT: -// CHECK:STDOUT: declare void @_CCallB.Main(ptr) +// CHECK:STDOUT: declare void @_CCallLayoutB.Main(ptr) // CHECK:STDOUT: -// CHECK:STDOUT: declare void @_CCallC.Main(ptr) +// CHECK:STDOUT: declare void @_CCallLayoutC.Main(ptr) // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline nounwind -// CHECK:STDOUT: define weak_odr void @"_C__destroy_thunk:thunk.A.Main"(ptr %self) #4 !dbg !19 { +// CHECK:STDOUT: define weak_odr void @"_C__destroy_thunk:thunk.LayoutA.Main"(ptr %self) #4 !dbg !19 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @"_COp.e649d414b9e7644a:core.Destroy.Core"(ptr %self), !dbg !25 +// CHECK:STDOUT: call void @"_COp.576418bb54cb7290:core.Destroy.Core"(ptr %self), !dbg !25 // CHECK:STDOUT: ret void, !dbg !25 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -293,75 +293,75 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define weak_odr void @"_COp.e649d414b9e7644a:core.Destroy.Core"(ptr %self) #5 !dbg !37 { +// CHECK:STDOUT: define weak_odr void @"_COp.576418bb54cb7290:core.Destroy.Core"(ptr %self) #5 !dbg !37 { // CHECK:STDOUT: entry: // CHECK:STDOUT: ret void, !dbg !40 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define void @_CCallA__carbon_thunk.Main(ptr %_) #5 !dbg !41 { +// CHECK:STDOUT: define void @_CCallLayoutA__carbon_thunk.Main(ptr %_) #5 !dbg !41 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.loc21 = load ptr, ptr %_, align 8, !dbg !44 -// CHECK:STDOUT: call void @_CCallA.Main(ptr %.loc21), !dbg !44 +// CHECK:STDOUT: call void @_CCallLayoutA.Main(ptr %.loc21), !dbg !44 // CHECK:STDOUT: ret void, !dbg !44 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline nounwind -// CHECK:STDOUT: define weak_odr void @"_C__destroy_thunk:thunk.B.Main"(ptr %self) #4 !dbg !45 { +// CHECK:STDOUT: define weak_odr void @"_C__destroy_thunk:thunk.LayoutB.Main"(ptr %self) #4 !dbg !45 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @"_COp.535580a8a7a96b3b:core.Destroy.Core"(ptr %self), !dbg !48 +// CHECK:STDOUT: call void @"_COp.1e05456dbecd0195:core.Destroy.Core"(ptr %self), !dbg !48 // CHECK:STDOUT: ret void, !dbg !48 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define weak_odr void @"_COp.8e58843eeaf37d77:core.Destroy.Core"(ptr %self) #5 !dbg !49 { +// CHECK:STDOUT: define weak_odr void @"_COp.ed90af642ee14836:core.Destroy.Core"(ptr %self) #5 !dbg !49 { // CHECK:STDOUT: entry: // CHECK:STDOUT: ret void, !dbg !52 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define weak_odr void @"_COp.535580a8a7a96b3b:core.Destroy.Core"(ptr %self) #5 !dbg !53 { +// CHECK:STDOUT: define weak_odr void @"_COp.1e05456dbecd0195:core.Destroy.Core"(ptr %self) #5 !dbg !53 { // CHECK:STDOUT: entry: // CHECK:STDOUT: ret void, !dbg !56 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define void @_CCallB__carbon_thunk.Main(ptr %_) #5 !dbg !57 { +// CHECK:STDOUT: define void @_CCallLayoutB__carbon_thunk.Main(ptr %_) #5 !dbg !57 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.loc22 = load ptr, ptr %_, align 8, !dbg !60 -// CHECK:STDOUT: call void @_CCallB.Main(ptr %.loc22), !dbg !60 +// CHECK:STDOUT: call void @_CCallLayoutB.Main(ptr %.loc22), !dbg !60 // CHECK:STDOUT: ret void, !dbg !60 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline nounwind -// CHECK:STDOUT: define weak_odr void @"_C__destroy_thunk:thunk.C.Main"(ptr %self) #4 !dbg !61 { +// CHECK:STDOUT: define weak_odr void @"_C__destroy_thunk:thunk.LayoutC.Main"(ptr %self) #4 !dbg !61 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @"_COp.cbd14a388b4a1c25:core.Destroy.Core"(ptr %self), !dbg !64 +// CHECK:STDOUT: call void @"_COp.51e6fd9285cd1110:core.Destroy.Core"(ptr %self), !dbg !64 // CHECK:STDOUT: ret void, !dbg !64 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define weak_odr void @"_COp.cf9748c540fa2b51:core.Destroy.Core"(ptr %self) #5 !dbg !65 { +// CHECK:STDOUT: define weak_odr void @"_COp.16bee2ebebabb5ed:core.Destroy.Core"(ptr %self) #5 !dbg !65 { // CHECK:STDOUT: entry: // CHECK:STDOUT: ret void, !dbg !68 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define weak_odr void @"_COp.cbd14a388b4a1c25:core.Destroy.Core"(ptr %self) #5 !dbg !69 { +// CHECK:STDOUT: define weak_odr void @"_COp.51e6fd9285cd1110:core.Destroy.Core"(ptr %self) #5 !dbg !69 { // CHECK:STDOUT: entry: // CHECK:STDOUT: ret void, !dbg !72 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define void @_CCallC__carbon_thunk.Main(ptr %_) #5 !dbg !73 { +// CHECK:STDOUT: define void @_CCallLayoutC__carbon_thunk.Main(ptr %_) #5 !dbg !73 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.loc23 = load ptr, ptr %_, align 8, !dbg !76 -// CHECK:STDOUT: call void @_CCallC.Main(ptr %.loc23), !dbg !76 +// CHECK:STDOUT: call void @_CCallLayoutC.Main(ptr %.loc23), !dbg !76 // CHECK:STDOUT: ret void, !dbg !76 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; uselistorder directives -// CHECK:STDOUT: uselistorder ptr @_ZN6Carbon1AD2Ev, { 2, 1, 0 } +// CHECK:STDOUT: uselistorder ptr @_ZN6Carbon7LayoutAD2Ev, { 2, 1, 0 } // CHECK:STDOUT: // CHECK:STDOUT: attributes #0 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } // CHECK:STDOUT: attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } @@ -387,13 +387,13 @@ fn G() { // CHECK:STDOUT: !10 = !{!"omnipotent char", !11, i64 0} // CHECK:STDOUT: !11 = !{!"Simple C++ TBAA"} // CHECK:STDOUT: !12 = !{!13, !13, i64 0} -// CHECK:STDOUT: !13 = !{!"p1 _ZTSN6Carbon1AE", !14, i64 0} +// CHECK:STDOUT: !13 = !{!"p1 _ZTSN6Carbon7LayoutAE", !14, i64 0} // CHECK:STDOUT: !14 = !{!"any pointer", !10, i64 0} // CHECK:STDOUT: !15 = !{!16, !16, i64 0} -// CHECK:STDOUT: !16 = !{!"p1 _ZTSN6Carbon1BE", !14, i64 0} +// CHECK:STDOUT: !16 = !{!"p1 _ZTSN6Carbon7LayoutBE", !14, i64 0} // CHECK:STDOUT: !17 = !{!18, !18, i64 0} -// CHECK:STDOUT: !18 = !{!"p1 _ZTSN6Carbon1CE", !14, i64 0} -// CHECK:STDOUT: !19 = distinct !DISubprogram(name: "__destroy_thunk", linkageName: "_C__destroy_thunk:thunk.A.Main", scope: null, file: !1, line: 6, type: !20, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !23) +// CHECK:STDOUT: !18 = !{!"p1 _ZTSN6Carbon7LayoutCE", !14, i64 0} +// CHECK:STDOUT: !19 = distinct !DISubprogram(name: "__destroy_thunk", linkageName: "_C__destroy_thunk:thunk.LayoutA.Main", scope: null, file: !1, line: 6, type: !20, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !23) // CHECK:STDOUT: !20 = !DISubroutineType(types: !21) // CHECK:STDOUT: !21 = !{null, !22} // CHECK:STDOUT: !22 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 64) @@ -411,43 +411,43 @@ fn G() { // CHECK:STDOUT: !34 = !{!35} // CHECK:STDOUT: !35 = !DILocalVariable(arg: 1, scope: !33, type: !22) // CHECK:STDOUT: !36 = !DILocation(line: 6, column: 1, scope: !33) -// CHECK:STDOUT: !37 = distinct !DISubprogram(name: "Op", linkageName: "_COp.e649d414b9e7644a:core.Destroy.Core", scope: null, file: !1, line: 6, type: !20, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !38) +// CHECK:STDOUT: !37 = distinct !DISubprogram(name: "Op", linkageName: "_COp.576418bb54cb7290:core.Destroy.Core", scope: null, file: !1, line: 6, type: !20, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !38) // CHECK:STDOUT: !38 = !{!39} // CHECK:STDOUT: !39 = !DILocalVariable(arg: 1, scope: !37, type: !22) // CHECK:STDOUT: !40 = !DILocation(line: 6, column: 1, scope: !37) -// CHECK:STDOUT: !41 = distinct !DISubprogram(name: "CallA__carbon_thunk", linkageName: "_CCallA__carbon_thunk.Main", scope: null, file: !1, line: 21, type: !20, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !42) +// CHECK:STDOUT: !41 = distinct !DISubprogram(name: "CallLayoutA__carbon_thunk", linkageName: "_CCallLayoutA__carbon_thunk.Main", scope: null, file: !1, line: 21, type: !20, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !42) // CHECK:STDOUT: !42 = !{!43} // CHECK:STDOUT: !43 = !DILocalVariable(arg: 1, scope: !41, type: !22) // CHECK:STDOUT: !44 = !DILocation(line: 21, column: 1, scope: !41) -// CHECK:STDOUT: !45 = distinct !DISubprogram(name: "__destroy_thunk", linkageName: "_C__destroy_thunk:thunk.B.Main", scope: null, file: !1, line: 11, type: !20, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !46) +// CHECK:STDOUT: !45 = distinct !DISubprogram(name: "__destroy_thunk", linkageName: "_C__destroy_thunk:thunk.LayoutB.Main", scope: null, file: !1, line: 11, type: !20, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !46) // CHECK:STDOUT: !46 = !{!47} // CHECK:STDOUT: !47 = !DILocalVariable(arg: 1, scope: !45, type: !22) // CHECK:STDOUT: !48 = !DILocation(line: 11, column: 1, scope: !45) -// CHECK:STDOUT: !49 = distinct !DISubprogram(name: "Op", linkageName: "_COp.8e58843eeaf37d77:core.Destroy.Core", scope: null, file: !1, line: 11, type: !20, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !50) +// CHECK:STDOUT: !49 = distinct !DISubprogram(name: "Op", linkageName: "_COp.ed90af642ee14836:core.Destroy.Core", scope: null, file: !1, line: 11, type: !20, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !50) // CHECK:STDOUT: !50 = !{!51} // CHECK:STDOUT: !51 = !DILocalVariable(arg: 1, scope: !49, type: !22) // CHECK:STDOUT: !52 = !DILocation(line: 11, column: 1, scope: !49) -// CHECK:STDOUT: !53 = distinct !DISubprogram(name: "Op", linkageName: "_COp.535580a8a7a96b3b:core.Destroy.Core", scope: null, file: !1, line: 11, type: !20, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !54) +// CHECK:STDOUT: !53 = distinct !DISubprogram(name: "Op", linkageName: "_COp.1e05456dbecd0195:core.Destroy.Core", scope: null, file: !1, line: 11, type: !20, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !54) // CHECK:STDOUT: !54 = !{!55} // CHECK:STDOUT: !55 = !DILocalVariable(arg: 1, scope: !53, type: !22) // CHECK:STDOUT: !56 = !DILocation(line: 11, column: 1, scope: !53) -// CHECK:STDOUT: !57 = distinct !DISubprogram(name: "CallB__carbon_thunk", linkageName: "_CCallB__carbon_thunk.Main", scope: null, file: !1, line: 22, type: !20, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !58) +// CHECK:STDOUT: !57 = distinct !DISubprogram(name: "CallLayoutB__carbon_thunk", linkageName: "_CCallLayoutB__carbon_thunk.Main", scope: null, file: !1, line: 22, type: !20, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !58) // CHECK:STDOUT: !58 = !{!59} // CHECK:STDOUT: !59 = !DILocalVariable(arg: 1, scope: !57, type: !22) // CHECK:STDOUT: !60 = !DILocation(line: 22, column: 1, scope: !57) -// CHECK:STDOUT: !61 = distinct !DISubprogram(name: "__destroy_thunk", linkageName: "_C__destroy_thunk:thunk.C.Main", scope: null, file: !1, line: 16, type: !20, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !62) +// CHECK:STDOUT: !61 = distinct !DISubprogram(name: "__destroy_thunk", linkageName: "_C__destroy_thunk:thunk.LayoutC.Main", scope: null, file: !1, line: 16, type: !20, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !62) // CHECK:STDOUT: !62 = !{!63} // CHECK:STDOUT: !63 = !DILocalVariable(arg: 1, scope: !61, type: !22) // CHECK:STDOUT: !64 = !DILocation(line: 16, column: 1, scope: !61) -// CHECK:STDOUT: !65 = distinct !DISubprogram(name: "Op", linkageName: "_COp.cf9748c540fa2b51:core.Destroy.Core", scope: null, file: !1, line: 16, type: !20, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !66) +// CHECK:STDOUT: !65 = distinct !DISubprogram(name: "Op", linkageName: "_COp.16bee2ebebabb5ed:core.Destroy.Core", scope: null, file: !1, line: 16, type: !20, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !66) // CHECK:STDOUT: !66 = !{!67} // CHECK:STDOUT: !67 = !DILocalVariable(arg: 1, scope: !65, type: !22) // CHECK:STDOUT: !68 = !DILocation(line: 16, column: 1, scope: !65) -// CHECK:STDOUT: !69 = distinct !DISubprogram(name: "Op", linkageName: "_COp.cbd14a388b4a1c25:core.Destroy.Core", scope: null, file: !1, line: 16, type: !20, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !70) +// CHECK:STDOUT: !69 = distinct !DISubprogram(name: "Op", linkageName: "_COp.51e6fd9285cd1110:core.Destroy.Core", scope: null, file: !1, line: 16, type: !20, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !70) // CHECK:STDOUT: !70 = !{!71} // CHECK:STDOUT: !71 = !DILocalVariable(arg: 1, scope: !69, type: !22) // CHECK:STDOUT: !72 = !DILocation(line: 16, column: 1, scope: !69) -// CHECK:STDOUT: !73 = distinct !DISubprogram(name: "CallC__carbon_thunk", linkageName: "_CCallC__carbon_thunk.Main", scope: null, file: !1, line: 23, type: !20, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !74) +// CHECK:STDOUT: !73 = distinct !DISubprogram(name: "CallLayoutC__carbon_thunk", linkageName: "_CCallLayoutC__carbon_thunk.Main", scope: null, file: !1, line: 23, type: !20, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !74) // CHECK:STDOUT: !74 = !{!75} // CHECK:STDOUT: !75 = !DILocalVariable(arg: 1, scope: !73, type: !22) // CHECK:STDOUT: !76 = !DILocation(line: 23, column: 1, scope: !73) @@ -458,28 +458,28 @@ fn G() { // CHECK:STDOUT: target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" // CHECK:STDOUT: target triple = "x86_64-unknown-linux-gnu" // CHECK:STDOUT: -// CHECK:STDOUT: %"class.Carbon::C.0" = type { i32, i32 } +// CHECK:STDOUT: %"class.Carbon::FieldC" = type { i32, i32 } // CHECK:STDOUT: -// CHECK:STDOUT: @C.val.loc19_3 = internal constant { i32, i32 } zeroinitializer +// CHECK:STDOUT: @FieldC.val.loc19_3 = internal constant { i32, i32 } zeroinitializer // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: mustprogress nounwind uwtable -// CHECK:STDOUT: define dso_local void @_Z1FRN6Carbon1CE(ptr noundef nonnull align 4 dereferenceable(8) %c) #0 { +// CHECK:STDOUT: define dso_local void @_Z1FRN6Carbon6FieldCE(ptr noundef nonnull align 4 dereferenceable(8) %c) #0 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %c.addr = alloca ptr, align 8 // CHECK:STDOUT: store ptr %c, ptr %c.addr, align 8, !tbaa !12 // CHECK:STDOUT: %0 = load ptr, ptr %c.addr, align 8, !tbaa !12, !nonnull !15, !align !16 -// CHECK:STDOUT: %a = getelementptr inbounds nuw %"class.Carbon::C.0", ptr %0, i32 0, i32 0 +// CHECK:STDOUT: %a = getelementptr inbounds nuw %"class.Carbon::FieldC", ptr %0, i32 0, i32 0 // CHECK:STDOUT: store i32 12, ptr %a, align 4, !tbaa !17 // CHECK:STDOUT: %1 = load ptr, ptr %c.addr, align 8, !tbaa !12, !nonnull !15, !align !16 -// CHECK:STDOUT: %b = getelementptr inbounds nuw %"class.Carbon::C.0", ptr %1, i32 0, i32 1 +// CHECK:STDOUT: %b = getelementptr inbounds nuw %"class.Carbon::FieldC", ptr %1, i32 0, i32 1 // CHECK:STDOUT: store i32 34, ptr %b, align 4, !tbaa !19 // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline nounwind -// CHECK:STDOUT: define weak_odr void @"_C__destroy_thunk:thunk.C.Main"(ptr %self) #1 !dbg !20 { +// CHECK:STDOUT: define weak_odr void @"_C__destroy_thunk:thunk.FieldC.Main"(ptr %self) #1 !dbg !20 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @"_COp.cbd14a388b4a1c25:core.Destroy.Core"(ptr %self), !dbg !26 +// CHECK:STDOUT: call void @"_COp.a5500aaf922cc288:core.Destroy.Core"(ptr %self), !dbg !26 // CHECK:STDOUT: ret void, !dbg !26 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -496,7 +496,7 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define weak_odr void @"_COp.cbd14a388b4a1c25:core.Destroy.Core"(ptr %self) #2 !dbg !38 { +// CHECK:STDOUT: define weak_odr void @"_COp.a5500aaf922cc288:core.Destroy.Core"(ptr %self) #2 !dbg !38 { // CHECK:STDOUT: entry: // CHECK:STDOUT: ret void, !dbg !41 // CHECK:STDOUT: } @@ -506,11 +506,11 @@ fn G() { // CHECK:STDOUT: entry: // CHECK:STDOUT: %c.var = alloca { i32, i32 }, align 4, !dbg !45 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %c.var), !dbg !45 -// CHECK:STDOUT: %.loc19_29.3.a = getelementptr inbounds nuw { i32, i32 }, ptr %c.var, i32 0, i32 0, !dbg !46 -// CHECK:STDOUT: %.loc19_29.6.b = getelementptr inbounds nuw { i32, i32 }, ptr %c.var, i32 0, i32 1, !dbg !46 -// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %c.var, ptr align 4 @C.val.loc19_3, i64 8, i1 false), !dbg !45 -// CHECK:STDOUT: call void @_Z1FRN6Carbon1CE(ptr %c.var), !dbg !47 -// CHECK:STDOUT: call void @"_COp.cbd14a388b4a1c25:core.Destroy.Core"(ptr %c.var), !dbg !45 +// CHECK:STDOUT: %.loc19_34.3.a = getelementptr inbounds nuw { i32, i32 }, ptr %c.var, i32 0, i32 0, !dbg !46 +// CHECK:STDOUT: %.loc19_34.6.b = getelementptr inbounds nuw { i32, i32 }, ptr %c.var, i32 0, i32 1, !dbg !46 +// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %c.var, ptr align 4 @FieldC.val.loc19_3, i64 8, i1 false), !dbg !45 +// CHECK:STDOUT: call void @_Z1FRN6Carbon6FieldCE(ptr %c.var), !dbg !47 +// CHECK:STDOUT: call void @"_COp.a5500aaf922cc288:core.Destroy.Core"(ptr %c.var), !dbg !45 // CHECK:STDOUT: ret void, !dbg !48 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -542,14 +542,14 @@ fn G() { // CHECK:STDOUT: !10 = !{!"omnipotent char", !11, i64 0} // CHECK:STDOUT: !11 = !{!"Simple C++ TBAA"} // CHECK:STDOUT: !12 = !{!13, !13, i64 0} -// CHECK:STDOUT: !13 = !{!"p1 _ZTSN6Carbon1CE", !14, i64 0} +// CHECK:STDOUT: !13 = !{!"p1 _ZTSN6Carbon6FieldCE", !14, i64 0} // CHECK:STDOUT: !14 = !{!"any pointer", !10, i64 0} // CHECK:STDOUT: !15 = !{} // CHECK:STDOUT: !16 = !{i64 4} // CHECK:STDOUT: !17 = !{!18, !9, i64 0} -// CHECK:STDOUT: !18 = !{!"_ZTSN6Carbon1CE", !9, i64 0, !9, i64 4} +// CHECK:STDOUT: !18 = !{!"_ZTSN6Carbon6FieldCE", !9, i64 0, !9, i64 4} // CHECK:STDOUT: !19 = !{!18, !9, i64 4} -// CHECK:STDOUT: !20 = distinct !DISubprogram(name: "__destroy_thunk", linkageName: "_C__destroy_thunk:thunk.C.Main", scope: null, file: !1, line: 6, type: !21, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !24) +// CHECK:STDOUT: !20 = distinct !DISubprogram(name: "__destroy_thunk", linkageName: "_C__destroy_thunk:thunk.FieldC.Main", scope: null, file: !1, line: 6, type: !21, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !24) // CHECK:STDOUT: !21 = !DISubroutineType(types: !22) // CHECK:STDOUT: !22 = !{null, !23} // CHECK:STDOUT: !23 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 64) @@ -567,7 +567,7 @@ fn G() { // CHECK:STDOUT: !35 = !{!36} // CHECK:STDOUT: !36 = !DILocalVariable(arg: 1, scope: !34, type: !23) // CHECK:STDOUT: !37 = !DILocation(line: 6, column: 1, scope: !34) -// CHECK:STDOUT: !38 = distinct !DISubprogram(name: "Op", linkageName: "_COp.cbd14a388b4a1c25:core.Destroy.Core", scope: null, file: !1, line: 6, type: !21, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !39) +// CHECK:STDOUT: !38 = distinct !DISubprogram(name: "Op", linkageName: "_COp.a5500aaf922cc288:core.Destroy.Core", scope: null, file: !1, line: 6, type: !21, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !39) // CHECK:STDOUT: !39 = !{!40} // CHECK:STDOUT: !40 = !DILocalVariable(arg: 1, scope: !38, type: !23) // CHECK:STDOUT: !41 = !DILocation(line: 6, column: 1, scope: !38) @@ -575,7 +575,7 @@ fn G() { // CHECK:STDOUT: !43 = !DISubroutineType(types: !44) // CHECK:STDOUT: !44 = !{null} // CHECK:STDOUT: !45 = !DILocation(line: 19, column: 3, scope: !42) -// CHECK:STDOUT: !46 = !DILocation(line: 19, column: 14, scope: !42) +// CHECK:STDOUT: !46 = !DILocation(line: 19, column: 19, scope: !42) // CHECK:STDOUT: !47 = !DILocation(line: 20, column: 3, scope: !42) // CHECK:STDOUT: !48 = !DILocation(line: 18, column: 1, scope: !42) // CHECK:STDOUT: diff --git a/toolchain/lower/testdata/interop/cpp/class/export/method.carbon b/toolchain/lower/testdata/interop/cpp/class/export/method.carbon index 85f3c73c8956..0bc1b00c0be0 100644 --- a/toolchain/lower/testdata/interop/cpp/class/export/method.carbon +++ b/toolchain/lower/testdata/interop/cpp/class/export/method.carbon @@ -31,7 +31,7 @@ library "[[@TEST_NAME]]"; import Cpp; -class A { +class ArgsA { fn F(self, a: i32) -> i32 { self; return a; @@ -39,29 +39,29 @@ class A { } inline Cpp ''' -int CallF() { - return Carbon::A().F(123); +int CallArgsF() { + return Carbon::ArgsA().F(123); } '''; -fn CallCallF() -> i32 { return Cpp.CallF(); } +fn CallCallF() -> i32 { return Cpp.CallArgsF(); } // --- static.carbon library "[[@TEST_NAME]]"; import Cpp; -class A { +class StaticA { fn F() {} } inline Cpp ''' -void CallF() { - Carbon::A::F(); +void CallStaticF() { + Carbon::StaticA::F(); } '''; -fn CallCallF() { Cpp.CallF(); } +fn CallCallF() { Cpp.CallStaticF(); } // CHECK:STDOUT: ; --- // CHECK:STDOUT: ; ModuleID = 'method.carbon' @@ -188,17 +188,17 @@ fn CallCallF() { Cpp.CallF(); } // CHECK:STDOUT: target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" // CHECK:STDOUT: target triple = "x86_64-unknown-linux-gnu" // CHECK:STDOUT: -// CHECK:STDOUT: %"class.Carbon::A.0" = type {} +// CHECK:STDOUT: %"class.Carbon::ArgsA" = type {} // CHECK:STDOUT: -// CHECK:STDOUT: $_ZN6Carbon1AD2Ev = comdat any +// CHECK:STDOUT: $_ZN6Carbon5ArgsAD2Ev = comdat any // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: mustprogress nounwind uwtable -// CHECK:STDOUT: define dso_local noundef i32 @_Z5CallFv() #0 { +// CHECK:STDOUT: define dso_local noundef i32 @_Z9CallArgsFv() #0 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %ref.tmp = alloca %"class.Carbon::A.0", align 1 +// CHECK:STDOUT: %ref.tmp = alloca %"class.Carbon::ArgsA", align 1 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %ref.tmp) #4 -// CHECK:STDOUT: %call = call noundef i32 @_ZNK6Carbon1A1FEi(ptr noundef nonnull align 1 %ref.tmp, i32 noundef 123) -// CHECK:STDOUT: call void @_ZN6Carbon1AD2Ev(ptr noundef nonnull align 1 %ref.tmp) #4 +// CHECK:STDOUT: %call = call noundef i32 @_ZNK6Carbon5ArgsA1FEi(ptr noundef nonnull align 1 %ref.tmp, i32 noundef 123) +// CHECK:STDOUT: call void @_ZN6Carbon5ArgsAD2Ev(ptr noundef nonnull align 1 %ref.tmp) #4 // CHECK:STDOUT: call void @llvm.lifetime.end.p0(ptr %ref.tmp) #4 // CHECK:STDOUT: ret i32 %call // CHECK:STDOUT: } @@ -207,7 +207,7 @@ fn CallCallF() { Cpp.CallF(); } // CHECK:STDOUT: declare void @llvm.lifetime.start.p0(ptr captures(none)) #1 // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress nounwind uwtable -// CHECK:STDOUT: define internal noundef i32 @_ZNK6Carbon1A1FEi(ptr noundef nonnull align 1 %this, i32 noundef %0) #2 align 2 { +// CHECK:STDOUT: define internal noundef i32 @_ZNK6Carbon5ArgsA1FEi(ptr noundef nonnull align 1 %this, i32 noundef %0) #2 align 2 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %retval = alloca i32, align 4 // CHECK:STDOUT: %this.addr = alloca ptr, align 8 @@ -215,18 +215,18 @@ fn CallCallF() { Cpp.CallF(); } // CHECK:STDOUT: store ptr %this, ptr %this.addr, align 8, !tbaa !12 // CHECK:STDOUT: store i32 %0, ptr %.addr, align 4, !tbaa !15 // CHECK:STDOUT: %this1 = load ptr, ptr %this.addr, align 8 -// CHECK:STDOUT: call void @_CF__carbon_thunk.A.Main(ptr noundef nonnull align 1 %this1, ptr noundef nonnull align 4 dereferenceable(4) %.addr, ptr noundef nonnull align 4 dereferenceable(4) %retval) +// CHECK:STDOUT: call void @_CF__carbon_thunk.ArgsA.Main(ptr noundef nonnull align 1 %this1, ptr noundef nonnull align 4 dereferenceable(4) %.addr, ptr noundef nonnull align 4 dereferenceable(4) %retval) // CHECK:STDOUT: %1 = load i32, ptr %retval, align 4 // CHECK:STDOUT: ret i32 %1 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: inlinehint mustprogress nounwind uwtable -// CHECK:STDOUT: define linkonce_odr dso_local void @_ZN6Carbon1AD2Ev(ptr noundef nonnull align 1 %this) unnamed_addr #3 comdat align 2 { +// CHECK:STDOUT: define linkonce_odr dso_local void @_ZN6Carbon5ArgsAD2Ev(ptr noundef nonnull align 1 %this) unnamed_addr #3 comdat align 2 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %this.addr = alloca ptr, align 8 // CHECK:STDOUT: store ptr %this, ptr %this.addr, align 8, !tbaa !12 // CHECK:STDOUT: %this1 = load ptr, ptr %this.addr, align 8 -// CHECK:STDOUT: call void @"_C__destroy_thunk:thunk.A.Main"(ptr noundef nonnull align 1 %this1) +// CHECK:STDOUT: call void @"_C__destroy_thunk:thunk.ArgsA.Main"(ptr noundef nonnull align 1 %this1) // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: @@ -234,38 +234,38 @@ fn CallCallF() { Cpp.CallF(); } // CHECK:STDOUT: declare void @llvm.lifetime.end.p0(ptr captures(none)) #1 // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define i32 @_CF.A.Main(ptr %self, i32 %a) #4 !dbg !16 { +// CHECK:STDOUT: define i32 @_CF.ArgsA.Main(ptr %self, i32 %a) #4 !dbg !16 { // CHECK:STDOUT: entry: // CHECK:STDOUT: ret i32 %a, !dbg !24 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline nounwind -// CHECK:STDOUT: define weak_odr void @"_C__destroy_thunk:thunk.A.Main"(ptr %self) #5 !dbg !25 { +// CHECK:STDOUT: define weak_odr void @"_C__destroy_thunk:thunk.ArgsA.Main"(ptr %self) #5 !dbg !25 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @"_COp.e649d414b9e7644a:core.Destroy.Core"(ptr %self), !dbg !30 +// CHECK:STDOUT: call void @"_COp.433c867dbc0ac54b:core.Destroy.Core"(ptr %self), !dbg !30 // CHECK:STDOUT: ret void, !dbg !30 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define weak_odr void @"_COp.e649d414b9e7644a:core.Destroy.Core"(ptr %self) #4 !dbg !31 { +// CHECK:STDOUT: define weak_odr void @"_COp.433c867dbc0ac54b:core.Destroy.Core"(ptr %self) #4 !dbg !31 { // CHECK:STDOUT: entry: // CHECK:STDOUT: ret void, !dbg !34 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define void @_CF__carbon_thunk.A.Main(ptr %self, ptr %_, ptr %_1) #4 !dbg !35 { +// CHECK:STDOUT: define void @_CF__carbon_thunk.ArgsA.Main(ptr %self, ptr %_, ptr %_1) #4 !dbg !35 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.loc6_29.2 = load i32, ptr %_, align 4, !dbg !42 -// CHECK:STDOUT: %A.F.call = call i32 @_CF.A.Main(ptr %self, i32 %.loc6_29.2), !dbg !42 -// CHECK:STDOUT: store i32 %A.F.call, ptr %_1, align 4, !dbg !42 +// CHECK:STDOUT: %ArgsA.F.call = call i32 @_CF.ArgsA.Main(ptr %self, i32 %.loc6_29.2), !dbg !42 +// CHECK:STDOUT: store i32 %ArgsA.F.call, ptr %_1, align 4, !dbg !42 // CHECK:STDOUT: ret void, !dbg !42 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define i32 @_CCallCallF.Main() #4 !dbg !43 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %CallF.call = call i32 @_Z5CallFv(), !dbg !46 -// CHECK:STDOUT: ret i32 %CallF.call, !dbg !47 +// CHECK:STDOUT: %CallArgsF.call = call i32 @_Z9CallArgsFv(), !dbg !46 +// CHECK:STDOUT: ret i32 %CallArgsF.call, !dbg !47 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: attributes #0 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } @@ -292,10 +292,10 @@ fn CallCallF() { Cpp.CallF(); } // CHECK:STDOUT: !10 = !{!"omnipotent char", !11, i64 0} // CHECK:STDOUT: !11 = !{!"Simple C++ TBAA"} // CHECK:STDOUT: !12 = !{!13, !13, i64 0} -// CHECK:STDOUT: !13 = !{!"p1 _ZTSN6Carbon1AE", !14, i64 0} +// CHECK:STDOUT: !13 = !{!"p1 _ZTSN6Carbon5ArgsAE", !14, i64 0} // CHECK:STDOUT: !14 = !{!"any pointer", !10, i64 0} // CHECK:STDOUT: !15 = !{!9, !9, i64 0} -// CHECK:STDOUT: !16 = distinct !DISubprogram(name: "F", linkageName: "_CF.A.Main", scope: null, file: !1, line: 6, type: !17, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !21) +// CHECK:STDOUT: !16 = distinct !DISubprogram(name: "F", linkageName: "_CF.ArgsA.Main", scope: null, file: !1, line: 6, type: !17, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !21) // CHECK:STDOUT: !17 = !DISubroutineType(types: !18) // CHECK:STDOUT: !18 = !{!19, !20, !19} // CHECK:STDOUT: !19 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) @@ -304,17 +304,17 @@ fn CallCallF() { Cpp.CallF(); } // CHECK:STDOUT: !22 = !DILocalVariable(arg: 1, scope: !16, type: !20) // CHECK:STDOUT: !23 = !DILocalVariable(arg: 2, scope: !16, type: !19) // CHECK:STDOUT: !24 = !DILocation(line: 8, column: 5, scope: !16) -// CHECK:STDOUT: !25 = distinct !DISubprogram(name: "__destroy_thunk", linkageName: "_C__destroy_thunk:thunk.A.Main", scope: null, file: !1, line: 5, type: !26, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !28) +// CHECK:STDOUT: !25 = distinct !DISubprogram(name: "__destroy_thunk", linkageName: "_C__destroy_thunk:thunk.ArgsA.Main", scope: null, file: !1, line: 5, type: !26, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !28) // CHECK:STDOUT: !26 = !DISubroutineType(types: !27) // CHECK:STDOUT: !27 = !{null, !20} // CHECK:STDOUT: !28 = !{!29} // CHECK:STDOUT: !29 = !DILocalVariable(arg: 1, scope: !25, type: !20) // CHECK:STDOUT: !30 = !DILocation(line: 5, column: 1, scope: !25) -// CHECK:STDOUT: !31 = distinct !DISubprogram(name: "Op", linkageName: "_COp.e649d414b9e7644a:core.Destroy.Core", scope: null, file: !1, line: 5, type: !26, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !32) +// CHECK:STDOUT: !31 = distinct !DISubprogram(name: "Op", linkageName: "_COp.433c867dbc0ac54b:core.Destroy.Core", scope: null, file: !1, line: 5, type: !26, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !32) // CHECK:STDOUT: !32 = !{!33} // CHECK:STDOUT: !33 = !DILocalVariable(arg: 1, scope: !31, type: !20) // CHECK:STDOUT: !34 = !DILocation(line: 5, column: 1, scope: !31) -// CHECK:STDOUT: !35 = distinct !DISubprogram(name: "F__carbon_thunk", linkageName: "_CF__carbon_thunk.A.Main", scope: null, file: !1, line: 6, type: !36, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !38) +// CHECK:STDOUT: !35 = distinct !DISubprogram(name: "F__carbon_thunk", linkageName: "_CF__carbon_thunk.ArgsA.Main", scope: null, file: !1, line: 6, type: !36, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !38) // CHECK:STDOUT: !36 = !DISubroutineType(types: !37) // CHECK:STDOUT: !37 = !{null, !20, !19, !19} // CHECK:STDOUT: !38 = !{!39, !40, !41} @@ -335,49 +335,49 @@ fn CallCallF() { Cpp.CallF(); } // CHECK:STDOUT: target triple = "x86_64-unknown-linux-gnu" // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: mustprogress nounwind uwtable -// CHECK:STDOUT: define dso_local void @_Z5CallFv() #0 { +// CHECK:STDOUT: define dso_local void @_Z11CallStaticFv() #0 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @_ZN6Carbon1A1FEv() +// CHECK:STDOUT: call void @_ZN6Carbon7StaticA1FEv() // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress nounwind uwtable -// CHECK:STDOUT: define internal void @_ZN6Carbon1A1FEv() #1 align 2 { +// CHECK:STDOUT: define internal void @_ZN6Carbon7StaticA1FEv() #1 align 2 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @_CF__carbon_thunk.A.Main() +// CHECK:STDOUT: call void @_CF__carbon_thunk.StaticA.Main() // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define void @_CF.A.Main() #2 !dbg !12 { +// CHECK:STDOUT: define void @_CF.StaticA.Main() #2 !dbg !12 { // CHECK:STDOUT: entry: // CHECK:STDOUT: ret void, !dbg !15 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline nounwind -// CHECK:STDOUT: define weak_odr void @"_C__destroy_thunk:thunk.A.Main"(ptr %self) #3 !dbg !16 { +// CHECK:STDOUT: define weak_odr void @"_C__destroy_thunk:thunk.StaticA.Main"(ptr %self) #3 !dbg !16 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @"_COp.e649d414b9e7644a:core.Destroy.Core"(ptr %self), !dbg !22 +// CHECK:STDOUT: call void @"_COp.f6473606999de44c:core.Destroy.Core"(ptr %self), !dbg !22 // CHECK:STDOUT: ret void, !dbg !22 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define weak_odr void @"_COp.e649d414b9e7644a:core.Destroy.Core"(ptr %self) #2 !dbg !23 { +// CHECK:STDOUT: define weak_odr void @"_COp.f6473606999de44c:core.Destroy.Core"(ptr %self) #2 !dbg !23 { // CHECK:STDOUT: entry: // CHECK:STDOUT: ret void, !dbg !26 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define void @_CF__carbon_thunk.A.Main() #2 !dbg !27 { +// CHECK:STDOUT: define void @_CF__carbon_thunk.StaticA.Main() #2 !dbg !27 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @_CF.A.Main(), !dbg !28 +// CHECK:STDOUT: call void @_CF.StaticA.Main(), !dbg !28 // CHECK:STDOUT: ret void, !dbg !28 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_CCallCallF.Main() #2 !dbg !29 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @_Z5CallFv(), !dbg !30 +// CHECK:STDOUT: call void @_Z11CallStaticFv(), !dbg !30 // CHECK:STDOUT: ret void, !dbg !31 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -402,22 +402,22 @@ fn CallCallF() { Cpp.CallF(); } // CHECK:STDOUT: !9 = !{!"int", !10, i64 0} // CHECK:STDOUT: !10 = !{!"omnipotent char", !11, i64 0} // CHECK:STDOUT: !11 = !{!"Simple C++ TBAA"} -// CHECK:STDOUT: !12 = distinct !DISubprogram(name: "F", linkageName: "_CF.A.Main", scope: null, file: !1, line: 6, type: !13, spFlags: DISPFlagDefinition, unit: !0) +// CHECK:STDOUT: !12 = distinct !DISubprogram(name: "F", linkageName: "_CF.StaticA.Main", scope: null, file: !1, line: 6, type: !13, spFlags: DISPFlagDefinition, unit: !0) // CHECK:STDOUT: !13 = !DISubroutineType(types: !14) // CHECK:STDOUT: !14 = !{null} // CHECK:STDOUT: !15 = !DILocation(line: 6, column: 3, scope: !12) -// CHECK:STDOUT: !16 = distinct !DISubprogram(name: "__destroy_thunk", linkageName: "_C__destroy_thunk:thunk.A.Main", scope: null, file: !1, line: 5, type: !17, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !20) +// CHECK:STDOUT: !16 = distinct !DISubprogram(name: "__destroy_thunk", linkageName: "_C__destroy_thunk:thunk.StaticA.Main", scope: null, file: !1, line: 5, type: !17, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !20) // CHECK:STDOUT: !17 = !DISubroutineType(types: !18) // CHECK:STDOUT: !18 = !{null, !19} // CHECK:STDOUT: !19 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 64) // CHECK:STDOUT: !20 = !{!21} // CHECK:STDOUT: !21 = !DILocalVariable(arg: 1, scope: !16, type: !19) // CHECK:STDOUT: !22 = !DILocation(line: 5, column: 1, scope: !16) -// CHECK:STDOUT: !23 = distinct !DISubprogram(name: "Op", linkageName: "_COp.e649d414b9e7644a:core.Destroy.Core", scope: null, file: !1, line: 5, type: !17, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !24) +// CHECK:STDOUT: !23 = distinct !DISubprogram(name: "Op", linkageName: "_COp.f6473606999de44c:core.Destroy.Core", scope: null, file: !1, line: 5, type: !17, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !24) // CHECK:STDOUT: !24 = !{!25} // CHECK:STDOUT: !25 = !DILocalVariable(arg: 1, scope: !23, type: !19) // CHECK:STDOUT: !26 = !DILocation(line: 5, column: 1, scope: !23) -// CHECK:STDOUT: !27 = distinct !DISubprogram(name: "F__carbon_thunk", linkageName: "_CF__carbon_thunk.A.Main", scope: null, file: !1, line: 6, type: !13, spFlags: DISPFlagDefinition, unit: !0) +// CHECK:STDOUT: !27 = distinct !DISubprogram(name: "F__carbon_thunk", linkageName: "_CF__carbon_thunk.StaticA.Main", scope: null, file: !1, line: 6, type: !13, spFlags: DISPFlagDefinition, unit: !0) // CHECK:STDOUT: !28 = !DILocation(line: 6, column: 3, scope: !27) // CHECK:STDOUT: !29 = distinct !DISubprogram(name: "CallCallF", linkageName: "_CCallCallF.Main", scope: null, file: !1, line: 15, type: !13, spFlags: DISPFlagDefinition, unit: !0) // CHECK:STDOUT: !30 = !DILocation(line: 15, column: 18, scope: !29) diff --git a/toolchain/lower/testdata/interop/cpp/class/import/constructor.carbon b/toolchain/lower/testdata/interop/cpp/class/import/constructor.carbon index 8ae6417f3d19..a3de2842c93e 100644 --- a/toolchain/lower/testdata/interop/cpp/class/import/constructor.carbon +++ b/toolchain/lower/testdata/interop/cpp/class/import/constructor.carbon @@ -127,12 +127,12 @@ fn F() { // --- multi_argument.h -class C { +class MultiArgC { public: - C() {} - C(int) {} - C(int, int) {} - C(int, int, int, int = 0) {} + MultiArgC() {} + MultiArgC(int) {} + MultiArgC(int, int) {} + MultiArgC(int, int, int, int = 0) {} }; // --- call_multi_argument.carbon @@ -142,29 +142,29 @@ library "[[@TEST_NAME]]"; import Cpp library "multi_argument.h"; fn Zero() { - let _: Cpp.C = Cpp.C.C(); - let _: Cpp.C = (); + let _: Cpp.MultiArgC = Cpp.MultiArgC.MultiArgC(); + let _: Cpp.MultiArgC = (); } fn One() { - let _: Cpp.C = Cpp.C.C(1); - let _: Cpp.C = 2; - let _: Cpp.C = (3,); + let _: Cpp.MultiArgC = Cpp.MultiArgC.MultiArgC(1); + let _: Cpp.MultiArgC = 2; + let _: Cpp.MultiArgC = (3,); } fn Two() { - let _: Cpp.C = Cpp.C.C(1, 2); - let _: Cpp.C = (3, 4); + let _: Cpp.MultiArgC = Cpp.MultiArgC.MultiArgC(1, 2); + let _: Cpp.MultiArgC = (3, 4); } fn Three() { - let _: Cpp.C = Cpp.C.C(1, 2, 3); - let _: Cpp.C = (4, 5, 6); + let _: Cpp.MultiArgC = Cpp.MultiArgC.MultiArgC(1, 2, 3); + let _: Cpp.MultiArgC = (4, 5, 6); } fn Four() { - let _: Cpp.C = Cpp.C.C(1, 2, 3, 4); - let _: Cpp.C = (5, 6, 7, 8); + let _: Cpp.MultiArgC = Cpp.MultiArgC.MultiArgC(1, 2, 3, 4); + let _: Cpp.MultiArgC = (5, 6, 7, 8); } // CHECK:STDOUT: ; --- @@ -711,63 +711,63 @@ fn Four() { // CHECK:STDOUT: target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" // CHECK:STDOUT: target triple = "x86_64-unknown-linux-gnu" // CHECK:STDOUT: -// CHECK:STDOUT: $_ZN1CC2Ev = comdat any +// CHECK:STDOUT: $_ZN9MultiArgCC2Ev = comdat any // CHECK:STDOUT: -// CHECK:STDOUT: $_ZN1CC2Ei = comdat any +// CHECK:STDOUT: $_ZN9MultiArgCC2Ei = comdat any // CHECK:STDOUT: -// CHECK:STDOUT: $_ZN1CC2Eii = comdat any +// CHECK:STDOUT: $_ZN9MultiArgCC2Eii = comdat any // CHECK:STDOUT: -// CHECK:STDOUT: $_ZN1CC2Eiiii = comdat any +// CHECK:STDOUT: $_ZN9MultiArgCC2Eiiii = comdat any // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_CZero.Main() #0 !dbg !12 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %.loc7_26.1.temp = alloca [1 x i8], align 1, !dbg !15 -// CHECK:STDOUT: %.loc8_19.2.temp = alloca [1 x i8], align 1, !dbg !16 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc7_26.1.temp), !dbg !15 -// CHECK:STDOUT: call void @_ZN1CC1Ev.carbon_thunk.(ptr %.loc7_26.1.temp), !dbg !15 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc8_19.2.temp), !dbg !16 -// CHECK:STDOUT: call void @_ZN1CC1Ev.carbon_thunk_tuple.(ptr %.loc8_19.2.temp), !dbg !16 +// CHECK:STDOUT: %.loc7_50.1.temp = alloca [1 x i8], align 1, !dbg !15 +// CHECK:STDOUT: %.loc8_27.2.temp = alloca [1 x i8], align 1, !dbg !16 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc7_50.1.temp), !dbg !15 +// CHECK:STDOUT: call void @_ZN9MultiArgCC1Ev.carbon_thunk.(ptr %.loc7_50.1.temp), !dbg !15 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc8_27.2.temp), !dbg !16 +// CHECK:STDOUT: call void @_ZN9MultiArgCC1Ev.carbon_thunk_tuple.(ptr %.loc8_27.2.temp), !dbg !16 // CHECK:STDOUT: ret void, !dbg !17 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress uwtable -// CHECK:STDOUT: define internal void @_ZN1CC1Ev.carbon_thunk.(ptr noundef %return) #1 { +// CHECK:STDOUT: define internal void @_ZN9MultiArgCC1Ev.carbon_thunk.(ptr noundef %return) #1 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %return.addr = alloca ptr, align 8 // CHECK:STDOUT: store ptr %return, ptr %return.addr, align 8, !tbaa !18 // CHECK:STDOUT: %0 = load ptr, ptr %return.addr, align 8, !tbaa !18 -// CHECK:STDOUT: call void @_ZN1CC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %0) +// CHECK:STDOUT: call void @_ZN9MultiArgCC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %0) // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress uwtable -// CHECK:STDOUT: define internal void @_ZN1CC1Ev.carbon_thunk_tuple.(ptr noundef %return) #1 { +// CHECK:STDOUT: define internal void @_ZN9MultiArgCC1Ev.carbon_thunk_tuple.(ptr noundef %return) #1 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %return.addr = alloca ptr, align 8 // CHECK:STDOUT: store ptr %return, ptr %return.addr, align 8, !tbaa !18 // CHECK:STDOUT: %0 = load ptr, ptr %return.addr, align 8, !tbaa !18 -// CHECK:STDOUT: call void @_ZN1CC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %0) +// CHECK:STDOUT: call void @_ZN9MultiArgCC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %0) // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_COne.Main() #0 !dbg !21 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %.loc12_27.1.temp = alloca [1 x i8], align 1, !dbg !22 -// CHECK:STDOUT: %.loc13_18.1.temp = alloca [1 x i8], align 1, !dbg !23 -// CHECK:STDOUT: %.loc14_21.2.temp = alloca [1 x i8], align 1, !dbg !24 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc12_27.1.temp), !dbg !22 -// CHECK:STDOUT: call void @_ZN1CC1Ei.carbon_thunk._(i32 1, ptr %.loc12_27.1.temp), !dbg !22 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc13_18.1.temp), !dbg !23 -// CHECK:STDOUT: call void @_ZN1CC1Ei.carbon_thunk._(i32 2, ptr %.loc13_18.1.temp), !dbg !23 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc14_21.2.temp), !dbg !24 -// CHECK:STDOUT: call void @_ZN1CC1Ei.carbon_thunk_tuple._(i32 3, ptr %.loc14_21.2.temp), !dbg !24 +// CHECK:STDOUT: %.loc12_51.1.temp = alloca [1 x i8], align 1, !dbg !22 +// CHECK:STDOUT: %.loc13_26.1.temp = alloca [1 x i8], align 1, !dbg !23 +// CHECK:STDOUT: %.loc14_29.2.temp = alloca [1 x i8], align 1, !dbg !24 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc12_51.1.temp), !dbg !22 +// CHECK:STDOUT: call void @_ZN9MultiArgCC1Ei.carbon_thunk._(i32 1, ptr %.loc12_51.1.temp), !dbg !22 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc13_26.1.temp), !dbg !23 +// CHECK:STDOUT: call void @_ZN9MultiArgCC1Ei.carbon_thunk._(i32 2, ptr %.loc13_26.1.temp), !dbg !23 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc14_29.2.temp), !dbg !24 +// CHECK:STDOUT: call void @_ZN9MultiArgCC1Ei.carbon_thunk_tuple._(i32 3, ptr %.loc14_29.2.temp), !dbg !24 // CHECK:STDOUT: ret void, !dbg !25 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress uwtable -// CHECK:STDOUT: define internal void @_ZN1CC1Ei.carbon_thunk._(i32 noundef %0, ptr noundef %return) #1 { +// CHECK:STDOUT: define internal void @_ZN9MultiArgCC1Ei.carbon_thunk._(i32 noundef %0, ptr noundef %return) #1 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.addr = alloca i32, align 4 // CHECK:STDOUT: %return.addr = alloca ptr, align 8 @@ -775,12 +775,12 @@ fn Four() { // CHECK:STDOUT: store ptr %return, ptr %return.addr, align 8, !tbaa !18 // CHECK:STDOUT: %1 = load ptr, ptr %return.addr, align 8, !tbaa !18 // CHECK:STDOUT: %2 = load i32, ptr %.addr, align 4, !tbaa !26 -// CHECK:STDOUT: call void @_ZN1CC2Ei(ptr noundef nonnull align 1 dereferenceable(1) %1, i32 noundef %2) +// CHECK:STDOUT: call void @_ZN9MultiArgCC2Ei(ptr noundef nonnull align 1 dereferenceable(1) %1, i32 noundef %2) // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress uwtable -// CHECK:STDOUT: define internal void @_ZN1CC1Ei.carbon_thunk_tuple._(i32 noundef %0, ptr noundef %return) #1 { +// CHECK:STDOUT: define internal void @_ZN9MultiArgCC1Ei.carbon_thunk_tuple._(i32 noundef %0, ptr noundef %return) #1 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.addr = alloca i32, align 4 // CHECK:STDOUT: %return.addr = alloca ptr, align 8 @@ -788,24 +788,24 @@ fn Four() { // CHECK:STDOUT: store ptr %return, ptr %return.addr, align 8, !tbaa !18 // CHECK:STDOUT: %1 = load ptr, ptr %return.addr, align 8, !tbaa !18 // CHECK:STDOUT: %2 = load i32, ptr %.addr, align 4, !tbaa !26 -// CHECK:STDOUT: call void @_ZN1CC2Ei(ptr noundef nonnull align 1 dereferenceable(1) %1, i32 noundef %2) +// CHECK:STDOUT: call void @_ZN9MultiArgCC2Ei(ptr noundef nonnull align 1 dereferenceable(1) %1, i32 noundef %2) // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_CTwo.Main() #0 !dbg !27 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %.loc18_30.1.temp = alloca [1 x i8], align 1, !dbg !28 -// CHECK:STDOUT: %.loc19_23.2.temp = alloca [1 x i8], align 1, !dbg !29 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc18_30.1.temp), !dbg !28 -// CHECK:STDOUT: call void @_ZN1CC1Eii.carbon_thunk.__(i32 1, i32 2, ptr %.loc18_30.1.temp), !dbg !28 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc19_23.2.temp), !dbg !29 -// CHECK:STDOUT: call void @_ZN1CC1Eii.carbon_thunk_tuple.__(i32 3, i32 4, ptr %.loc19_23.2.temp), !dbg !29 +// CHECK:STDOUT: %.loc18_54.1.temp = alloca [1 x i8], align 1, !dbg !28 +// CHECK:STDOUT: %.loc19_31.2.temp = alloca [1 x i8], align 1, !dbg !29 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc18_54.1.temp), !dbg !28 +// CHECK:STDOUT: call void @_ZN9MultiArgCC1Eii.carbon_thunk.__(i32 1, i32 2, ptr %.loc18_54.1.temp), !dbg !28 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc19_31.2.temp), !dbg !29 +// CHECK:STDOUT: call void @_ZN9MultiArgCC1Eii.carbon_thunk_tuple.__(i32 3, i32 4, ptr %.loc19_31.2.temp), !dbg !29 // CHECK:STDOUT: ret void, !dbg !30 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress uwtable -// CHECK:STDOUT: define internal void @_ZN1CC1Eii.carbon_thunk.__(i32 noundef %0, i32 noundef %1, ptr noundef %return) #1 { +// CHECK:STDOUT: define internal void @_ZN9MultiArgCC1Eii.carbon_thunk.__(i32 noundef %0, i32 noundef %1, ptr noundef %return) #1 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.addr = alloca i32, align 4 // CHECK:STDOUT: %.addr1 = alloca i32, align 4 @@ -816,12 +816,12 @@ fn Four() { // CHECK:STDOUT: %2 = load ptr, ptr %return.addr, align 8, !tbaa !18 // CHECK:STDOUT: %3 = load i32, ptr %.addr, align 4, !tbaa !26 // CHECK:STDOUT: %4 = load i32, ptr %.addr1, align 4, !tbaa !26 -// CHECK:STDOUT: call void @_ZN1CC2Eii(ptr noundef nonnull align 1 dereferenceable(1) %2, i32 noundef %3, i32 noundef %4) +// CHECK:STDOUT: call void @_ZN9MultiArgCC2Eii(ptr noundef nonnull align 1 dereferenceable(1) %2, i32 noundef %3, i32 noundef %4) // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress uwtable -// CHECK:STDOUT: define internal void @_ZN1CC1Eii.carbon_thunk_tuple.__(i32 noundef %0, i32 noundef %1, ptr noundef %return) #1 { +// CHECK:STDOUT: define internal void @_ZN9MultiArgCC1Eii.carbon_thunk_tuple.__(i32 noundef %0, i32 noundef %1, ptr noundef %return) #1 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.addr = alloca i32, align 4 // CHECK:STDOUT: %.addr1 = alloca i32, align 4 @@ -832,24 +832,24 @@ fn Four() { // CHECK:STDOUT: %2 = load ptr, ptr %return.addr, align 8, !tbaa !18 // CHECK:STDOUT: %3 = load i32, ptr %.addr, align 4, !tbaa !26 // CHECK:STDOUT: %4 = load i32, ptr %.addr1, align 4, !tbaa !26 -// CHECK:STDOUT: call void @_ZN1CC2Eii(ptr noundef nonnull align 1 dereferenceable(1) %2, i32 noundef %3, i32 noundef %4) +// CHECK:STDOUT: call void @_ZN9MultiArgCC2Eii(ptr noundef nonnull align 1 dereferenceable(1) %2, i32 noundef %3, i32 noundef %4) // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_CThree.Main() #0 !dbg !31 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %.loc23_33.1.temp = alloca [1 x i8], align 1, !dbg !32 -// CHECK:STDOUT: %.loc24_26.2.temp = alloca [1 x i8], align 1, !dbg !33 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc23_33.1.temp), !dbg !32 -// CHECK:STDOUT: call void @_ZN1CC1Eiiii.carbon_thunk.___(i32 1, i32 2, i32 3, ptr %.loc23_33.1.temp), !dbg !32 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc24_26.2.temp), !dbg !33 -// CHECK:STDOUT: call void @_ZN1CC1Eiiii.carbon_thunk_tuple.___(i32 4, i32 5, i32 6, ptr %.loc24_26.2.temp), !dbg !33 +// CHECK:STDOUT: %.loc23_57.1.temp = alloca [1 x i8], align 1, !dbg !32 +// CHECK:STDOUT: %.loc24_34.2.temp = alloca [1 x i8], align 1, !dbg !33 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc23_57.1.temp), !dbg !32 +// CHECK:STDOUT: call void @_ZN9MultiArgCC1Eiiii.carbon_thunk.___(i32 1, i32 2, i32 3, ptr %.loc23_57.1.temp), !dbg !32 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc24_34.2.temp), !dbg !33 +// CHECK:STDOUT: call void @_ZN9MultiArgCC1Eiiii.carbon_thunk_tuple.___(i32 4, i32 5, i32 6, ptr %.loc24_34.2.temp), !dbg !33 // CHECK:STDOUT: ret void, !dbg !34 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress uwtable -// CHECK:STDOUT: define internal void @_ZN1CC1Eiiii.carbon_thunk.___(i32 noundef %0, i32 noundef %1, i32 noundef %2, ptr noundef %return) #1 { +// CHECK:STDOUT: define internal void @_ZN9MultiArgCC1Eiiii.carbon_thunk.___(i32 noundef %0, i32 noundef %1, i32 noundef %2, ptr noundef %return) #1 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.addr = alloca i32, align 4 // CHECK:STDOUT: %.addr1 = alloca i32, align 4 @@ -863,12 +863,12 @@ fn Four() { // CHECK:STDOUT: %4 = load i32, ptr %.addr, align 4, !tbaa !26 // CHECK:STDOUT: %5 = load i32, ptr %.addr1, align 4, !tbaa !26 // CHECK:STDOUT: %6 = load i32, ptr %.addr2, align 4, !tbaa !26 -// CHECK:STDOUT: call void @_ZN1CC2Eiiii(ptr noundef nonnull align 1 dereferenceable(1) %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef 0) +// CHECK:STDOUT: call void @_ZN9MultiArgCC2Eiiii(ptr noundef nonnull align 1 dereferenceable(1) %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef 0) // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress uwtable -// CHECK:STDOUT: define internal void @_ZN1CC1Eiiii.carbon_thunk_tuple.___(i32 noundef %0, i32 noundef %1, i32 noundef %2, ptr noundef %return) #1 { +// CHECK:STDOUT: define internal void @_ZN9MultiArgCC1Eiiii.carbon_thunk_tuple.___(i32 noundef %0, i32 noundef %1, i32 noundef %2, ptr noundef %return) #1 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.addr = alloca i32, align 4 // CHECK:STDOUT: %.addr1 = alloca i32, align 4 @@ -882,24 +882,24 @@ fn Four() { // CHECK:STDOUT: %4 = load i32, ptr %.addr, align 4, !tbaa !26 // CHECK:STDOUT: %5 = load i32, ptr %.addr1, align 4, !tbaa !26 // CHECK:STDOUT: %6 = load i32, ptr %.addr2, align 4, !tbaa !26 -// CHECK:STDOUT: call void @_ZN1CC2Eiiii(ptr noundef nonnull align 1 dereferenceable(1) %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef 0) +// CHECK:STDOUT: call void @_ZN9MultiArgCC2Eiiii(ptr noundef nonnull align 1 dereferenceable(1) %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef 0) // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_CFour.Main() #0 !dbg !35 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %.loc28_36.1.temp = alloca [1 x i8], align 1, !dbg !36 -// CHECK:STDOUT: %.loc29_29.2.temp = alloca [1 x i8], align 1, !dbg !37 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc28_36.1.temp), !dbg !36 -// CHECK:STDOUT: call void @_ZN1CC1Eiiii.carbon_thunk.____(i32 1, i32 2, i32 3, i32 4, ptr %.loc28_36.1.temp), !dbg !36 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc29_29.2.temp), !dbg !37 -// CHECK:STDOUT: call void @_ZN1CC1Eiiii.carbon_thunk_tuple.____(i32 5, i32 6, i32 7, i32 8, ptr %.loc29_29.2.temp), !dbg !37 +// CHECK:STDOUT: %.loc28_60.1.temp = alloca [1 x i8], align 1, !dbg !36 +// CHECK:STDOUT: %.loc29_37.2.temp = alloca [1 x i8], align 1, !dbg !37 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc28_60.1.temp), !dbg !36 +// CHECK:STDOUT: call void @_ZN9MultiArgCC1Eiiii.carbon_thunk.____(i32 1, i32 2, i32 3, i32 4, ptr %.loc28_60.1.temp), !dbg !36 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc29_37.2.temp), !dbg !37 +// CHECK:STDOUT: call void @_ZN9MultiArgCC1Eiiii.carbon_thunk_tuple.____(i32 5, i32 6, i32 7, i32 8, ptr %.loc29_37.2.temp), !dbg !37 // CHECK:STDOUT: ret void, !dbg !38 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress uwtable -// CHECK:STDOUT: define internal void @_ZN1CC1Eiiii.carbon_thunk.____(i32 noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef %return) #1 { +// CHECK:STDOUT: define internal void @_ZN9MultiArgCC1Eiiii.carbon_thunk.____(i32 noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef %return) #1 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.addr = alloca i32, align 4 // CHECK:STDOUT: %.addr1 = alloca i32, align 4 @@ -916,12 +916,12 @@ fn Four() { // CHECK:STDOUT: %6 = load i32, ptr %.addr1, align 4, !tbaa !26 // CHECK:STDOUT: %7 = load i32, ptr %.addr2, align 4, !tbaa !26 // CHECK:STDOUT: %8 = load i32, ptr %.addr3, align 4, !tbaa !26 -// CHECK:STDOUT: call void @_ZN1CC2Eiiii(ptr noundef nonnull align 1 dereferenceable(1) %4, i32 noundef %5, i32 noundef %6, i32 noundef %7, i32 noundef %8) +// CHECK:STDOUT: call void @_ZN9MultiArgCC2Eiiii(ptr noundef nonnull align 1 dereferenceable(1) %4, i32 noundef %5, i32 noundef %6, i32 noundef %7, i32 noundef %8) // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress uwtable -// CHECK:STDOUT: define internal void @_ZN1CC1Eiiii.carbon_thunk_tuple.____(i32 noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef %return) #1 { +// CHECK:STDOUT: define internal void @_ZN9MultiArgCC1Eiiii.carbon_thunk_tuple.____(i32 noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3, ptr noundef %return) #1 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.addr = alloca i32, align 4 // CHECK:STDOUT: %.addr1 = alloca i32, align 4 @@ -938,7 +938,7 @@ fn Four() { // CHECK:STDOUT: %6 = load i32, ptr %.addr1, align 4, !tbaa !26 // CHECK:STDOUT: %7 = load i32, ptr %.addr2, align 4, !tbaa !26 // CHECK:STDOUT: %8 = load i32, ptr %.addr3, align 4, !tbaa !26 -// CHECK:STDOUT: call void @_ZN1CC2Eiiii(ptr noundef nonnull align 1 dereferenceable(1) %4, i32 noundef %5, i32 noundef %6, i32 noundef %7, i32 noundef %8) +// CHECK:STDOUT: call void @_ZN9MultiArgCC2Eiiii(ptr noundef nonnull align 1 dereferenceable(1) %4, i32 noundef %5, i32 noundef %6, i32 noundef %7, i32 noundef %8) // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: @@ -946,7 +946,7 @@ fn Four() { // CHECK:STDOUT: declare void @llvm.lifetime.start.p0(ptr captures(none)) #2 // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: mustprogress nounwind uwtable -// CHECK:STDOUT: define linkonce_odr dso_local void @_ZN1CC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %this) unnamed_addr #3 comdat align 2 { +// CHECK:STDOUT: define linkonce_odr dso_local void @_ZN9MultiArgCC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %this) unnamed_addr #3 comdat align 2 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %this.addr = alloca ptr, align 8 // CHECK:STDOUT: store ptr %this, ptr %this.addr, align 8, !tbaa !18 @@ -955,7 +955,7 @@ fn Four() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: mustprogress nounwind uwtable -// CHECK:STDOUT: define linkonce_odr dso_local void @_ZN1CC2Ei(ptr noundef nonnull align 1 dereferenceable(1) %this, i32 noundef %0) unnamed_addr #3 comdat align 2 { +// CHECK:STDOUT: define linkonce_odr dso_local void @_ZN9MultiArgCC2Ei(ptr noundef nonnull align 1 dereferenceable(1) %this, i32 noundef %0) unnamed_addr #3 comdat align 2 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %this.addr = alloca ptr, align 8 // CHECK:STDOUT: %.addr = alloca i32, align 4 @@ -966,7 +966,7 @@ fn Four() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: mustprogress nounwind uwtable -// CHECK:STDOUT: define linkonce_odr dso_local void @_ZN1CC2Eii(ptr noundef nonnull align 1 dereferenceable(1) %this, i32 noundef %0, i32 noundef %1) unnamed_addr #3 comdat align 2 { +// CHECK:STDOUT: define linkonce_odr dso_local void @_ZN9MultiArgCC2Eii(ptr noundef nonnull align 1 dereferenceable(1) %this, i32 noundef %0, i32 noundef %1) unnamed_addr #3 comdat align 2 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %this.addr = alloca ptr, align 8 // CHECK:STDOUT: %.addr = alloca i32, align 4 @@ -979,7 +979,7 @@ fn Four() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: mustprogress nounwind uwtable -// CHECK:STDOUT: define linkonce_odr dso_local void @_ZN1CC2Eiiii(ptr noundef nonnull align 1 dereferenceable(1) %this, i32 noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3) unnamed_addr #3 comdat align 2 { +// CHECK:STDOUT: define linkonce_odr dso_local void @_ZN9MultiArgCC2Eiiii(ptr noundef nonnull align 1 dereferenceable(1) %this, i32 noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3) unnamed_addr #3 comdat align 2 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %this.addr = alloca ptr, align 8 // CHECK:STDOUT: %.addr = alloca i32, align 4 @@ -996,7 +996,7 @@ fn Four() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; uselistorder directives -// CHECK:STDOUT: uselistorder ptr @_ZN1CC1Ei.carbon_thunk._, { 1, 0 } +// CHECK:STDOUT: uselistorder ptr @_ZN9MultiArgCC1Ei.carbon_thunk._, { 1, 0 } // CHECK:STDOUT: uselistorder ptr @llvm.lifetime.start.p0, { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 } // CHECK:STDOUT: // CHECK:STDOUT: attributes #0 = { nounwind } @@ -1023,28 +1023,28 @@ fn Four() { // CHECK:STDOUT: !12 = distinct !DISubprogram(name: "Zero", linkageName: "_CZero.Main", scope: null, file: !1, line: 6, type: !13, spFlags: DISPFlagDefinition, unit: !0) // CHECK:STDOUT: !13 = !DISubroutineType(types: !14) // CHECK:STDOUT: !14 = !{null} -// CHECK:STDOUT: !15 = !DILocation(line: 7, column: 18, scope: !12) -// CHECK:STDOUT: !16 = !DILocation(line: 8, column: 18, scope: !12) +// CHECK:STDOUT: !15 = !DILocation(line: 7, column: 26, scope: !12) +// CHECK:STDOUT: !16 = !DILocation(line: 8, column: 26, scope: !12) // CHECK:STDOUT: !17 = !DILocation(line: 6, column: 1, scope: !12) // CHECK:STDOUT: !18 = !{!19, !19, i64 0} -// CHECK:STDOUT: !19 = !{!"p1 _ZTS1C", !20, i64 0} +// CHECK:STDOUT: !19 = !{!"p1 _ZTS9MultiArgC", !20, i64 0} // CHECK:STDOUT: !20 = !{!"any pointer", !10, i64 0} // CHECK:STDOUT: !21 = distinct !DISubprogram(name: "One", linkageName: "_COne.Main", scope: null, file: !1, line: 11, type: !13, spFlags: DISPFlagDefinition, unit: !0) -// CHECK:STDOUT: !22 = !DILocation(line: 12, column: 18, scope: !21) -// CHECK:STDOUT: !23 = !DILocation(line: 13, column: 18, scope: !21) -// CHECK:STDOUT: !24 = !DILocation(line: 14, column: 18, scope: !21) +// CHECK:STDOUT: !22 = !DILocation(line: 12, column: 26, scope: !21) +// CHECK:STDOUT: !23 = !DILocation(line: 13, column: 26, scope: !21) +// CHECK:STDOUT: !24 = !DILocation(line: 14, column: 26, scope: !21) // CHECK:STDOUT: !25 = !DILocation(line: 11, column: 1, scope: !21) // CHECK:STDOUT: !26 = !{!9, !9, i64 0} // CHECK:STDOUT: !27 = distinct !DISubprogram(name: "Two", linkageName: "_CTwo.Main", scope: null, file: !1, line: 17, type: !13, spFlags: DISPFlagDefinition, unit: !0) -// CHECK:STDOUT: !28 = !DILocation(line: 18, column: 18, scope: !27) -// CHECK:STDOUT: !29 = !DILocation(line: 19, column: 18, scope: !27) +// CHECK:STDOUT: !28 = !DILocation(line: 18, column: 26, scope: !27) +// CHECK:STDOUT: !29 = !DILocation(line: 19, column: 26, scope: !27) // CHECK:STDOUT: !30 = !DILocation(line: 17, column: 1, scope: !27) // CHECK:STDOUT: !31 = distinct !DISubprogram(name: "Three", linkageName: "_CThree.Main", scope: null, file: !1, line: 22, type: !13, spFlags: DISPFlagDefinition, unit: !0) -// CHECK:STDOUT: !32 = !DILocation(line: 23, column: 18, scope: !31) -// CHECK:STDOUT: !33 = !DILocation(line: 24, column: 18, scope: !31) +// CHECK:STDOUT: !32 = !DILocation(line: 23, column: 26, scope: !31) +// CHECK:STDOUT: !33 = !DILocation(line: 24, column: 26, scope: !31) // CHECK:STDOUT: !34 = !DILocation(line: 22, column: 1, scope: !31) // CHECK:STDOUT: !35 = distinct !DISubprogram(name: "Four", linkageName: "_CFour.Main", scope: null, file: !1, line: 27, type: !13, spFlags: DISPFlagDefinition, unit: !0) -// CHECK:STDOUT: !36 = !DILocation(line: 28, column: 18, scope: !35) -// CHECK:STDOUT: !37 = !DILocation(line: 29, column: 18, scope: !35) +// CHECK:STDOUT: !36 = !DILocation(line: 28, column: 26, scope: !35) +// CHECK:STDOUT: !37 = !DILocation(line: 29, column: 26, scope: !35) // CHECK:STDOUT: !38 = !DILocation(line: 27, column: 1, scope: !35) // CHECK:STDOUT: diff --git a/toolchain/lower/testdata/interop/cpp/class/import/conversion.carbon b/toolchain/lower/testdata/interop/cpp/class/import/conversion.carbon index dc3fb04931b5..656c0c6e5127 100644 --- a/toolchain/lower/testdata/interop/cpp/class/import/conversion.carbon +++ b/toolchain/lower/testdata/interop/cpp/class/import/conversion.carbon @@ -41,18 +41,18 @@ import Cpp; inline Cpp ''' enum S : short {}; enum I : short {}; -struct B { +struct EnumB { operator S() const; operator I() const; }; '''; -fn ConvertToVar(b: Cpp.B) { +fn ConvertToVar(b: Cpp.EnumB) { var unused s: Cpp.S = b; var unused i: Cpp.I = b; } -fn ConvertToValue(b: Cpp.B) { +fn ConvertToValue(b: Cpp.EnumB) { let unused s: Cpp.S = b; let unused i: Cpp.I = b; } @@ -63,16 +63,16 @@ library "[[@TEST_NAME]]"; import Cpp; inline Cpp ''' -struct B { +struct IntB { operator int() const; }; '''; -fn ConvertToVar(b: Cpp.B) { +fn ConvertToVar(b: Cpp.IntB) { var unused a: Cpp.int = b; } -fn ConvertToValue(b: Cpp.B) { +fn ConvertToValue(b: Cpp.IntB) { let unused a: Cpp.int = b; } @@ -182,14 +182,14 @@ fn ConvertToValue(b: Cpp.B) { // CHECK:STDOUT: %s.var = alloca i16, align 2, !dbg !18 // CHECK:STDOUT: %i.var = alloca i16, align 2, !dbg !19 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %s.var), !dbg !18 -// CHECK:STDOUT: call void @_ZNK1Bcv1SEv.carbon_thunk._(ptr %b, ptr %s.var), !dbg !18 +// CHECK:STDOUT: call void @_ZNK5EnumBcv1SEv.carbon_thunk._(ptr %b, ptr %s.var), !dbg !18 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %i.var), !dbg !19 -// CHECK:STDOUT: call void @_ZNK1Bcv1IEv.carbon_thunk._(ptr %b, ptr %i.var), !dbg !19 +// CHECK:STDOUT: call void @_ZNK5EnumBcv1IEv.carbon_thunk._(ptr %b, ptr %i.var), !dbg !19 // CHECK:STDOUT: ret void, !dbg !20 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress uwtable -// CHECK:STDOUT: define internal void @_ZNK1Bcv1SEv.carbon_thunk._(ptr noundef nonnull align 1 dereferenceable(1) %this, ptr noundef %return) #1 { +// CHECK:STDOUT: define internal void @_ZNK5EnumBcv1SEv.carbon_thunk._(ptr noundef nonnull align 1 dereferenceable(1) %this, ptr noundef %return) #1 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %this.addr = alloca ptr, align 8 // CHECK:STDOUT: %return.addr = alloca ptr, align 8 @@ -197,13 +197,13 @@ fn ConvertToValue(b: Cpp.B) { // CHECK:STDOUT: store ptr %return, ptr %return.addr, align 8, !tbaa !24 // CHECK:STDOUT: %0 = load ptr, ptr %return.addr, align 8, !tbaa !24 // CHECK:STDOUT: %1 = load ptr, ptr %this.addr, align 8, !tbaa !21, !nonnull !25 -// CHECK:STDOUT: %call = call noundef signext i16 @_ZNK1Bcv1SEv(ptr noundef nonnull align 1 dereferenceable(1) %1) +// CHECK:STDOUT: %call = call noundef signext i16 @_ZNK5EnumBcv1SEv(ptr noundef nonnull align 1 dereferenceable(1) %1) // CHECK:STDOUT: store i16 %call, ptr %0, align 2, !tbaa !26 // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress uwtable -// CHECK:STDOUT: define internal void @_ZNK1Bcv1IEv.carbon_thunk._(ptr noundef nonnull align 1 dereferenceable(1) %this, ptr noundef %return) #1 { +// CHECK:STDOUT: define internal void @_ZNK5EnumBcv1IEv.carbon_thunk._(ptr noundef nonnull align 1 dereferenceable(1) %this, ptr noundef %return) #1 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %this.addr = alloca ptr, align 8 // CHECK:STDOUT: %return.addr = alloca ptr, align 8 @@ -211,7 +211,7 @@ fn ConvertToValue(b: Cpp.B) { // CHECK:STDOUT: store ptr %return, ptr %return.addr, align 8, !tbaa !24 // CHECK:STDOUT: %0 = load ptr, ptr %return.addr, align 8, !tbaa !24 // CHECK:STDOUT: %1 = load ptr, ptr %this.addr, align 8, !tbaa !21, !nonnull !25 -// CHECK:STDOUT: %call = call noundef signext i16 @_ZNK1Bcv1IEv(ptr noundef nonnull align 1 dereferenceable(1) %1) +// CHECK:STDOUT: %call = call noundef signext i16 @_ZNK5EnumBcv1IEv(ptr noundef nonnull align 1 dereferenceable(1) %1) // CHECK:STDOUT: store i16 %call, ptr %0, align 2, !tbaa !28 // CHECK:STDOUT: ret void // CHECK:STDOUT: } @@ -222,10 +222,10 @@ fn ConvertToValue(b: Cpp.B) { // CHECK:STDOUT: %.loc20_25.1.temp = alloca i16, align 2, !dbg !33 // CHECK:STDOUT: %.loc21_25.1.temp = alloca i16, align 2, !dbg !34 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc20_25.1.temp), !dbg !33 -// CHECK:STDOUT: call void @_ZNK1Bcv1SEv.carbon_thunk._(ptr %b, ptr %.loc20_25.1.temp), !dbg !33 +// CHECK:STDOUT: call void @_ZNK5EnumBcv1SEv.carbon_thunk._(ptr %b, ptr %.loc20_25.1.temp), !dbg !33 // CHECK:STDOUT: %.loc20_25.5 = load i16, ptr %.loc20_25.1.temp, align 2, !dbg !33 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc21_25.1.temp), !dbg !34 -// CHECK:STDOUT: call void @_ZNK1Bcv1IEv.carbon_thunk._(ptr %b, ptr %.loc21_25.1.temp), !dbg !34 +// CHECK:STDOUT: call void @_ZNK5EnumBcv1IEv.carbon_thunk._(ptr %b, ptr %.loc21_25.1.temp), !dbg !34 // CHECK:STDOUT: %.loc21_25.5 = load i16, ptr %.loc21_25.1.temp, align 2, !dbg !34 // CHECK:STDOUT: ret void, !dbg !35 // CHECK:STDOUT: } @@ -233,9 +233,9 @@ fn ConvertToValue(b: Cpp.B) { // CHECK:STDOUT: ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) // CHECK:STDOUT: declare void @llvm.lifetime.start.p0(ptr captures(none)) #2 // CHECK:STDOUT: -// CHECK:STDOUT: declare noundef signext i16 @_ZNK1Bcv1SEv(ptr noundef nonnull align 1 dereferenceable(1)) #3 +// CHECK:STDOUT: declare noundef signext i16 @_ZNK5EnumBcv1SEv(ptr noundef nonnull align 1 dereferenceable(1)) #3 // CHECK:STDOUT: -// CHECK:STDOUT: declare noundef signext i16 @_ZNK1Bcv1IEv(ptr noundef nonnull align 1 dereferenceable(1)) #3 +// CHECK:STDOUT: declare noundef signext i16 @_ZNK5EnumBcv1IEv(ptr noundef nonnull align 1 dereferenceable(1)) #3 // CHECK:STDOUT: // CHECK:STDOUT: ; uselistorder directives // CHECK:STDOUT: uselistorder ptr @llvm.lifetime.start.p0, { 3, 2, 1, 0 } @@ -271,7 +271,7 @@ fn ConvertToValue(b: Cpp.B) { // CHECK:STDOUT: !19 = !DILocation(line: 16, column: 3, scope: !12) // CHECK:STDOUT: !20 = !DILocation(line: 14, column: 1, scope: !12) // CHECK:STDOUT: !21 = !{!22, !22, i64 0} -// CHECK:STDOUT: !22 = !{!"p1 _ZTS1B", !23, i64 0} +// CHECK:STDOUT: !22 = !{!"p1 _ZTS5EnumB", !23, i64 0} // CHECK:STDOUT: !23 = !{!"any pointer", !10, i64 0} // CHECK:STDOUT: !24 = !{!23, !23, i64 0} // CHECK:STDOUT: !25 = !{} @@ -297,19 +297,19 @@ fn ConvertToValue(b: Cpp.B) { // CHECK:STDOUT: entry: // CHECK:STDOUT: %a.var = alloca i32, align 4, !dbg !18 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %a.var), !dbg !18 -// CHECK:STDOUT: %__carbon_thunk.call = call i32 @_ZNK1BcviEv.carbon_thunk._(ptr %b), !dbg !18 +// CHECK:STDOUT: %__carbon_thunk.call = call i32 @_ZNK4IntBcviEv.carbon_thunk._(ptr %b), !dbg !18 // CHECK:STDOUT: store i32 %__carbon_thunk.call, ptr %a.var, align 4, !dbg !18 // CHECK:STDOUT: call void @"_COp.70db2d92ffddbef7:core.Destroy.Core"(ptr %a.var), !dbg !18 // CHECK:STDOUT: ret void, !dbg !19 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress uwtable -// CHECK:STDOUT: define internal noundef i32 @_ZNK1BcviEv.carbon_thunk._(ptr noundef nonnull align 1 dereferenceable(1) %this) #1 { +// CHECK:STDOUT: define internal noundef i32 @_ZNK4IntBcviEv.carbon_thunk._(ptr noundef nonnull align 1 dereferenceable(1) %this) #1 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %this.addr = alloca ptr, align 8 // CHECK:STDOUT: store ptr %this, ptr %this.addr, align 8, !tbaa !20 // CHECK:STDOUT: %0 = load ptr, ptr %this.addr, align 8, !tbaa !20, !nonnull !23 -// CHECK:STDOUT: %call = call noundef i32 @_ZNK1BcviEv(ptr noundef nonnull align 1 dereferenceable(1) %0) +// CHECK:STDOUT: %call = call noundef i32 @_ZNK4IntBcviEv(ptr noundef nonnull align 1 dereferenceable(1) %0) // CHECK:STDOUT: ret i32 %call // CHECK:STDOUT: } // CHECK:STDOUT: @@ -322,14 +322,14 @@ fn ConvertToValue(b: Cpp.B) { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_CConvertToValue.Main(ptr %b) #0 !dbg !31 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %__carbon_thunk.call = call i32 @_ZNK1BcviEv.carbon_thunk._(ptr %b), !dbg !34 +// CHECK:STDOUT: %__carbon_thunk.call = call i32 @_ZNK4IntBcviEv.carbon_thunk._(ptr %b), !dbg !34 // CHECK:STDOUT: ret void, !dbg !35 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) // CHECK:STDOUT: declare void @llvm.lifetime.start.p0(ptr captures(none)) #2 // CHECK:STDOUT: -// CHECK:STDOUT: declare noundef i32 @_ZNK1BcviEv(ptr noundef nonnull align 1 dereferenceable(1)) #3 +// CHECK:STDOUT: declare noundef i32 @_ZNK4IntBcviEv(ptr noundef nonnull align 1 dereferenceable(1)) #3 // CHECK:STDOUT: // CHECK:STDOUT: attributes #0 = { nounwind } // CHECK:STDOUT: attributes #1 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } @@ -361,7 +361,7 @@ fn ConvertToValue(b: Cpp.B) { // CHECK:STDOUT: !18 = !DILocation(line: 12, column: 3, scope: !12) // CHECK:STDOUT: !19 = !DILocation(line: 11, column: 1, scope: !12) // CHECK:STDOUT: !20 = !{!21, !21, i64 0} -// CHECK:STDOUT: !21 = !{!"p1 _ZTS1B", !22, i64 0} +// CHECK:STDOUT: !21 = !{!"p1 _ZTS4IntB", !22, i64 0} // CHECK:STDOUT: !22 = !{!"any pointer", !10, i64 0} // CHECK:STDOUT: !23 = !{} // CHECK:STDOUT: !24 = distinct !DISubprogram(name: "Op", linkageName: "_COp.70db2d92ffddbef7:core.Destroy.Core", scope: null, file: !1, line: 12, type: !25, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !28) diff --git a/toolchain/lower/testdata/interop/cpp/class/import/copy_vs_move.carbon b/toolchain/lower/testdata/interop/cpp/class/import/copy_vs_move.carbon index 8829a9847e5e..7f605ece7e4a 100644 --- a/toolchain/lower/testdata/interop/cpp/class/import/copy_vs_move.carbon +++ b/toolchain/lower/testdata/interop/cpp/class/import/copy_vs_move.carbon @@ -21,26 +21,26 @@ struct Copyable { Copyable& operator=(const Copyable&); ~Copyable(); }; -Copyable make(); -void pass(Copyable); +Copyable make_copyable(); +void pass_copyable(Copyable); '''; -var c: Cpp.Copyable = Cpp.make(); +var c: Cpp.Copyable = Cpp.make_copyable(); fn PassGlobal() { - Cpp.pass(c); + Cpp.pass_copyable(c); } fn PassTemporary() { - Cpp.pass(Cpp.make()); + Cpp.pass_copyable(Cpp.make_copyable()); } fn PassValue(c: Cpp.Copyable) { - Cpp.pass(c); + Cpp.pass_copyable(c); } fn PassRef(ref c: Cpp.Copyable) { - Cpp.pass(c); + Cpp.pass_copyable(c); } // --- copy_or_move.carbon @@ -55,26 +55,26 @@ struct CopyOrMove { CopyOrMove& operator=(CopyOrMove&&); ~CopyOrMove(); }; -CopyOrMove make(); -void pass(CopyOrMove); +CopyOrMove make_copy_or_move(); +void pass_copy_or_move(CopyOrMove); '''; -var c: Cpp.CopyOrMove = Cpp.make(); +var c: Cpp.CopyOrMove = Cpp.make_copy_or_move(); fn PassGlobal() { - Cpp.pass(c); + Cpp.pass_copy_or_move(c); } fn PassTemporary() { - Cpp.pass(Cpp.make()); + Cpp.pass_copy_or_move(Cpp.make_copy_or_move()); } fn PassValue(c: Cpp.CopyOrMove) { - Cpp.pass(c); + Cpp.pass_copy_or_move(c); } fn PassRef(ref c: Cpp.CopyOrMove) { - Cpp.pass(c); + Cpp.pass_copy_or_move(c); } // --- move_only.carbon @@ -93,19 +93,19 @@ struct MoveOnly { MoveOnly& operator=(MoveOnly&&); ~MoveOnly(); }; -MoveOnly make(); -void pass(MoveOnly); +MoveOnly make_move_only(); +void pass_move_only(MoveOnly); '''; -var c: Cpp.MoveOnly = Cpp.make(); +var c: Cpp.MoveOnly = Cpp.make_move_only(); fn PassGlobalByMove() { // TODO: This should be accepted. - // Cpp.pass(Cpp.std.move(ref c)); + // Cpp.pass_move_only(Cpp.std.move(ref c)); } fn PassTemporary() { - Cpp.pass(Cpp.make()); + Cpp.pass_move_only(Cpp.make_move_only()); } // CHECK:STDOUT: ; --- @@ -120,31 +120,31 @@ fn PassTemporary() { // CHECK:STDOUT: @llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 0, ptr @_C__global_init.Main, ptr null }] // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress nounwind uwtable -// CHECK:STDOUT: define internal void @_Z4makev.carbon_thunk.(ptr noundef %return) #0 { +// CHECK:STDOUT: define internal void @_Z13make_copyablev.carbon_thunk.(ptr noundef %return) #0 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %return.addr = alloca ptr, align 8 // CHECK:STDOUT: store ptr %return, ptr %return.addr, align 8, !tbaa !12 // CHECK:STDOUT: %0 = load ptr, ptr %return.addr, align 8, !tbaa !12 -// CHECK:STDOUT: call void @_Z4makev(ptr dead_on_unwind writable sret(%struct.Copyable) align 1 %0) +// CHECK:STDOUT: call void @_Z13make_copyablev(ptr dead_on_unwind writable sret(%struct.Copyable) align 1 %0) // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_CPassGlobal.Main() #1 !dbg !15 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @_Z4pass8Copyable.carbon_thunk._(ptr @_Cc.Main), !dbg !18 +// CHECK:STDOUT: call void @_Z13pass_copyable8Copyable.carbon_thunk._(ptr @_Cc.Main), !dbg !18 // CHECK:STDOUT: ret void, !dbg !19 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress nounwind uwtable -// CHECK:STDOUT: define internal void @_Z4pass8Copyable.carbon_thunk._(ptr noundef %0) #0 { +// CHECK:STDOUT: define internal void @_Z13pass_copyable8Copyable.carbon_thunk._(ptr noundef %0) #0 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.addr = alloca ptr, align 8 // CHECK:STDOUT: %agg.tmp = alloca %struct.Copyable, align 1 // CHECK:STDOUT: store ptr %0, ptr %.addr, align 8, !tbaa !12 // CHECK:STDOUT: %1 = load ptr, ptr %.addr, align 8, !tbaa !12 // CHECK:STDOUT: call void @_ZN8CopyableC1ERKS_(ptr noundef nonnull align 1 dereferenceable(1) %agg.tmp, ptr noundef nonnull align 1 dereferenceable(1) %1) -// CHECK:STDOUT: call void @_Z4pass8Copyable(ptr noundef align 1 %agg.tmp) +// CHECK:STDOUT: call void @_Z13pass_copyable8Copyable(ptr noundef align 1 %agg.tmp) // CHECK:STDOUT: call void @_ZN8CopyableD1Ev(ptr noundef nonnull align 1 dereferenceable(1) %agg.tmp) #1 // CHECK:STDOUT: ret void // CHECK:STDOUT: } @@ -152,11 +152,11 @@ fn PassTemporary() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_CPassTemporary.Main() #1 !dbg !20 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %.loc21_21.1.temp = alloca [1 x i8], align 1, !dbg !21 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc21_21.1.temp), !dbg !21 -// CHECK:STDOUT: call void @_Z4makev.carbon_thunk.(ptr %.loc21_21.1.temp), !dbg !21 -// CHECK:STDOUT: call void @_Z4pass8Copyable.carbon_thunk._(ptr %.loc21_21.1.temp), !dbg !22 -// CHECK:STDOUT: call void @_ZN8CopyableD1Ev(ptr %.loc21_21.1.temp), !dbg !21 +// CHECK:STDOUT: %.loc21_39.1.temp = alloca [1 x i8], align 1, !dbg !21 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc21_39.1.temp), !dbg !21 +// CHECK:STDOUT: call void @_Z13make_copyablev.carbon_thunk.(ptr %.loc21_39.1.temp), !dbg !21 +// CHECK:STDOUT: call void @_Z13pass_copyable8Copyable.carbon_thunk._(ptr %.loc21_39.1.temp), !dbg !22 +// CHECK:STDOUT: call void @_ZN8CopyableD1Ev(ptr %.loc21_39.1.temp), !dbg !21 // CHECK:STDOUT: ret void, !dbg !23 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -166,14 +166,14 @@ fn PassTemporary() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_CPassValue.Main(ptr %c) #1 !dbg !24 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @_Z4pass8Copyable.carbon_thunk._(ptr %c), !dbg !30 +// CHECK:STDOUT: call void @_Z13pass_copyable8Copyable.carbon_thunk._(ptr %c), !dbg !30 // CHECK:STDOUT: ret void, !dbg !31 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_CPassRef.Main(ptr %c) #1 !dbg !32 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @_Z4pass8Copyable.carbon_thunk._(ptr %c), !dbg !35 +// CHECK:STDOUT: call void @_Z13pass_copyable8Copyable.carbon_thunk._(ptr %c), !dbg !35 // CHECK:STDOUT: ret void, !dbg !36 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -183,13 +183,13 @@ fn PassTemporary() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define internal void @_C__global_init.Main() #1 !dbg !37 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @_Z4makev.carbon_thunk.(ptr @_Cc.Main), !dbg !38 +// CHECK:STDOUT: call void @_Z13make_copyablev.carbon_thunk.(ptr @_Cc.Main), !dbg !38 // CHECK:STDOUT: ret void, !dbg !39 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: declare void @_Z4makev(ptr dead_on_unwind writable sret(%struct.Copyable) align 1) #4 +// CHECK:STDOUT: declare void @_Z13make_copyablev(ptr dead_on_unwind writable sret(%struct.Copyable) align 1) #4 // CHECK:STDOUT: -// CHECK:STDOUT: declare void @_Z4pass8Copyable(ptr noundef align 1) #4 +// CHECK:STDOUT: declare void @_Z13pass_copyable8Copyable(ptr noundef align 1) #4 // CHECK:STDOUT: // CHECK:STDOUT: declare void @_ZN8CopyableC1ERKS_(ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4 // CHECK:STDOUT: @@ -224,7 +224,7 @@ fn PassTemporary() { // CHECK:STDOUT: !18 = !DILocation(line: 17, column: 3, scope: !15) // CHECK:STDOUT: !19 = !DILocation(line: 16, column: 1, scope: !15) // CHECK:STDOUT: !20 = distinct !DISubprogram(name: "PassTemporary", linkageName: "_CPassTemporary.Main", scope: null, file: !1, line: 20, type: !16, spFlags: DISPFlagDefinition, unit: !0) -// CHECK:STDOUT: !21 = !DILocation(line: 21, column: 12, scope: !20) +// CHECK:STDOUT: !21 = !DILocation(line: 21, column: 21, scope: !20) // CHECK:STDOUT: !22 = !DILocation(line: 21, column: 3, scope: !20) // CHECK:STDOUT: !23 = !DILocation(line: 20, column: 1, scope: !20) // CHECK:STDOUT: !24 = distinct !DISubprogram(name: "PassValue", linkageName: "_CPassValue.Main", scope: null, file: !1, line: 24, type: !25, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !28) @@ -256,31 +256,31 @@ fn PassTemporary() { // CHECK:STDOUT: @llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 0, ptr @_C__global_init.Main, ptr null }] // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress nounwind uwtable -// CHECK:STDOUT: define internal void @_Z4makev.carbon_thunk.(ptr noundef %return) #0 { +// CHECK:STDOUT: define internal void @_Z17make_copy_or_movev.carbon_thunk.(ptr noundef %return) #0 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %return.addr = alloca ptr, align 8 // CHECK:STDOUT: store ptr %return, ptr %return.addr, align 8, !tbaa !12 // CHECK:STDOUT: %0 = load ptr, ptr %return.addr, align 8, !tbaa !12 -// CHECK:STDOUT: call void @_Z4makev(ptr dead_on_unwind writable sret(%struct.CopyOrMove) align 1 %0) +// CHECK:STDOUT: call void @_Z17make_copy_or_movev(ptr dead_on_unwind writable sret(%struct.CopyOrMove) align 1 %0) // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_CPassGlobal.Main() #1 !dbg !15 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @_Z4pass10CopyOrMove.carbon_thunk._(ptr @_Cc.Main), !dbg !18 +// CHECK:STDOUT: call void @_Z17pass_copy_or_move10CopyOrMove.carbon_thunk._(ptr @_Cc.Main), !dbg !18 // CHECK:STDOUT: ret void, !dbg !19 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress nounwind uwtable -// CHECK:STDOUT: define internal void @_Z4pass10CopyOrMove.carbon_thunk._(ptr noundef %0) #0 { +// CHECK:STDOUT: define internal void @_Z17pass_copy_or_move10CopyOrMove.carbon_thunk._(ptr noundef %0) #0 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.addr = alloca ptr, align 8 // CHECK:STDOUT: %agg.tmp = alloca %struct.CopyOrMove, align 1 // CHECK:STDOUT: store ptr %0, ptr %.addr, align 8, !tbaa !12 // CHECK:STDOUT: %1 = load ptr, ptr %.addr, align 8, !tbaa !12 // CHECK:STDOUT: call void @_ZN10CopyOrMoveC1ERKS_(ptr noundef nonnull align 1 dereferenceable(1) %agg.tmp, ptr noundef nonnull align 1 dereferenceable(1) %1) -// CHECK:STDOUT: call void @_Z4pass10CopyOrMove(ptr noundef align 1 %agg.tmp) +// CHECK:STDOUT: call void @_Z17pass_copy_or_move10CopyOrMove(ptr noundef align 1 %agg.tmp) // CHECK:STDOUT: call void @_ZN10CopyOrMoveD1Ev(ptr noundef nonnull align 1 dereferenceable(1) %agg.tmp) #1 // CHECK:STDOUT: ret void // CHECK:STDOUT: } @@ -290,21 +290,21 @@ fn PassTemporary() { // CHECK:STDOUT: entry: // CHECK:STDOUT: %_.var = alloca [1 x i8], align 1, !dbg !21 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %_.var), !dbg !21 -// CHECK:STDOUT: call void @_Z4makev.carbon_thunk.(ptr %_.var), !dbg !22 -// CHECK:STDOUT: call void @_Z4pass10CopyOrMove.carbon_thunk.v(ptr %_.var), !dbg !23 +// CHECK:STDOUT: call void @_Z17make_copy_or_movev.carbon_thunk.(ptr %_.var), !dbg !22 +// CHECK:STDOUT: call void @_Z17pass_copy_or_move10CopyOrMove.carbon_thunk.v(ptr %_.var), !dbg !23 // CHECK:STDOUT: call void @_ZN10CopyOrMoveD1Ev(ptr %_.var), !dbg !21 // CHECK:STDOUT: ret void, !dbg !24 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress nounwind uwtable -// CHECK:STDOUT: define internal void @_Z4pass10CopyOrMove.carbon_thunk.v(ptr noundef %0) #0 { +// CHECK:STDOUT: define internal void @_Z17pass_copy_or_move10CopyOrMove.carbon_thunk.v(ptr noundef %0) #0 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.addr = alloca ptr, align 8 // CHECK:STDOUT: %agg.tmp = alloca %struct.CopyOrMove, align 1 // CHECK:STDOUT: store ptr %0, ptr %.addr, align 8, !tbaa !12 // CHECK:STDOUT: %1 = load ptr, ptr %.addr, align 8, !tbaa !12 // CHECK:STDOUT: call void @_ZN10CopyOrMoveC1EOS_(ptr noundef nonnull align 1 dereferenceable(1) %agg.tmp, ptr noundef nonnull align 1 dereferenceable(1) %1) -// CHECK:STDOUT: call void @_Z4pass10CopyOrMove(ptr noundef align 1 %agg.tmp) +// CHECK:STDOUT: call void @_Z17pass_copy_or_move10CopyOrMove(ptr noundef align 1 %agg.tmp) // CHECK:STDOUT: call void @_ZN10CopyOrMoveD1Ev(ptr noundef nonnull align 1 dereferenceable(1) %agg.tmp) #1 // CHECK:STDOUT: ret void // CHECK:STDOUT: } @@ -315,14 +315,14 @@ fn PassTemporary() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_CPassValue.Main(ptr %c) #1 !dbg !25 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @_Z4pass10CopyOrMove.carbon_thunk._(ptr %c), !dbg !31 +// CHECK:STDOUT: call void @_Z17pass_copy_or_move10CopyOrMove.carbon_thunk._(ptr %c), !dbg !31 // CHECK:STDOUT: ret void, !dbg !32 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_CPassRef.Main(ptr %c) #1 !dbg !33 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @_Z4pass10CopyOrMove.carbon_thunk._(ptr %c), !dbg !36 +// CHECK:STDOUT: call void @_Z17pass_copy_or_move10CopyOrMove.carbon_thunk._(ptr %c), !dbg !36 // CHECK:STDOUT: ret void, !dbg !37 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -332,13 +332,13 @@ fn PassTemporary() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define internal void @_C__global_init.Main() #1 !dbg !38 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @_Z4makev.carbon_thunk.(ptr @_Cc.Main), !dbg !39 +// CHECK:STDOUT: call void @_Z17make_copy_or_movev.carbon_thunk.(ptr @_Cc.Main), !dbg !39 // CHECK:STDOUT: ret void, !dbg !40 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: declare void @_Z4makev(ptr dead_on_unwind writable sret(%struct.CopyOrMove) align 1) #4 +// CHECK:STDOUT: declare void @_Z17make_copy_or_movev(ptr dead_on_unwind writable sret(%struct.CopyOrMove) align 1) #4 // CHECK:STDOUT: -// CHECK:STDOUT: declare void @_Z4pass10CopyOrMove(ptr noundef align 1) #4 +// CHECK:STDOUT: declare void @_Z17pass_copy_or_move10CopyOrMove(ptr noundef align 1) #4 // CHECK:STDOUT: // CHECK:STDOUT: declare void @_ZN10CopyOrMoveC1ERKS_(ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4 // CHECK:STDOUT: @@ -346,7 +346,7 @@ fn PassTemporary() { // CHECK:STDOUT: // CHECK:STDOUT: ; uselistorder directives // CHECK:STDOUT: uselistorder ptr @_ZN10CopyOrMoveD1Ev, { 1, 2, 0 } -// CHECK:STDOUT: uselistorder ptr @_Z4pass10CopyOrMove, { 1, 0 } +// CHECK:STDOUT: uselistorder ptr @_Z17pass_copy_or_move10CopyOrMove, { 1, 0 } // CHECK:STDOUT: // CHECK:STDOUT: attributes #0 = { alwaysinline mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } // CHECK:STDOUT: attributes #1 = { nounwind } @@ -379,8 +379,8 @@ fn PassTemporary() { // CHECK:STDOUT: !18 = !DILocation(line: 19, column: 3, scope: !15) // CHECK:STDOUT: !19 = !DILocation(line: 18, column: 1, scope: !15) // CHECK:STDOUT: !20 = distinct !DISubprogram(name: "PassTemporary", linkageName: "_CPassTemporary.Main", scope: null, file: !1, line: 22, type: !16, spFlags: DISPFlagDefinition, unit: !0) -// CHECK:STDOUT: !21 = !DILocation(line: 13, column: 21, scope: !20) -// CHECK:STDOUT: !22 = !DILocation(line: 23, column: 12, scope: !20) +// CHECK:STDOUT: !21 = !DILocation(line: 13, column: 34, scope: !20) +// CHECK:STDOUT: !22 = !DILocation(line: 23, column: 25, scope: !20) // CHECK:STDOUT: !23 = !DILocation(line: 23, column: 3, scope: !20) // CHECK:STDOUT: !24 = !DILocation(line: 22, column: 1, scope: !20) // CHECK:STDOUT: !25 = distinct !DISubprogram(name: "PassValue", linkageName: "_CPassValue.Main", scope: null, file: !1, line: 26, type: !26, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !29) @@ -412,12 +412,12 @@ fn PassTemporary() { // CHECK:STDOUT: @llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 0, ptr @_C__global_init.Main, ptr null }] // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress nounwind uwtable -// CHECK:STDOUT: define internal void @_Z4makev.carbon_thunk.(ptr noundef %return) #0 { +// CHECK:STDOUT: define internal void @_Z14make_move_onlyv.carbon_thunk.(ptr noundef %return) #0 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %return.addr = alloca ptr, align 8 // CHECK:STDOUT: store ptr %return, ptr %return.addr, align 8, !tbaa !12 // CHECK:STDOUT: %0 = load ptr, ptr %return.addr, align 8, !tbaa !12 -// CHECK:STDOUT: call void @_Z4makev(ptr dead_on_unwind writable sret(%struct.MoveOnly) align 1 %0) +// CHECK:STDOUT: call void @_Z14make_move_onlyv(ptr dead_on_unwind writable sret(%struct.MoveOnly) align 1 %0) // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: @@ -432,21 +432,21 @@ fn PassTemporary() { // CHECK:STDOUT: entry: // CHECK:STDOUT: %_.var = alloca [1 x i8], align 1, !dbg !20 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %_.var), !dbg !20 -// CHECK:STDOUT: call void @_Z4makev.carbon_thunk.(ptr %_.var), !dbg !21 -// CHECK:STDOUT: call void @_Z4pass8MoveOnly.carbon_thunk.v(ptr %_.var), !dbg !22 +// CHECK:STDOUT: call void @_Z14make_move_onlyv.carbon_thunk.(ptr %_.var), !dbg !21 +// CHECK:STDOUT: call void @_Z14pass_move_only8MoveOnly.carbon_thunk.v(ptr %_.var), !dbg !22 // CHECK:STDOUT: call void @_ZN8MoveOnlyD1Ev(ptr %_.var), !dbg !20 // CHECK:STDOUT: ret void, !dbg !23 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress nounwind uwtable -// CHECK:STDOUT: define internal void @_Z4pass8MoveOnly.carbon_thunk.v(ptr noundef %0) #0 { +// CHECK:STDOUT: define internal void @_Z14pass_move_only8MoveOnly.carbon_thunk.v(ptr noundef %0) #0 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.addr = alloca ptr, align 8 // CHECK:STDOUT: %agg.tmp = alloca %struct.MoveOnly, align 1 // CHECK:STDOUT: store ptr %0, ptr %.addr, align 8, !tbaa !12 // CHECK:STDOUT: %1 = load ptr, ptr %.addr, align 8, !tbaa !12 // CHECK:STDOUT: call void @_ZN8MoveOnlyC1EOS_(ptr noundef nonnull align 1 dereferenceable(1) %agg.tmp, ptr noundef nonnull align 1 dereferenceable(1) %1) -// CHECK:STDOUT: call void @_Z4pass8MoveOnly(ptr noundef align 1 %agg.tmp) +// CHECK:STDOUT: call void @_Z14pass_move_only8MoveOnly(ptr noundef align 1 %agg.tmp) // CHECK:STDOUT: call void @_ZN8MoveOnlyD1Ev(ptr noundef nonnull align 1 dereferenceable(1) %agg.tmp) #1 // CHECK:STDOUT: ret void // CHECK:STDOUT: } @@ -460,13 +460,13 @@ fn PassTemporary() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define internal void @_C__global_init.Main() #1 !dbg !24 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @_Z4makev.carbon_thunk.(ptr @_Cc.Main), !dbg !25 +// CHECK:STDOUT: call void @_Z14make_move_onlyv.carbon_thunk.(ptr @_Cc.Main), !dbg !25 // CHECK:STDOUT: ret void, !dbg !26 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: declare void @_Z4makev(ptr dead_on_unwind writable sret(%struct.MoveOnly) align 1) #4 +// CHECK:STDOUT: declare void @_Z14make_move_onlyv(ptr dead_on_unwind writable sret(%struct.MoveOnly) align 1) #4 // CHECK:STDOUT: -// CHECK:STDOUT: declare void @_Z4pass8MoveOnly(ptr noundef align 1) #4 +// CHECK:STDOUT: declare void @_Z14pass_move_only8MoveOnly(ptr noundef align 1) #4 // CHECK:STDOUT: // CHECK:STDOUT: declare void @_ZN8MoveOnlyC1EOS_(ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4 // CHECK:STDOUT: @@ -503,8 +503,8 @@ fn PassTemporary() { // CHECK:STDOUT: !17 = !{null} // CHECK:STDOUT: !18 = !DILocation(line: 22, column: 1, scope: !15) // CHECK:STDOUT: !19 = distinct !DISubprogram(name: "PassTemporary", linkageName: "_CPassTemporary.Main", scope: null, file: !1, line: 27, type: !16, spFlags: DISPFlagDefinition, unit: !0) -// CHECK:STDOUT: !20 = !DILocation(line: 17, column: 19, scope: !19) -// CHECK:STDOUT: !21 = !DILocation(line: 28, column: 12, scope: !19) +// CHECK:STDOUT: !20 = !DILocation(line: 17, column: 29, scope: !19) +// CHECK:STDOUT: !21 = !DILocation(line: 28, column: 22, scope: !19) // CHECK:STDOUT: !22 = !DILocation(line: 28, column: 3, scope: !19) // CHECK:STDOUT: !23 = !DILocation(line: 27, column: 1, scope: !19) // CHECK:STDOUT: !24 = distinct !DISubprogram(name: "__global_init", linkageName: "_C__global_init.Main", scope: null, file: !1, type: !16, spFlags: DISPFlagDefinition, unit: !0) diff --git a/toolchain/lower/testdata/interop/cpp/class/import/field.carbon b/toolchain/lower/testdata/interop/cpp/class/import/field.carbon index b18c97cdd43b..fa73c3865ab3 100644 --- a/toolchain/lower/testdata/interop/cpp/class/import/field.carbon +++ b/toolchain/lower/testdata/interop/cpp/class/import/field.carbon @@ -12,7 +12,7 @@ // --- struct.h -struct A { +struct StructA { int n; alignas(16) int m; }; @@ -25,11 +25,11 @@ import Cpp library "struct.h"; // TODO: We generate 4-byte-aligned loads here, and should generate // 16-byte-aligned loads as Clang does. -fn AccessN(a: Cpp.A) -> i32 { +fn AccessN(a: Cpp.StructA) -> i32 { return a.n; } -fn AccessM(a: Cpp.A) -> i32 { +fn AccessM(a: Cpp.StructA) -> i32 { return a.m; } @@ -41,17 +41,17 @@ import Cpp library "struct.h"; // TODO: We generate 4-byte-aligned stores here, and should generate // 16-byte-aligned stores as Clang does. -fn AssignN(p: Cpp.A*) { +fn AssignN(p: Cpp.StructA*) { p->n = 1; } -fn AssignM(p: Cpp.A*) { +fn AssignM(p: Cpp.StructA*) { p->m = 1; } // --- union.h -union A { +union UnionA { int n; int m; }; @@ -62,11 +62,11 @@ library "[[@TEST_NAME]]"; import Cpp library "union.h"; -fn AccessN(a: Cpp.A) -> i32 { +fn AccessN(a: Cpp.UnionA) -> i32 { return a.n; } -fn AccessM(a: Cpp.A) -> i32 { +fn AccessM(a: Cpp.UnionA) -> i32 { return a.m; } @@ -76,17 +76,17 @@ library "[[@TEST_NAME]]"; import Cpp library "union.h"; -fn AssignN(p: Cpp.A*) { +fn AssignN(p: Cpp.UnionA*) { p->n = 1; } -fn AssignM(p: Cpp.A*) { +fn AssignM(p: Cpp.UnionA*) { p->m = 1; } // --- anon_union.h -struct A { +struct AnonUnionA { int x; union { int n; @@ -100,11 +100,11 @@ library "[[@TEST_NAME]]"; import Cpp library "anon_union.h"; -fn AccessN(a: Cpp.A) -> i32 { +fn AccessN(a: Cpp.AnonUnionA) -> i32 { return a.n; } -fn AccessP(a: Cpp.A) -> i32 { +fn AccessP(a: Cpp.AnonUnionA) -> i32 { return *a.p; } diff --git a/toolchain/lower/testdata/interop/cpp/class/import/method.carbon b/toolchain/lower/testdata/interop/cpp/class/import/method.carbon index fc8e57e95019..77c3dc9e6cc2 100644 --- a/toolchain/lower/testdata/interop/cpp/class/import/method.carbon +++ b/toolchain/lower/testdata/interop/cpp/class/import/method.carbon @@ -79,12 +79,12 @@ library "[[@TEST_NAME]]"; import Cpp; inline Cpp ''' -struct A { +struct RefSelfA { void f(int x, int y); }; '''; -fn F(ref r: Cpp.A) { +fn F(ref r: Cpp.RefSelfA) { r.f(1, 2); } @@ -443,11 +443,11 @@ fn F(ref r: Cpp.A) { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_CF.Main(ptr %r) #0 !dbg !12 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @_ZN1A1fEii(ptr %r, i32 1, i32 2), !dbg !18 +// CHECK:STDOUT: call void @_ZN8RefSelfA1fEii(ptr %r, i32 1, i32 2), !dbg !18 // CHECK:STDOUT: ret void, !dbg !19 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: declare void @_ZN1A1fEii(ptr noundef nonnull align 1 dereferenceable(1), i32 noundef, i32 noundef) #1 +// CHECK:STDOUT: declare void @_ZN8RefSelfA1fEii(ptr noundef nonnull align 1 dereferenceable(1), i32 noundef, i32 noundef) #1 // CHECK:STDOUT: // CHECK:STDOUT: attributes #0 = { nounwind } // CHECK:STDOUT: attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } diff --git a/toolchain/lower/testdata/interop/cpp/extern_c.carbon b/toolchain/lower/testdata/interop/cpp/extern_c.carbon index eb10173f7354..174dc00adb78 100644 --- a/toolchain/lower/testdata/interop/cpp/extern_c.carbon +++ b/toolchain/lower/testdata/interop/cpp/extern_c.carbon @@ -52,7 +52,7 @@ fn MyF() { // --- extern_c_variable.h -extern "C" int foo; +extern "C" int foo_var; // --- import_extern_c_variable.carbon @@ -61,7 +61,7 @@ library "[[@TEST_NAME]]"; import Cpp library "extern_c_variable.h"; fn MyF() -> i32 { - return Cpp.foo; + return Cpp.foo_var; } // ============================================================================ @@ -90,7 +90,7 @@ fn MyF(a: Cpp.X, b: Cpp.X) -> Cpp.X { // --- extern_c_with_asm_label.h -extern "C" void foo() __asm__("bar"); +extern "C" void foo_with_asm_label() __asm__("bar"); // --- import_extern_c_with_asm_label.carbon @@ -99,7 +99,7 @@ library "[[@TEST_NAME]]"; import Cpp library "extern_c_with_asm_label.h"; fn MyF() { - Cpp.foo(); + Cpp.foo_with_asm_label(); } // CHECK:STDOUT: ; --- @@ -192,12 +192,12 @@ fn MyF() { // CHECK:STDOUT: target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" // CHECK:STDOUT: target triple = "x86_64-unknown-linux-gnu" // CHECK:STDOUT: -// CHECK:STDOUT: @foo = external global i32, align 4 +// CHECK:STDOUT: @foo_var = external global i32, align 4 // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define i32 @_CMyF.Main() #0 !dbg !12 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %.loc7 = load i32, ptr @foo, align 4, !dbg !16 +// CHECK:STDOUT: %.loc7 = load i32, ptr @foo_var, align 4, !dbg !16 // CHECK:STDOUT: ret i32 %.loc7, !dbg !17 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/lower/testdata/interop/cpp/function/import/function_decl.carbon b/toolchain/lower/testdata/interop/cpp/function/import/function_decl.carbon index fbd81a698058..f2145d326cab 100644 --- a/toolchain/lower/testdata/interop/cpp/function/import/function_decl.carbon +++ b/toolchain/lower/testdata/interop/cpp/function/import/function_decl.carbon @@ -34,7 +34,7 @@ fn MyF() { // --- inline_function_decl.h -inline void foo() {} +inline void foo_inline() {} // --- import_inline_function_decl.carbon @@ -43,7 +43,7 @@ library "[[@TEST_NAME]]"; import Cpp library "inline_function_decl.h"; fn MyF() { - Cpp.foo(); + Cpp.foo_inline(); } // ============================================================================ @@ -52,7 +52,7 @@ fn MyF() { // --- inline_used_function_decl.h -inline __attribute__((used)) void foo() {} +inline __attribute__((used)) void foo_used() {} // --- import_inline_used_function_decl.carbon @@ -61,7 +61,7 @@ library "[[@TEST_NAME]]"; import Cpp library "inline_used_function_decl.h"; fn MyF() { - Cpp.foo(); + Cpp.foo_used(); } // ============================================================================ @@ -70,9 +70,9 @@ fn MyF() { // --- multiple_inline_function_decls.h -inline void foo1() {} -inline void foo2() {} -inline void foo3() {} +inline void multi_foo1() {} +inline void multi_foo2() {} +inline void multi_foo3() {} // --- import_multiple_inline_function_decls.carbon @@ -81,9 +81,9 @@ library "[[@TEST_NAME]]"; import Cpp library "multiple_inline_function_decls.h"; fn MyF() { - Cpp.foo1(); - Cpp.foo2(); - Cpp.foo3(); + Cpp.multi_foo1(); + Cpp.multi_foo2(); + Cpp.multi_foo3(); } // ============================================================================ @@ -92,8 +92,8 @@ fn MyF() { // --- inline_recursive_function_decl.h -inline void foo1() {} -inline void foo2() { foo1(); } +inline void rec_foo1() {} +inline void rec_foo2() { rec_foo1(); } // --- import_inline_recursive_function_decl.carbon @@ -102,8 +102,8 @@ library "[[@TEST_NAME]]"; import Cpp library "inline_recursive_function_decl.h"; fn MyF() { - // This should generate the definition of the inline function `foo1()`. - Cpp.foo2(); + // This should generate the definition of the inline function `rec_foo1()`. + Cpp.rec_foo2(); } // ============================================================================ @@ -178,17 +178,17 @@ fn MyF() -> i32 { // CHECK:STDOUT: target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" // CHECK:STDOUT: target triple = "x86_64-unknown-linux-gnu" // CHECK:STDOUT: -// CHECK:STDOUT: $_Z3foov = comdat any +// CHECK:STDOUT: $_Z10foo_inlinev = comdat any // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_CMyF.Main() #0 !dbg !12 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @_Z3foov(), !dbg !15 +// CHECK:STDOUT: call void @_Z10foo_inlinev(), !dbg !15 // CHECK:STDOUT: ret void, !dbg !16 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: inlinehint mustprogress nounwind uwtable -// CHECK:STDOUT: define linkonce_odr dso_local void @_Z3foov() #1 comdat { +// CHECK:STDOUT: define linkonce_odr dso_local void @_Z10foo_inlinev() #1 comdat { // CHECK:STDOUT: entry: // CHECK:STDOUT: ret void // CHECK:STDOUT: } @@ -224,12 +224,12 @@ fn MyF() -> i32 { // CHECK:STDOUT: target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" // CHECK:STDOUT: target triple = "x86_64-unknown-linux-gnu" // CHECK:STDOUT: -// CHECK:STDOUT: $_Z3foov = comdat any +// CHECK:STDOUT: $_Z8foo_usedv = comdat any // CHECK:STDOUT: -// CHECK:STDOUT: @llvm.compiler.used = appending global [1 x ptr] [ptr @_Z3foov], section "llvm.metadata" +// CHECK:STDOUT: @llvm.compiler.used = appending global [1 x ptr] [ptr @_Z8foo_usedv], section "llvm.metadata" // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: inlinehint mustprogress nounwind uwtable -// CHECK:STDOUT: define linkonce_odr dso_local void @_Z3foov() #0 comdat { +// CHECK:STDOUT: define linkonce_odr dso_local void @_Z8foo_usedv() #0 comdat { // CHECK:STDOUT: entry: // CHECK:STDOUT: ret void // CHECK:STDOUT: } @@ -237,12 +237,12 @@ fn MyF() -> i32 { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_CMyF.Main() #1 !dbg !12 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @_Z3foov(), !dbg !15 +// CHECK:STDOUT: call void @_Z8foo_usedv(), !dbg !15 // CHECK:STDOUT: ret void, !dbg !16 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; uselistorder directives -// CHECK:STDOUT: uselistorder ptr @_Z3foov, { 1, 0 } +// CHECK:STDOUT: uselistorder ptr @_Z8foo_usedv, { 1, 0 } // CHECK:STDOUT: // CHECK:STDOUT: attributes #0 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } // CHECK:STDOUT: attributes #1 = { nounwind } @@ -275,35 +275,35 @@ fn MyF() -> i32 { // CHECK:STDOUT: target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" // CHECK:STDOUT: target triple = "x86_64-unknown-linux-gnu" // CHECK:STDOUT: -// CHECK:STDOUT: $_Z4foo1v = comdat any +// CHECK:STDOUT: $_Z10multi_foo1v = comdat any // CHECK:STDOUT: -// CHECK:STDOUT: $_Z4foo2v = comdat any +// CHECK:STDOUT: $_Z10multi_foo2v = comdat any // CHECK:STDOUT: -// CHECK:STDOUT: $_Z4foo3v = comdat any +// CHECK:STDOUT: $_Z10multi_foo3v = comdat any // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_CMyF.Main() #0 !dbg !12 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @_Z4foo1v(), !dbg !15 -// CHECK:STDOUT: call void @_Z4foo2v(), !dbg !16 -// CHECK:STDOUT: call void @_Z4foo3v(), !dbg !17 +// CHECK:STDOUT: call void @_Z10multi_foo1v(), !dbg !15 +// CHECK:STDOUT: call void @_Z10multi_foo2v(), !dbg !16 +// CHECK:STDOUT: call void @_Z10multi_foo3v(), !dbg !17 // CHECK:STDOUT: ret void, !dbg !18 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: inlinehint mustprogress nounwind uwtable -// CHECK:STDOUT: define linkonce_odr dso_local void @_Z4foo1v() #1 comdat { +// CHECK:STDOUT: define linkonce_odr dso_local void @_Z10multi_foo1v() #1 comdat { // CHECK:STDOUT: entry: // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: inlinehint mustprogress nounwind uwtable -// CHECK:STDOUT: define linkonce_odr dso_local void @_Z4foo2v() #1 comdat { +// CHECK:STDOUT: define linkonce_odr dso_local void @_Z10multi_foo2v() #1 comdat { // CHECK:STDOUT: entry: // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: inlinehint mustprogress nounwind uwtable -// CHECK:STDOUT: define linkonce_odr dso_local void @_Z4foo3v() #1 comdat { +// CHECK:STDOUT: define linkonce_odr dso_local void @_Z10multi_foo3v() #1 comdat { // CHECK:STDOUT: entry: // CHECK:STDOUT: ret void // CHECK:STDOUT: } @@ -341,26 +341,26 @@ fn MyF() -> i32 { // CHECK:STDOUT: target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" // CHECK:STDOUT: target triple = "x86_64-unknown-linux-gnu" // CHECK:STDOUT: -// CHECK:STDOUT: $_Z4foo2v = comdat any +// CHECK:STDOUT: $_Z8rec_foo2v = comdat any // CHECK:STDOUT: -// CHECK:STDOUT: $_Z4foo1v = comdat any +// CHECK:STDOUT: $_Z8rec_foo1v = comdat any // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_CMyF.Main() #0 !dbg !12 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @_Z4foo2v(), !dbg !15 +// CHECK:STDOUT: call void @_Z8rec_foo2v(), !dbg !15 // CHECK:STDOUT: ret void, !dbg !16 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: inlinehint mustprogress uwtable -// CHECK:STDOUT: define linkonce_odr dso_local void @_Z4foo2v() #1 comdat { +// CHECK:STDOUT: define linkonce_odr dso_local void @_Z8rec_foo2v() #1 comdat { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @_Z4foo1v() +// CHECK:STDOUT: call void @_Z8rec_foo1v() // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: inlinehint mustprogress nounwind uwtable -// CHECK:STDOUT: define linkonce_odr dso_local void @_Z4foo1v() #2 comdat { +// CHECK:STDOUT: define linkonce_odr dso_local void @_Z8rec_foo1v() #2 comdat { // CHECK:STDOUT: entry: // CHECK:STDOUT: ret void // CHECK:STDOUT: } diff --git a/toolchain/lower/testdata/interop/cpp/globals.carbon b/toolchain/lower/testdata/interop/cpp/globals.carbon index 97f39c42a0c7..703ca76f855a 100644 --- a/toolchain/lower/testdata/interop/cpp/globals.carbon +++ b/toolchain/lower/testdata/interop/cpp/globals.carbon @@ -35,12 +35,12 @@ fn MyF() { // --- inline.h -struct C { - C(); - ~C(); +struct InlineC { + InlineC(); + ~InlineC(); void f(); }; -inline C inline_global; +inline InlineC inline_global; // --- import_inline.carbon @@ -132,7 +132,7 @@ fn ReadVarTemplateWithConstructor() -> Cpp.Y* { // --- static_template.h -struct X { +struct StaticTmplX { template static T static_tmpl = T(); }; @@ -147,11 +147,11 @@ library "[[@TEST_NAME]]"; import Cpp library "static_template.h"; fn ReadStaticVarTemplate() -> i32 { - return Cpp.X.static_tmpl(i32); + return Cpp.StaticTmplX.static_tmpl(i32); } fn ReadStaticVarTemplateWithConstructor() -> Cpp.Y* { - return &Cpp.X.static_tmpl(Cpp.Y); + return &Cpp.StaticTmplX.static_tmpl(Cpp.Y); } // CHECK:STDOUT: ; --- @@ -199,11 +199,11 @@ fn ReadStaticVarTemplateWithConstructor() -> Cpp.Y* { // CHECK:STDOUT: target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" // CHECK:STDOUT: target triple = "x86_64-unknown-linux-gnu" // CHECK:STDOUT: -// CHECK:STDOUT: %struct.C = type { i8 } +// CHECK:STDOUT: %struct.InlineC = type { i8 } // CHECK:STDOUT: // CHECK:STDOUT: $inline_global = comdat any // CHECK:STDOUT: -// CHECK:STDOUT: @inline_global = linkonce_odr dso_local global %struct.C zeroinitializer, comdat, align 1 +// CHECK:STDOUT: @inline_global = linkonce_odr dso_local global %struct.InlineC zeroinitializer, comdat, align 1 // CHECK:STDOUT: @_ZGV13inline_global = linkonce_odr dso_local global i64 0, comdat($inline_global), align 8 // CHECK:STDOUT: @__dso_handle = external hidden global i8 // CHECK:STDOUT: @llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @__cxx_global_var_init, ptr @inline_global }] @@ -224,11 +224,11 @@ fn ReadStaticVarTemplateWithConstructor() -> Cpp.Y* { // CHECK:STDOUT: br i1 %tobool, label %init, label %init.end // CHECK:STDOUT: // CHECK:STDOUT: init: ; preds = %init.check -// CHECK:STDOUT: invoke void @_ZN1CC1Ev(ptr noundef nonnull align 1 dereferenceable(1) @inline_global) +// CHECK:STDOUT: invoke void @_ZN7InlineCC1Ev(ptr noundef nonnull align 1 dereferenceable(1) @inline_global) // CHECK:STDOUT: to label %invoke.cont unwind label %lpad // CHECK:STDOUT: // CHECK:STDOUT: invoke.cont: ; preds = %init -// CHECK:STDOUT: %2 = call i32 @__cxa_atexit(ptr @_ZN1CD1Ev, ptr @inline_global, ptr @__dso_handle) #1 +// CHECK:STDOUT: %2 = call i32 @__cxa_atexit(ptr @_ZN7InlineCD1Ev, ptr @inline_global, ptr @__dso_handle) #1 // CHECK:STDOUT: call void @__cxa_guard_release(ptr @_ZGV13inline_global) #1 // CHECK:STDOUT: br label %init.end // CHECK:STDOUT: @@ -256,12 +256,12 @@ fn ReadStaticVarTemplateWithConstructor() -> Cpp.Y* { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: declare i32 @__cxa_guard_acquire(ptr) #1 // CHECK:STDOUT: -// CHECK:STDOUT: declare void @_ZN1CC1Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 +// CHECK:STDOUT: declare void @_ZN7InlineCC1Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #2 // CHECK:STDOUT: // CHECK:STDOUT: declare i32 @__gxx_personality_v0(...) // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: declare void @_ZN1CD1Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 +// CHECK:STDOUT: declare void @_ZN7InlineCD1Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: declare i32 @__cxa_atexit(ptr, ptr, ptr) #1 @@ -275,11 +275,11 @@ fn ReadStaticVarTemplateWithConstructor() -> Cpp.Y* { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_CCallF.Main() #1 !dbg !12 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @_ZN1C1fEv(ptr @inline_global), !dbg !15 +// CHECK:STDOUT: call void @_ZN7InlineC1fEv(ptr @inline_global), !dbg !15 // CHECK:STDOUT: ret void, !dbg !16 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: declare void @_ZN1C1fEv(ptr noundef nonnull align 1 dereferenceable(1)) #2 +// CHECK:STDOUT: declare void @_ZN7InlineC1fEv(ptr noundef nonnull align 1 dereferenceable(1)) #2 // CHECK:STDOUT: // CHECK:STDOUT: ; uselistorder directives // CHECK:STDOUT: uselistorder ptr @inline_global, { 2, 3, 4, 0, 1 } @@ -530,20 +530,20 @@ fn ReadStaticVarTemplateWithConstructor() -> Cpp.Y* { // CHECK:STDOUT: // CHECK:STDOUT: %struct.Y.26 = type { i8 } // CHECK:STDOUT: -// CHECK:STDOUT: @_ZN1X11static_tmplIiEE = external global i32, align 4 -// CHECK:STDOUT: @_ZN1X11static_tmplI1YEE = external global %struct.Y.26, align 1 +// CHECK:STDOUT: @_ZN11StaticTmplX11static_tmplIiEE = external global i32, align 4 +// CHECK:STDOUT: @_ZN11StaticTmplX11static_tmplI1YEE = external global %struct.Y.26, align 1 // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define i32 @_CReadStaticVarTemplate.Main() #0 !dbg !12 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %.loc7 = load i32, ptr @_ZN1X11static_tmplIiEE, align 4, !dbg !16 +// CHECK:STDOUT: %.loc7 = load i32, ptr @_ZN11StaticTmplX11static_tmplIiEE, align 4, !dbg !16 // CHECK:STDOUT: ret i32 %.loc7, !dbg !17 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define ptr @_CReadStaticVarTemplateWithConstructor.Main() #0 !dbg !18 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: ret ptr @_ZN1X11static_tmplI1YEE, !dbg !22 +// CHECK:STDOUT: ret ptr @_ZN11StaticTmplX11static_tmplI1YEE, !dbg !22 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: attributes #0 = { nounwind } diff --git a/toolchain/lower/testdata/interop/cpp/operators.carbon b/toolchain/lower/testdata/interop/cpp/operators.carbon index b199ae8608d4..fa643198deda 100644 --- a/toolchain/lower/testdata/interop/cpp/operators.carbon +++ b/toolchain/lower/testdata/interop/cpp/operators.carbon @@ -15,14 +15,14 @@ library "[[@TEST_NAME]]"; import Cpp inline '''c++ -struct A { +struct EqA { int value; - friend auto operator==(A x, A y) -> bool { + friend auto operator==(EqA x, EqA y) -> bool { return x.value == y.value; } - friend auto operator!=(A x, A y) -> bool { + friend auto operator!=(EqA x, EqA y) -> bool { return !(x == y); } }; @@ -33,7 +33,7 @@ fn CheckEqWith[U: type, T: Core.EqWith(U)](x: T, y: U) { x != y; } -fn Driver(x: Cpp.A, y: Cpp.A) { +fn Driver(x: Cpp.EqA, y: Cpp.EqA) { CheckEqWith(x, y); } @@ -42,22 +42,22 @@ fn Driver(x: Cpp.A, y: Cpp.A) { library "[[@TEST_NAME]]"; import Cpp inline '''c++ -struct A { +struct OrderedA { int value; - friend auto operator<(A x, A y) -> bool { + friend auto operator<(OrderedA x, OrderedA y) -> bool { return x.value < y.value; } - friend auto operator>(A x, A y) -> bool { + friend auto operator>(OrderedA x, OrderedA y) -> bool { return y < x; } - friend auto operator<=(A x, A y) -> bool { + friend auto operator<=(OrderedA x, OrderedA y) -> bool { return !(y < x); } - friend auto operator>=(A x, A y) -> bool { + friend auto operator>=(OrderedA x, OrderedA y) -> bool { return !(x < y); } }; @@ -70,7 +70,7 @@ fn CheckOrderedWith[U: type, T: Core.OrderedWith(U)](x: T, y: U) { x >= y; } -fn Driver(x: Cpp.A, y: Cpp.A) { +fn Driver(x: Cpp.OrderedA, y: Cpp.OrderedA) { CheckOrderedWith(x, y); } @@ -80,27 +80,27 @@ fn Driver(x: Cpp.A, y: Cpp.A) { // CHECK:STDOUT: target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" // CHECK:STDOUT: target triple = "x86_64-unknown-linux-gnu" // CHECK:STDOUT: -// CHECK:STDOUT: %struct.A = type { i32 } +// CHECK:STDOUT: %struct.EqA = type { i32 } // CHECK:STDOUT: -// CHECK:STDOUT: $_Zeq1AS_ = comdat any +// CHECK:STDOUT: $_Zeq3EqAS_ = comdat any // CHECK:STDOUT: -// CHECK:STDOUT: $_Zne1AS_ = comdat any +// CHECK:STDOUT: $_Zne3EqAS_ = comdat any // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_CDriver.Main(ptr %x, ptr %y) #0 !dbg !12 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @_CCheckEqWith.Main.bdef5a2ed02e32a1(ptr %x, ptr %y), !dbg !19 +// CHECK:STDOUT: call void @_CCheckEqWith.Main.5d19350ce19a6fbd(ptr %x, ptr %y), !dbg !19 // CHECK:STDOUT: ret void, !dbg !20 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress uwtable -// CHECK:STDOUT: define internal void @_Zeq1AS_.carbon_thunk.__(ptr noundef %x, ptr noundef %y, ptr noundef %return) #1 { +// CHECK:STDOUT: define internal void @_Zeq3EqAS_.carbon_thunk.__(ptr noundef %x, ptr noundef %y, ptr noundef %return) #1 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %x.addr = alloca ptr, align 8 // CHECK:STDOUT: %y.addr = alloca ptr, align 8 // CHECK:STDOUT: %return.addr = alloca ptr, align 8 -// CHECK:STDOUT: %agg.tmp = alloca %struct.A, align 4 -// CHECK:STDOUT: %agg.tmp1 = alloca %struct.A, align 4 +// CHECK:STDOUT: %agg.tmp = alloca %struct.EqA, align 4 +// CHECK:STDOUT: %agg.tmp1 = alloca %struct.EqA, align 4 // CHECK:STDOUT: store ptr %x, ptr %x.addr, align 8, !tbaa !21 // CHECK:STDOUT: store ptr %y, ptr %y.addr, align 8, !tbaa !21 // CHECK:STDOUT: store ptr %return, ptr %return.addr, align 8, !tbaa !24 @@ -109,24 +109,24 @@ fn Driver(x: Cpp.A, y: Cpp.A) { // CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %agg.tmp, ptr align 4 %1, i64 4, i1 false), !tbaa.struct !26 // CHECK:STDOUT: %2 = load ptr, ptr %y.addr, align 8, !tbaa !21 // CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %agg.tmp1, ptr align 4 %2, i64 4, i1 false), !tbaa.struct !26 -// CHECK:STDOUT: %coerce.dive = getelementptr inbounds nuw %struct.A, ptr %agg.tmp, i32 0, i32 0 +// CHECK:STDOUT: %coerce.dive = getelementptr inbounds nuw %struct.EqA, ptr %agg.tmp, i32 0, i32 0 // CHECK:STDOUT: %3 = load i32, ptr %coerce.dive, align 4 -// CHECK:STDOUT: %coerce.dive2 = getelementptr inbounds nuw %struct.A, ptr %agg.tmp1, i32 0, i32 0 +// CHECK:STDOUT: %coerce.dive2 = getelementptr inbounds nuw %struct.EqA, ptr %agg.tmp1, i32 0, i32 0 // CHECK:STDOUT: %4 = load i32, ptr %coerce.dive2, align 4 -// CHECK:STDOUT: %call = call noundef zeroext i1 @_Zeq1AS_(i32 %3, i32 %4) +// CHECK:STDOUT: %call = call noundef zeroext i1 @_Zeq3EqAS_(i32 %3, i32 %4) // CHECK:STDOUT: %storedv = zext i1 %call to i8 // CHECK:STDOUT: store i8 %storedv, ptr %0, align 1, !tbaa !28 // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress uwtable -// CHECK:STDOUT: define internal void @_Zne1AS_.carbon_thunk.__(ptr noundef %x, ptr noundef %y, ptr noundef %return) #1 { +// CHECK:STDOUT: define internal void @_Zne3EqAS_.carbon_thunk.__(ptr noundef %x, ptr noundef %y, ptr noundef %return) #1 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %x.addr = alloca ptr, align 8 // CHECK:STDOUT: %y.addr = alloca ptr, align 8 // CHECK:STDOUT: %return.addr = alloca ptr, align 8 -// CHECK:STDOUT: %agg.tmp = alloca %struct.A, align 4 -// CHECK:STDOUT: %agg.tmp1 = alloca %struct.A, align 4 +// CHECK:STDOUT: %agg.tmp = alloca %struct.EqA, align 4 +// CHECK:STDOUT: %agg.tmp1 = alloca %struct.EqA, align 4 // CHECK:STDOUT: store ptr %x, ptr %x.addr, align 8, !tbaa !21 // CHECK:STDOUT: store ptr %y, ptr %y.addr, align 8, !tbaa !21 // CHECK:STDOUT: store ptr %return, ptr %return.addr, align 8, !tbaa !24 @@ -135,41 +135,41 @@ fn Driver(x: Cpp.A, y: Cpp.A) { // CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %agg.tmp, ptr align 4 %1, i64 4, i1 false), !tbaa.struct !26 // CHECK:STDOUT: %2 = load ptr, ptr %y.addr, align 8, !tbaa !21 // CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %agg.tmp1, ptr align 4 %2, i64 4, i1 false), !tbaa.struct !26 -// CHECK:STDOUT: %coerce.dive = getelementptr inbounds nuw %struct.A, ptr %agg.tmp, i32 0, i32 0 +// CHECK:STDOUT: %coerce.dive = getelementptr inbounds nuw %struct.EqA, ptr %agg.tmp, i32 0, i32 0 // CHECK:STDOUT: %3 = load i32, ptr %coerce.dive, align 4 -// CHECK:STDOUT: %coerce.dive2 = getelementptr inbounds nuw %struct.A, ptr %agg.tmp1, i32 0, i32 0 +// CHECK:STDOUT: %coerce.dive2 = getelementptr inbounds nuw %struct.EqA, ptr %agg.tmp1, i32 0, i32 0 // CHECK:STDOUT: %4 = load i32, ptr %coerce.dive2, align 4 -// CHECK:STDOUT: %call = call noundef zeroext i1 @_Zne1AS_(i32 %3, i32 %4) +// CHECK:STDOUT: %call = call noundef zeroext i1 @_Zne3EqAS_(i32 %3, i32 %4) // CHECK:STDOUT: %storedv = zext i1 %call to i8 // CHECK:STDOUT: store i8 %storedv, ptr %0, align 1, !tbaa !28 // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline nounwind -// CHECK:STDOUT: define weak_odr i1 @"_CEqual:thunk:EqWith.ffb401eeee8c4872.Core:Cpp"(ptr %self, ptr %other) #2 !dbg !30 { +// CHECK:STDOUT: define weak_odr i1 @"_CEqual:thunk:EqWith.c41e21bae407dec8.Core:Cpp"(ptr %self, ptr %other) #2 !dbg !30 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.6.temp = alloca i1, align 1, !dbg !36 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.6.temp), !dbg !36 -// CHECK:STDOUT: call void @_Zeq1AS_.carbon_thunk.__(ptr %self, ptr %other, ptr %.6.temp), !dbg !36 +// CHECK:STDOUT: call void @_Zeq3EqAS_.carbon_thunk.__(ptr %self, ptr %other, ptr %.6.temp), !dbg !36 // CHECK:STDOUT: %0 = load i1, ptr %.6.temp, align 1, !dbg !36 // CHECK:STDOUT: ret i1 %0, !dbg !36 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline nounwind -// CHECK:STDOUT: define weak_odr i1 @"_CNotEqual:thunk:EqWith.ffb401eeee8c4872.Core:Cpp"(ptr %self, ptr %other) #2 !dbg !37 { +// CHECK:STDOUT: define weak_odr i1 @"_CNotEqual:thunk:EqWith.c41e21bae407dec8.Core:Cpp"(ptr %self, ptr %other) #2 !dbg !37 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.6.temp = alloca i1, align 1, !dbg !41 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.6.temp), !dbg !41 -// CHECK:STDOUT: call void @_Zne1AS_.carbon_thunk.__(ptr %self, ptr %other, ptr %.6.temp), !dbg !41 +// CHECK:STDOUT: call void @_Zne3EqAS_.carbon_thunk.__(ptr %self, ptr %other, ptr %.6.temp), !dbg !41 // CHECK:STDOUT: %0 = load i1, ptr %.6.temp, align 1, !dbg !41 // CHECK:STDOUT: ret i1 %0, !dbg !41 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define linkonce_odr void @_CCheckEqWith.Main.bdef5a2ed02e32a1(ptr %x, ptr %y) #0 !dbg !42 { +// CHECK:STDOUT: define linkonce_odr void @_CCheckEqWith.Main.5d19350ce19a6fbd(ptr %x, ptr %y) #0 !dbg !42 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %EqWith.WithSelf.Equal.call = call i1 @"_CEqual:thunk:EqWith.ffb401eeee8c4872.Core:Cpp"(ptr %x, ptr %y), !dbg !46 -// CHECK:STDOUT: %EqWith.WithSelf.NotEqual.call = call i1 @"_CNotEqual:thunk:EqWith.ffb401eeee8c4872.Core:Cpp"(ptr %x, ptr %y), !dbg !47 +// CHECK:STDOUT: %EqWith.WithSelf.Equal.call = call i1 @"_CEqual:thunk:EqWith.c41e21bae407dec8.Core:Cpp"(ptr %x, ptr %y), !dbg !46 +// CHECK:STDOUT: %EqWith.WithSelf.NotEqual.call = call i1 @"_CNotEqual:thunk:EqWith.c41e21bae407dec8.Core:Cpp"(ptr %x, ptr %y), !dbg !47 // CHECK:STDOUT: ret void, !dbg !48 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -177,17 +177,17 @@ fn Driver(x: Cpp.A, y: Cpp.A) { // CHECK:STDOUT: declare void @llvm.lifetime.start.p0(ptr captures(none)) #3 // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: mustprogress nounwind uwtable -// CHECK:STDOUT: define linkonce_odr dso_local noundef zeroext i1 @_Zeq1AS_(i32 %x.coerce, i32 %y.coerce) #4 comdat { +// CHECK:STDOUT: define linkonce_odr dso_local noundef zeroext i1 @_Zeq3EqAS_(i32 %x.coerce, i32 %y.coerce) #4 comdat { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %x = alloca %struct.A, align 4 -// CHECK:STDOUT: %y = alloca %struct.A, align 4 -// CHECK:STDOUT: %coerce.dive = getelementptr inbounds nuw %struct.A, ptr %x, i32 0, i32 0 +// CHECK:STDOUT: %x = alloca %struct.EqA, align 4 +// CHECK:STDOUT: %y = alloca %struct.EqA, align 4 +// CHECK:STDOUT: %coerce.dive = getelementptr inbounds nuw %struct.EqA, ptr %x, i32 0, i32 0 // CHECK:STDOUT: store i32 %x.coerce, ptr %coerce.dive, align 4 -// CHECK:STDOUT: %coerce.dive1 = getelementptr inbounds nuw %struct.A, ptr %y, i32 0, i32 0 +// CHECK:STDOUT: %coerce.dive1 = getelementptr inbounds nuw %struct.EqA, ptr %y, i32 0, i32 0 // CHECK:STDOUT: store i32 %y.coerce, ptr %coerce.dive1, align 4 -// CHECK:STDOUT: %value = getelementptr inbounds nuw %struct.A, ptr %x, i32 0, i32 0 +// CHECK:STDOUT: %value = getelementptr inbounds nuw %struct.EqA, ptr %x, i32 0, i32 0 // CHECK:STDOUT: %0 = load i32, ptr %value, align 4, !tbaa !49 -// CHECK:STDOUT: %value2 = getelementptr inbounds nuw %struct.A, ptr %y, i32 0, i32 0 +// CHECK:STDOUT: %value2 = getelementptr inbounds nuw %struct.EqA, ptr %y, i32 0, i32 0 // CHECK:STDOUT: %1 = load i32, ptr %value2, align 4, !tbaa !49 // CHECK:STDOUT: %cmp = icmp eq i32 %0, %1 // CHECK:STDOUT: ret i1 %cmp @@ -197,23 +197,23 @@ fn Driver(x: Cpp.A, y: Cpp.A) { // CHECK:STDOUT: declare void @llvm.memcpy.p0.p0.i64(ptr noalias writeonly captures(none), ptr noalias readonly captures(none), i64, i1 immarg) #3 // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: mustprogress nounwind uwtable -// CHECK:STDOUT: define linkonce_odr dso_local noundef zeroext i1 @_Zne1AS_(i32 %x.coerce, i32 %y.coerce) #4 comdat { +// CHECK:STDOUT: define linkonce_odr dso_local noundef zeroext i1 @_Zne3EqAS_(i32 %x.coerce, i32 %y.coerce) #4 comdat { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %x = alloca %struct.A, align 4 -// CHECK:STDOUT: %y = alloca %struct.A, align 4 -// CHECK:STDOUT: %agg.tmp = alloca %struct.A, align 4 -// CHECK:STDOUT: %agg.tmp2 = alloca %struct.A, align 4 -// CHECK:STDOUT: %coerce.dive = getelementptr inbounds nuw %struct.A, ptr %x, i32 0, i32 0 +// CHECK:STDOUT: %x = alloca %struct.EqA, align 4 +// CHECK:STDOUT: %y = alloca %struct.EqA, align 4 +// CHECK:STDOUT: %agg.tmp = alloca %struct.EqA, align 4 +// CHECK:STDOUT: %agg.tmp2 = alloca %struct.EqA, align 4 +// CHECK:STDOUT: %coerce.dive = getelementptr inbounds nuw %struct.EqA, ptr %x, i32 0, i32 0 // CHECK:STDOUT: store i32 %x.coerce, ptr %coerce.dive, align 4 -// CHECK:STDOUT: %coerce.dive1 = getelementptr inbounds nuw %struct.A, ptr %y, i32 0, i32 0 +// CHECK:STDOUT: %coerce.dive1 = getelementptr inbounds nuw %struct.EqA, ptr %y, i32 0, i32 0 // CHECK:STDOUT: store i32 %y.coerce, ptr %coerce.dive1, align 4 // CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %agg.tmp, ptr align 4 %x, i64 4, i1 false), !tbaa.struct !26 // CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %agg.tmp2, ptr align 4 %y, i64 4, i1 false), !tbaa.struct !26 -// CHECK:STDOUT: %coerce.dive3 = getelementptr inbounds nuw %struct.A, ptr %agg.tmp, i32 0, i32 0 +// CHECK:STDOUT: %coerce.dive3 = getelementptr inbounds nuw %struct.EqA, ptr %agg.tmp, i32 0, i32 0 // CHECK:STDOUT: %0 = load i32, ptr %coerce.dive3, align 4 -// CHECK:STDOUT: %coerce.dive4 = getelementptr inbounds nuw %struct.A, ptr %agg.tmp2, i32 0, i32 0 +// CHECK:STDOUT: %coerce.dive4 = getelementptr inbounds nuw %struct.EqA, ptr %agg.tmp2, i32 0, i32 0 // CHECK:STDOUT: %1 = load i32, ptr %coerce.dive4, align 4 -// CHECK:STDOUT: %call = call noundef zeroext i1 @_Zeq1AS_(i32 %0, i32 %1) +// CHECK:STDOUT: %call = call noundef zeroext i1 @_Zeq3EqAS_(i32 %0, i32 %1) // CHECK:STDOUT: %lnot = xor i1 %call, true // CHECK:STDOUT: ret i1 %lnot // CHECK:STDOUT: } @@ -254,7 +254,7 @@ fn Driver(x: Cpp.A, y: Cpp.A) { // CHECK:STDOUT: !19 = !DILocation(line: 24, column: 3, scope: !12) // CHECK:STDOUT: !20 = !DILocation(line: 23, column: 1, scope: !12) // CHECK:STDOUT: !21 = !{!22, !22, i64 0} -// CHECK:STDOUT: !22 = !{!"p1 _ZTS1A", !23, i64 0} +// CHECK:STDOUT: !22 = !{!"p1 _ZTS3EqA", !23, i64 0} // CHECK:STDOUT: !23 = !{!"any pointer", !10, i64 0} // CHECK:STDOUT: !24 = !{!25, !25, i64 0} // CHECK:STDOUT: !25 = !{!"p1 bool", !23, i64 0} @@ -262,19 +262,19 @@ fn Driver(x: Cpp.A, y: Cpp.A) { // CHECK:STDOUT: !27 = !{!9, !9, i64 0} // CHECK:STDOUT: !28 = !{!29, !29, i64 0} // CHECK:STDOUT: !29 = !{!"bool", !10, i64 0} -// CHECK:STDOUT: !30 = distinct !DISubprogram(name: "Equal", linkageName: "_CEqual:thunk:EqWith.ffb401eeee8c4872.Core:Cpp", scope: null, file: !1, line: 8, type: !31, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !33) +// CHECK:STDOUT: !30 = distinct !DISubprogram(name: "Equal", linkageName: "_CEqual:thunk:EqWith.c41e21bae407dec8.Core:Cpp", scope: null, file: !1, line: 8, type: !31, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !33) // CHECK:STDOUT: !31 = !DISubroutineType(types: !32) // CHECK:STDOUT: !32 = !{!15, !15, !15} // CHECK:STDOUT: !33 = !{!34, !35} // CHECK:STDOUT: !34 = !DILocalVariable(arg: 1, scope: !30, type: !15) // CHECK:STDOUT: !35 = !DILocalVariable(arg: 2, scope: !30, type: !15) // CHECK:STDOUT: !36 = !DILocation(line: 8, column: 15, scope: !30) -// CHECK:STDOUT: !37 = distinct !DISubprogram(name: "NotEqual", linkageName: "_CNotEqual:thunk:EqWith.ffb401eeee8c4872.Core:Cpp", scope: null, file: !1, line: 12, type: !31, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !38) +// CHECK:STDOUT: !37 = distinct !DISubprogram(name: "NotEqual", linkageName: "_CNotEqual:thunk:EqWith.c41e21bae407dec8.Core:Cpp", scope: null, file: !1, line: 12, type: !31, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !38) // CHECK:STDOUT: !38 = !{!39, !40} // CHECK:STDOUT: !39 = !DILocalVariable(arg: 1, scope: !37, type: !15) // CHECK:STDOUT: !40 = !DILocalVariable(arg: 2, scope: !37, type: !15) // CHECK:STDOUT: !41 = !DILocation(line: 12, column: 15, scope: !37) -// CHECK:STDOUT: !42 = distinct !DISubprogram(name: "CheckEqWith", linkageName: "_CCheckEqWith.Main.bdef5a2ed02e32a1", scope: null, file: !1, line: 18, type: !13, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !43) +// CHECK:STDOUT: !42 = distinct !DISubprogram(name: "CheckEqWith", linkageName: "_CCheckEqWith.Main.5d19350ce19a6fbd", scope: null, file: !1, line: 18, type: !13, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !43) // CHECK:STDOUT: !43 = !{!44, !45} // CHECK:STDOUT: !44 = !DILocalVariable(arg: 1, scope: !42, type: !15) // CHECK:STDOUT: !45 = !DILocalVariable(arg: 2, scope: !42, type: !15) @@ -282,7 +282,7 @@ fn Driver(x: Cpp.A, y: Cpp.A) { // CHECK:STDOUT: !47 = !DILocation(line: 20, column: 3, scope: !42) // CHECK:STDOUT: !48 = !DILocation(line: 18, column: 1, scope: !42) // CHECK:STDOUT: !49 = !{!50, !9, i64 0} -// CHECK:STDOUT: !50 = !{!"_ZTS1A", !9, i64 0} +// CHECK:STDOUT: !50 = !{!"_ZTS3EqA", !9, i64 0} // CHECK:STDOUT: // CHECK:STDOUT: ; --- // CHECK:STDOUT: ; ModuleID = 'ordered_with.carbon' @@ -290,31 +290,31 @@ fn Driver(x: Cpp.A, y: Cpp.A) { // CHECK:STDOUT: target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" // CHECK:STDOUT: target triple = "x86_64-unknown-linux-gnu" // CHECK:STDOUT: -// CHECK:STDOUT: %struct.A.4 = type { i32 } +// CHECK:STDOUT: %struct.OrderedA = type { i32 } // CHECK:STDOUT: -// CHECK:STDOUT: $_Zlt1AS_ = comdat any +// CHECK:STDOUT: $_Zlt8OrderedAS_ = comdat any // CHECK:STDOUT: -// CHECK:STDOUT: $_Zle1AS_ = comdat any +// CHECK:STDOUT: $_Zle8OrderedAS_ = comdat any // CHECK:STDOUT: -// CHECK:STDOUT: $_Zgt1AS_ = comdat any +// CHECK:STDOUT: $_Zgt8OrderedAS_ = comdat any // CHECK:STDOUT: -// CHECK:STDOUT: $_Zge1AS_ = comdat any +// CHECK:STDOUT: $_Zge8OrderedAS_ = comdat any // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_CDriver.Main(ptr %x, ptr %y) #0 !dbg !12 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @_CCheckOrderedWith.Main.c49adfa90bd18905(ptr %x, ptr %y), !dbg !19 +// CHECK:STDOUT: call void @_CCheckOrderedWith.Main.f3d1df67aae0c1db(ptr %x, ptr %y), !dbg !19 // CHECK:STDOUT: ret void, !dbg !20 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress uwtable -// CHECK:STDOUT: define internal void @_Zlt1AS_.carbon_thunk.__(ptr noundef %x, ptr noundef %y, ptr noundef %return) #1 { +// CHECK:STDOUT: define internal void @_Zlt8OrderedAS_.carbon_thunk.__(ptr noundef %x, ptr noundef %y, ptr noundef %return) #1 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %x.addr = alloca ptr, align 8 // CHECK:STDOUT: %y.addr = alloca ptr, align 8 // CHECK:STDOUT: %return.addr = alloca ptr, align 8 -// CHECK:STDOUT: %agg.tmp = alloca %struct.A.4, align 4 -// CHECK:STDOUT: %agg.tmp1 = alloca %struct.A.4, align 4 +// CHECK:STDOUT: %agg.tmp = alloca %struct.OrderedA, align 4 +// CHECK:STDOUT: %agg.tmp1 = alloca %struct.OrderedA, align 4 // CHECK:STDOUT: store ptr %x, ptr %x.addr, align 8, !tbaa !21 // CHECK:STDOUT: store ptr %y, ptr %y.addr, align 8, !tbaa !21 // CHECK:STDOUT: store ptr %return, ptr %return.addr, align 8, !tbaa !24 @@ -323,24 +323,24 @@ fn Driver(x: Cpp.A, y: Cpp.A) { // CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %agg.tmp, ptr align 4 %1, i64 4, i1 false), !tbaa.struct !26 // CHECK:STDOUT: %2 = load ptr, ptr %y.addr, align 8, !tbaa !21 // CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %agg.tmp1, ptr align 4 %2, i64 4, i1 false), !tbaa.struct !26 -// CHECK:STDOUT: %coerce.dive = getelementptr inbounds nuw %struct.A.4, ptr %agg.tmp, i32 0, i32 0 +// CHECK:STDOUT: %coerce.dive = getelementptr inbounds nuw %struct.OrderedA, ptr %agg.tmp, i32 0, i32 0 // CHECK:STDOUT: %3 = load i32, ptr %coerce.dive, align 4 -// CHECK:STDOUT: %coerce.dive2 = getelementptr inbounds nuw %struct.A.4, ptr %agg.tmp1, i32 0, i32 0 +// CHECK:STDOUT: %coerce.dive2 = getelementptr inbounds nuw %struct.OrderedA, ptr %agg.tmp1, i32 0, i32 0 // CHECK:STDOUT: %4 = load i32, ptr %coerce.dive2, align 4 -// CHECK:STDOUT: %call = call noundef zeroext i1 @_Zlt1AS_(i32 %3, i32 %4) +// CHECK:STDOUT: %call = call noundef zeroext i1 @_Zlt8OrderedAS_(i32 %3, i32 %4) // CHECK:STDOUT: %storedv = zext i1 %call to i8 // CHECK:STDOUT: store i8 %storedv, ptr %0, align 1, !tbaa !28 // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress uwtable -// CHECK:STDOUT: define internal void @_Zle1AS_.carbon_thunk.__(ptr noundef %x, ptr noundef %y, ptr noundef %return) #1 { +// CHECK:STDOUT: define internal void @_Zle8OrderedAS_.carbon_thunk.__(ptr noundef %x, ptr noundef %y, ptr noundef %return) #1 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %x.addr = alloca ptr, align 8 // CHECK:STDOUT: %y.addr = alloca ptr, align 8 // CHECK:STDOUT: %return.addr = alloca ptr, align 8 -// CHECK:STDOUT: %agg.tmp = alloca %struct.A.4, align 4 -// CHECK:STDOUT: %agg.tmp1 = alloca %struct.A.4, align 4 +// CHECK:STDOUT: %agg.tmp = alloca %struct.OrderedA, align 4 +// CHECK:STDOUT: %agg.tmp1 = alloca %struct.OrderedA, align 4 // CHECK:STDOUT: store ptr %x, ptr %x.addr, align 8, !tbaa !21 // CHECK:STDOUT: store ptr %y, ptr %y.addr, align 8, !tbaa !21 // CHECK:STDOUT: store ptr %return, ptr %return.addr, align 8, !tbaa !24 @@ -349,24 +349,24 @@ fn Driver(x: Cpp.A, y: Cpp.A) { // CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %agg.tmp, ptr align 4 %1, i64 4, i1 false), !tbaa.struct !26 // CHECK:STDOUT: %2 = load ptr, ptr %y.addr, align 8, !tbaa !21 // CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %agg.tmp1, ptr align 4 %2, i64 4, i1 false), !tbaa.struct !26 -// CHECK:STDOUT: %coerce.dive = getelementptr inbounds nuw %struct.A.4, ptr %agg.tmp, i32 0, i32 0 +// CHECK:STDOUT: %coerce.dive = getelementptr inbounds nuw %struct.OrderedA, ptr %agg.tmp, i32 0, i32 0 // CHECK:STDOUT: %3 = load i32, ptr %coerce.dive, align 4 -// CHECK:STDOUT: %coerce.dive2 = getelementptr inbounds nuw %struct.A.4, ptr %agg.tmp1, i32 0, i32 0 +// CHECK:STDOUT: %coerce.dive2 = getelementptr inbounds nuw %struct.OrderedA, ptr %agg.tmp1, i32 0, i32 0 // CHECK:STDOUT: %4 = load i32, ptr %coerce.dive2, align 4 -// CHECK:STDOUT: %call = call noundef zeroext i1 @_Zle1AS_(i32 %3, i32 %4) +// CHECK:STDOUT: %call = call noundef zeroext i1 @_Zle8OrderedAS_(i32 %3, i32 %4) // CHECK:STDOUT: %storedv = zext i1 %call to i8 // CHECK:STDOUT: store i8 %storedv, ptr %0, align 1, !tbaa !28 // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress uwtable -// CHECK:STDOUT: define internal void @_Zgt1AS_.carbon_thunk.__(ptr noundef %x, ptr noundef %y, ptr noundef %return) #1 { +// CHECK:STDOUT: define internal void @_Zgt8OrderedAS_.carbon_thunk.__(ptr noundef %x, ptr noundef %y, ptr noundef %return) #1 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %x.addr = alloca ptr, align 8 // CHECK:STDOUT: %y.addr = alloca ptr, align 8 // CHECK:STDOUT: %return.addr = alloca ptr, align 8 -// CHECK:STDOUT: %agg.tmp = alloca %struct.A.4, align 4 -// CHECK:STDOUT: %agg.tmp1 = alloca %struct.A.4, align 4 +// CHECK:STDOUT: %agg.tmp = alloca %struct.OrderedA, align 4 +// CHECK:STDOUT: %agg.tmp1 = alloca %struct.OrderedA, align 4 // CHECK:STDOUT: store ptr %x, ptr %x.addr, align 8, !tbaa !21 // CHECK:STDOUT: store ptr %y, ptr %y.addr, align 8, !tbaa !21 // CHECK:STDOUT: store ptr %return, ptr %return.addr, align 8, !tbaa !24 @@ -375,24 +375,24 @@ fn Driver(x: Cpp.A, y: Cpp.A) { // CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %agg.tmp, ptr align 4 %1, i64 4, i1 false), !tbaa.struct !26 // CHECK:STDOUT: %2 = load ptr, ptr %y.addr, align 8, !tbaa !21 // CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %agg.tmp1, ptr align 4 %2, i64 4, i1 false), !tbaa.struct !26 -// CHECK:STDOUT: %coerce.dive = getelementptr inbounds nuw %struct.A.4, ptr %agg.tmp, i32 0, i32 0 +// CHECK:STDOUT: %coerce.dive = getelementptr inbounds nuw %struct.OrderedA, ptr %agg.tmp, i32 0, i32 0 // CHECK:STDOUT: %3 = load i32, ptr %coerce.dive, align 4 -// CHECK:STDOUT: %coerce.dive2 = getelementptr inbounds nuw %struct.A.4, ptr %agg.tmp1, i32 0, i32 0 +// CHECK:STDOUT: %coerce.dive2 = getelementptr inbounds nuw %struct.OrderedA, ptr %agg.tmp1, i32 0, i32 0 // CHECK:STDOUT: %4 = load i32, ptr %coerce.dive2, align 4 -// CHECK:STDOUT: %call = call noundef zeroext i1 @_Zgt1AS_(i32 %3, i32 %4) +// CHECK:STDOUT: %call = call noundef zeroext i1 @_Zgt8OrderedAS_(i32 %3, i32 %4) // CHECK:STDOUT: %storedv = zext i1 %call to i8 // CHECK:STDOUT: store i8 %storedv, ptr %0, align 1, !tbaa !28 // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress uwtable -// CHECK:STDOUT: define internal void @_Zge1AS_.carbon_thunk.__(ptr noundef %x, ptr noundef %y, ptr noundef %return) #1 { +// CHECK:STDOUT: define internal void @_Zge8OrderedAS_.carbon_thunk.__(ptr noundef %x, ptr noundef %y, ptr noundef %return) #1 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %x.addr = alloca ptr, align 8 // CHECK:STDOUT: %y.addr = alloca ptr, align 8 // CHECK:STDOUT: %return.addr = alloca ptr, align 8 -// CHECK:STDOUT: %agg.tmp = alloca %struct.A.4, align 4 -// CHECK:STDOUT: %agg.tmp1 = alloca %struct.A.4, align 4 +// CHECK:STDOUT: %agg.tmp = alloca %struct.OrderedA, align 4 +// CHECK:STDOUT: %agg.tmp1 = alloca %struct.OrderedA, align 4 // CHECK:STDOUT: store ptr %x, ptr %x.addr, align 8, !tbaa !21 // CHECK:STDOUT: store ptr %y, ptr %y.addr, align 8, !tbaa !21 // CHECK:STDOUT: store ptr %return, ptr %return.addr, align 8, !tbaa !24 @@ -401,63 +401,63 @@ fn Driver(x: Cpp.A, y: Cpp.A) { // CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %agg.tmp, ptr align 4 %1, i64 4, i1 false), !tbaa.struct !26 // CHECK:STDOUT: %2 = load ptr, ptr %y.addr, align 8, !tbaa !21 // CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %agg.tmp1, ptr align 4 %2, i64 4, i1 false), !tbaa.struct !26 -// CHECK:STDOUT: %coerce.dive = getelementptr inbounds nuw %struct.A.4, ptr %agg.tmp, i32 0, i32 0 +// CHECK:STDOUT: %coerce.dive = getelementptr inbounds nuw %struct.OrderedA, ptr %agg.tmp, i32 0, i32 0 // CHECK:STDOUT: %3 = load i32, ptr %coerce.dive, align 4 -// CHECK:STDOUT: %coerce.dive2 = getelementptr inbounds nuw %struct.A.4, ptr %agg.tmp1, i32 0, i32 0 +// CHECK:STDOUT: %coerce.dive2 = getelementptr inbounds nuw %struct.OrderedA, ptr %agg.tmp1, i32 0, i32 0 // CHECK:STDOUT: %4 = load i32, ptr %coerce.dive2, align 4 -// CHECK:STDOUT: %call = call noundef zeroext i1 @_Zge1AS_(i32 %3, i32 %4) +// CHECK:STDOUT: %call = call noundef zeroext i1 @_Zge8OrderedAS_(i32 %3, i32 %4) // CHECK:STDOUT: %storedv = zext i1 %call to i8 // CHECK:STDOUT: store i8 %storedv, ptr %0, align 1, !tbaa !28 // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline nounwind -// CHECK:STDOUT: define weak_odr i1 @"_CLess:thunk:OrderedWith.92c0df05bd55f97a.Core:Cpp"(ptr %self, ptr %other) #2 !dbg !30 { +// CHECK:STDOUT: define weak_odr i1 @"_CLess:thunk:OrderedWith.f150fc1157a5293b.Core:Cpp"(ptr %self, ptr %other) #2 !dbg !30 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.6.temp = alloca i1, align 1, !dbg !36 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.6.temp), !dbg !36 -// CHECK:STDOUT: call void @_Zlt1AS_.carbon_thunk.__(ptr %self, ptr %other, ptr %.6.temp), !dbg !36 +// CHECK:STDOUT: call void @_Zlt8OrderedAS_.carbon_thunk.__(ptr %self, ptr %other, ptr %.6.temp), !dbg !36 // CHECK:STDOUT: %0 = load i1, ptr %.6.temp, align 1, !dbg !36 // CHECK:STDOUT: ret i1 %0, !dbg !36 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline nounwind -// CHECK:STDOUT: define weak_odr i1 @"_CLessOrEquivalent:thunk:OrderedWith.92c0df05bd55f97a.Core:Cpp"(ptr %self, ptr %other) #2 !dbg !37 { +// CHECK:STDOUT: define weak_odr i1 @"_CLessOrEquivalent:thunk:OrderedWith.f150fc1157a5293b.Core:Cpp"(ptr %self, ptr %other) #2 !dbg !37 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.6.temp = alloca i1, align 1, !dbg !41 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.6.temp), !dbg !41 -// CHECK:STDOUT: call void @_Zle1AS_.carbon_thunk.__(ptr %self, ptr %other, ptr %.6.temp), !dbg !41 +// CHECK:STDOUT: call void @_Zle8OrderedAS_.carbon_thunk.__(ptr %self, ptr %other, ptr %.6.temp), !dbg !41 // CHECK:STDOUT: %0 = load i1, ptr %.6.temp, align 1, !dbg !41 // CHECK:STDOUT: ret i1 %0, !dbg !41 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline nounwind -// CHECK:STDOUT: define weak_odr i1 @"_CGreater:thunk:OrderedWith.92c0df05bd55f97a.Core:Cpp"(ptr %self, ptr %other) #2 !dbg !42 { +// CHECK:STDOUT: define weak_odr i1 @"_CGreater:thunk:OrderedWith.f150fc1157a5293b.Core:Cpp"(ptr %self, ptr %other) #2 !dbg !42 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.6.temp = alloca i1, align 1, !dbg !46 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.6.temp), !dbg !46 -// CHECK:STDOUT: call void @_Zgt1AS_.carbon_thunk.__(ptr %self, ptr %other, ptr %.6.temp), !dbg !46 +// CHECK:STDOUT: call void @_Zgt8OrderedAS_.carbon_thunk.__(ptr %self, ptr %other, ptr %.6.temp), !dbg !46 // CHECK:STDOUT: %0 = load i1, ptr %.6.temp, align 1, !dbg !46 // CHECK:STDOUT: ret i1 %0, !dbg !46 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline nounwind -// CHECK:STDOUT: define weak_odr i1 @"_CGreaterOrEquivalent:thunk:OrderedWith.92c0df05bd55f97a.Core:Cpp"(ptr %self, ptr %other) #2 !dbg !47 { +// CHECK:STDOUT: define weak_odr i1 @"_CGreaterOrEquivalent:thunk:OrderedWith.f150fc1157a5293b.Core:Cpp"(ptr %self, ptr %other) #2 !dbg !47 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.6.temp = alloca i1, align 1, !dbg !51 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.6.temp), !dbg !51 -// CHECK:STDOUT: call void @_Zge1AS_.carbon_thunk.__(ptr %self, ptr %other, ptr %.6.temp), !dbg !51 +// CHECK:STDOUT: call void @_Zge8OrderedAS_.carbon_thunk.__(ptr %self, ptr %other, ptr %.6.temp), !dbg !51 // CHECK:STDOUT: %0 = load i1, ptr %.6.temp, align 1, !dbg !51 // CHECK:STDOUT: ret i1 %0, !dbg !51 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define linkonce_odr void @_CCheckOrderedWith.Main.c49adfa90bd18905(ptr %x, ptr %y) #0 !dbg !52 { +// CHECK:STDOUT: define linkonce_odr void @_CCheckOrderedWith.Main.f3d1df67aae0c1db(ptr %x, ptr %y) #0 !dbg !52 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %OrderedWith.WithSelf.Less.call = call i1 @"_CLess:thunk:OrderedWith.92c0df05bd55f97a.Core:Cpp"(ptr %x, ptr %y), !dbg !56 -// CHECK:STDOUT: %OrderedWith.WithSelf.Greater.call = call i1 @"_CGreater:thunk:OrderedWith.92c0df05bd55f97a.Core:Cpp"(ptr %x, ptr %y), !dbg !57 -// CHECK:STDOUT: %OrderedWith.WithSelf.LessOrEquivalent.call = call i1 @"_CLessOrEquivalent:thunk:OrderedWith.92c0df05bd55f97a.Core:Cpp"(ptr %x, ptr %y), !dbg !58 -// CHECK:STDOUT: %OrderedWith.WithSelf.GreaterOrEquivalent.call = call i1 @"_CGreaterOrEquivalent:thunk:OrderedWith.92c0df05bd55f97a.Core:Cpp"(ptr %x, ptr %y), !dbg !59 +// CHECK:STDOUT: %OrderedWith.WithSelf.Less.call = call i1 @"_CLess:thunk:OrderedWith.f150fc1157a5293b.Core:Cpp"(ptr %x, ptr %y), !dbg !56 +// CHECK:STDOUT: %OrderedWith.WithSelf.Greater.call = call i1 @"_CGreater:thunk:OrderedWith.f150fc1157a5293b.Core:Cpp"(ptr %x, ptr %y), !dbg !57 +// CHECK:STDOUT: %OrderedWith.WithSelf.LessOrEquivalent.call = call i1 @"_CLessOrEquivalent:thunk:OrderedWith.f150fc1157a5293b.Core:Cpp"(ptr %x, ptr %y), !dbg !58 +// CHECK:STDOUT: %OrderedWith.WithSelf.GreaterOrEquivalent.call = call i1 @"_CGreaterOrEquivalent:thunk:OrderedWith.f150fc1157a5293b.Core:Cpp"(ptr %x, ptr %y), !dbg !59 // CHECK:STDOUT: ret void, !dbg !60 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -465,17 +465,17 @@ fn Driver(x: Cpp.A, y: Cpp.A) { // CHECK:STDOUT: declare void @llvm.lifetime.start.p0(ptr captures(none)) #3 // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: mustprogress nounwind uwtable -// CHECK:STDOUT: define linkonce_odr dso_local noundef zeroext i1 @_Zlt1AS_(i32 %x.coerce, i32 %y.coerce) #4 comdat { +// CHECK:STDOUT: define linkonce_odr dso_local noundef zeroext i1 @_Zlt8OrderedAS_(i32 %x.coerce, i32 %y.coerce) #4 comdat { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %x = alloca %struct.A.4, align 4 -// CHECK:STDOUT: %y = alloca %struct.A.4, align 4 -// CHECK:STDOUT: %coerce.dive = getelementptr inbounds nuw %struct.A.4, ptr %x, i32 0, i32 0 +// CHECK:STDOUT: %x = alloca %struct.OrderedA, align 4 +// CHECK:STDOUT: %y = alloca %struct.OrderedA, align 4 +// CHECK:STDOUT: %coerce.dive = getelementptr inbounds nuw %struct.OrderedA, ptr %x, i32 0, i32 0 // CHECK:STDOUT: store i32 %x.coerce, ptr %coerce.dive, align 4 -// CHECK:STDOUT: %coerce.dive1 = getelementptr inbounds nuw %struct.A.4, ptr %y, i32 0, i32 0 +// CHECK:STDOUT: %coerce.dive1 = getelementptr inbounds nuw %struct.OrderedA, ptr %y, i32 0, i32 0 // CHECK:STDOUT: store i32 %y.coerce, ptr %coerce.dive1, align 4 -// CHECK:STDOUT: %value = getelementptr inbounds nuw %struct.A.4, ptr %x, i32 0, i32 0 +// CHECK:STDOUT: %value = getelementptr inbounds nuw %struct.OrderedA, ptr %x, i32 0, i32 0 // CHECK:STDOUT: %0 = load i32, ptr %value, align 4, !tbaa !61 -// CHECK:STDOUT: %value2 = getelementptr inbounds nuw %struct.A.4, ptr %y, i32 0, i32 0 +// CHECK:STDOUT: %value2 = getelementptr inbounds nuw %struct.OrderedA, ptr %y, i32 0, i32 0 // CHECK:STDOUT: %1 = load i32, ptr %value2, align 4, !tbaa !61 // CHECK:STDOUT: %cmp = icmp slt i32 %0, %1 // CHECK:STDOUT: ret i1 %cmp @@ -485,66 +485,66 @@ fn Driver(x: Cpp.A, y: Cpp.A) { // CHECK:STDOUT: declare void @llvm.memcpy.p0.p0.i64(ptr noalias writeonly captures(none), ptr noalias readonly captures(none), i64, i1 immarg) #3 // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: mustprogress nounwind uwtable -// CHECK:STDOUT: define linkonce_odr dso_local noundef zeroext i1 @_Zle1AS_(i32 %x.coerce, i32 %y.coerce) #4 comdat { +// CHECK:STDOUT: define linkonce_odr dso_local noundef zeroext i1 @_Zle8OrderedAS_(i32 %x.coerce, i32 %y.coerce) #4 comdat { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %x = alloca %struct.A.4, align 4 -// CHECK:STDOUT: %y = alloca %struct.A.4, align 4 -// CHECK:STDOUT: %agg.tmp = alloca %struct.A.4, align 4 -// CHECK:STDOUT: %agg.tmp2 = alloca %struct.A.4, align 4 -// CHECK:STDOUT: %coerce.dive = getelementptr inbounds nuw %struct.A.4, ptr %x, i32 0, i32 0 +// CHECK:STDOUT: %x = alloca %struct.OrderedA, align 4 +// CHECK:STDOUT: %y = alloca %struct.OrderedA, align 4 +// CHECK:STDOUT: %agg.tmp = alloca %struct.OrderedA, align 4 +// CHECK:STDOUT: %agg.tmp2 = alloca %struct.OrderedA, align 4 +// CHECK:STDOUT: %coerce.dive = getelementptr inbounds nuw %struct.OrderedA, ptr %x, i32 0, i32 0 // CHECK:STDOUT: store i32 %x.coerce, ptr %coerce.dive, align 4 -// CHECK:STDOUT: %coerce.dive1 = getelementptr inbounds nuw %struct.A.4, ptr %y, i32 0, i32 0 +// CHECK:STDOUT: %coerce.dive1 = getelementptr inbounds nuw %struct.OrderedA, ptr %y, i32 0, i32 0 // CHECK:STDOUT: store i32 %y.coerce, ptr %coerce.dive1, align 4 // CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %agg.tmp, ptr align 4 %y, i64 4, i1 false), !tbaa.struct !26 // CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %agg.tmp2, ptr align 4 %x, i64 4, i1 false), !tbaa.struct !26 -// CHECK:STDOUT: %coerce.dive3 = getelementptr inbounds nuw %struct.A.4, ptr %agg.tmp, i32 0, i32 0 +// CHECK:STDOUT: %coerce.dive3 = getelementptr inbounds nuw %struct.OrderedA, ptr %agg.tmp, i32 0, i32 0 // CHECK:STDOUT: %0 = load i32, ptr %coerce.dive3, align 4 -// CHECK:STDOUT: %coerce.dive4 = getelementptr inbounds nuw %struct.A.4, ptr %agg.tmp2, i32 0, i32 0 +// CHECK:STDOUT: %coerce.dive4 = getelementptr inbounds nuw %struct.OrderedA, ptr %agg.tmp2, i32 0, i32 0 // CHECK:STDOUT: %1 = load i32, ptr %coerce.dive4, align 4 -// CHECK:STDOUT: %call = call noundef zeroext i1 @_Zlt1AS_(i32 %0, i32 %1) +// CHECK:STDOUT: %call = call noundef zeroext i1 @_Zlt8OrderedAS_(i32 %0, i32 %1) // CHECK:STDOUT: %lnot = xor i1 %call, true // CHECK:STDOUT: ret i1 %lnot // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: mustprogress nounwind uwtable -// CHECK:STDOUT: define linkonce_odr dso_local noundef zeroext i1 @_Zgt1AS_(i32 %x.coerce, i32 %y.coerce) #4 comdat { +// CHECK:STDOUT: define linkonce_odr dso_local noundef zeroext i1 @_Zgt8OrderedAS_(i32 %x.coerce, i32 %y.coerce) #4 comdat { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %x = alloca %struct.A.4, align 4 -// CHECK:STDOUT: %y = alloca %struct.A.4, align 4 -// CHECK:STDOUT: %agg.tmp = alloca %struct.A.4, align 4 -// CHECK:STDOUT: %agg.tmp2 = alloca %struct.A.4, align 4 -// CHECK:STDOUT: %coerce.dive = getelementptr inbounds nuw %struct.A.4, ptr %x, i32 0, i32 0 +// CHECK:STDOUT: %x = alloca %struct.OrderedA, align 4 +// CHECK:STDOUT: %y = alloca %struct.OrderedA, align 4 +// CHECK:STDOUT: %agg.tmp = alloca %struct.OrderedA, align 4 +// CHECK:STDOUT: %agg.tmp2 = alloca %struct.OrderedA, align 4 +// CHECK:STDOUT: %coerce.dive = getelementptr inbounds nuw %struct.OrderedA, ptr %x, i32 0, i32 0 // CHECK:STDOUT: store i32 %x.coerce, ptr %coerce.dive, align 4 -// CHECK:STDOUT: %coerce.dive1 = getelementptr inbounds nuw %struct.A.4, ptr %y, i32 0, i32 0 +// CHECK:STDOUT: %coerce.dive1 = getelementptr inbounds nuw %struct.OrderedA, ptr %y, i32 0, i32 0 // CHECK:STDOUT: store i32 %y.coerce, ptr %coerce.dive1, align 4 // CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %agg.tmp, ptr align 4 %y, i64 4, i1 false), !tbaa.struct !26 // CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %agg.tmp2, ptr align 4 %x, i64 4, i1 false), !tbaa.struct !26 -// CHECK:STDOUT: %coerce.dive3 = getelementptr inbounds nuw %struct.A.4, ptr %agg.tmp, i32 0, i32 0 +// CHECK:STDOUT: %coerce.dive3 = getelementptr inbounds nuw %struct.OrderedA, ptr %agg.tmp, i32 0, i32 0 // CHECK:STDOUT: %0 = load i32, ptr %coerce.dive3, align 4 -// CHECK:STDOUT: %coerce.dive4 = getelementptr inbounds nuw %struct.A.4, ptr %agg.tmp2, i32 0, i32 0 +// CHECK:STDOUT: %coerce.dive4 = getelementptr inbounds nuw %struct.OrderedA, ptr %agg.tmp2, i32 0, i32 0 // CHECK:STDOUT: %1 = load i32, ptr %coerce.dive4, align 4 -// CHECK:STDOUT: %call = call noundef zeroext i1 @_Zlt1AS_(i32 %0, i32 %1) +// CHECK:STDOUT: %call = call noundef zeroext i1 @_Zlt8OrderedAS_(i32 %0, i32 %1) // CHECK:STDOUT: ret i1 %call // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: mustprogress nounwind uwtable -// CHECK:STDOUT: define linkonce_odr dso_local noundef zeroext i1 @_Zge1AS_(i32 %x.coerce, i32 %y.coerce) #4 comdat { +// CHECK:STDOUT: define linkonce_odr dso_local noundef zeroext i1 @_Zge8OrderedAS_(i32 %x.coerce, i32 %y.coerce) #4 comdat { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %x = alloca %struct.A.4, align 4 -// CHECK:STDOUT: %y = alloca %struct.A.4, align 4 -// CHECK:STDOUT: %agg.tmp = alloca %struct.A.4, align 4 -// CHECK:STDOUT: %agg.tmp2 = alloca %struct.A.4, align 4 -// CHECK:STDOUT: %coerce.dive = getelementptr inbounds nuw %struct.A.4, ptr %x, i32 0, i32 0 +// CHECK:STDOUT: %x = alloca %struct.OrderedA, align 4 +// CHECK:STDOUT: %y = alloca %struct.OrderedA, align 4 +// CHECK:STDOUT: %agg.tmp = alloca %struct.OrderedA, align 4 +// CHECK:STDOUT: %agg.tmp2 = alloca %struct.OrderedA, align 4 +// CHECK:STDOUT: %coerce.dive = getelementptr inbounds nuw %struct.OrderedA, ptr %x, i32 0, i32 0 // CHECK:STDOUT: store i32 %x.coerce, ptr %coerce.dive, align 4 -// CHECK:STDOUT: %coerce.dive1 = getelementptr inbounds nuw %struct.A.4, ptr %y, i32 0, i32 0 +// CHECK:STDOUT: %coerce.dive1 = getelementptr inbounds nuw %struct.OrderedA, ptr %y, i32 0, i32 0 // CHECK:STDOUT: store i32 %y.coerce, ptr %coerce.dive1, align 4 // CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %agg.tmp, ptr align 4 %x, i64 4, i1 false), !tbaa.struct !26 // CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %agg.tmp2, ptr align 4 %y, i64 4, i1 false), !tbaa.struct !26 -// CHECK:STDOUT: %coerce.dive3 = getelementptr inbounds nuw %struct.A.4, ptr %agg.tmp, i32 0, i32 0 +// CHECK:STDOUT: %coerce.dive3 = getelementptr inbounds nuw %struct.OrderedA, ptr %agg.tmp, i32 0, i32 0 // CHECK:STDOUT: %0 = load i32, ptr %coerce.dive3, align 4 -// CHECK:STDOUT: %coerce.dive4 = getelementptr inbounds nuw %struct.A.4, ptr %agg.tmp2, i32 0, i32 0 +// CHECK:STDOUT: %coerce.dive4 = getelementptr inbounds nuw %struct.OrderedA, ptr %agg.tmp2, i32 0, i32 0 // CHECK:STDOUT: %1 = load i32, ptr %coerce.dive4, align 4 -// CHECK:STDOUT: %call = call noundef zeroext i1 @_Zlt1AS_(i32 %0, i32 %1) +// CHECK:STDOUT: %call = call noundef zeroext i1 @_Zlt8OrderedAS_(i32 %0, i32 %1) // CHECK:STDOUT: %lnot = xor i1 %call, true // CHECK:STDOUT: ret i1 %lnot // CHECK:STDOUT: } @@ -585,7 +585,7 @@ fn Driver(x: Cpp.A, y: Cpp.A) { // CHECK:STDOUT: !19 = !DILocation(line: 34, column: 3, scope: !12) // CHECK:STDOUT: !20 = !DILocation(line: 33, column: 1, scope: !12) // CHECK:STDOUT: !21 = !{!22, !22, i64 0} -// CHECK:STDOUT: !22 = !{!"p1 _ZTS1A", !23, i64 0} +// CHECK:STDOUT: !22 = !{!"p1 _ZTS8OrderedA", !23, i64 0} // CHECK:STDOUT: !23 = !{!"any pointer", !10, i64 0} // CHECK:STDOUT: !24 = !{!25, !25, i64 0} // CHECK:STDOUT: !25 = !{!"p1 bool", !23, i64 0} @@ -593,29 +593,29 @@ fn Driver(x: Cpp.A, y: Cpp.A) { // CHECK:STDOUT: !27 = !{!9, !9, i64 0} // CHECK:STDOUT: !28 = !{!29, !29, i64 0} // CHECK:STDOUT: !29 = !{!"bool", !10, i64 0} -// CHECK:STDOUT: !30 = distinct !DISubprogram(name: "Less", linkageName: "_CLess:thunk:OrderedWith.92c0df05bd55f97a.Core:Cpp", scope: null, file: !1, line: 8, type: !31, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !33) +// CHECK:STDOUT: !30 = distinct !DISubprogram(name: "Less", linkageName: "_CLess:thunk:OrderedWith.f150fc1157a5293b.Core:Cpp", scope: null, file: !1, line: 8, type: !31, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !33) // CHECK:STDOUT: !31 = !DISubroutineType(types: !32) // CHECK:STDOUT: !32 = !{!15, !15, !15} // CHECK:STDOUT: !33 = !{!34, !35} // CHECK:STDOUT: !34 = !DILocalVariable(arg: 1, scope: !30, type: !15) // CHECK:STDOUT: !35 = !DILocalVariable(arg: 2, scope: !30, type: !15) // CHECK:STDOUT: !36 = !DILocation(line: 8, column: 15, scope: !30) -// CHECK:STDOUT: !37 = distinct !DISubprogram(name: "LessOrEquivalent", linkageName: "_CLessOrEquivalent:thunk:OrderedWith.92c0df05bd55f97a.Core:Cpp", scope: null, file: !1, line: 16, type: !31, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !38) +// CHECK:STDOUT: !37 = distinct !DISubprogram(name: "LessOrEquivalent", linkageName: "_CLessOrEquivalent:thunk:OrderedWith.f150fc1157a5293b.Core:Cpp", scope: null, file: !1, line: 16, type: !31, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !38) // CHECK:STDOUT: !38 = !{!39, !40} // CHECK:STDOUT: !39 = !DILocalVariable(arg: 1, scope: !37, type: !15) // CHECK:STDOUT: !40 = !DILocalVariable(arg: 2, scope: !37, type: !15) // CHECK:STDOUT: !41 = !DILocation(line: 16, column: 15, scope: !37) -// CHECK:STDOUT: !42 = distinct !DISubprogram(name: "Greater", linkageName: "_CGreater:thunk:OrderedWith.92c0df05bd55f97a.Core:Cpp", scope: null, file: !1, line: 12, type: !31, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !43) +// CHECK:STDOUT: !42 = distinct !DISubprogram(name: "Greater", linkageName: "_CGreater:thunk:OrderedWith.f150fc1157a5293b.Core:Cpp", scope: null, file: !1, line: 12, type: !31, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !43) // CHECK:STDOUT: !43 = !{!44, !45} // CHECK:STDOUT: !44 = !DILocalVariable(arg: 1, scope: !42, type: !15) // CHECK:STDOUT: !45 = !DILocalVariable(arg: 2, scope: !42, type: !15) // CHECK:STDOUT: !46 = !DILocation(line: 12, column: 15, scope: !42) -// CHECK:STDOUT: !47 = distinct !DISubprogram(name: "GreaterOrEquivalent", linkageName: "_CGreaterOrEquivalent:thunk:OrderedWith.92c0df05bd55f97a.Core:Cpp", scope: null, file: !1, line: 20, type: !31, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !48) +// CHECK:STDOUT: !47 = distinct !DISubprogram(name: "GreaterOrEquivalent", linkageName: "_CGreaterOrEquivalent:thunk:OrderedWith.f150fc1157a5293b.Core:Cpp", scope: null, file: !1, line: 20, type: !31, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !48) // CHECK:STDOUT: !48 = !{!49, !50} // CHECK:STDOUT: !49 = !DILocalVariable(arg: 1, scope: !47, type: !15) // CHECK:STDOUT: !50 = !DILocalVariable(arg: 2, scope: !47, type: !15) // CHECK:STDOUT: !51 = !DILocation(line: 20, column: 15, scope: !47) -// CHECK:STDOUT: !52 = distinct !DISubprogram(name: "CheckOrderedWith", linkageName: "_CCheckOrderedWith.Main.c49adfa90bd18905", scope: null, file: !1, line: 26, type: !13, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !53) +// CHECK:STDOUT: !52 = distinct !DISubprogram(name: "CheckOrderedWith", linkageName: "_CCheckOrderedWith.Main.f3d1df67aae0c1db", scope: null, file: !1, line: 26, type: !13, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !53) // CHECK:STDOUT: !53 = !{!54, !55} // CHECK:STDOUT: !54 = !DILocalVariable(arg: 1, scope: !52, type: !15) // CHECK:STDOUT: !55 = !DILocalVariable(arg: 2, scope: !52, type: !15) @@ -625,5 +625,5 @@ fn Driver(x: Cpp.A, y: Cpp.A) { // CHECK:STDOUT: !59 = !DILocation(line: 30, column: 3, scope: !52) // CHECK:STDOUT: !60 = !DILocation(line: 26, column: 1, scope: !52) // CHECK:STDOUT: !61 = !{!62, !9, i64 0} -// CHECK:STDOUT: !62 = !{!"_ZTS1A", !9, i64 0} +// CHECK:STDOUT: !62 = !{!"_ZTS8OrderedA", !9, i64 0} // CHECK:STDOUT: diff --git a/toolchain/lower/testdata/interop/cpp/pointer.carbon b/toolchain/lower/testdata/interop/cpp/pointer.carbon index 77256fe4614d..f8be0d5f5e95 100644 --- a/toolchain/lower/testdata/interop/cpp/pointer.carbon +++ b/toolchain/lower/testdata/interop/cpp/pointer.carbon @@ -19,29 +19,29 @@ library "[[@TEST_NAME]]"; import Cpp inline ''' -class C {}; +class NonnullC {}; -auto TakePtr(C* _Nonnull) -> void; -auto ReturnPtr() -> C* _Nonnull; +auto TakeNonnullPtr(NonnullC* _Nonnull) -> void; +auto ReturnNonnullPtr() -> NonnullC* _Nonnull; -auto TakePtrWithThunk(C* _Nonnull, int = 0) -> void; -auto ReturnPtrWithThunk(int = 0) -> C* _Nonnull; +auto TakeNonnullPtrWithThunk(NonnullC* _Nonnull, int = 0) -> void; +auto ReturnNonnullPtrWithThunk(int = 0) -> NonnullC* _Nonnull; '''; -fn PassPtr(p: Cpp.C*) { - Cpp.TakePtr(p); +fn PassPtr(p: Cpp.NonnullC*) { + Cpp.TakeNonnullPtr(p); } -fn ReturnPtr() -> Cpp.C* { - return Cpp.ReturnPtr(); +fn ReturnPtr() -> Cpp.NonnullC* { + return Cpp.ReturnNonnullPtr(); } -fn PassPtrWithThunk(p: Cpp.C*) { - Cpp.TakePtrWithThunk(p); +fn PassPtrWithThunk(p: Cpp.NonnullC*) { + Cpp.TakeNonnullPtrWithThunk(p); } -fn ReturnPtrWithThunk() -> Cpp.C* { - return Cpp.ReturnPtrWithThunk(); +fn ReturnPtrWithThunk() -> Cpp.NonnullC* { + return Cpp.ReturnNonnullPtrWithThunk(); } // ============================================================================ @@ -53,49 +53,51 @@ fn ReturnPtrWithThunk() -> Cpp.C* { library "[[@TEST_NAME]]"; import Cpp inline ''' -class C {}; +class NullableC {}; -auto TakePtr(C*) -> void; -auto ReturnPtr() -> C*; +auto TakeNullablePtr(NullableC*) -> void; +auto ReturnNullablePtr() -> NullableC*; -auto TakePtrWithThunk(C*, int = 0) -> void; -auto ReturnPtrWithThunk(int = 0) -> C*; +auto TakeNullablePtrWithThunk(NullableC*, int = 0) -> void; +auto ReturnNullablePtrWithThunk(int = 0) -> NullableC*; '''; -fn PassPtr(_: Core.Optional(Cpp.C*)) { +fn PassPtr(_: Core.Optional(Cpp.NullableC*)) { // TODO: Add support for passing an optional here. - // Cpp.TakePtr(p); + // Cpp.TakeNullablePtr(p); } -fn PassNonnullPtr(p: Cpp.C*) { +fn PassNonnullPtr(p: Cpp.NullableC*) { // TODO: The `value_of_initializer` optimization doesn't get used here, so we // unnecessarily round-trip this value through memory. - Cpp.TakePtr(p); + Cpp.TakeNullablePtr(p); } -fn ReturnPtr() -> Core.Optional(Cpp.C*) { - return Cpp.ReturnPtr(); +fn ReturnPtr() -> Core.Optional(Cpp.NullableC*) { + return Cpp.ReturnNullablePtr(); } -fn PassPtrWithThunk(_: Core.Optional(Cpp.C*)) { +fn PassPtrWithThunk(_: Core.Optional(Cpp.NullableC*)) { // TODO: Add support for passing an optional here. - // Cpp.TakePtrWithThunk(p); + // Cpp.TakeNullablePtrWithThunk(p); } -fn PassNonnullPtrWithThunk(p: Cpp.C*) { - Cpp.TakePtrWithThunk(p); +fn PassNonnullPtrWithThunk(p: Cpp.NullableC*) { + Cpp.TakeNullablePtrWithThunk(p); } -fn ReturnPtrWithThunk() -> Core.Optional(Cpp.C*) { - return Cpp.ReturnPtrWithThunk(); +fn ReturnPtrWithThunk() -> Core.Optional(Cpp.NullableC*) { + return Cpp.ReturnNullablePtrWithThunk(); } // --- add_const.carbon +library "[[@TEST_NAME]]"; + import Cpp inline ''' -class C {}; -C *make(); -void take(const C*); +class ConstC {}; +ConstC *make(); +void take(const ConstC*); '''; fn Convert() { @@ -111,55 +113,55 @@ fn Convert() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_CPassPtr.Main(ptr %p) #0 !dbg !12 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @_Z7TakePtrP1C(ptr %p), !dbg !18 +// CHECK:STDOUT: call void @_Z14TakeNonnullPtrP8NonnullC(ptr %p), !dbg !18 // CHECK:STDOUT: ret void, !dbg !19 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: declare void @_Z7TakePtrP1C(ptr noundef) #1 +// CHECK:STDOUT: declare void @_Z14TakeNonnullPtrP8NonnullC(ptr noundef) #1 // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define ptr @_CReturnPtr.Main() #0 !dbg !20 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %ReturnPtr.call = call ptr @_Z9ReturnPtrv(), !dbg !23 -// CHECK:STDOUT: ret ptr %ReturnPtr.call, !dbg !24 +// CHECK:STDOUT: %ReturnNonnullPtr.call = call ptr @_Z16ReturnNonnullPtrv(), !dbg !23 +// CHECK:STDOUT: ret ptr %ReturnNonnullPtr.call, !dbg !24 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: declare noundef ptr @_Z9ReturnPtrv() #1 +// CHECK:STDOUT: declare noundef ptr @_Z16ReturnNonnullPtrv() #1 // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_CPassPtrWithThunk.Main(ptr %p) #0 !dbg !25 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @_Z16TakePtrWithThunkP1Ci.carbon_thunk._(ptr %p), !dbg !28 +// CHECK:STDOUT: call void @_Z23TakeNonnullPtrWithThunkP8NonnullCi.carbon_thunk._(ptr %p), !dbg !28 // CHECK:STDOUT: ret void, !dbg !29 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress uwtable -// CHECK:STDOUT: define internal void @_Z16TakePtrWithThunkP1Ci.carbon_thunk._(ptr noundef %0) #2 { +// CHECK:STDOUT: define internal void @_Z23TakeNonnullPtrWithThunkP8NonnullCi.carbon_thunk._(ptr noundef %0) #2 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.addr = alloca ptr, align 8 // CHECK:STDOUT: store ptr %0, ptr %.addr, align 8, !tbaa !30 // CHECK:STDOUT: %1 = load ptr, ptr %.addr, align 8, !tbaa !30 -// CHECK:STDOUT: call void @_Z16TakePtrWithThunkP1Ci(ptr noundef %1, i32 noundef 0) +// CHECK:STDOUT: call void @_Z23TakeNonnullPtrWithThunkP8NonnullCi(ptr noundef %1, i32 noundef 0) // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define ptr @_CReturnPtrWithThunk.Main() #0 !dbg !33 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %ReturnPtrWithThunk__carbon_thunk.call = call ptr @_Z18ReturnPtrWithThunki.carbon_thunk.(), !dbg !34 -// CHECK:STDOUT: ret ptr %ReturnPtrWithThunk__carbon_thunk.call, !dbg !35 +// CHECK:STDOUT: %ReturnNonnullPtrWithThunk__carbon_thunk.call = call ptr @_Z25ReturnNonnullPtrWithThunki.carbon_thunk.(), !dbg !34 +// CHECK:STDOUT: ret ptr %ReturnNonnullPtrWithThunk__carbon_thunk.call, !dbg !35 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress uwtable -// CHECK:STDOUT: define internal noundef ptr @_Z18ReturnPtrWithThunki.carbon_thunk.() #2 { +// CHECK:STDOUT: define internal noundef ptr @_Z25ReturnNonnullPtrWithThunki.carbon_thunk.() #2 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %call = call noundef ptr @_Z18ReturnPtrWithThunki(i32 noundef 0) +// CHECK:STDOUT: %call = call noundef ptr @_Z25ReturnNonnullPtrWithThunki(i32 noundef 0) // CHECK:STDOUT: ret ptr %call // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: declare void @_Z16TakePtrWithThunkP1Ci(ptr noundef, i32 noundef) #1 +// CHECK:STDOUT: declare void @_Z23TakeNonnullPtrWithThunkP8NonnullCi(ptr noundef, i32 noundef) #1 // CHECK:STDOUT: -// CHECK:STDOUT: declare noundef ptr @_Z18ReturnPtrWithThunki(i32 noundef) #1 +// CHECK:STDOUT: declare noundef ptr @_Z25ReturnNonnullPtrWithThunki(i32 noundef) #1 // CHECK:STDOUT: // CHECK:STDOUT: attributes #0 = { nounwind } // CHECK:STDOUT: attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } @@ -200,7 +202,7 @@ fn Convert() { // CHECK:STDOUT: !28 = !DILocation(line: 23, column: 3, scope: !25) // CHECK:STDOUT: !29 = !DILocation(line: 22, column: 1, scope: !25) // CHECK:STDOUT: !30 = !{!31, !31, i64 0} -// CHECK:STDOUT: !31 = !{!"p1 _ZTS1C", !32, i64 0} +// CHECK:STDOUT: !31 = !{!"p1 _ZTS8NonnullC", !32, i64 0} // CHECK:STDOUT: !32 = !{!"any pointer", !10, i64 0} // CHECK:STDOUT: !33 = distinct !DISubprogram(name: "ReturnPtrWithThunk", linkageName: "_CReturnPtrWithThunk.Main", scope: null, file: !1, line: 26, type: !21, spFlags: DISPFlagDefinition, unit: !0) // CHECK:STDOUT: !34 = !DILocation(line: 27, column: 10, scope: !33) @@ -221,32 +223,32 @@ fn Convert() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_CPassNonnullPtr.Main(ptr %p) #0 !dbg !19 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %.loc22_15.2.temp = alloca ptr, align 8, !dbg !22 -// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.call = call ptr @"_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.331b8c91728880af"(ptr %p), !dbg !22 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc22_15.2.temp), !dbg !22 -// CHECK:STDOUT: store ptr %U.as_type.as.ImplicitAs.impl.Convert.call, ptr %.loc22_15.2.temp, align 8, !dbg !22 -// CHECK:STDOUT: %.loc22_15.4 = load ptr, ptr %.loc22_15.2.temp, align 8, !dbg !22 -// CHECK:STDOUT: call void @_Z7TakePtrP1C(ptr %.loc22_15.4), !dbg !23 -// CHECK:STDOUT: call void @"_COp.16b2729c97ad4472:core.Destroy.Core"(ptr %.loc22_15.2.temp), !dbg !22 +// CHECK:STDOUT: %.loc22_23.2.temp = alloca ptr, align 8, !dbg !22 +// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.call = call ptr @"_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.75a9143bcbb84fa5"(ptr %p), !dbg !22 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc22_23.2.temp), !dbg !22 +// CHECK:STDOUT: store ptr %U.as_type.as.ImplicitAs.impl.Convert.call, ptr %.loc22_23.2.temp, align 8, !dbg !22 +// CHECK:STDOUT: %.loc22_23.4 = load ptr, ptr %.loc22_23.2.temp, align 8, !dbg !22 +// CHECK:STDOUT: call void @_Z15TakeNullablePtrP9NullableC(ptr %.loc22_23.4), !dbg !23 +// CHECK:STDOUT: call void @"_COp.af4d0379a4c35228:core.Destroy.Core"(ptr %.loc22_23.2.temp), !dbg !22 // CHECK:STDOUT: ret void, !dbg !24 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: declare void @_Z7TakePtrP1C(ptr noundef) #1 +// CHECK:STDOUT: declare void @_Z15TakeNullablePtrP9NullableC(ptr noundef) #1 // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define weak_odr void @"_COp.930f6ffe20ad4a64:core.Destroy.Core"(ptr %self) #0 !dbg !25 { +// CHECK:STDOUT: define weak_odr void @"_COp.c4feefb53715d971:core.Destroy.Core"(ptr %self) #0 !dbg !25 { // CHECK:STDOUT: entry: // CHECK:STDOUT: ret void, !dbg !28 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define weak_odr void @"_COp.52f3be89096e2220:core.Destroy.Core"(ptr %self) #0 !dbg !29 { +// CHECK:STDOUT: define weak_odr void @"_COp.1a4db661cca0482a:core.Destroy.Core"(ptr %self) #0 !dbg !29 { // CHECK:STDOUT: entry: // CHECK:STDOUT: ret void, !dbg !32 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define weak_odr void @"_COp.16b2729c97ad4472:core.Destroy.Core"(ptr %self) #0 !dbg !33 { +// CHECK:STDOUT: define weak_odr void @"_COp.af4d0379a4c35228:core.Destroy.Core"(ptr %self) #0 !dbg !33 { // CHECK:STDOUT: entry: // CHECK:STDOUT: ret void, !dbg !36 // CHECK:STDOUT: } @@ -254,11 +256,11 @@ fn Convert() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define ptr @_CReturnPtr.Main() #0 !dbg !37 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %ReturnPtr.call = call ptr @_Z9ReturnPtrv(), !dbg !40 -// CHECK:STDOUT: ret ptr %ReturnPtr.call, !dbg !41 +// CHECK:STDOUT: %ReturnNullablePtr.call = call ptr @_Z17ReturnNullablePtrv(), !dbg !40 +// CHECK:STDOUT: ret ptr %ReturnNullablePtr.call, !dbg !41 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: declare noundef ptr @_Z9ReturnPtrv() #1 +// CHECK:STDOUT: declare noundef ptr @_Z17ReturnNullablePtrv() #1 // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_CPassPtrWithThunk.Main(ptr %_) #0 !dbg !42 { @@ -269,43 +271,43 @@ fn Convert() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_CPassNonnullPtrWithThunk.Main(ptr %p) #0 !dbg !46 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %.loc35_24.2.temp = alloca ptr, align 8, !dbg !49 -// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.call = call ptr @"_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.331b8c91728880af"(ptr %p), !dbg !49 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc35_24.2.temp), !dbg !49 -// CHECK:STDOUT: store ptr %U.as_type.as.ImplicitAs.impl.Convert.call, ptr %.loc35_24.2.temp, align 8, !dbg !49 -// CHECK:STDOUT: %.loc35_24.4 = load ptr, ptr %.loc35_24.2.temp, align 8, !dbg !49 -// CHECK:STDOUT: call void @_Z16TakePtrWithThunkP1Ci.carbon_thunk._(ptr %.loc35_24.4), !dbg !50 -// CHECK:STDOUT: call void @"_COp.16b2729c97ad4472:core.Destroy.Core"(ptr %.loc35_24.2.temp), !dbg !49 +// CHECK:STDOUT: %.loc35_32.2.temp = alloca ptr, align 8, !dbg !49 +// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.call = call ptr @"_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.75a9143bcbb84fa5"(ptr %p), !dbg !49 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc35_32.2.temp), !dbg !49 +// CHECK:STDOUT: store ptr %U.as_type.as.ImplicitAs.impl.Convert.call, ptr %.loc35_32.2.temp, align 8, !dbg !49 +// CHECK:STDOUT: %.loc35_32.4 = load ptr, ptr %.loc35_32.2.temp, align 8, !dbg !49 +// CHECK:STDOUT: call void @_Z24TakeNullablePtrWithThunkP9NullableCi.carbon_thunk._(ptr %.loc35_32.4), !dbg !50 +// CHECK:STDOUT: call void @"_COp.af4d0379a4c35228:core.Destroy.Core"(ptr %.loc35_32.2.temp), !dbg !49 // CHECK:STDOUT: ret void, !dbg !51 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress uwtable -// CHECK:STDOUT: define internal void @_Z16TakePtrWithThunkP1Ci.carbon_thunk._(ptr noundef %0) #2 { +// CHECK:STDOUT: define internal void @_Z24TakeNullablePtrWithThunkP9NullableCi.carbon_thunk._(ptr noundef %0) #2 { // CHECK:STDOUT: entry: // CHECK:STDOUT: %.addr = alloca ptr, align 8 // CHECK:STDOUT: store ptr %0, ptr %.addr, align 8, !tbaa !52 // CHECK:STDOUT: %1 = load ptr, ptr %.addr, align 8, !tbaa !52 -// CHECK:STDOUT: call void @_Z16TakePtrWithThunkP1Ci(ptr noundef %1, i32 noundef 0) +// CHECK:STDOUT: call void @_Z24TakeNullablePtrWithThunkP9NullableCi(ptr noundef %1, i32 noundef 0) // CHECK:STDOUT: ret void // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define ptr @_CReturnPtrWithThunk.Main() #0 !dbg !55 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %ReturnPtrWithThunk__carbon_thunk.call = call ptr @_Z18ReturnPtrWithThunki.carbon_thunk.(), !dbg !56 -// CHECK:STDOUT: ret ptr %ReturnPtrWithThunk__carbon_thunk.call, !dbg !57 +// CHECK:STDOUT: %ReturnNullablePtrWithThunk__carbon_thunk.call = call ptr @_Z26ReturnNullablePtrWithThunki.carbon_thunk.(), !dbg !56 +// CHECK:STDOUT: ret ptr %ReturnNullablePtrWithThunk__carbon_thunk.call, !dbg !57 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress uwtable -// CHECK:STDOUT: define internal noundef ptr @_Z18ReturnPtrWithThunki.carbon_thunk.() #2 { +// CHECK:STDOUT: define internal noundef ptr @_Z26ReturnNullablePtrWithThunki.carbon_thunk.() #2 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %call = call noundef ptr @_Z18ReturnPtrWithThunki(i32 noundef 0) +// CHECK:STDOUT: %call = call noundef ptr @_Z26ReturnNullablePtrWithThunki(i32 noundef 0) // CHECK:STDOUT: ret ptr %call // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define linkonce_odr ptr @"_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.331b8c91728880af"(ptr %self) #0 !dbg !58 { -// CHECK:STDOUT: %1 = call ptr @"_CConvert.9fdaf39d07a1dc4e:OptionalAs.24b7347a93330e68.Core.f65d494664285214"(ptr %self), !dbg !64 +// CHECK:STDOUT: define linkonce_odr ptr @"_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.75a9143bcbb84fa5"(ptr %self) #0 !dbg !58 { +// CHECK:STDOUT: %1 = call ptr @"_CConvert.9fdaf39d07a1dc4e:OptionalAs.24b7347a93330e68.Core.e83c25d1d2fd22c2"(ptr %self), !dbg !64 // CHECK:STDOUT: ret ptr %1, !dbg !65 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -313,34 +315,34 @@ fn Convert() { // CHECK:STDOUT: declare void @llvm.lifetime.start.p0(ptr captures(none)) #3 // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define linkonce_odr ptr @"_CConvert.9fdaf39d07a1dc4e:OptionalAs.24b7347a93330e68.Core.f65d494664285214"(ptr %self) #0 !dbg !66 { -// CHECK:STDOUT: %1 = call ptr @_CSome.Optional.Core.f65d494664285214(ptr %self), !dbg !69 +// CHECK:STDOUT: define linkonce_odr ptr @"_CConvert.9fdaf39d07a1dc4e:OptionalAs.24b7347a93330e68.Core.e83c25d1d2fd22c2"(ptr %self) #0 !dbg !66 { +// CHECK:STDOUT: %1 = call ptr @_CSome.Optional.Core.e83c25d1d2fd22c2(ptr %self), !dbg !69 // CHECK:STDOUT: ret ptr %1, !dbg !70 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define linkonce_odr ptr @_CSome.Optional.Core.f65d494664285214(ptr %value) #0 !dbg !71 { -// CHECK:STDOUT: %1 = call ptr @"_CSome.e8f8f92d3d08d149:OptionalStorage.Core.fc8b3e0dc71c345e"(ptr %value), !dbg !74 +// CHECK:STDOUT: define linkonce_odr ptr @_CSome.Optional.Core.e83c25d1d2fd22c2(ptr %value) #0 !dbg !71 { +// CHECK:STDOUT: %1 = call ptr @"_CSome.e8f8f92d3d08d149:OptionalStorage.Core.77dd513e5db6ef8d"(ptr %value), !dbg !74 // CHECK:STDOUT: ret ptr %1, !dbg !75 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define linkonce_odr ptr @"_CSome.e8f8f92d3d08d149:OptionalStorage.Core.fc8b3e0dc71c345e"(ptr %self) #0 !dbg !76 { +// CHECK:STDOUT: define linkonce_odr ptr @"_CSome.e8f8f92d3d08d149:OptionalStorage.Core.77dd513e5db6ef8d"(ptr %self) #0 !dbg !76 { // CHECK:STDOUT: %1 = alloca ptr, align 8, !dbg !79 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %1), !dbg !79 // CHECK:STDOUT: store ptr poison, ptr %1, align 8, !dbg !79 // CHECK:STDOUT: store ptr %self, ptr %1, align 8, !dbg !80 // CHECK:STDOUT: %2 = load ptr, ptr %1, align 8, !dbg !81 -// CHECK:STDOUT: call void @"_COp.52f3be89096e2220:core.Destroy.Core"(ptr %1), !dbg !79 +// CHECK:STDOUT: call void @"_COp.1a4db661cca0482a:core.Destroy.Core"(ptr %1), !dbg !79 // CHECK:STDOUT: ret ptr %2, !dbg !82 // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: declare void @_Z16TakePtrWithThunkP1Ci(ptr noundef, i32 noundef) #1 +// CHECK:STDOUT: declare void @_Z24TakeNullablePtrWithThunkP9NullableCi(ptr noundef, i32 noundef) #1 // CHECK:STDOUT: -// CHECK:STDOUT: declare noundef ptr @_Z18ReturnPtrWithThunki(i32 noundef) #1 +// CHECK:STDOUT: declare noundef ptr @_Z26ReturnNullablePtrWithThunki(i32 noundef) #1 // CHECK:STDOUT: // CHECK:STDOUT: ; uselistorder directives -// CHECK:STDOUT: uselistorder ptr @"_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.331b8c91728880af", { 1, 0 } +// CHECK:STDOUT: uselistorder ptr @"_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.75a9143bcbb84fa5", { 1, 0 } // CHECK:STDOUT: uselistorder ptr @llvm.lifetime.start.p0, { 0, 2, 1 } // CHECK:STDOUT: // CHECK:STDOUT: attributes #0 = { nounwind } @@ -374,21 +376,21 @@ fn Convert() { // CHECK:STDOUT: !19 = distinct !DISubprogram(name: "PassNonnullPtr", linkageName: "_CPassNonnullPtr.Main", scope: null, file: !1, line: 19, type: !13, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !20) // CHECK:STDOUT: !20 = !{!21} // CHECK:STDOUT: !21 = !DILocalVariable(arg: 1, scope: !19, type: !15) -// CHECK:STDOUT: !22 = !DILocation(line: 22, column: 15, scope: !19) +// CHECK:STDOUT: !22 = !DILocation(line: 22, column: 23, scope: !19) // CHECK:STDOUT: !23 = !DILocation(line: 22, column: 3, scope: !19) // CHECK:STDOUT: !24 = !DILocation(line: 19, column: 1, scope: !19) -// CHECK:STDOUT: !25 = distinct !DISubprogram(name: "Op", linkageName: "_COp.930f6ffe20ad4a64:core.Destroy.Core", scope: null, file: !1, line: 22, type: !13, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !26) +// CHECK:STDOUT: !25 = distinct !DISubprogram(name: "Op", linkageName: "_COp.c4feefb53715d971:core.Destroy.Core", scope: null, file: !1, line: 22, type: !13, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !26) // CHECK:STDOUT: !26 = !{!27} // CHECK:STDOUT: !27 = !DILocalVariable(arg: 1, scope: !25, type: !15) -// CHECK:STDOUT: !28 = !DILocation(line: 22, column: 15, scope: !25) -// CHECK:STDOUT: !29 = distinct !DISubprogram(name: "Op", linkageName: "_COp.52f3be89096e2220:core.Destroy.Core", scope: null, file: !1, line: 22, type: !13, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !30) +// CHECK:STDOUT: !28 = !DILocation(line: 22, column: 23, scope: !25) +// CHECK:STDOUT: !29 = distinct !DISubprogram(name: "Op", linkageName: "_COp.1a4db661cca0482a:core.Destroy.Core", scope: null, file: !1, line: 22, type: !13, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !30) // CHECK:STDOUT: !30 = !{!31} // CHECK:STDOUT: !31 = !DILocalVariable(arg: 1, scope: !29, type: !15) -// CHECK:STDOUT: !32 = !DILocation(line: 22, column: 15, scope: !29) -// CHECK:STDOUT: !33 = distinct !DISubprogram(name: "Op", linkageName: "_COp.16b2729c97ad4472:core.Destroy.Core", scope: null, file: !1, line: 22, type: !13, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !34) +// CHECK:STDOUT: !32 = !DILocation(line: 22, column: 23, scope: !29) +// CHECK:STDOUT: !33 = distinct !DISubprogram(name: "Op", linkageName: "_COp.af4d0379a4c35228:core.Destroy.Core", scope: null, file: !1, line: 22, type: !13, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !34) // CHECK:STDOUT: !34 = !{!35} // CHECK:STDOUT: !35 = !DILocalVariable(arg: 1, scope: !33, type: !15) -// CHECK:STDOUT: !36 = !DILocation(line: 22, column: 15, scope: !33) +// CHECK:STDOUT: !36 = !DILocation(line: 22, column: 23, scope: !33) // CHECK:STDOUT: !37 = distinct !DISubprogram(name: "ReturnPtr", linkageName: "_CReturnPtr.Main", scope: null, file: !1, line: 25, type: !38, spFlags: DISPFlagDefinition, unit: !0) // CHECK:STDOUT: !38 = !DISubroutineType(types: !39) // CHECK:STDOUT: !39 = !{!15} @@ -401,16 +403,16 @@ fn Convert() { // CHECK:STDOUT: !46 = distinct !DISubprogram(name: "PassNonnullPtrWithThunk", linkageName: "_CPassNonnullPtrWithThunk.Main", scope: null, file: !1, line: 34, type: !13, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !47) // CHECK:STDOUT: !47 = !{!48} // CHECK:STDOUT: !48 = !DILocalVariable(arg: 1, scope: !46, type: !15) -// CHECK:STDOUT: !49 = !DILocation(line: 35, column: 24, scope: !46) +// CHECK:STDOUT: !49 = !DILocation(line: 35, column: 32, scope: !46) // CHECK:STDOUT: !50 = !DILocation(line: 35, column: 3, scope: !46) // CHECK:STDOUT: !51 = !DILocation(line: 34, column: 1, scope: !46) // CHECK:STDOUT: !52 = !{!53, !53, i64 0} -// CHECK:STDOUT: !53 = !{!"p1 _ZTS1C", !54, i64 0} +// CHECK:STDOUT: !53 = !{!"p1 _ZTS9NullableC", !54, i64 0} // CHECK:STDOUT: !54 = !{!"any pointer", !10, i64 0} // CHECK:STDOUT: !55 = distinct !DISubprogram(name: "ReturnPtrWithThunk", linkageName: "_CReturnPtrWithThunk.Main", scope: null, file: !1, line: 38, type: !38, spFlags: DISPFlagDefinition, unit: !0) // CHECK:STDOUT: !56 = !DILocation(line: 39, column: 10, scope: !55) // CHECK:STDOUT: !57 = !DILocation(line: 39, column: 3, scope: !55) -// CHECK:STDOUT: !58 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.331b8c91728880af", scope: null, file: !59, line: 105, type: !60, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !62) +// CHECK:STDOUT: !58 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.75a9143bcbb84fa5", scope: null, file: !59, line: 105, type: !60, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !62) // CHECK:STDOUT: !59 = !DIFile(filename: "{{.*}}/prelude/types/optional.carbon", directory: "") // CHECK:STDOUT: !60 = !DISubroutineType(types: !61) // CHECK:STDOUT: !61 = !{!15, !15} @@ -418,17 +420,17 @@ fn Convert() { // CHECK:STDOUT: !63 = !DILocalVariable(arg: 1, scope: !58, type: !15) // CHECK:STDOUT: !64 = !DILocation(line: 106, column: 12, scope: !58) // CHECK:STDOUT: !65 = !DILocation(line: 106, column: 5, scope: !58) -// CHECK:STDOUT: !66 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.9fdaf39d07a1dc4e:OptionalAs.24b7347a93330e68.Core.f65d494664285214", scope: null, file: !59, line: 80, type: !60, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !67) +// CHECK:STDOUT: !66 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.9fdaf39d07a1dc4e:OptionalAs.24b7347a93330e68.Core.e83c25d1d2fd22c2", scope: null, file: !59, line: 80, type: !60, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !67) // CHECK:STDOUT: !67 = !{!68} // CHECK:STDOUT: !68 = !DILocalVariable(arg: 1, scope: !66, type: !15) // CHECK:STDOUT: !69 = !DILocation(line: 81, column: 12, scope: !66) // CHECK:STDOUT: !70 = !DILocation(line: 81, column: 5, scope: !66) -// CHECK:STDOUT: !71 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.Optional.Core.f65d494664285214", scope: null, file: !59, line: 33, type: !60, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !72) +// CHECK:STDOUT: !71 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.Optional.Core.e83c25d1d2fd22c2", scope: null, file: !59, line: 33, type: !60, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !72) // CHECK:STDOUT: !72 = !{!73} // CHECK:STDOUT: !73 = !DILocalVariable(arg: 1, scope: !71, type: !15) // CHECK:STDOUT: !74 = !DILocation(line: 34, column: 12, scope: !71) // CHECK:STDOUT: !75 = !DILocation(line: 34, column: 5, scope: !71) -// CHECK:STDOUT: !76 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.e8f8f92d3d08d149:OptionalStorage.Core.fc8b3e0dc71c345e", scope: null, file: !59, line: 166, type: !60, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !77) +// CHECK:STDOUT: !76 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.e8f8f92d3d08d149:OptionalStorage.Core.77dd513e5db6ef8d", scope: null, file: !59, line: 166, type: !60, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !77) // CHECK:STDOUT: !77 = !{!78} // CHECK:STDOUT: !78 = !DILocalVariable(arg: 1, scope: !76, type: !15) // CHECK:STDOUT: !79 = !DILocation(line: 167, column: 14, scope: !76) @@ -445,58 +447,58 @@ fn Convert() { // CHECK:STDOUT: ; Function Attrs: nounwind // CHECK:STDOUT: define void @_CConvert.Main() #0 !dbg !12 { // CHECK:STDOUT: entry: -// CHECK:STDOUT: %.loc9_21.1.temp = alloca ptr, align 8, !dbg !15 -// CHECK:STDOUT: %.loc9_21.5.temp = alloca ptr, align 8, !dbg !15 +// CHECK:STDOUT: %.loc11_21.1.temp = alloca ptr, align 8, !dbg !15 +// CHECK:STDOUT: %.loc11_21.5.temp = alloca ptr, align 8, !dbg !15 // CHECK:STDOUT: %make.call = call ptr @_Z4makev(), !dbg !15 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc9_21.1.temp), !dbg !15 -// CHECK:STDOUT: store ptr %make.call, ptr %.loc9_21.1.temp, align 8, !dbg !15 -// CHECK:STDOUT: %.loc9_21.3 = load ptr, ptr %.loc9_21.1.temp, align 8, !dbg !15 -// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.call = call ptr @"_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.7a59268f02b553a8"(ptr %.loc9_21.3), !dbg !15 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc9_21.5.temp), !dbg !15 -// CHECK:STDOUT: store ptr %U.as_type.as.ImplicitAs.impl.Convert.call, ptr %.loc9_21.5.temp, align 8, !dbg !15 -// CHECK:STDOUT: %.loc9_21.7 = load ptr, ptr %.loc9_21.5.temp, align 8, !dbg !15 -// CHECK:STDOUT: call void @_Z4takePK1C(ptr %.loc9_21.7), !dbg !16 -// CHECK:STDOUT: call void @"_COp.d67a36d0f9ac97ca:core.Destroy.Core"(ptr %.loc9_21.5.temp), !dbg !15 -// CHECK:STDOUT: call void @"_COp.16b2729c97ad4472:core.Destroy.Core"(ptr %.loc9_21.1.temp), !dbg !15 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc11_21.1.temp), !dbg !15 +// CHECK:STDOUT: store ptr %make.call, ptr %.loc11_21.1.temp, align 8, !dbg !15 +// CHECK:STDOUT: %.loc11_21.3 = load ptr, ptr %.loc11_21.1.temp, align 8, !dbg !15 +// CHECK:STDOUT: %U.as_type.as.ImplicitAs.impl.Convert.call = call ptr @"_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.f9fd89fc1ccb531f"(ptr %.loc11_21.3), !dbg !15 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc11_21.5.temp), !dbg !15 +// CHECK:STDOUT: store ptr %U.as_type.as.ImplicitAs.impl.Convert.call, ptr %.loc11_21.5.temp, align 8, !dbg !15 +// CHECK:STDOUT: %.loc11_21.7 = load ptr, ptr %.loc11_21.5.temp, align 8, !dbg !15 +// CHECK:STDOUT: call void @_Z4takePK6ConstC(ptr %.loc11_21.7), !dbg !16 +// CHECK:STDOUT: call void @"_COp.cde1f9fdf283467b:core.Destroy.Core"(ptr %.loc11_21.5.temp), !dbg !15 +// CHECK:STDOUT: call void @"_COp.a6ac3d473017b2cc:core.Destroy.Core"(ptr %.loc11_21.1.temp), !dbg !15 // CHECK:STDOUT: ret void, !dbg !17 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: declare noundef ptr @_Z4makev() #1 // CHECK:STDOUT: -// CHECK:STDOUT: declare void @_Z4takePK1C(ptr noundef) #1 +// CHECK:STDOUT: declare void @_Z4takePK6ConstC(ptr noundef) #1 // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define weak_odr void @"_COp.bde6c3800c3f9965:core.Destroy.Core"(ptr %self) #0 !dbg !18 { +// CHECK:STDOUT: define weak_odr void @"_COp.53a1c4a6a5cbb234:core.Destroy.Core"(ptr %self) #0 !dbg !18 { // CHECK:STDOUT: entry: // CHECK:STDOUT: ret void, !dbg !24 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define weak_odr void @"_COp.8ff81f4b50934d6f:core.Destroy.Core"(ptr %self) #0 !dbg !25 { +// CHECK:STDOUT: define weak_odr void @"_COp.fd6b21bba6dfd55d:core.Destroy.Core"(ptr %self) #0 !dbg !25 { // CHECK:STDOUT: entry: // CHECK:STDOUT: ret void, !dbg !28 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define weak_odr void @"_COp.d67a36d0f9ac97ca:core.Destroy.Core"(ptr %self) #0 !dbg !29 { +// CHECK:STDOUT: define weak_odr void @"_COp.cde1f9fdf283467b:core.Destroy.Core"(ptr %self) #0 !dbg !29 { // CHECK:STDOUT: entry: // CHECK:STDOUT: ret void, !dbg !32 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define weak_odr void @"_COp.930f6ffe20ad4a64:core.Destroy.Core"(ptr %self) #0 !dbg !33 { +// CHECK:STDOUT: define weak_odr void @"_COp.fc86501cbc1f8185:core.Destroy.Core"(ptr %self) #0 !dbg !33 { // CHECK:STDOUT: entry: // CHECK:STDOUT: ret void, !dbg !36 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define weak_odr void @"_COp.52f3be89096e2220:core.Destroy.Core"(ptr %self) #0 !dbg !37 { +// CHECK:STDOUT: define weak_odr void @"_COp.b682b9cd8310efa2:core.Destroy.Core"(ptr %self) #0 !dbg !37 { // CHECK:STDOUT: entry: // CHECK:STDOUT: ret void, !dbg !40 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define weak_odr void @"_COp.16b2729c97ad4472:core.Destroy.Core"(ptr %self) #0 !dbg !41 { +// CHECK:STDOUT: define weak_odr void @"_COp.a6ac3d473017b2cc:core.Destroy.Core"(ptr %self) #0 !dbg !41 { // CHECK:STDOUT: entry: // CHECK:STDOUT: ret void, !dbg !44 // CHECK:STDOUT: } @@ -505,77 +507,77 @@ fn Convert() { // CHECK:STDOUT: declare void @llvm.lifetime.start.p0(ptr captures(none)) #2 // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define linkonce_odr ptr @"_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.7a59268f02b553a8"(ptr %self) #0 !dbg !45 { -// CHECK:STDOUT: %1 = call ptr @"_CConvert.Optional.c661605f12aa337a.Core:OptionalAs.1dac4564233fecd1.Core.703e8dd9cedc135a"(ptr %self), !dbg !51 +// CHECK:STDOUT: define linkonce_odr ptr @"_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.f9fd89fc1ccb531f"(ptr %self) #0 !dbg !45 { +// CHECK:STDOUT: %1 = call ptr @"_CConvert.Optional.c661605f12aa337a.Core:OptionalAs.1dac4564233fecd1.Core.3efc4c2a62f24739"(ptr %self), !dbg !51 // CHECK:STDOUT: ret ptr %1, !dbg !52 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define linkonce_odr ptr @"_CConvert.Optional.c661605f12aa337a.Core:OptionalAs.1dac4564233fecd1.Core.703e8dd9cedc135a"(ptr %self) #0 !dbg !53 { +// CHECK:STDOUT: define linkonce_odr ptr @"_CConvert.Optional.c661605f12aa337a.Core:OptionalAs.1dac4564233fecd1.Core.3efc4c2a62f24739"(ptr %self) #0 !dbg !53 { // CHECK:STDOUT: %temp = alloca ptr, align 8, !dbg !56 // CHECK:STDOUT: %temp1 = alloca ptr, align 8, !dbg !56 -// CHECK:STDOUT: %1 = call i1 @_CHasValue.Optional.Core.f65d494664285214(ptr %self), !dbg !57 +// CHECK:STDOUT: %1 = call i1 @_CHasValue.Optional.Core.0c3518913b4fb338(ptr %self), !dbg !57 // CHECK:STDOUT: br i1 %1, label %2, label %7, !dbg !58 // CHECK:STDOUT: // CHECK:STDOUT: 2: ; preds = %0 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %temp), !dbg !56 -// CHECK:STDOUT: %3 = call ptr @_CGet.Optional.Core.f65d494664285214(ptr %self), !dbg !56 +// CHECK:STDOUT: %3 = call ptr @_CGet.Optional.Core.0c3518913b4fb338(ptr %self), !dbg !56 // CHECK:STDOUT: store ptr %3, ptr %temp, align 8, !dbg !56 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %temp1), !dbg !56 // CHECK:STDOUT: %4 = load ptr, ptr %temp, align 8, !dbg !56 // CHECK:STDOUT: store ptr %4, ptr %temp1, align 8, !dbg !56 // CHECK:STDOUT: %5 = load ptr, ptr %temp1, align 8, !dbg !56 -// CHECK:STDOUT: %6 = call ptr @_CSome.Optional.Core.f04d7238fb50aa85(ptr %5), !dbg !59 +// CHECK:STDOUT: %6 = call ptr @_CSome.Optional.Core.305e266058820aa4(ptr %5), !dbg !59 // CHECK:STDOUT: ret ptr %6, !dbg !60 // CHECK:STDOUT: // CHECK:STDOUT: 7: ; preds = %0 -// CHECK:STDOUT: %8 = call ptr @_CNone.Optional.Core.f04d7238fb50aa85(), !dbg !61 +// CHECK:STDOUT: %8 = call ptr @_CNone.Optional.Core.305e266058820aa4(), !dbg !61 // CHECK:STDOUT: ret ptr %8, !dbg !62 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define linkonce_odr i1 @_CHasValue.Optional.Core.f65d494664285214(ptr %self) #0 !dbg !63 { -// CHECK:STDOUT: %1 = call i1 @"_CHas.e8f8f92d3d08d149:OptionalStorage.Core.fc8b3e0dc71c345e"(ptr %self), !dbg !66 +// CHECK:STDOUT: define linkonce_odr i1 @_CHasValue.Optional.Core.0c3518913b4fb338(ptr %self) #0 !dbg !63 { +// CHECK:STDOUT: %1 = call i1 @"_CHas.e8f8f92d3d08d149:OptionalStorage.Core.21c65d90918a10a4"(ptr %self), !dbg !66 // CHECK:STDOUT: ret i1 %1, !dbg !67 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define linkonce_odr ptr @_CGet.Optional.Core.f65d494664285214(ptr %self) #0 !dbg !68 { -// CHECK:STDOUT: %1 = call ptr @"_CGet.e8f8f92d3d08d149:OptionalStorage.Core.fc8b3e0dc71c345e"(ptr %self), !dbg !71 +// CHECK:STDOUT: define linkonce_odr ptr @_CGet.Optional.Core.0c3518913b4fb338(ptr %self) #0 !dbg !68 { +// CHECK:STDOUT: %1 = call ptr @"_CGet.e8f8f92d3d08d149:OptionalStorage.Core.21c65d90918a10a4"(ptr %self), !dbg !71 // CHECK:STDOUT: ret ptr %1, !dbg !72 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define linkonce_odr ptr @_CSome.Optional.Core.f04d7238fb50aa85(ptr %value) #0 !dbg !73 { -// CHECK:STDOUT: %1 = call ptr @"_CSome.e8f8f92d3d08d149:OptionalStorage.Core.8753681fdb639539"(ptr %value), !dbg !76 +// CHECK:STDOUT: define linkonce_odr ptr @_CSome.Optional.Core.305e266058820aa4(ptr %value) #0 !dbg !73 { +// CHECK:STDOUT: %1 = call ptr @"_CSome.e8f8f92d3d08d149:OptionalStorage.Core.35c29317da7de352"(ptr %value), !dbg !76 // CHECK:STDOUT: ret ptr %1, !dbg !77 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define linkonce_odr ptr @_CNone.Optional.Core.f04d7238fb50aa85() #0 !dbg !78 { +// CHECK:STDOUT: define linkonce_odr ptr @_CNone.Optional.Core.305e266058820aa4() #0 !dbg !78 { // CHECK:STDOUT: ret ptr null, !dbg !81 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define linkonce_odr i1 @"_CHas.e8f8f92d3d08d149:OptionalStorage.Core.fc8b3e0dc71c345e"(ptr %value) #0 !dbg !82 { +// CHECK:STDOUT: define linkonce_odr i1 @"_CHas.e8f8f92d3d08d149:OptionalStorage.Core.21c65d90918a10a4"(ptr %value) #0 !dbg !82 { // CHECK:STDOUT: %1 = icmp eq ptr %value, null, !dbg !85 // CHECK:STDOUT: %2 = xor i1 %1, true, !dbg !86 // CHECK:STDOUT: ret i1 %2, !dbg !87 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define linkonce_odr ptr @"_CGet.e8f8f92d3d08d149:OptionalStorage.Core.fc8b3e0dc71c345e"(ptr %value) #0 !dbg !88 { +// CHECK:STDOUT: define linkonce_odr ptr @"_CGet.e8f8f92d3d08d149:OptionalStorage.Core.21c65d90918a10a4"(ptr %value) #0 !dbg !88 { // CHECK:STDOUT: ret ptr %value, !dbg !91 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define linkonce_odr ptr @"_CSome.e8f8f92d3d08d149:OptionalStorage.Core.8753681fdb639539"(ptr %self) #0 !dbg !92 { +// CHECK:STDOUT: define linkonce_odr ptr @"_CSome.e8f8f92d3d08d149:OptionalStorage.Core.35c29317da7de352"(ptr %self) #0 !dbg !92 { // CHECK:STDOUT: %1 = alloca ptr, align 8, !dbg !95 // CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %1), !dbg !95 // CHECK:STDOUT: store ptr poison, ptr %1, align 8, !dbg !95 // CHECK:STDOUT: store ptr %self, ptr %1, align 8, !dbg !96 // CHECK:STDOUT: %2 = load ptr, ptr %1, align 8, !dbg !97 -// CHECK:STDOUT: call void @"_COp.8ff81f4b50934d6f:core.Destroy.Core"(ptr %1), !dbg !95 +// CHECK:STDOUT: call void @"_COp.fd6b21bba6dfd55d:core.Destroy.Core"(ptr %1), !dbg !95 // CHECK:STDOUT: ret ptr %2, !dbg !98 // CHECK:STDOUT: } // CHECK:STDOUT: @@ -602,40 +604,40 @@ fn Convert() { // CHECK:STDOUT: !9 = !{!"int", !10, i64 0} // CHECK:STDOUT: !10 = !{!"omnipotent char", !11, i64 0} // CHECK:STDOUT: !11 = !{!"Simple C++ TBAA"} -// CHECK:STDOUT: !12 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.Main", scope: null, file: !1, line: 8, type: !13, spFlags: DISPFlagDefinition, unit: !0) +// CHECK:STDOUT: !12 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.Main", scope: null, file: !1, line: 10, type: !13, spFlags: DISPFlagDefinition, unit: !0) // CHECK:STDOUT: !13 = !DISubroutineType(types: !14) // CHECK:STDOUT: !14 = !{null} -// CHECK:STDOUT: !15 = !DILocation(line: 9, column: 12, scope: !12) -// CHECK:STDOUT: !16 = !DILocation(line: 9, column: 3, scope: !12) -// CHECK:STDOUT: !17 = !DILocation(line: 8, column: 1, scope: !12) -// CHECK:STDOUT: !18 = distinct !DISubprogram(name: "Op", linkageName: "_COp.bde6c3800c3f9965:core.Destroy.Core", scope: null, file: !1, line: 9, type: !19, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !22) +// CHECK:STDOUT: !15 = !DILocation(line: 11, column: 12, scope: !12) +// CHECK:STDOUT: !16 = !DILocation(line: 11, column: 3, scope: !12) +// CHECK:STDOUT: !17 = !DILocation(line: 10, column: 1, scope: !12) +// CHECK:STDOUT: !18 = distinct !DISubprogram(name: "Op", linkageName: "_COp.53a1c4a6a5cbb234:core.Destroy.Core", scope: null, file: !1, line: 11, type: !19, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !22) // CHECK:STDOUT: !19 = !DISubroutineType(types: !20) // CHECK:STDOUT: !20 = !{null, !21} // CHECK:STDOUT: !21 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 64) // CHECK:STDOUT: !22 = !{!23} // CHECK:STDOUT: !23 = !DILocalVariable(arg: 1, scope: !18, type: !21) -// CHECK:STDOUT: !24 = !DILocation(line: 9, column: 12, scope: !18) -// CHECK:STDOUT: !25 = distinct !DISubprogram(name: "Op", linkageName: "_COp.8ff81f4b50934d6f:core.Destroy.Core", scope: null, file: !1, line: 9, type: !19, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !26) +// CHECK:STDOUT: !24 = !DILocation(line: 11, column: 12, scope: !18) +// CHECK:STDOUT: !25 = distinct !DISubprogram(name: "Op", linkageName: "_COp.fd6b21bba6dfd55d:core.Destroy.Core", scope: null, file: !1, line: 11, type: !19, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !26) // CHECK:STDOUT: !26 = !{!27} // CHECK:STDOUT: !27 = !DILocalVariable(arg: 1, scope: !25, type: !21) -// CHECK:STDOUT: !28 = !DILocation(line: 9, column: 12, scope: !25) -// CHECK:STDOUT: !29 = distinct !DISubprogram(name: "Op", linkageName: "_COp.d67a36d0f9ac97ca:core.Destroy.Core", scope: null, file: !1, line: 9, type: !19, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !30) +// CHECK:STDOUT: !28 = !DILocation(line: 11, column: 12, scope: !25) +// CHECK:STDOUT: !29 = distinct !DISubprogram(name: "Op", linkageName: "_COp.cde1f9fdf283467b:core.Destroy.Core", scope: null, file: !1, line: 11, type: !19, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !30) // CHECK:STDOUT: !30 = !{!31} // CHECK:STDOUT: !31 = !DILocalVariable(arg: 1, scope: !29, type: !21) -// CHECK:STDOUT: !32 = !DILocation(line: 9, column: 12, scope: !29) -// CHECK:STDOUT: !33 = distinct !DISubprogram(name: "Op", linkageName: "_COp.930f6ffe20ad4a64:core.Destroy.Core", scope: null, file: !1, line: 9, type: !19, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !34) +// CHECK:STDOUT: !32 = !DILocation(line: 11, column: 12, scope: !29) +// CHECK:STDOUT: !33 = distinct !DISubprogram(name: "Op", linkageName: "_COp.fc86501cbc1f8185:core.Destroy.Core", scope: null, file: !1, line: 11, type: !19, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !34) // CHECK:STDOUT: !34 = !{!35} // CHECK:STDOUT: !35 = !DILocalVariable(arg: 1, scope: !33, type: !21) -// CHECK:STDOUT: !36 = !DILocation(line: 9, column: 12, scope: !33) -// CHECK:STDOUT: !37 = distinct !DISubprogram(name: "Op", linkageName: "_COp.52f3be89096e2220:core.Destroy.Core", scope: null, file: !1, line: 9, type: !19, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !38) +// CHECK:STDOUT: !36 = !DILocation(line: 11, column: 12, scope: !33) +// CHECK:STDOUT: !37 = distinct !DISubprogram(name: "Op", linkageName: "_COp.b682b9cd8310efa2:core.Destroy.Core", scope: null, file: !1, line: 11, type: !19, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !38) // CHECK:STDOUT: !38 = !{!39} // CHECK:STDOUT: !39 = !DILocalVariable(arg: 1, scope: !37, type: !21) -// CHECK:STDOUT: !40 = !DILocation(line: 9, column: 12, scope: !37) -// CHECK:STDOUT: !41 = distinct !DISubprogram(name: "Op", linkageName: "_COp.16b2729c97ad4472:core.Destroy.Core", scope: null, file: !1, line: 9, type: !19, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !42) +// CHECK:STDOUT: !40 = !DILocation(line: 11, column: 12, scope: !37) +// CHECK:STDOUT: !41 = distinct !DISubprogram(name: "Op", linkageName: "_COp.a6ac3d473017b2cc:core.Destroy.Core", scope: null, file: !1, line: 11, type: !19, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !42) // CHECK:STDOUT: !42 = !{!43} // CHECK:STDOUT: !43 = !DILocalVariable(arg: 1, scope: !41, type: !21) -// CHECK:STDOUT: !44 = !DILocation(line: 9, column: 12, scope: !41) -// CHECK:STDOUT: !45 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.7a59268f02b553a8", scope: null, file: !46, line: 105, type: !47, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !49) +// CHECK:STDOUT: !44 = !DILocation(line: 11, column: 12, scope: !41) +// CHECK:STDOUT: !45 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.538322f9fda4254f:ImplicitAs.a276ba298c70ba87.Core.f9fd89fc1ccb531f", scope: null, file: !46, line: 105, type: !47, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !49) // CHECK:STDOUT: !46 = !DIFile(filename: "{{.*}}/prelude/types/optional.carbon", directory: "") // CHECK:STDOUT: !47 = !DISubroutineType(types: !48) // CHECK:STDOUT: !48 = !{!21, !21} @@ -643,7 +645,7 @@ fn Convert() { // CHECK:STDOUT: !50 = !DILocalVariable(arg: 1, scope: !45, type: !21) // CHECK:STDOUT: !51 = !DILocation(line: 106, column: 12, scope: !45) // CHECK:STDOUT: !52 = !DILocation(line: 106, column: 5, scope: !45) -// CHECK:STDOUT: !53 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.Optional.c661605f12aa337a.Core:OptionalAs.1dac4564233fecd1.Core.703e8dd9cedc135a", scope: null, file: !46, line: 95, type: !47, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !54) +// CHECK:STDOUT: !53 = distinct !DISubprogram(name: "Convert", linkageName: "_CConvert.Optional.c661605f12aa337a.Core:OptionalAs.1dac4564233fecd1.Core.3efc4c2a62f24739", scope: null, file: !46, line: 95, type: !47, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !54) // CHECK:STDOUT: !54 = !{!55} // CHECK:STDOUT: !55 = !DILocalVariable(arg: 1, scope: !53, type: !21) // CHECK:STDOUT: !56 = !DILocation(line: 97, column: 31, scope: !53) @@ -653,36 +655,36 @@ fn Convert() { // CHECK:STDOUT: !60 = !DILocation(line: 97, column: 7, scope: !53) // CHECK:STDOUT: !61 = !DILocation(line: 99, column: 12, scope: !53) // CHECK:STDOUT: !62 = !DILocation(line: 99, column: 5, scope: !53) -// CHECK:STDOUT: !63 = distinct !DISubprogram(name: "HasValue", linkageName: "_CHasValue.Optional.Core.f65d494664285214", scope: null, file: !46, line: 36, type: !47, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !64) +// CHECK:STDOUT: !63 = distinct !DISubprogram(name: "HasValue", linkageName: "_CHasValue.Optional.Core.0c3518913b4fb338", scope: null, file: !46, line: 36, type: !47, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !64) // CHECK:STDOUT: !64 = !{!65} // CHECK:STDOUT: !65 = !DILocalVariable(arg: 1, scope: !63, type: !21) // CHECK:STDOUT: !66 = !DILocation(line: 37, column: 12, scope: !63) // CHECK:STDOUT: !67 = !DILocation(line: 37, column: 5, scope: !63) -// CHECK:STDOUT: !68 = distinct !DISubprogram(name: "Get", linkageName: "_CGet.Optional.Core.f65d494664285214", scope: null, file: !46, line: 39, type: !47, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !69) +// CHECK:STDOUT: !68 = distinct !DISubprogram(name: "Get", linkageName: "_CGet.Optional.Core.0c3518913b4fb338", scope: null, file: !46, line: 39, type: !47, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !69) // CHECK:STDOUT: !69 = !{!70} // CHECK:STDOUT: !70 = !DILocalVariable(arg: 1, scope: !68, type: !21) // CHECK:STDOUT: !71 = !DILocation(line: 40, column: 12, scope: !68) // CHECK:STDOUT: !72 = !DILocation(line: 40, column: 5, scope: !68) -// CHECK:STDOUT: !73 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.Optional.Core.f04d7238fb50aa85", scope: null, file: !46, line: 33, type: !47, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !74) +// CHECK:STDOUT: !73 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.Optional.Core.305e266058820aa4", scope: null, file: !46, line: 33, type: !47, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !74) // CHECK:STDOUT: !74 = !{!75} // CHECK:STDOUT: !75 = !DILocalVariable(arg: 1, scope: !73, type: !21) // CHECK:STDOUT: !76 = !DILocation(line: 34, column: 12, scope: !73) // CHECK:STDOUT: !77 = !DILocation(line: 34, column: 5, scope: !73) -// CHECK:STDOUT: !78 = distinct !DISubprogram(name: "None", linkageName: "_CNone.Optional.Core.f04d7238fb50aa85", scope: null, file: !46, line: 30, type: !79, spFlags: DISPFlagDefinition, unit: !0) +// CHECK:STDOUT: !78 = distinct !DISubprogram(name: "None", linkageName: "_CNone.Optional.Core.305e266058820aa4", scope: null, file: !46, line: 30, type: !79, spFlags: DISPFlagDefinition, unit: !0) // CHECK:STDOUT: !79 = !DISubroutineType(types: !80) // CHECK:STDOUT: !80 = !{!21} // CHECK:STDOUT: !81 = !DILocation(line: 31, column: 5, scope: !78) -// CHECK:STDOUT: !82 = distinct !DISubprogram(name: "Has", linkageName: "_CHas.e8f8f92d3d08d149:OptionalStorage.Core.fc8b3e0dc71c345e", scope: null, file: !46, line: 172, type: !47, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !83) +// CHECK:STDOUT: !82 = distinct !DISubprogram(name: "Has", linkageName: "_CHas.e8f8f92d3d08d149:OptionalStorage.Core.21c65d90918a10a4", scope: null, file: !46, line: 172, type: !47, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !83) // CHECK:STDOUT: !83 = !{!84} // CHECK:STDOUT: !84 = !DILocalVariable(arg: 1, scope: !82, type: !21) // CHECK:STDOUT: !85 = !DILocation(line: 173, column: 16, scope: !82) // CHECK:STDOUT: !86 = !DILocation(line: 173, column: 12, scope: !82) // CHECK:STDOUT: !87 = !DILocation(line: 173, column: 5, scope: !82) -// CHECK:STDOUT: !88 = distinct !DISubprogram(name: "Get", linkageName: "_CGet.e8f8f92d3d08d149:OptionalStorage.Core.fc8b3e0dc71c345e", scope: null, file: !46, line: 175, type: !47, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !89) +// CHECK:STDOUT: !88 = distinct !DISubprogram(name: "Get", linkageName: "_CGet.e8f8f92d3d08d149:OptionalStorage.Core.21c65d90918a10a4", scope: null, file: !46, line: 175, type: !47, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !89) // CHECK:STDOUT: !89 = !{!90} // CHECK:STDOUT: !90 = !DILocalVariable(arg: 1, scope: !88, type: !21) // CHECK:STDOUT: !91 = !DILocation(line: 176, column: 5, scope: !88) -// CHECK:STDOUT: !92 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.e8f8f92d3d08d149:OptionalStorage.Core.8753681fdb639539", scope: null, file: !46, line: 166, type: !47, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !93) +// CHECK:STDOUT: !92 = distinct !DISubprogram(name: "Some", linkageName: "_CSome.e8f8f92d3d08d149:OptionalStorage.Core.35c29317da7de352", scope: null, file: !46, line: 166, type: !47, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !93) // CHECK:STDOUT: !93 = !{!94} // CHECK:STDOUT: !94 = !DILocalVariable(arg: 1, scope: !92, type: !21) // CHECK:STDOUT: !95 = !DILocation(line: 167, column: 14, scope: !92) diff --git a/toolchain/lower/testdata/interop/cpp/std_initializer_list.carbon b/toolchain/lower/testdata/interop/cpp/std_initializer_list_pointer_pointer.carbon similarity index 51% rename from toolchain/lower/testdata/interop/cpp/std_initializer_list.carbon rename to toolchain/lower/testdata/interop/cpp/std_initializer_list_pointer_pointer.carbon index 8c9a866b2b70..94e58d632995 100644 --- a/toolchain/lower/testdata/interop/cpp/std_initializer_list.carbon +++ b/toolchain/lower/testdata/interop/cpp/std_initializer_list_pointer_pointer.carbon @@ -6,9 +6,9 @@ // // AUTOUPDATE // TIP: To test this file alone, run: -// TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/lower/testdata/interop/cpp/std_initializer_list.carbon +// TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/lower/testdata/interop/cpp/std_initializer_list_pointer_pointer.carbon // TIP: To dump output, run: -// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/lower/testdata/interop/cpp/std_initializer_list.carbon +// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/lower/testdata/interop/cpp/std_initializer_list_pointer_pointer.carbon // --- initializer_list_pointer_pointer.h @@ -30,26 +30,6 @@ struct vector_like { ~vector_like() {} }; -// --- initializer_list_pointer_size.h - -namespace std { - using size_t = decltype(sizeof(0)); - - template class initializer_list { - public: - initializer_list() {} - - private: - T* begin_ = nullptr; - size_t size_ = 0; - }; -} - -struct vector_like { - vector_like(std::initializer_list list) {} - ~vector_like() {} -}; - // --- nontrivial_dtor.h struct nontrivial_dtor { @@ -84,33 +64,6 @@ fn InitNontrivialDtor() { WithinLifetime(); } -// --- use_pointer_size.carbon - -library "[[@TEST_NAME]]"; - -import Cpp library "initializer_list_pointer_size.h"; -import Cpp library "nontrivial_dtor.h"; - -// TODO: When we support more precise modeling of temporary lifetimes, ensure -// that this is called *before* the elements of the underlying array are -// destroyed in the non-vector-like cases. -fn WithinLifetime(); - -fn InitDirectly() { - var _: Cpp.std.initializer_list(i32) = (1, 2, 3); - WithinLifetime(); -} - -fn InitVectorLike() { - var _: Cpp.vector_like = (1, 2, 3); - WithinLifetime(); -} - -fn InitNontrivialDtor() { - var _: Cpp.std.initializer_list(Cpp.nontrivial_dtor) = ((), (), ()); - WithinLifetime(); -} - // CHECK:STDOUT: ; --- // CHECK:STDOUT: ; ModuleID = 'use_pointer_pointer.carbon' // CHECK:STDOUT: source_filename = "use_pointer_pointer.carbon" @@ -362,255 +315,3 @@ fn InitNontrivialDtor() { // CHECK:STDOUT: !55 = !DILocalVariable(arg: 1, scope: !53, type: !29) // CHECK:STDOUT: !56 = !DILocation(line: 23, column: 58, scope: !53) // CHECK:STDOUT: -// CHECK:STDOUT: ; --- -// CHECK:STDOUT: ; ModuleID = 'use_pointer_size.carbon' -// CHECK:STDOUT: source_filename = "use_pointer_size.carbon" -// CHECK:STDOUT: target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" -// CHECK:STDOUT: target triple = "x86_64-unknown-linux-gnu" -// CHECK:STDOUT: -// CHECK:STDOUT: %"class.std::initializer_list.6" = type { ptr, i64 } -// CHECK:STDOUT: -// CHECK:STDOUT: $_ZN11vector_likeD2Ev = comdat any -// CHECK:STDOUT: -// CHECK:STDOUT: $_ZN15nontrivial_dtorD2Ev = comdat any -// CHECK:STDOUT: -// CHECK:STDOUT: $_ZN11vector_likeC2ESt16initializer_listIiE = comdat any -// CHECK:STDOUT: -// CHECK:STDOUT: $_ZN15nontrivial_dtorC2Ev = comdat any -// CHECK:STDOUT: -// CHECK:STDOUT: @array = internal constant [3 x i32] [i32 1, i32 2, i32 3] -// CHECK:STDOUT: @array.loc13_50.15 = internal constant [3 x i32] [i32 1, i32 2, i32 3] -// CHECK:STDOUT: -// CHECK:STDOUT: declare void @_CWithinLifetime.Main() -// CHECK:STDOUT: -// CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define void @_CInitDirectly.Main() #0 !dbg !12 { -// CHECK:STDOUT: entry: -// CHECK:STDOUT: %_.var = alloca [16 x i8], align 8, !dbg !15 -// CHECK:STDOUT: %.loc13_50.3.temp = alloca [3 x i32], align 4, !dbg !16 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %_.var), !dbg !15 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc13_50.3.temp), !dbg !16 -// CHECK:STDOUT: %.loc13_50.4.array.index = getelementptr inbounds [3 x i32], ptr %.loc13_50.3.temp, i32 0, i64 0, !dbg !16 -// CHECK:STDOUT: %.loc13_50.7.array.index = getelementptr inbounds [3 x i32], ptr %.loc13_50.3.temp, i32 0, i64 1, !dbg !16 -// CHECK:STDOUT: %.loc13_50.10.array.index = getelementptr inbounds [3 x i32], ptr %.loc13_50.3.temp, i32 0, i64 2, !dbg !16 -// CHECK:STDOUT: %initializer_list.initializer_list.call.init_list.begin = getelementptr inbounds nuw [16 x i8], ptr %_.var, i32 0, i32 0, !dbg !15 -// CHECK:STDOUT: store ptr @array.loc13_50.15, ptr %initializer_list.initializer_list.call.init_list.begin, align 8, !dbg !15 -// CHECK:STDOUT: %initializer_list.initializer_list.call.init_list.size = getelementptr inbounds nuw [16 x i8], ptr %_.var, i32 0, i32 8, !dbg !15 -// CHECK:STDOUT: store i64 3, ptr %initializer_list.initializer_list.call.init_list.size, align 8, !dbg !15 -// CHECK:STDOUT: call void @_CWithinLifetime.Main(), !dbg !17 -// CHECK:STDOUT: call void @"_COp.3bc428c96004ce87:core.Destroy.Core"(ptr @array), !dbg !16 -// CHECK:STDOUT: ret void, !dbg !18 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define weak_odr void @"_COp.70db2d92ffddbef7:core.Destroy.Core"(ptr %self) #0 !dbg !19 { -// CHECK:STDOUT: entry: -// CHECK:STDOUT: ret void, !dbg !25 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define weak_odr void @"_COp.3bc428c96004ce87:core.Destroy.Core"(ptr %self) #0 !dbg !26 { -// CHECK:STDOUT: entry: -// CHECK:STDOUT: ret void, !dbg !32 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define void @_CInitVectorLike.Main() #0 !dbg !33 { -// CHECK:STDOUT: entry: -// CHECK:STDOUT: %_.var = alloca [1 x i8], align 1, !dbg !34 -// CHECK:STDOUT: %.loc18_36.2.temp = alloca [16 x i8], align 8, !dbg !35 -// CHECK:STDOUT: %.loc18_36.4.temp = alloca [3 x i32], align 4, !dbg !35 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %_.var), !dbg !34 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc18_36.2.temp), !dbg !35 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc18_36.4.temp), !dbg !35 -// CHECK:STDOUT: %.loc18_36.5.array.index = getelementptr inbounds [3 x i32], ptr %.loc18_36.4.temp, i32 0, i64 0, !dbg !35 -// CHECK:STDOUT: %.loc18_36.8.array.index = getelementptr inbounds [3 x i32], ptr %.loc18_36.4.temp, i32 0, i64 1, !dbg !35 -// CHECK:STDOUT: %.loc18_36.11.array.index = getelementptr inbounds [3 x i32], ptr %.loc18_36.4.temp, i32 0, i64 2, !dbg !35 -// CHECK:STDOUT: %initializer_list.initializer_list.call.init_list.begin = getelementptr inbounds nuw [16 x i8], ptr %.loc18_36.2.temp, i32 0, i32 0, !dbg !35 -// CHECK:STDOUT: store ptr @array.loc13_50.15, ptr %initializer_list.initializer_list.call.init_list.begin, align 8, !dbg !35 -// CHECK:STDOUT: %initializer_list.initializer_list.call.init_list.size = getelementptr inbounds nuw [16 x i8], ptr %.loc18_36.2.temp, i32 0, i32 8, !dbg !35 -// CHECK:STDOUT: store i64 3, ptr %initializer_list.initializer_list.call.init_list.size, align 8, !dbg !35 -// CHECK:STDOUT: call void @_ZN11vector_likeC1ESt16initializer_listIiE.carbon_thunk._(ptr %.loc18_36.2.temp, ptr %_.var), !dbg !34 -// CHECK:STDOUT: call void @_CWithinLifetime.Main(), !dbg !36 -// CHECK:STDOUT: call void @"_COp.3bc428c96004ce87:core.Destroy.Core"(ptr @array), !dbg !35 -// CHECK:STDOUT: call void @_ZN11vector_likeD2Ev(ptr %_.var), !dbg !34 -// CHECK:STDOUT: ret void, !dbg !37 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress uwtable -// CHECK:STDOUT: define internal void @_ZN11vector_likeC1ESt16initializer_listIiE.carbon_thunk._(ptr noundef %list, ptr noundef %return) #1 { -// CHECK:STDOUT: entry: -// CHECK:STDOUT: %list.addr = alloca ptr, align 8 -// CHECK:STDOUT: %return.addr = alloca ptr, align 8 -// CHECK:STDOUT: %agg.tmp = alloca %"class.std::initializer_list.6", align 8 -// CHECK:STDOUT: store ptr %list, ptr %list.addr, align 8, !tbaa !38 -// CHECK:STDOUT: store ptr %return, ptr %return.addr, align 8, !tbaa !41 -// CHECK:STDOUT: %0 = load ptr, ptr %return.addr, align 8, !tbaa !41 -// CHECK:STDOUT: %1 = load ptr, ptr %list.addr, align 8, !tbaa !38 -// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 %agg.tmp, ptr align 8 %1, i64 16, i1 false), !tbaa.struct !43 -// CHECK:STDOUT: %2 = getelementptr inbounds nuw { ptr, i64 }, ptr %agg.tmp, i32 0, i32 0 -// CHECK:STDOUT: %3 = load ptr, ptr %2, align 8 -// CHECK:STDOUT: %4 = getelementptr inbounds nuw { ptr, i64 }, ptr %agg.tmp, i32 0, i32 1 -// CHECK:STDOUT: %5 = load i64, ptr %4, align 8 -// CHECK:STDOUT: call void @_ZN11vector_likeC2ESt16initializer_listIiE(ptr noundef nonnull align 1 dereferenceable(1) %0, ptr %3, i64 %5) -// CHECK:STDOUT: ret void -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: ; Function Attrs: mustprogress nounwind uwtable -// CHECK:STDOUT: define linkonce_odr dso_local void @_ZN11vector_likeD2Ev(ptr noundef nonnull align 1 dereferenceable(1) %this) unnamed_addr #2 comdat align 2 { -// CHECK:STDOUT: entry: -// CHECK:STDOUT: %this.addr = alloca ptr, align 8 -// CHECK:STDOUT: store ptr %this, ptr %this.addr, align 8, !tbaa !41 -// CHECK:STDOUT: %this1 = load ptr, ptr %this.addr, align 8 -// CHECK:STDOUT: ret void -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define void @_CInitNontrivialDtor.Main() #0 !dbg !48 { -// CHECK:STDOUT: entry: -// CHECK:STDOUT: %_.var = alloca [16 x i8], align 8, !dbg !49 -// CHECK:STDOUT: %.loc23_69.17.temp = alloca [3 x [1 x i8]], align 1, !dbg !50 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %_.var), !dbg !49 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc23_69.17.temp), !dbg !50 -// CHECK:STDOUT: %.loc23_69.18.array.index = getelementptr inbounds [3 x [1 x i8]], ptr %.loc23_69.17.temp, i32 0, i64 0, !dbg !50 -// CHECK:STDOUT: call void @_ZN15nontrivial_dtorC1Ev.carbon_thunk_tuple.(ptr %.loc23_69.18.array.index), !dbg !50 -// CHECK:STDOUT: %.loc23_69.16.array.index = getelementptr inbounds [3 x [1 x i8]], ptr %.loc23_69.17.temp, i32 0, i64 1, !dbg !50 -// CHECK:STDOUT: call void @_ZN15nontrivial_dtorC1Ev.carbon_thunk_tuple.(ptr %.loc23_69.16.array.index), !dbg !50 -// CHECK:STDOUT: %.loc23_69.15.array.index = getelementptr inbounds [3 x [1 x i8]], ptr %.loc23_69.17.temp, i32 0, i64 2, !dbg !50 -// CHECK:STDOUT: call void @_ZN15nontrivial_dtorC1Ev.carbon_thunk_tuple.(ptr %.loc23_69.15.array.index), !dbg !50 -// CHECK:STDOUT: %initializer_list.initializer_list.call.init_list.begin = getelementptr inbounds nuw [16 x i8], ptr %_.var, i32 0, i32 0, !dbg !49 -// CHECK:STDOUT: store ptr %.loc23_69.17.temp, ptr %initializer_list.initializer_list.call.init_list.begin, align 8, !dbg !49 -// CHECK:STDOUT: %initializer_list.initializer_list.call.init_list.size = getelementptr inbounds nuw [16 x i8], ptr %_.var, i32 0, i32 8, !dbg !49 -// CHECK:STDOUT: store i64 3, ptr %initializer_list.initializer_list.call.init_list.size, align 8, !dbg !49 -// CHECK:STDOUT: call void @_CWithinLifetime.Main(), !dbg !51 -// CHECK:STDOUT: call void @"_COp.baa51490b2bdaa96:core.Destroy.Core"(ptr %.loc23_69.17.temp), !dbg !50 -// CHECK:STDOUT: ret void, !dbg !52 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress uwtable -// CHECK:STDOUT: define internal void @_ZN15nontrivial_dtorC1Ev.carbon_thunk_tuple.(ptr noundef %return) #1 { -// CHECK:STDOUT: entry: -// CHECK:STDOUT: %return.addr = alloca ptr, align 8 -// CHECK:STDOUT: store ptr %return, ptr %return.addr, align 8, !tbaa !53 -// CHECK:STDOUT: %0 = load ptr, ptr %return.addr, align 8, !tbaa !53 -// CHECK:STDOUT: call void @_ZN15nontrivial_dtorC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %0) -// CHECK:STDOUT: ret void -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: ; Function Attrs: mustprogress nounwind uwtable -// CHECK:STDOUT: define linkonce_odr dso_local void @_ZN15nontrivial_dtorD2Ev(ptr noundef nonnull align 1 dereferenceable(1) %this) unnamed_addr #2 comdat align 2 { -// CHECK:STDOUT: entry: -// CHECK:STDOUT: %this.addr = alloca ptr, align 8 -// CHECK:STDOUT: store ptr %this, ptr %this.addr, align 8, !tbaa !53 -// CHECK:STDOUT: %this1 = load ptr, ptr %this.addr, align 8 -// CHECK:STDOUT: ret void -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define weak_odr void @"_COp.baa51490b2bdaa96:core.Destroy.Core"(ptr %self) #0 !dbg !55 { -// CHECK:STDOUT: entry: -// CHECK:STDOUT: ret void, !dbg !58 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) -// CHECK:STDOUT: declare void @llvm.lifetime.start.p0(ptr captures(none)) #3 -// CHECK:STDOUT: -// CHECK:STDOUT: ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) -// CHECK:STDOUT: declare void @llvm.memcpy.p0.p0.i64(ptr noalias writeonly captures(none), ptr noalias readonly captures(none), i64, i1 immarg) #3 -// CHECK:STDOUT: -// CHECK:STDOUT: ; Function Attrs: mustprogress nounwind uwtable -// CHECK:STDOUT: define linkonce_odr dso_local void @_ZN11vector_likeC2ESt16initializer_listIiE(ptr noundef nonnull align 1 dereferenceable(1) %this, ptr %list.coerce0, i64 %list.coerce1) unnamed_addr #2 comdat align 2 { -// CHECK:STDOUT: entry: -// CHECK:STDOUT: %list = alloca %"class.std::initializer_list.6", align 8 -// CHECK:STDOUT: %this.addr = alloca ptr, align 8 -// CHECK:STDOUT: %0 = getelementptr inbounds nuw { ptr, i64 }, ptr %list, i32 0, i32 0 -// CHECK:STDOUT: store ptr %list.coerce0, ptr %0, align 8 -// CHECK:STDOUT: %1 = getelementptr inbounds nuw { ptr, i64 }, ptr %list, i32 0, i32 1 -// CHECK:STDOUT: store i64 %list.coerce1, ptr %1, align 8 -// CHECK:STDOUT: store ptr %this, ptr %this.addr, align 8, !tbaa !41 -// CHECK:STDOUT: %this1 = load ptr, ptr %this.addr, align 8 -// CHECK:STDOUT: ret void -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: ; Function Attrs: mustprogress nounwind uwtable -// CHECK:STDOUT: define linkonce_odr dso_local void @_ZN15nontrivial_dtorC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %this) unnamed_addr #2 comdat align 2 { -// CHECK:STDOUT: entry: -// CHECK:STDOUT: %this.addr = alloca ptr, align 8 -// CHECK:STDOUT: store ptr %this, ptr %this.addr, align 8, !tbaa !53 -// CHECK:STDOUT: %this1 = load ptr, ptr %this.addr, align 8 -// CHECK:STDOUT: ret void -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: ; uselistorder directives -// CHECK:STDOUT: uselistorder ptr @_ZN15nontrivial_dtorC1Ev.carbon_thunk_tuple., { 2, 1, 0 } -// CHECK:STDOUT: uselistorder ptr @llvm.lifetime.start.p0, { 6, 5, 4, 3, 2, 1, 0 } -// CHECK:STDOUT: -// CHECK:STDOUT: attributes #0 = { nounwind } -// CHECK:STDOUT: attributes #1 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } -// CHECK:STDOUT: attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } -// CHECK:STDOUT: attributes #3 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } -// CHECK:STDOUT: -// CHECK:STDOUT: !llvm.dbg.cu = !{!0} -// CHECK:STDOUT: !llvm.module.flags = !{!2, !3, !4, !5, !6} -// CHECK:STDOUT: !llvm.errno.tbaa = !{!7} -// CHECK:STDOUT: -// CHECK:STDOUT: !0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "carbon", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug) -// CHECK:STDOUT: !1 = !DIFile(filename: "use_pointer_size.carbon", directory: "") -// CHECK:STDOUT: !2 = !{i32 8, !"PIC Level", i32 2} -// CHECK:STDOUT: !3 = !{i32 7, !"PIE Level", i32 2} -// CHECK:STDOUT: !4 = !{i32 7, !"uwtable", i32 2} -// CHECK:STDOUT: !5 = !{i32 7, !"Dwarf Version", i32 5} -// CHECK:STDOUT: !6 = !{i32 2, !"Debug Info Version", i32 3} -// CHECK:STDOUT: !7 = !{!8, !9, i64 0} -// CHECK:STDOUT: !8 = !{!"__libc_errno", !9, i64 0} -// CHECK:STDOUT: !9 = !{!"int", !10, i64 0} -// CHECK:STDOUT: !10 = !{!"omnipotent char", !11, i64 0} -// CHECK:STDOUT: !11 = !{!"Simple C++ TBAA"} -// CHECK:STDOUT: !12 = distinct !DISubprogram(name: "InitDirectly", linkageName: "_CInitDirectly.Main", scope: null, file: !1, line: 12, type: !13, spFlags: DISPFlagDefinition, unit: !0) -// CHECK:STDOUT: !13 = !DISubroutineType(types: !14) -// CHECK:STDOUT: !14 = !{null} -// CHECK:STDOUT: !15 = !DILocation(line: 13, column: 3, scope: !12) -// CHECK:STDOUT: !16 = !DILocation(line: 13, column: 42, scope: !12) -// CHECK:STDOUT: !17 = !DILocation(line: 14, column: 3, scope: !12) -// CHECK:STDOUT: !18 = !DILocation(line: 12, column: 1, scope: !12) -// CHECK:STDOUT: !19 = distinct !DISubprogram(name: "Op", linkageName: "_COp.70db2d92ffddbef7:core.Destroy.Core", scope: null, file: !1, line: 13, type: !20, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !23) -// CHECK:STDOUT: !20 = !DISubroutineType(types: !21) -// CHECK:STDOUT: !21 = !{null, !22} -// CHECK:STDOUT: !22 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) -// CHECK:STDOUT: !23 = !{!24} -// CHECK:STDOUT: !24 = !DILocalVariable(arg: 1, scope: !19, type: !22) -// CHECK:STDOUT: !25 = !DILocation(line: 13, column: 42, scope: !19) -// CHECK:STDOUT: !26 = distinct !DISubprogram(name: "Op", linkageName: "_COp.3bc428c96004ce87:core.Destroy.Core", scope: null, file: !1, line: 13, type: !27, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !30) -// CHECK:STDOUT: !27 = !DISubroutineType(types: !28) -// CHECK:STDOUT: !28 = !{null, !29} -// CHECK:STDOUT: !29 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 64) -// CHECK:STDOUT: !30 = !{!31} -// CHECK:STDOUT: !31 = !DILocalVariable(arg: 1, scope: !26, type: !29) -// CHECK:STDOUT: !32 = !DILocation(line: 13, column: 42, scope: !26) -// CHECK:STDOUT: !33 = distinct !DISubprogram(name: "InitVectorLike", linkageName: "_CInitVectorLike.Main", scope: null, file: !1, line: 17, type: !13, spFlags: DISPFlagDefinition, unit: !0) -// CHECK:STDOUT: !34 = !DILocation(line: 18, column: 3, scope: !33) -// CHECK:STDOUT: !35 = !DILocation(line: 18, column: 28, scope: !33) -// CHECK:STDOUT: !36 = !DILocation(line: 19, column: 3, scope: !33) -// CHECK:STDOUT: !37 = !DILocation(line: 17, column: 1, scope: !33) -// CHECK:STDOUT: !38 = !{!39, !39, i64 0} -// CHECK:STDOUT: !39 = !{!"p1 _ZTSSt16initializer_listIiE", !40, i64 0} -// CHECK:STDOUT: !40 = !{!"any pointer", !10, i64 0} -// CHECK:STDOUT: !41 = !{!42, !42, i64 0} -// CHECK:STDOUT: !42 = !{!"p1 _ZTS11vector_like", !40, i64 0} -// CHECK:STDOUT: !43 = !{i64 0, i64 8, !44, i64 8, i64 8, !46} -// CHECK:STDOUT: !44 = !{!45, !45, i64 0} -// CHECK:STDOUT: !45 = !{!"p1 int", !40, i64 0} -// CHECK:STDOUT: !46 = !{!47, !47, i64 0} -// CHECK:STDOUT: !47 = !{!"long", !10, i64 0} -// CHECK:STDOUT: !48 = distinct !DISubprogram(name: "InitNontrivialDtor", linkageName: "_CInitNontrivialDtor.Main", scope: null, file: !1, line: 22, type: !13, spFlags: DISPFlagDefinition, unit: !0) -// CHECK:STDOUT: !49 = !DILocation(line: 23, column: 3, scope: !48) -// CHECK:STDOUT: !50 = !DILocation(line: 23, column: 58, scope: !48) -// CHECK:STDOUT: !51 = !DILocation(line: 24, column: 3, scope: !48) -// CHECK:STDOUT: !52 = !DILocation(line: 22, column: 1, scope: !48) -// CHECK:STDOUT: !53 = !{!54, !54, i64 0} -// CHECK:STDOUT: !54 = !{!"p1 _ZTS15nontrivial_dtor", !40, i64 0} -// CHECK:STDOUT: !55 = distinct !DISubprogram(name: "Op", linkageName: "_COp.baa51490b2bdaa96:core.Destroy.Core", scope: null, file: !1, line: 23, type: !27, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !56) -// CHECK:STDOUT: !56 = !{!57} -// CHECK:STDOUT: !57 = !DILocalVariable(arg: 1, scope: !55, type: !29) -// CHECK:STDOUT: !58 = !DILocation(line: 23, column: 58, scope: !55) -// CHECK:STDOUT: diff --git a/toolchain/lower/testdata/interop/cpp/std_initializer_list_pointer_size.carbon b/toolchain/lower/testdata/interop/cpp/std_initializer_list_pointer_size.carbon new file mode 100644 index 000000000000..3c77f60467b6 --- /dev/null +++ b/toolchain/lower/testdata/interop/cpp/std_initializer_list_pointer_size.carbon @@ -0,0 +1,318 @@ +// Part of the Carbon Language project, under the Apache License v2.0 with LLVM +// Exceptions. See /LICENSE for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon +// +// AUTOUPDATE +// TIP: To test this file alone, run: +// TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/lower/testdata/interop/cpp/std_initializer_list_pointer_size.carbon +// TIP: To dump output, run: +// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/lower/testdata/interop/cpp/std_initializer_list_pointer_size.carbon + +// --- initializer_list_pointer_size.h + +namespace std { + using size_t = decltype(sizeof(0)); + + template class initializer_list { + public: + initializer_list() {} + + private: + T* begin_ = nullptr; + size_t size_ = 0; + }; +} + +struct vector_like { + vector_like(std::initializer_list list) {} + ~vector_like() {} +}; + +// --- nontrivial_dtor.h + +struct nontrivial_dtor { + nontrivial_dtor() {} + ~nontrivial_dtor() {} +}; + +// --- use_pointer_size.carbon + +library "[[@TEST_NAME]]"; + +import Cpp library "initializer_list_pointer_size.h"; +import Cpp library "nontrivial_dtor.h"; + +// TODO: When we support more precise modeling of temporary lifetimes, ensure +// that this is called *before* the elements of the underlying array are +// destroyed in the non-vector-like cases. +fn WithinLifetime(); + +fn InitDirectly() { + var _: Cpp.std.initializer_list(i32) = (1, 2, 3); + WithinLifetime(); +} + +fn InitVectorLike() { + var _: Cpp.vector_like = (1, 2, 3); + WithinLifetime(); +} + +fn InitNontrivialDtor() { + var _: Cpp.std.initializer_list(Cpp.nontrivial_dtor) = ((), (), ()); + WithinLifetime(); +} + +// CHECK:STDOUT: ; --- +// CHECK:STDOUT: ; ModuleID = 'use_pointer_size.carbon' +// CHECK:STDOUT: source_filename = "use_pointer_size.carbon" +// CHECK:STDOUT: target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128" +// CHECK:STDOUT: target triple = "x86_64-unknown-linux-gnu" +// CHECK:STDOUT: +// CHECK:STDOUT: %"class.std::initializer_list" = type { ptr, i64 } +// CHECK:STDOUT: +// CHECK:STDOUT: $_ZN11vector_likeD2Ev = comdat any +// CHECK:STDOUT: +// CHECK:STDOUT: $_ZN15nontrivial_dtorD2Ev = comdat any +// CHECK:STDOUT: +// CHECK:STDOUT: $_ZN11vector_likeC2ESt16initializer_listIiE = comdat any +// CHECK:STDOUT: +// CHECK:STDOUT: $_ZN15nontrivial_dtorC2Ev = comdat any +// CHECK:STDOUT: +// CHECK:STDOUT: @array = internal constant [3 x i32] [i32 1, i32 2, i32 3] +// CHECK:STDOUT: @array.loc13_50.15 = internal constant [3 x i32] [i32 1, i32 2, i32 3] +// CHECK:STDOUT: +// CHECK:STDOUT: declare void @_CWithinLifetime.Main() +// CHECK:STDOUT: +// CHECK:STDOUT: ; Function Attrs: nounwind +// CHECK:STDOUT: define void @_CInitDirectly.Main() #0 !dbg !12 { +// CHECK:STDOUT: entry: +// CHECK:STDOUT: %_.var = alloca [16 x i8], align 8, !dbg !15 +// CHECK:STDOUT: %.loc13_50.3.temp = alloca [3 x i32], align 4, !dbg !16 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %_.var), !dbg !15 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc13_50.3.temp), !dbg !16 +// CHECK:STDOUT: %.loc13_50.4.array.index = getelementptr inbounds [3 x i32], ptr %.loc13_50.3.temp, i32 0, i64 0, !dbg !16 +// CHECK:STDOUT: %.loc13_50.7.array.index = getelementptr inbounds [3 x i32], ptr %.loc13_50.3.temp, i32 0, i64 1, !dbg !16 +// CHECK:STDOUT: %.loc13_50.10.array.index = getelementptr inbounds [3 x i32], ptr %.loc13_50.3.temp, i32 0, i64 2, !dbg !16 +// CHECK:STDOUT: %initializer_list.initializer_list.call.init_list.begin = getelementptr inbounds nuw [16 x i8], ptr %_.var, i32 0, i32 0, !dbg !15 +// CHECK:STDOUT: store ptr @array.loc13_50.15, ptr %initializer_list.initializer_list.call.init_list.begin, align 8, !dbg !15 +// CHECK:STDOUT: %initializer_list.initializer_list.call.init_list.size = getelementptr inbounds nuw [16 x i8], ptr %_.var, i32 0, i32 8, !dbg !15 +// CHECK:STDOUT: store i64 3, ptr %initializer_list.initializer_list.call.init_list.size, align 8, !dbg !15 +// CHECK:STDOUT: call void @_CWithinLifetime.Main(), !dbg !17 +// CHECK:STDOUT: call void @"_COp.3bc428c96004ce87:core.Destroy.Core"(ptr @array), !dbg !16 +// CHECK:STDOUT: ret void, !dbg !18 +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: ; Function Attrs: nounwind +// CHECK:STDOUT: define weak_odr void @"_COp.70db2d92ffddbef7:core.Destroy.Core"(ptr %self) #0 !dbg !19 { +// CHECK:STDOUT: entry: +// CHECK:STDOUT: ret void, !dbg !25 +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: ; Function Attrs: nounwind +// CHECK:STDOUT: define weak_odr void @"_COp.3bc428c96004ce87:core.Destroy.Core"(ptr %self) #0 !dbg !26 { +// CHECK:STDOUT: entry: +// CHECK:STDOUT: ret void, !dbg !32 +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: ; Function Attrs: nounwind +// CHECK:STDOUT: define void @_CInitVectorLike.Main() #0 !dbg !33 { +// CHECK:STDOUT: entry: +// CHECK:STDOUT: %_.var = alloca [1 x i8], align 1, !dbg !34 +// CHECK:STDOUT: %.loc18_36.2.temp = alloca [16 x i8], align 8, !dbg !35 +// CHECK:STDOUT: %.loc18_36.4.temp = alloca [3 x i32], align 4, !dbg !35 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %_.var), !dbg !34 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc18_36.2.temp), !dbg !35 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc18_36.4.temp), !dbg !35 +// CHECK:STDOUT: %.loc18_36.5.array.index = getelementptr inbounds [3 x i32], ptr %.loc18_36.4.temp, i32 0, i64 0, !dbg !35 +// CHECK:STDOUT: %.loc18_36.8.array.index = getelementptr inbounds [3 x i32], ptr %.loc18_36.4.temp, i32 0, i64 1, !dbg !35 +// CHECK:STDOUT: %.loc18_36.11.array.index = getelementptr inbounds [3 x i32], ptr %.loc18_36.4.temp, i32 0, i64 2, !dbg !35 +// CHECK:STDOUT: %initializer_list.initializer_list.call.init_list.begin = getelementptr inbounds nuw [16 x i8], ptr %.loc18_36.2.temp, i32 0, i32 0, !dbg !35 +// CHECK:STDOUT: store ptr @array.loc13_50.15, ptr %initializer_list.initializer_list.call.init_list.begin, align 8, !dbg !35 +// CHECK:STDOUT: %initializer_list.initializer_list.call.init_list.size = getelementptr inbounds nuw [16 x i8], ptr %.loc18_36.2.temp, i32 0, i32 8, !dbg !35 +// CHECK:STDOUT: store i64 3, ptr %initializer_list.initializer_list.call.init_list.size, align 8, !dbg !35 +// CHECK:STDOUT: call void @_ZN11vector_likeC1ESt16initializer_listIiE.carbon_thunk._(ptr %.loc18_36.2.temp, ptr %_.var), !dbg !34 +// CHECK:STDOUT: call void @_CWithinLifetime.Main(), !dbg !36 +// CHECK:STDOUT: call void @"_COp.3bc428c96004ce87:core.Destroy.Core"(ptr @array), !dbg !35 +// CHECK:STDOUT: call void @_ZN11vector_likeD2Ev(ptr %_.var), !dbg !34 +// CHECK:STDOUT: ret void, !dbg !37 +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress uwtable +// CHECK:STDOUT: define internal void @_ZN11vector_likeC1ESt16initializer_listIiE.carbon_thunk._(ptr noundef %list, ptr noundef %return) #1 { +// CHECK:STDOUT: entry: +// CHECK:STDOUT: %list.addr = alloca ptr, align 8 +// CHECK:STDOUT: %return.addr = alloca ptr, align 8 +// CHECK:STDOUT: %agg.tmp = alloca %"class.std::initializer_list", align 8 +// CHECK:STDOUT: store ptr %list, ptr %list.addr, align 8, !tbaa !38 +// CHECK:STDOUT: store ptr %return, ptr %return.addr, align 8, !tbaa !41 +// CHECK:STDOUT: %0 = load ptr, ptr %return.addr, align 8, !tbaa !41 +// CHECK:STDOUT: %1 = load ptr, ptr %list.addr, align 8, !tbaa !38 +// CHECK:STDOUT: call void @llvm.memcpy.p0.p0.i64(ptr align 8 %agg.tmp, ptr align 8 %1, i64 16, i1 false), !tbaa.struct !43 +// CHECK:STDOUT: %2 = getelementptr inbounds nuw { ptr, i64 }, ptr %agg.tmp, i32 0, i32 0 +// CHECK:STDOUT: %3 = load ptr, ptr %2, align 8 +// CHECK:STDOUT: %4 = getelementptr inbounds nuw { ptr, i64 }, ptr %agg.tmp, i32 0, i32 1 +// CHECK:STDOUT: %5 = load i64, ptr %4, align 8 +// CHECK:STDOUT: call void @_ZN11vector_likeC2ESt16initializer_listIiE(ptr noundef nonnull align 1 dereferenceable(1) %0, ptr %3, i64 %5) +// CHECK:STDOUT: ret void +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: ; Function Attrs: mustprogress nounwind uwtable +// CHECK:STDOUT: define linkonce_odr dso_local void @_ZN11vector_likeD2Ev(ptr noundef nonnull align 1 dereferenceable(1) %this) unnamed_addr #2 comdat align 2 { +// CHECK:STDOUT: entry: +// CHECK:STDOUT: %this.addr = alloca ptr, align 8 +// CHECK:STDOUT: store ptr %this, ptr %this.addr, align 8, !tbaa !41 +// CHECK:STDOUT: %this1 = load ptr, ptr %this.addr, align 8 +// CHECK:STDOUT: ret void +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: ; Function Attrs: nounwind +// CHECK:STDOUT: define void @_CInitNontrivialDtor.Main() #0 !dbg !48 { +// CHECK:STDOUT: entry: +// CHECK:STDOUT: %_.var = alloca [16 x i8], align 8, !dbg !49 +// CHECK:STDOUT: %.loc23_69.17.temp = alloca [3 x [1 x i8]], align 1, !dbg !50 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %_.var), !dbg !49 +// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc23_69.17.temp), !dbg !50 +// CHECK:STDOUT: %.loc23_69.18.array.index = getelementptr inbounds [3 x [1 x i8]], ptr %.loc23_69.17.temp, i32 0, i64 0, !dbg !50 +// CHECK:STDOUT: call void @_ZN15nontrivial_dtorC1Ev.carbon_thunk_tuple.(ptr %.loc23_69.18.array.index), !dbg !50 +// CHECK:STDOUT: %.loc23_69.16.array.index = getelementptr inbounds [3 x [1 x i8]], ptr %.loc23_69.17.temp, i32 0, i64 1, !dbg !50 +// CHECK:STDOUT: call void @_ZN15nontrivial_dtorC1Ev.carbon_thunk_tuple.(ptr %.loc23_69.16.array.index), !dbg !50 +// CHECK:STDOUT: %.loc23_69.15.array.index = getelementptr inbounds [3 x [1 x i8]], ptr %.loc23_69.17.temp, i32 0, i64 2, !dbg !50 +// CHECK:STDOUT: call void @_ZN15nontrivial_dtorC1Ev.carbon_thunk_tuple.(ptr %.loc23_69.15.array.index), !dbg !50 +// CHECK:STDOUT: %initializer_list.initializer_list.call.init_list.begin = getelementptr inbounds nuw [16 x i8], ptr %_.var, i32 0, i32 0, !dbg !49 +// CHECK:STDOUT: store ptr %.loc23_69.17.temp, ptr %initializer_list.initializer_list.call.init_list.begin, align 8, !dbg !49 +// CHECK:STDOUT: %initializer_list.initializer_list.call.init_list.size = getelementptr inbounds nuw [16 x i8], ptr %_.var, i32 0, i32 8, !dbg !49 +// CHECK:STDOUT: store i64 3, ptr %initializer_list.initializer_list.call.init_list.size, align 8, !dbg !49 +// CHECK:STDOUT: call void @_CWithinLifetime.Main(), !dbg !51 +// CHECK:STDOUT: call void @"_COp.baa51490b2bdaa96:core.Destroy.Core"(ptr %.loc23_69.17.temp), !dbg !50 +// CHECK:STDOUT: ret void, !dbg !52 +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: ; Function Attrs: alwaysinline mustprogress uwtable +// CHECK:STDOUT: define internal void @_ZN15nontrivial_dtorC1Ev.carbon_thunk_tuple.(ptr noundef %return) #1 { +// CHECK:STDOUT: entry: +// CHECK:STDOUT: %return.addr = alloca ptr, align 8 +// CHECK:STDOUT: store ptr %return, ptr %return.addr, align 8, !tbaa !53 +// CHECK:STDOUT: %0 = load ptr, ptr %return.addr, align 8, !tbaa !53 +// CHECK:STDOUT: call void @_ZN15nontrivial_dtorC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %0) +// CHECK:STDOUT: ret void +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: ; Function Attrs: mustprogress nounwind uwtable +// CHECK:STDOUT: define linkonce_odr dso_local void @_ZN15nontrivial_dtorD2Ev(ptr noundef nonnull align 1 dereferenceable(1) %this) unnamed_addr #2 comdat align 2 { +// CHECK:STDOUT: entry: +// CHECK:STDOUT: %this.addr = alloca ptr, align 8 +// CHECK:STDOUT: store ptr %this, ptr %this.addr, align 8, !tbaa !53 +// CHECK:STDOUT: %this1 = load ptr, ptr %this.addr, align 8 +// CHECK:STDOUT: ret void +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: ; Function Attrs: nounwind +// CHECK:STDOUT: define weak_odr void @"_COp.baa51490b2bdaa96:core.Destroy.Core"(ptr %self) #0 !dbg !55 { +// CHECK:STDOUT: entry: +// CHECK:STDOUT: ret void, !dbg !58 +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) +// CHECK:STDOUT: declare void @llvm.lifetime.start.p0(ptr captures(none)) #3 +// CHECK:STDOUT: +// CHECK:STDOUT: ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) +// CHECK:STDOUT: declare void @llvm.memcpy.p0.p0.i64(ptr noalias writeonly captures(none), ptr noalias readonly captures(none), i64, i1 immarg) #3 +// CHECK:STDOUT: +// CHECK:STDOUT: ; Function Attrs: mustprogress nounwind uwtable +// CHECK:STDOUT: define linkonce_odr dso_local void @_ZN11vector_likeC2ESt16initializer_listIiE(ptr noundef nonnull align 1 dereferenceable(1) %this, ptr %list.coerce0, i64 %list.coerce1) unnamed_addr #2 comdat align 2 { +// CHECK:STDOUT: entry: +// CHECK:STDOUT: %list = alloca %"class.std::initializer_list", align 8 +// CHECK:STDOUT: %this.addr = alloca ptr, align 8 +// CHECK:STDOUT: %0 = getelementptr inbounds nuw { ptr, i64 }, ptr %list, i32 0, i32 0 +// CHECK:STDOUT: store ptr %list.coerce0, ptr %0, align 8 +// CHECK:STDOUT: %1 = getelementptr inbounds nuw { ptr, i64 }, ptr %list, i32 0, i32 1 +// CHECK:STDOUT: store i64 %list.coerce1, ptr %1, align 8 +// CHECK:STDOUT: store ptr %this, ptr %this.addr, align 8, !tbaa !41 +// CHECK:STDOUT: %this1 = load ptr, ptr %this.addr, align 8 +// CHECK:STDOUT: ret void +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: ; Function Attrs: mustprogress nounwind uwtable +// CHECK:STDOUT: define linkonce_odr dso_local void @_ZN15nontrivial_dtorC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %this) unnamed_addr #2 comdat align 2 { +// CHECK:STDOUT: entry: +// CHECK:STDOUT: %this.addr = alloca ptr, align 8 +// CHECK:STDOUT: store ptr %this, ptr %this.addr, align 8, !tbaa !53 +// CHECK:STDOUT: %this1 = load ptr, ptr %this.addr, align 8 +// CHECK:STDOUT: ret void +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: ; uselistorder directives +// CHECK:STDOUT: uselistorder ptr @_ZN15nontrivial_dtorC1Ev.carbon_thunk_tuple., { 2, 1, 0 } +// CHECK:STDOUT: uselistorder ptr @llvm.lifetime.start.p0, { 6, 5, 4, 3, 2, 1, 0 } +// CHECK:STDOUT: +// CHECK:STDOUT: attributes #0 = { nounwind } +// CHECK:STDOUT: attributes #1 = { alwaysinline mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } +// CHECK:STDOUT: attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" } +// CHECK:STDOUT: attributes #3 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } +// CHECK:STDOUT: +// CHECK:STDOUT: !llvm.dbg.cu = !{!0} +// CHECK:STDOUT: !llvm.module.flags = !{!2, !3, !4, !5, !6} +// CHECK:STDOUT: !llvm.errno.tbaa = !{!7} +// CHECK:STDOUT: +// CHECK:STDOUT: !0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "carbon", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug) +// CHECK:STDOUT: !1 = !DIFile(filename: "use_pointer_size.carbon", directory: "") +// CHECK:STDOUT: !2 = !{i32 8, !"PIC Level", i32 2} +// CHECK:STDOUT: !3 = !{i32 7, !"PIE Level", i32 2} +// CHECK:STDOUT: !4 = !{i32 7, !"uwtable", i32 2} +// CHECK:STDOUT: !5 = !{i32 7, !"Dwarf Version", i32 5} +// CHECK:STDOUT: !6 = !{i32 2, !"Debug Info Version", i32 3} +// CHECK:STDOUT: !7 = !{!8, !9, i64 0} +// CHECK:STDOUT: !8 = !{!"__libc_errno", !9, i64 0} +// CHECK:STDOUT: !9 = !{!"int", !10, i64 0} +// CHECK:STDOUT: !10 = !{!"omnipotent char", !11, i64 0} +// CHECK:STDOUT: !11 = !{!"Simple C++ TBAA"} +// CHECK:STDOUT: !12 = distinct !DISubprogram(name: "InitDirectly", linkageName: "_CInitDirectly.Main", scope: null, file: !1, line: 12, type: !13, spFlags: DISPFlagDefinition, unit: !0) +// CHECK:STDOUT: !13 = !DISubroutineType(types: !14) +// CHECK:STDOUT: !14 = !{null} +// CHECK:STDOUT: !15 = !DILocation(line: 13, column: 3, scope: !12) +// CHECK:STDOUT: !16 = !DILocation(line: 13, column: 42, scope: !12) +// CHECK:STDOUT: !17 = !DILocation(line: 14, column: 3, scope: !12) +// CHECK:STDOUT: !18 = !DILocation(line: 12, column: 1, scope: !12) +// CHECK:STDOUT: !19 = distinct !DISubprogram(name: "Op", linkageName: "_COp.70db2d92ffddbef7:core.Destroy.Core", scope: null, file: !1, line: 13, type: !20, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !23) +// CHECK:STDOUT: !20 = !DISubroutineType(types: !21) +// CHECK:STDOUT: !21 = !{null, !22} +// CHECK:STDOUT: !22 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) +// CHECK:STDOUT: !23 = !{!24} +// CHECK:STDOUT: !24 = !DILocalVariable(arg: 1, scope: !19, type: !22) +// CHECK:STDOUT: !25 = !DILocation(line: 13, column: 42, scope: !19) +// CHECK:STDOUT: !26 = distinct !DISubprogram(name: "Op", linkageName: "_COp.3bc428c96004ce87:core.Destroy.Core", scope: null, file: !1, line: 13, type: !27, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !30) +// CHECK:STDOUT: !27 = !DISubroutineType(types: !28) +// CHECK:STDOUT: !28 = !{null, !29} +// CHECK:STDOUT: !29 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: null, size: 64) +// CHECK:STDOUT: !30 = !{!31} +// CHECK:STDOUT: !31 = !DILocalVariable(arg: 1, scope: !26, type: !29) +// CHECK:STDOUT: !32 = !DILocation(line: 13, column: 42, scope: !26) +// CHECK:STDOUT: !33 = distinct !DISubprogram(name: "InitVectorLike", linkageName: "_CInitVectorLike.Main", scope: null, file: !1, line: 17, type: !13, spFlags: DISPFlagDefinition, unit: !0) +// CHECK:STDOUT: !34 = !DILocation(line: 18, column: 3, scope: !33) +// CHECK:STDOUT: !35 = !DILocation(line: 18, column: 28, scope: !33) +// CHECK:STDOUT: !36 = !DILocation(line: 19, column: 3, scope: !33) +// CHECK:STDOUT: !37 = !DILocation(line: 17, column: 1, scope: !33) +// CHECK:STDOUT: !38 = !{!39, !39, i64 0} +// CHECK:STDOUT: !39 = !{!"p1 _ZTSSt16initializer_listIiE", !40, i64 0} +// CHECK:STDOUT: !40 = !{!"any pointer", !10, i64 0} +// CHECK:STDOUT: !41 = !{!42, !42, i64 0} +// CHECK:STDOUT: !42 = !{!"p1 _ZTS11vector_like", !40, i64 0} +// CHECK:STDOUT: !43 = !{i64 0, i64 8, !44, i64 8, i64 8, !46} +// CHECK:STDOUT: !44 = !{!45, !45, i64 0} +// CHECK:STDOUT: !45 = !{!"p1 int", !40, i64 0} +// CHECK:STDOUT: !46 = !{!47, !47, i64 0} +// CHECK:STDOUT: !47 = !{!"long", !10, i64 0} +// CHECK:STDOUT: !48 = distinct !DISubprogram(name: "InitNontrivialDtor", linkageName: "_CInitNontrivialDtor.Main", scope: null, file: !1, line: 22, type: !13, spFlags: DISPFlagDefinition, unit: !0) +// CHECK:STDOUT: !49 = !DILocation(line: 23, column: 3, scope: !48) +// CHECK:STDOUT: !50 = !DILocation(line: 23, column: 58, scope: !48) +// CHECK:STDOUT: !51 = !DILocation(line: 24, column: 3, scope: !48) +// CHECK:STDOUT: !52 = !DILocation(line: 22, column: 1, scope: !48) +// CHECK:STDOUT: !53 = !{!54, !54, i64 0} +// CHECK:STDOUT: !54 = !{!"p1 _ZTS15nontrivial_dtor", !40, i64 0} +// CHECK:STDOUT: !55 = distinct !DISubprogram(name: "Op", linkageName: "_COp.baa51490b2bdaa96:core.Destroy.Core", scope: null, file: !1, line: 23, type: !27, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !56) +// CHECK:STDOUT: !56 = !{!57} +// CHECK:STDOUT: !57 = !DILocalVariable(arg: 1, scope: !55, type: !29) +// CHECK:STDOUT: !58 = !DILocation(line: 23, column: 58, scope: !55) +// CHECK:STDOUT: