diff --git a/toolchain/check/cpp/impl_lookup.cpp b/toolchain/check/cpp/impl_lookup.cpp index 7ea58640792d..3aba57c009c8 100644 --- a/toolchain/check/cpp/impl_lookup.cpp +++ b/toolchain/check/cpp/impl_lookup.cpp @@ -83,6 +83,8 @@ auto LookupCppImpl(Context& context, SemIR::LocId loc_id, SemIR::SpecificInterfaceId query_specific_interface_id, const TypeStructure* best_impl_type_structure, SemIR::LocId best_impl_loc_id) -> SemIR::InstId { + // TODO: This should provide `Destroy` for enums and other trivially + // destructible types. auto* class_decl = TypeAsClassDecl(context, query_self_const_id); if (!class_decl) { return SemIR::InstId::None; diff --git a/toolchain/check/custom_witness.cpp b/toolchain/check/custom_witness.cpp index aea9943e6f05..8e0d583ceb03 100644 --- a/toolchain/check/custom_witness.cpp +++ b/toolchain/check/custom_witness.cpp @@ -175,12 +175,19 @@ static auto TypeCanDestroy(Context& context, case CARBON_KIND(SemIR::ClassType class_type): { auto class_info = context.classes().Get(class_type.class_id); // Incomplete and abstract classes can't be destroyed. + if (!class_info.is_complete() || + class_info.inheritance_kind == + SemIR::Class::InheritanceKind::Abstract) { + return false; + } + + // `LookupCppImpl` handles C++ types. + if (context.name_scopes().Get(class_info.scope_id).is_cpp_scope()) { + return false; + } + // TODO: Return false if the object repr doesn't impl `Destroy`. - // TODO: This should probably be skipped for all C++ types, but currently - // must handle those for trivial destruction. - return class_info.is_complete() && - class_info.inheritance_kind != - SemIR::Class::InheritanceKind::Abstract; + return true; } case SemIR::ArrayType::Kind: case SemIR::ConstType::Kind: diff --git a/toolchain/check/testdata/interop/cpp/builtins.carbon b/toolchain/check/testdata/interop/cpp/builtins.carbon index d188aa0591f8..058dbe030122 100644 --- a/toolchain/check/testdata/interop/cpp/builtins.carbon +++ b/toolchain/check/testdata/interop/cpp/builtins.carbon @@ -607,5 +607,3 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %unsigned_int) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/builtins.llp64.carbon b/toolchain/check/testdata/interop/cpp/builtins.llp64.carbon index 330784303f05..823f07661eb3 100644 --- a/toolchain/check/testdata/interop/cpp/builtins.llp64.carbon +++ b/toolchain/check/testdata/interop/cpp/builtins.llp64.carbon @@ -1078,8 +1078,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %float.e3b: %f32.97e = float_value 1 [concrete] // CHECK:STDOUT: %array: %array_type = tuple_value (%float.e3b) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %DestroyOp.type.3e79c2.1: type = fn_type @DestroyOp.loc26 [concrete] -// CHECK:STDOUT: %DestroyOp.b0ebf8.1: %DestroyOp.type.3e79c2.1 = struct_value () [concrete] +// CHECK:STDOUT: %DestroyOp.type: type = fn_type @DestroyOp [concrete] +// CHECK:STDOUT: %DestroyOp: %DestroyOp.type = struct_value () [concrete] // CHECK:STDOUT: %IntResult.cpp_destructor.type: type = fn_type @IntResult.cpp_destructor [concrete] // CHECK:STDOUT: %IntResult.cpp_destructor: %IntResult.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: %LongResult.cpp_destructor.type: type = fn_type @LongResult.cpp_destructor [concrete] @@ -1283,7 +1283,7 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %array_type: type = array_type %.loc26_23.4, %f32 [concrete = constants.%array_type] // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %array_type = ref_binding a, %a.var -// CHECK:STDOUT: %DestroyOp.bound: = bound_method %a.var, constants.%DestroyOp.b0ebf8.1 +// CHECK:STDOUT: %DestroyOp.bound: = bound_method %a.var, constants.%DestroyOp // CHECK:STDOUT: %DestroyOp.call: init %empty_tuple.type = call %DestroyOp.bound(%a.var) // CHECK:STDOUT: %IntResult.cpp_destructor.bound: = bound_method %.loc22_65.3, constants.%IntResult.cpp_destructor // CHECK:STDOUT: %IntResult.cpp_destructor.call: init %empty_tuple.type = call %IntResult.cpp_destructor.bound(%.loc22_65.3) @@ -1294,11 +1294,7 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc26(%self.param: ref %array_type) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc22(%self.param: ref %IntResult) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc19(%self.param: ref %LongResult) = "no_op"; +// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %array_type) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: --- copy_long.carbon // CHECK:STDOUT: @@ -3999,8 +3995,8 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %float.e3b: %f32.97e = float_value 1 [concrete] // CHECK:STDOUT: %array: %array_type = tuple_value (%float.e3b) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %DestroyOp.type.3e79c2.1: type = fn_type @DestroyOp.loc24 [concrete] -// CHECK:STDOUT: %DestroyOp.b0ebf8.1: %DestroyOp.type.3e79c2.1 = struct_value () [concrete] +// CHECK:STDOUT: %DestroyOp.type: type = fn_type @DestroyOp [concrete] +// CHECK:STDOUT: %DestroyOp: %DestroyOp.type = struct_value () [concrete] // CHECK:STDOUT: %UIntResult.cpp_destructor.type: type = fn_type @UIntResult.cpp_destructor [concrete] // CHECK:STDOUT: %UIntResult.cpp_destructor: %UIntResult.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: %ULongResult.cpp_destructor.type: type = fn_type @ULongResult.cpp_destructor [concrete] @@ -4191,7 +4187,7 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: %array_type: type = array_type %.loc24_23.4, %f32 [concrete = constants.%array_type] // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %array_type = ref_binding a, %a.var -// CHECK:STDOUT: %DestroyOp.bound: = bound_method %a.var, constants.%DestroyOp.b0ebf8.1 +// CHECK:STDOUT: %DestroyOp.bound: = bound_method %a.var, constants.%DestroyOp // CHECK:STDOUT: %DestroyOp.call: init %empty_tuple.type = call %DestroyOp.bound(%a.var) // CHECK:STDOUT: %UIntResult.cpp_destructor.bound: = bound_method %.loc22_67.3, constants.%UIntResult.cpp_destructor // CHECK:STDOUT: %UIntResult.cpp_destructor.call: init %empty_tuple.type = call %UIntResult.cpp_destructor.bound(%.loc22_67.3) @@ -4202,11 +4198,7 @@ fn CopyUnsignedLong() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc24(%self.param: ref %array_type) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc22(%self.param: ref %UIntResult) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc19(%self.param: ref %ULongResult) = "no_op"; +// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %array_type) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: --- copy_unsigned_long.carbon // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/builtins.lp64.carbon b/toolchain/check/testdata/interop/cpp/builtins.lp64.carbon index bbf994fe8757..62fa43404b56 100644 --- a/toolchain/check/testdata/interop/cpp/builtins.lp64.carbon +++ b/toolchain/check/testdata/interop/cpp/builtins.lp64.carbon @@ -1017,8 +1017,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %float.e3b: %f32.97e = float_value 1 [concrete] // CHECK:STDOUT: %array: %array_type = tuple_value (%float.e3b) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %DestroyOp.type.3e79c2.1: type = fn_type @DestroyOp.loc24 [concrete] -// CHECK:STDOUT: %DestroyOp.b0ebf8.1: %DestroyOp.type.3e79c2.1 = struct_value () [concrete] +// CHECK:STDOUT: %DestroyOp.type: type = fn_type @DestroyOp [concrete] +// CHECK:STDOUT: %DestroyOp: %DestroyOp.type = struct_value () [concrete] // CHECK:STDOUT: %LongResult.cpp_destructor.type: type = fn_type @LongResult.cpp_destructor [concrete] // CHECK:STDOUT: %LongResult.cpp_destructor: %LongResult.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: %LongLongResult.cpp_destructor.type: type = fn_type @LongLongResult.cpp_destructor [concrete] @@ -1206,7 +1206,7 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %array_type: type = array_type %.loc24_23.4, %f32 [concrete = constants.%array_type] // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %array_type = ref_binding a, %a.var -// CHECK:STDOUT: %DestroyOp.bound: = bound_method %a.var, constants.%DestroyOp.b0ebf8.1 +// CHECK:STDOUT: %DestroyOp.bound: = bound_method %a.var, constants.%DestroyOp // CHECK:STDOUT: %DestroyOp.call: init %empty_tuple.type = call %DestroyOp.bound(%a.var) // CHECK:STDOUT: %LongResult.cpp_destructor.bound: = bound_method %.loc22_70.3, constants.%LongResult.cpp_destructor // CHECK:STDOUT: %LongResult.cpp_destructor.call: init %empty_tuple.type = call %LongResult.cpp_destructor.bound(%.loc22_70.3) @@ -1217,11 +1217,7 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc24(%self.param: ref %array_type) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc22(%self.param: ref %LongResult) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc19(%self.param: ref %LongLongResult) = "no_op"; +// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %array_type) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: --- copy_long_long.carbon // CHECK:STDOUT: @@ -3715,8 +3711,8 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %float.e3b: %f32.97e = float_value 1 [concrete] // CHECK:STDOUT: %array: %array_type = tuple_value (%float.e3b) [concrete] // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] -// CHECK:STDOUT: %DestroyOp.type.3e79c2.1: type = fn_type @DestroyOp.loc24 [concrete] -// CHECK:STDOUT: %DestroyOp.b0ebf8.1: %DestroyOp.type.3e79c2.1 = struct_value () [concrete] +// CHECK:STDOUT: %DestroyOp.type: type = fn_type @DestroyOp [concrete] +// CHECK:STDOUT: %DestroyOp: %DestroyOp.type = struct_value () [concrete] // CHECK:STDOUT: %ULongResult.cpp_destructor.type: type = fn_type @ULongResult.cpp_destructor [concrete] // CHECK:STDOUT: %ULongResult.cpp_destructor: %ULongResult.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: %ULongLongResult.cpp_destructor.type: type = fn_type @ULongLongResult.cpp_destructor [concrete] @@ -3907,7 +3903,7 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: %array_type: type = array_type %.loc24_23.4, %f32 [concrete = constants.%array_type] // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %array_type = ref_binding a, %a.var -// CHECK:STDOUT: %DestroyOp.bound: = bound_method %a.var, constants.%DestroyOp.b0ebf8.1 +// CHECK:STDOUT: %DestroyOp.bound: = bound_method %a.var, constants.%DestroyOp // CHECK:STDOUT: %DestroyOp.call: init %empty_tuple.type = call %DestroyOp.bound(%a.var) // CHECK:STDOUT: %ULongResult.cpp_destructor.bound: = bound_method %.loc22_72.3, constants.%ULongResult.cpp_destructor // CHECK:STDOUT: %ULongResult.cpp_destructor.call: init %empty_tuple.type = call %ULongResult.cpp_destructor.bound(%.loc22_72.3) @@ -3918,11 +3914,7 @@ fn CopyUnsignedLongLong() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc24(%self.param: ref %array_type) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc22(%self.param: ref %ULongResult) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc19(%self.param: ref %ULongLongResult) = "no_op"; +// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %array_type) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: --- copy_unsigned_long_long.carbon // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/class/access.carbon b/toolchain/check/testdata/interop/cpp/class/access.carbon index f726f459f5b5..1538640dad55 100644 --- a/toolchain/check/testdata/interop/cpp/class/access.carbon +++ b/toolchain/check/testdata/interop/cpp/class/access.carbon @@ -2032,10 +2032,6 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc9(%self.param: ref %PublicCall) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc8(%self.param: ref %C) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- import_overload_set_protected_base.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -2229,10 +2225,6 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc11(%self.param: ref %PublicCall) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc17(%self.param: ref %ProtectedCall) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- import_overload_set_public_base_class_call_public.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -2296,8 +2288,6 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %PublicCall) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- import_overload_set_public_base_class_derived_call_non_private.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -2410,10 +2400,6 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc12(%self.param: ref %ProtectedCall) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc11(%self.param: ref %PublicCall) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- import_overload_set_protected_base_class_derived_call_non_private.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -2526,10 +2512,6 @@ fn Call(var instance: Cpp.PublicPrivate) { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc12(%self.param: ref %ProtectedCall) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc11(%self.param: ref %PublicCall) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- base_class_public_access_allowed.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { diff --git a/toolchain/check/testdata/interop/cpp/class/constructor.carbon b/toolchain/check/testdata/interop/cpp/class/constructor.carbon index b2bdab33991c..7c75f11d880b 100644 --- a/toolchain/check/testdata/interop/cpp/class/constructor.carbon +++ b/toolchain/check/testdata/interop/cpp/class/constructor.carbon @@ -308,8 +308,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %C) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- import_non_default.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -402,8 +400,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %C) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- import_multiple.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -522,8 +518,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %C) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- import_default_arguments.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -650,8 +644,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %C) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- import_template.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -696,8 +688,8 @@ fn F() { // CHECK:STDOUT: %C__carbon_thunk.d98342.3: %C__carbon_thunk.type.65f120.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: %DestroyOp.type.3e79c2.2: type = fn_type @DestroyOp.loc9 [concrete] -// CHECK:STDOUT: %DestroyOp.b0ebf8.2: %DestroyOp.type.3e79c2.2 = struct_value () [concrete] +// CHECK:STDOUT: %DestroyOp.type: type = fn_type @DestroyOp [concrete] +// CHECK:STDOUT: %DestroyOp: %DestroyOp.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -803,7 +795,7 @@ fn F() { // CHECK:STDOUT: %c3: ref %C = ref_binding c3, %c3.var // 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: %DestroyOp.bound: = bound_method %.loc9_27.2, constants.%DestroyOp.b0ebf8.2 +// CHECK:STDOUT: %DestroyOp.bound: = bound_method %.loc9_27.2, constants.%DestroyOp // CHECK:STDOUT: %DestroyOp.call: init %empty_tuple.type = call %DestroyOp.bound(%.loc9_27.2) // 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) @@ -812,9 +804,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc10(%self.param: ref %C) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc9(%self.param: ref bool) = "no_op"; +// CHECK:STDOUT: fn @DestroyOp(%self.param: ref bool) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: --- import_implicit_single_argument.carbon // CHECK:STDOUT: @@ -937,8 +927,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %C) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- import_implicit_multi_arguments.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -1106,5 +1094,3 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %C) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/enum/anonymous.carbon b/toolchain/check/testdata/interop/cpp/enum/anonymous.carbon index facafce6816c..bc253300cf51 100644 --- a/toolchain/check/testdata/interop/cpp/enum/anonymous.carbon +++ b/toolchain/check/testdata/interop/cpp/enum/anonymous.carbon @@ -130,5 +130,3 @@ fn G() { // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %C) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/enum/copy.carbon b/toolchain/check/testdata/interop/cpp/enum/copy.carbon index bbc6b4ab08e9..9907258ec12f 100644 --- a/toolchain/check/testdata/interop/cpp/enum/copy.carbon +++ b/toolchain/check/testdata/interop/cpp/enum/copy.carbon @@ -14,7 +14,7 @@ enum Enum : short { a, b, c }; -// --- copy_enum.carbon +// --- fail_todo_copy_enum.carbon library "[[@TEST_NAME]]"; @@ -22,24 +22,25 @@ import Cpp library "enum.h"; //@dump-sem-ir-begin fn F() { + // CHECK:STDERR: fail_todo_copy_enum.carbon:[[@LINE+4]]:3: error: cannot access member of interface `Core.Destroy` in type `Cpp.Enum` that does not implement that interface [MissingImplInMemberAccess] + // CHECK:STDERR: var a: Cpp.Enum = Cpp.Enum.a; + // CHECK:STDERR: ^~~~~~~~~~~~~~~ + // CHECK:STDERR: var a: Cpp.Enum = Cpp.Enum.a; a = Cpp.Enum.b; } //@dump-sem-ir-end -// CHECK:STDOUT: --- copy_enum.carbon +// CHECK:STDOUT: --- fail_todo_copy_enum.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %Enum: type = class_type @Enum [concrete] // CHECK:STDOUT: %pattern_type.ebf: type = pattern_type %Enum [concrete] // CHECK:STDOUT: %int_0: %Enum = int_value 0 [concrete] // CHECK:STDOUT: %int_1: %Enum = int_value 1 [concrete] -// CHECK:STDOUT: %DestroyOp.type: type = fn_type @DestroyOp [concrete] -// CHECK:STDOUT: %DestroyOp: %DestroyOp.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -63,24 +64,20 @@ fn F() { // CHECK:STDOUT: %a.var_patt: %pattern_type.ebf = var_pattern %a.patt [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: %a.var: ref %Enum = var %a.var_patt -// CHECK:STDOUT: %Cpp.ref.loc8_21: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Enum.ref.loc8_24: type = name_ref Enum, imports.%Enum.decl [concrete = constants.%Enum] -// CHECK:STDOUT: %a.ref.loc8: %Enum = name_ref a, imports.%int_0 [concrete = constants.%int_0] -// CHECK:STDOUT: assign %a.var, %a.ref.loc8 -// CHECK:STDOUT: %.loc8: type = splice_block %Enum.ref.loc8_13 [concrete = constants.%Enum] { -// CHECK:STDOUT: %Cpp.ref.loc8_10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Enum.ref.loc8_13: type = name_ref Enum, imports.%Enum.decl [concrete = constants.%Enum] +// CHECK:STDOUT: %Cpp.ref.loc12_21: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %Enum.ref.loc12_24: type = name_ref Enum, imports.%Enum.decl [concrete = constants.%Enum] +// CHECK:STDOUT: %a.ref.loc12: %Enum = name_ref a, imports.%int_0 [concrete = constants.%int_0] +// CHECK:STDOUT: assign %a.var, %a.ref.loc12 +// CHECK:STDOUT: %.loc12: type = splice_block %Enum.ref.loc12_13 [concrete = constants.%Enum] { +// CHECK:STDOUT: %Cpp.ref.loc12_10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %Enum.ref.loc12_13: type = name_ref Enum, imports.%Enum.decl [concrete = constants.%Enum] // CHECK:STDOUT: } // CHECK:STDOUT: %a: ref %Enum = ref_binding a, %a.var -// CHECK:STDOUT: %a.ref.loc10: ref %Enum = name_ref a, %a -// CHECK:STDOUT: %Cpp.ref.loc10: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] -// CHECK:STDOUT: %Enum.ref.loc10: type = name_ref Enum, imports.%Enum.decl [concrete = constants.%Enum] +// CHECK:STDOUT: %a.ref.loc14: ref %Enum = name_ref a, %a +// CHECK:STDOUT: %Cpp.ref.loc14: = name_ref Cpp, imports.%Cpp [concrete = imports.%Cpp] +// CHECK:STDOUT: %Enum.ref.loc14: type = name_ref Enum, imports.%Enum.decl [concrete = constants.%Enum] // CHECK:STDOUT: %b.ref: %Enum = name_ref b, imports.%int_1 [concrete = constants.%int_1] -// CHECK:STDOUT: assign %a.ref.loc10, %b.ref -// CHECK:STDOUT: %DestroyOp.bound: = bound_method %a.var, constants.%DestroyOp -// CHECK:STDOUT: %DestroyOp.call: init %empty_tuple.type = call %DestroyOp.bound(%a.var) +// CHECK:STDOUT: assign %a.ref.loc14, %b.ref // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %Enum) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/function/class.carbon b/toolchain/check/testdata/interop/cpp/function/class.carbon index 6417e4b9d378..2271e2e6664d 100644 --- a/toolchain/check/testdata/interop/cpp/function/class.carbon +++ b/toolchain/check/testdata/interop/cpp/function/class.carbon @@ -699,8 +699,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %C) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- import_definition_in_relative_namespace_value_param_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -802,8 +800,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %O) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- import_definition_and_static_method_call_before.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -1013,8 +1009,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %C) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- import_decl_pointer_return_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { diff --git a/toolchain/check/testdata/interop/cpp/function/default_arg.carbon b/toolchain/check/testdata/interop/cpp/function/default_arg.carbon index 7ac9c2074c94..de4af25069ee 100644 --- a/toolchain/check/testdata/interop/cpp/function/default_arg.carbon +++ b/toolchain/check/testdata/interop/cpp/function/default_arg.carbon @@ -409,8 +409,6 @@ fn Call() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %X) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- call_with_default.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -805,8 +803,6 @@ fn Call() { // CHECK:STDOUT: // CHECK:STDOUT: fn @D__carbon_thunk(%_.param: %ptr.1f9, %a.param: %i32); // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %X) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @X.cpp_destructor(%self.param: ref %X) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: --- fail_call_too_few_args.carbon @@ -887,5 +883,3 @@ fn Call() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %X) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/function/operators.carbon b/toolchain/check/testdata/interop/cpp/function/operators.carbon index 3a9a69e4975d..61e392fd0486 100644 --- a/toolchain/check/testdata/interop/cpp/function/operators.carbon +++ b/toolchain/check/testdata/interop/cpp/function/operators.carbon @@ -1174,8 +1174,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %C) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- import_binary_operators.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -1271,8 +1269,8 @@ fn F() { // CHECK:STDOUT: %Core.IntLiteral.as.ImplicitAs.impl.Convert.bound.c83: = bound_method %int_42.20e, %Core.IntLiteral.as.ImplicitAs.impl.Convert.0b5 [concrete] // CHECK:STDOUT: %bound_method.cb9: = bound_method %int_42.20e, %Core.IntLiteral.as.ImplicitAs.impl.Convert.specific_fn [concrete] // CHECK:STDOUT: %int_42.c68: %i32 = int_value 42 [concrete] -// CHECK:STDOUT: %DestroyOp.type.3e79c2.1: type = fn_type @DestroyOp.loc45 [concrete] -// CHECK:STDOUT: %DestroyOp.b0ebf8.1: %DestroyOp.type.3e79c2.1 = struct_value () [concrete] +// CHECK:STDOUT: %DestroyOp.type: type = fn_type @DestroyOp [concrete] +// CHECK:STDOUT: %DestroyOp: %DestroyOp.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: } @@ -1926,17 +1924,17 @@ fn F() { // CHECK:STDOUT: %.loc48_25.1: %i32 = value_of_initializer %C.cpp_operator.call // CHECK:STDOUT: %.loc48_25.2: %i32 = converted %C.cpp_operator.call, %.loc48_25.1 // CHECK:STDOUT: %index: %i32 = value_binding index, %.loc48_25.2 -// CHECK:STDOUT: %DestroyOp.bound.loc45: = bound_method %.loc45_37.3, constants.%DestroyOp.b0ebf8.1 +// CHECK:STDOUT: %DestroyOp.bound.loc45: = bound_method %.loc45_37.3, constants.%DestroyOp // CHECK:STDOUT: %DestroyOp.call.loc45: init %empty_tuple.type = call %DestroyOp.bound.loc45(%.loc45_37.3) -// CHECK:STDOUT: %DestroyOp.bound.loc44: = bound_method %.loc44_40.3, constants.%DestroyOp.b0ebf8.1 +// CHECK:STDOUT: %DestroyOp.bound.loc44: = bound_method %.loc44_40.3, constants.%DestroyOp // CHECK:STDOUT: %DestroyOp.call.loc44: init %empty_tuple.type = call %DestroyOp.bound.loc44(%.loc44_40.3) -// CHECK:STDOUT: %DestroyOp.bound.loc43: = bound_method %.loc43_28.3, constants.%DestroyOp.b0ebf8.1 +// CHECK:STDOUT: %DestroyOp.bound.loc43: = bound_method %.loc43_28.3, constants.%DestroyOp // CHECK:STDOUT: %DestroyOp.call.loc43: init %empty_tuple.type = call %DestroyOp.bound.loc43(%.loc43_28.3) -// CHECK:STDOUT: %DestroyOp.bound.loc42: = bound_method %.loc42_31.3, constants.%DestroyOp.b0ebf8.1 +// CHECK:STDOUT: %DestroyOp.bound.loc42: = bound_method %.loc42_31.3, constants.%DestroyOp // CHECK:STDOUT: %DestroyOp.call.loc42: init %empty_tuple.type = call %DestroyOp.bound.loc42(%.loc42_31.3) -// CHECK:STDOUT: %DestroyOp.bound.loc41: = bound_method %.loc41_28.3, constants.%DestroyOp.b0ebf8.1 +// CHECK:STDOUT: %DestroyOp.bound.loc41: = bound_method %.loc41_28.3, constants.%DestroyOp // CHECK:STDOUT: %DestroyOp.call.loc41: init %empty_tuple.type = call %DestroyOp.bound.loc41(%.loc41_28.3) -// CHECK:STDOUT: %DestroyOp.bound.loc40: = bound_method %.loc40_24.3, constants.%DestroyOp.b0ebf8.1 +// CHECK:STDOUT: %DestroyOp.bound.loc40: = bound_method %.loc40_24.3, constants.%DestroyOp // CHECK:STDOUT: %DestroyOp.call.loc40: init %empty_tuple.type = call %DestroyOp.bound.loc40(%.loc40_24.3) // CHECK:STDOUT: %C.cpp_destructor.bound.loc23: = bound_method %.loc23_31.3, constants.%C.cpp_destructor // CHECK:STDOUT: %C.cpp_destructor.call.loc23: init %empty_tuple.type = call %C.cpp_destructor.bound.loc23(%.loc23_31.3) @@ -1965,9 +1963,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc45(%self.param: ref bool) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc23(%self.param: ref %C) = "no_op"; +// CHECK:STDOUT: fn @DestroyOp(%self.param: ref bool) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: --- multiple_calls.carbon // CHECK:STDOUT: @@ -2114,8 +2110,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %C) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_rewrite_spaceship.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -2135,8 +2129,8 @@ fn F() { // CHECK:STDOUT: %operator_Greater__carbon_thunk: %operator_Greater__carbon_thunk.type = struct_value () [concrete] // CHECK:STDOUT: %operator_LessEqual__carbon_thunk.type: type = fn_type @operator_LessEqual__carbon_thunk [concrete] // CHECK:STDOUT: %operator_LessEqual__carbon_thunk: %operator_LessEqual__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %DestroyOp.type.3e79c2.1: type = fn_type @DestroyOp.loc36 [concrete] -// CHECK:STDOUT: %DestroyOp.b0ebf8.1: %DestroyOp.type.3e79c2.1 = struct_value () [concrete] +// CHECK:STDOUT: %DestroyOp.type: type = fn_type @DestroyOp [concrete] +// CHECK:STDOUT: %DestroyOp: %DestroyOp.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: } @@ -2271,9 +2265,9 @@ fn F() { // CHECK:STDOUT: %.loc36_37.3: ref bool = temporary %.loc36_37.1, %.loc36_37.2 // CHECK:STDOUT: %.loc36_37.4: bool = acquire_value %.loc36_37.3 // CHECK:STDOUT: %less_than_or_equal: bool = value_binding less_than_or_equal, %.loc36_37.4 -// CHECK:STDOUT: %DestroyOp.bound.loc36: = bound_method %.loc36_37.3, constants.%DestroyOp.b0ebf8.1 +// CHECK:STDOUT: %DestroyOp.bound.loc36: = bound_method %.loc36_37.3, constants.%DestroyOp // CHECK:STDOUT: %DestroyOp.call.loc36: init %empty_tuple.type = call %DestroyOp.bound.loc36(%.loc36_37.3) -// CHECK:STDOUT: %DestroyOp.bound.loc19: = bound_method %.loc19_31.3, constants.%DestroyOp.b0ebf8.1 +// CHECK:STDOUT: %DestroyOp.bound.loc19: = bound_method %.loc19_31.3, constants.%DestroyOp // CHECK:STDOUT: %DestroyOp.call.loc19: init %empty_tuple.type = call %DestroyOp.bound.loc19(%.loc19_31.3) // CHECK:STDOUT: %C.cpp_destructor.bound.loc16: = bound_method %c2.var, constants.%C.cpp_destructor // CHECK:STDOUT: %C.cpp_destructor.call.loc16: init %empty_tuple.type = call %C.cpp_destructor.bound.loc16(%c2.var) @@ -2282,9 +2276,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc36(%self.param: ref bool) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc16(%self.param: ref %C) = "no_op"; +// CHECK:STDOUT: fn @DestroyOp(%self.param: ref bool) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_rewrite_equal.carbon // CHECK:STDOUT: @@ -2303,8 +2295,8 @@ fn F() { // CHECK:STDOUT: %ptr.bb2: type = ptr_type bool [concrete] // CHECK:STDOUT: %operator_EqualEqual__carbon_thunk.type: type = fn_type @operator_EqualEqual__carbon_thunk [concrete] // CHECK:STDOUT: %operator_EqualEqual__carbon_thunk: %operator_EqualEqual__carbon_thunk.type = struct_value () [concrete] -// CHECK:STDOUT: %DestroyOp.type.3e79c2.1: type = fn_type @DestroyOp.loc16 [concrete] -// CHECK:STDOUT: %DestroyOp.b0ebf8.1: %DestroyOp.type.3e79c2.1 = struct_value () [concrete] +// CHECK:STDOUT: %DestroyOp.type: type = fn_type @DestroyOp [concrete] +// CHECK:STDOUT: %DestroyOp: %DestroyOp.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: } @@ -2400,7 +2392,7 @@ fn F() { // CHECK:STDOUT: %.loc23_18.3: type = converted %Bool.call.loc23, %.loc23_18.2 [concrete = bool] // CHECK:STDOUT: } // CHECK:STDOUT: %not_equal: bool = value_binding not_equal, [concrete = ] -// CHECK:STDOUT: %DestroyOp.bound: = bound_method %.loc16_24.3, constants.%DestroyOp.b0ebf8.1 +// CHECK:STDOUT: %DestroyOp.bound: = bound_method %.loc16_24.3, constants.%DestroyOp // CHECK:STDOUT: %DestroyOp.call: init %empty_tuple.type = call %DestroyOp.bound(%.loc16_24.3) // CHECK:STDOUT: %C.cpp_destructor.bound.loc13: = bound_method %c2.var, constants.%C.cpp_destructor // CHECK:STDOUT: %C.cpp_destructor.call.loc13: init %empty_tuple.type = call %C.cpp_destructor.bound.loc13(%c2.var) @@ -2409,9 +2401,7 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc16(%self.param: ref bool) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc13(%self.param: ref %C) = "no_op"; +// CHECK:STDOUT: fn @DestroyOp(%self.param: ref bool) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: --- import_single_namespace.carbon // CHECK:STDOUT: @@ -2523,8 +2513,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %C) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- import_multiple_namespaces.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -2686,10 +2674,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc11(%self.param: ref %C2) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc8(%self.param: ref %C1) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_import_operands_in_namespace_operator_in_global.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -2781,8 +2765,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %C) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- import_inner_class.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -2891,8 +2873,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %C) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- import_inner_class_in_namespace.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -3010,8 +2990,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %C) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- import_member_add_with.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -3144,8 +3122,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %C) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- indirect_template_instantiation.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -3231,5 +3207,3 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %C) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/function/overloads.carbon b/toolchain/check/testdata/interop/cpp/function/overloads.carbon index b77f66a054f7..7235ed1213d5 100644 --- a/toolchain/check/testdata/interop/cpp/function/overloads.carbon +++ b/toolchain/check/testdata/interop/cpp/function/overloads.carbon @@ -2389,8 +2389,8 @@ fn F() { // CHECK:STDOUT: %Destroy.type: type = facet_type <@Destroy> [concrete] // CHECK:STDOUT: %NoFields.cpp_destructor.type: type = fn_type @NoFields.cpp_destructor [concrete] // CHECK:STDOUT: %NoFields.cpp_destructor: %NoFields.cpp_destructor.type = struct_value () [concrete] -// CHECK:STDOUT: %DestroyOp.type.3e79c2.2: type = fn_type @DestroyOp.loc15_30.2 [concrete] -// CHECK:STDOUT: %DestroyOp.b0ebf8.2: %DestroyOp.type.3e79c2.2 = struct_value () [concrete] +// CHECK:STDOUT: %DestroyOp.type: type = fn_type @DestroyOp [concrete] +// CHECK:STDOUT: %DestroyOp: %DestroyOp.type = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -2518,7 +2518,7 @@ fn F() { // CHECK:STDOUT: %PassNoFields__carbon_thunk.call.loc15: init %empty_tuple.type = call imports.%PassNoFields__carbon_thunk.decl(%addr.loc15) // CHECK:STDOUT: %NoFields.cpp_destructor.bound.loc15: = bound_method %.loc15_30.5, constants.%NoFields.cpp_destructor // CHECK:STDOUT: %NoFields.cpp_destructor.call.loc15: init %empty_tuple.type = call %NoFields.cpp_destructor.bound.loc15(%.loc15_30.5) -// CHECK:STDOUT: %DestroyOp.bound: = bound_method %.loc15_30.2, constants.%DestroyOp.b0ebf8.2 +// CHECK:STDOUT: %DestroyOp.bound: = bound_method %.loc15_30.2, constants.%DestroyOp // CHECK:STDOUT: %DestroyOp.call: init %empty_tuple.type = call %DestroyOp.bound(%.loc15_30.2) // CHECK:STDOUT: %NoFields.cpp_destructor.bound.loc13: = bound_method %.loc13_20.3, constants.%NoFields.cpp_destructor // CHECK:STDOUT: %NoFields.cpp_destructor.call.loc13: init %empty_tuple.type = call %NoFields.cpp_destructor.bound.loc13(%.loc13_20.3) @@ -2533,11 +2533,9 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: fn @PassNoFields__carbon_thunk(%s.param: %ptr.dd0); // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc15_30.1(%self.param: ref %NoFields) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @NoFields.cpp_destructor(%self.param: ref %NoFields) = "no_op"; // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc15_30.2(%self.param: ref %empty_struct_type) = "no_op"; +// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %empty_struct_type) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_struct_init_nonempty.carbon // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/function/pointer.carbon b/toolchain/check/testdata/interop/cpp/function/pointer.carbon index 58201f1816d4..6703b004546c 100644 --- a/toolchain/check/testdata/interop/cpp/function/pointer.carbon +++ b/toolchain/check/testdata/interop/cpp/function/pointer.carbon @@ -486,8 +486,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %S) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- import_non_nullable_pointer_param_using_const_pointer.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -579,8 +577,8 @@ fn F() { // CHECK:STDOUT: %ptr.dfe: type = ptr_type %ptr.5c7 [concrete] // CHECK:STDOUT: %foo.type: type = fn_type @foo [concrete] // CHECK:STDOUT: %foo: %foo.type = struct_value () [concrete] -// CHECK:STDOUT: %DestroyOp.type.3e79c2.1: type = fn_type @DestroyOp.loc9 [concrete] -// CHECK:STDOUT: %DestroyOp.b0ebf8.1: %DestroyOp.type.3e79c2.1 = struct_value () [concrete] +// CHECK:STDOUT: %DestroyOp.type: type = fn_type @DestroyOp [concrete] +// CHECK:STDOUT: %DestroyOp: %DestroyOp.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: } @@ -642,16 +640,14 @@ fn F() { // CHECK:STDOUT: %p.ref: ref %ptr.5c7 = name_ref p, %p // CHECK:STDOUT: %addr.loc10: %ptr.dfe = addr_of %p.ref // CHECK:STDOUT: %foo.call: init %empty_tuple.type = call imports.%foo.decl(%addr.loc10) -// CHECK:STDOUT: %DestroyOp.bound: = bound_method %p.var, constants.%DestroyOp.b0ebf8.1 +// CHECK:STDOUT: %DestroyOp.bound: = bound_method %p.var, constants.%DestroyOp // CHECK:STDOUT: %DestroyOp.call: init %empty_tuple.type = call %DestroyOp.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: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc9(%self.param: ref %ptr.5c7) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc8(%self.param: ref %S) = "no_op"; +// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %ptr.5c7) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: --- import_non_nullable_pointer_to_const_param_using_const.carbon // CHECK:STDOUT: @@ -777,8 +773,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %S) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- import_const_non_nullable_pointer_param_using_const.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -1407,8 +1401,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: fn @DestroyOp.loc9(%self.param: ref %Optional.065) = "no_op"; // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc8(%self.param: ref %S) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- null_pointer_arg_to_pointer_param.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -1631,8 +1623,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: fn @DestroyOp.loc9(%self.param: ref %Optional.065) = "no_op"; // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc8(%self.param: ref %S) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- forward_nullable_pointer.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -1785,8 +1775,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %S) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- import_deduced_pointer_param_as_pointer.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -1840,7 +1828,7 @@ fn F() { // 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: %DestroyOp.type.3e79c2.2: type = fn_type @DestroyOp.loc13_58 [concrete] +// CHECK:STDOUT: %DestroyOp.type.3e79c2.2: type = fn_type @DestroyOp.loc13 [concrete] // CHECK:STDOUT: %DestroyOp.b0ebf8.2: %DestroyOp.type.3e79c2.2 = 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] @@ -1971,7 +1959,5 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc13_58(%self.param: ref %Optional.065) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc13_48(%self.param: ref %S) = "no_op"; +// CHECK:STDOUT: fn @DestroyOp.loc13(%self.param: ref %Optional.065) = "no_op"; // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/function/qualified_param.carbon b/toolchain/check/testdata/interop/cpp/function/qualified_param.carbon index 23c49100cc06..01cb10995707 100644 --- a/toolchain/check/testdata/interop/cpp/function/qualified_param.carbon +++ b/toolchain/check/testdata/interop/cpp/function/qualified_param.carbon @@ -139,5 +139,3 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %S) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/function/reference.carbon b/toolchain/check/testdata/interop/cpp/function/reference.carbon index bb8677a17074..3361ffbeb22d 100644 --- a/toolchain/check/testdata/interop/cpp/function/reference.carbon +++ b/toolchain/check/testdata/interop/cpp/function/reference.carbon @@ -372,8 +372,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %S) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_param_lvalue_ref.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -476,10 +474,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc41(%self.param: ref %S) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc30(%self.param: ref %T) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- call_param_rvalue_ref.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -532,8 +526,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %S) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- todo_fail_param_value_arg_for_rvalue_ref.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -594,8 +586,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %S) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_param_rvalue_ref.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -679,10 +669,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc38(%self.param: ref %S) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc19(%self.param: ref %T) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- call_param_const_lvalue_ref_with_ref.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -764,8 +750,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %S) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- call_param_const_lvalue_ref_with_value.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -845,8 +829,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %S) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- call_return_lvalue_ref.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { diff --git a/toolchain/check/testdata/interop/cpp/function/struct.carbon b/toolchain/check/testdata/interop/cpp/function/struct.carbon index a4fdcc3e73f9..ad27c25a7a52 100644 --- a/toolchain/check/testdata/interop/cpp/function/struct.carbon +++ b/toolchain/check/testdata/interop/cpp/function/struct.carbon @@ -698,8 +698,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %S) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- import_definition_in_relative_namespace_value_param_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -801,8 +799,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %O) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- import_definition_and_static_method_call_before.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -1012,8 +1008,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %S) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- import_decl_pointer_return_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { diff --git a/toolchain/check/testdata/interop/cpp/function/union.carbon b/toolchain/check/testdata/interop/cpp/function/union.carbon index 3417ef5cddad..a8a1b72ea416 100644 --- a/toolchain/check/testdata/interop/cpp/function/union.carbon +++ b/toolchain/check/testdata/interop/cpp/function/union.carbon @@ -623,8 +623,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %U) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- import_definition_in_relative_namespace_value_param_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -726,8 +724,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %O) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- import_definition_and_static_method_call_before.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -937,8 +933,6 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %U) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- import_decl_pointer_return_type.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { diff --git a/toolchain/check/testdata/interop/cpp/impls/as.carbon b/toolchain/check/testdata/interop/cpp/impls/as.carbon index 2fb0bc010615..de806c9318e7 100644 --- a/toolchain/check/testdata/interop/cpp/impls/as.carbon +++ b/toolchain/check/testdata/interop/cpp/impls/as.carbon @@ -239,8 +239,6 @@ fn ConversionExplicit(s: Cpp.ConditionallyExplicitFalse) { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc8(%self.param: ref %Dest) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @ConstructorConversion(%s.param: %Source2) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %s.ref: %Source2 = name_ref s, %s @@ -259,8 +257,6 @@ fn ConversionExplicit(s: Cpp.ConditionallyExplicitFalse) { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc14(%self.param: ref %Dest2) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @ExplicitConstructorTest(%s.param: %Source) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %s.ref: %Source = name_ref s, %s @@ -279,8 +275,6 @@ fn ConversionExplicit(s: Cpp.ConditionallyExplicitFalse) { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc20(%self.param: ref %ExplicitConstructor) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @ExplicitConversionTest(%s.param: %ExplicitConversion) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %s.ref: %ExplicitConversion = name_ref s, %s @@ -404,8 +398,6 @@ fn ConversionExplicit(s: Cpp.ConditionallyExplicitFalse) { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc9(%self.param: ref %ConditionallyExplicit.c52b91.1) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @ConstructorExplicit(%s.param: %Source) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %s.ref: %Source = name_ref s, %s @@ -424,8 +416,6 @@ fn ConversionExplicit(s: Cpp.ConditionallyExplicitFalse) { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc15(%self.param: ref %ConditionallyExplicit.c52b91.2) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @ConversionNotExplicit(%s.param: %ConditionallyExplicit.c52b91.1) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -462,8 +452,6 @@ fn ConversionExplicit(s: Cpp.ConditionallyExplicitFalse) { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc22(%self.param: ref %Dest) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @ConversionExplicit(%s.param: %ConditionallyExplicit.c52b91.1) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %s.ref: %ConditionallyExplicit.c52b91.1 = name_ref s, %s @@ -568,5 +556,3 @@ fn ConversionExplicit(s: Cpp.ConditionallyExplicitFalse) { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %Dest.5e7) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/impls/destroy.carbon b/toolchain/check/testdata/interop/cpp/impls/destroy.carbon index ce3e51cf95e4..e2f7dcae3e46 100644 --- a/toolchain/check/testdata/interop/cpp/impls/destroy.carbon +++ b/toolchain/check/testdata/interop/cpp/impls/destroy.carbon @@ -278,8 +278,6 @@ fn EqualWitnesses(p: Wrap(Cpp.PublicDestructor)*) -> Wrap(Cpp.PublicDestructor)* // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc11(%self.param: ref %PublicDestructor) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @PublicDestructor.cpp_destructor(%self.param: ref %PublicDestructor); // CHECK:STDOUT: // CHECK:STDOUT: fn @TrivialDestroy() { @@ -303,8 +301,6 @@ fn EqualWitnesses(p: Wrap(Cpp.PublicDestructor)*) -> Wrap(Cpp.PublicDestructor)* // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc15(%self.param: ref %TrivialDestructor) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @TrivialDestructor.cpp_destructor(%self.param: ref %TrivialDestructor) = "no_op"; // CHECK:STDOUT: // CHECK:STDOUT: --- destroy_protected_base_destructor.carbon diff --git a/toolchain/check/testdata/interop/cpp/impls/implicit_as.carbon b/toolchain/check/testdata/interop/cpp/impls/implicit_as.carbon index 7d844147835a..de0375625b9a 100644 --- a/toolchain/check/testdata/interop/cpp/impls/implicit_as.carbon +++ b/toolchain/check/testdata/interop/cpp/impls/implicit_as.carbon @@ -522,8 +522,6 @@ fn InitFromStruct() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc8(%self.param: ref %Dest) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @NonConstConversion.loc12(%s.param: ref %NonConstConversion.480) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -573,8 +571,6 @@ fn InitFromStruct() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc20(%self.param: ref %Dest2) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_expr_category.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -640,8 +636,6 @@ fn InitFromStruct() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %Dest) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_access.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -726,8 +720,6 @@ fn InitFromStruct() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc16(%self.param: ref %InaccessibleConstructor) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: fn @InaccessibleConversionTest(%s.param: %InaccessibleConversion) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: name_binding_decl { @@ -752,8 +744,6 @@ fn InitFromStruct() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc30(%self.param: ref %Dest) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_deleted.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -915,8 +905,6 @@ fn InitFromStruct() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %IntConstructor.f49) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_no_u32_to_int_conversion_in_carbon.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -970,8 +958,6 @@ fn InitFromStruct() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %IntConstructor) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- default_constructor.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -1041,8 +1027,6 @@ fn InitFromStruct() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %DefaultConstructor) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- construct_multi_argument.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -1236,10 +1220,6 @@ fn InitFromStruct() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc12(%self.param: ref %ThreeWithDefault) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc8(%self.param: ref %Two) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_todo_aggregate_from_tuple.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -1513,8 +1493,6 @@ fn InitFromStruct() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %NonAggregate) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- todo_fail_non_aggregate_from_empty_struct.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -1557,8 +1535,6 @@ fn InitFromStruct() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %NonAggregate) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- fail_non_aggregate_from_struct.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { @@ -1640,5 +1616,3 @@ fn InitFromStruct() { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %NonAggregate) = "no_op"; -// CHECK:STDOUT: diff --git a/toolchain/check/testdata/interop/cpp/namespace.carbon b/toolchain/check/testdata/interop/cpp/namespace.carbon index 443ff1efffe8..c7283d8c8844 100644 --- a/toolchain/check/testdata/interop/cpp/namespace.carbon +++ b/toolchain/check/testdata/interop/cpp/namespace.carbon @@ -403,8 +403,6 @@ fn Use(y: Cpp.Y) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp(%self.param: ref %X) = "no_op"; -// CHECK:STDOUT: // CHECK:STDOUT: --- import_special_name_call_escpaed.carbon // CHECK:STDOUT: // CHECK:STDOUT: constants { diff --git a/toolchain/check/testdata/interop/cpp/stdlib/initializer_list.carbon b/toolchain/check/testdata/interop/cpp/stdlib/initializer_list.carbon index 486195f64185..ecb1a513a5e7 100644 --- a/toolchain/check/testdata/interop/cpp/stdlib/initializer_list.carbon +++ b/toolchain/check/testdata/interop/cpp/stdlib/initializer_list.carbon @@ -112,8 +112,8 @@ fn F() { // CHECK:STDOUT: %InitListConstructor.cpp_destructor: %InitListConstructor.cpp_destructor.type = struct_value () [concrete] // CHECK:STDOUT: %initializer_list.cpp_destructor.type: type = fn_type @initializer_list.cpp_destructor [concrete] // CHECK:STDOUT: %initializer_list.cpp_destructor: %initializer_list.cpp_destructor.type = struct_value () [concrete] -// CHECK:STDOUT: %DestroyOp.type.3e79c2.4: type = fn_type @DestroyOp.loc12_44.3 [concrete] -// CHECK:STDOUT: %DestroyOp.b0ebf8.4: %DestroyOp.type.3e79c2.4 = struct_value () [concrete] +// CHECK:STDOUT: %DestroyOp.type.3e79c2.2: type = fn_type @DestroyOp.loc12 [concrete] +// CHECK:STDOUT: %DestroyOp.b0ebf8.2: %DestroyOp.type.3e79c2.2 = struct_value () [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -348,15 +348,15 @@ fn F() { // CHECK:STDOUT: %InitListConstructor.cpp_destructor.call: init %empty_tuple.type = call %InitListConstructor.cpp_destructor.bound(%.loc12_44.24) // CHECK:STDOUT: %initializer_list.cpp_destructor.bound.loc12: = bound_method %.loc12_44.19, constants.%initializer_list.cpp_destructor // CHECK:STDOUT: %initializer_list.cpp_destructor.call.loc12: init %empty_tuple.type = call %initializer_list.cpp_destructor.bound.loc12(%.loc12_44.19) -// CHECK:STDOUT: %DestroyOp.bound.loc12: = bound_method %.loc12_44.16, constants.%DestroyOp.b0ebf8.4 +// CHECK:STDOUT: %DestroyOp.bound.loc12: = bound_method %.loc12_44.16, constants.%DestroyOp.b0ebf8.2 // CHECK:STDOUT: %DestroyOp.call.loc12: init %empty_tuple.type = call %DestroyOp.bound.loc12(%.loc12_44.16) // CHECK:STDOUT: %initializer_list.cpp_destructor.bound.loc10: = bound_method %.loc10_23.18, constants.%initializer_list.cpp_destructor // CHECK:STDOUT: %initializer_list.cpp_destructor.call.loc10: init %empty_tuple.type = call %initializer_list.cpp_destructor.bound.loc10(%.loc10_23.18) -// CHECK:STDOUT: %DestroyOp.bound.loc10: = bound_method %.loc10_23.15, constants.%DestroyOp.b0ebf8.4 +// CHECK:STDOUT: %DestroyOp.bound.loc10: = bound_method %.loc10_23.15, constants.%DestroyOp.b0ebf8.2 // CHECK:STDOUT: %DestroyOp.call.loc10: init %empty_tuple.type = call %DestroyOp.bound.loc10(%.loc10_23.15) // CHECK:STDOUT: %initializer_list.cpp_destructor.bound.loc8: = bound_method %.loc8_50.18, constants.%initializer_list.cpp_destructor // CHECK:STDOUT: %initializer_list.cpp_destructor.call.loc8: init %empty_tuple.type = call %initializer_list.cpp_destructor.bound.loc8(%.loc8_50.18) -// CHECK:STDOUT: %DestroyOp.bound.loc8: = bound_method %.loc8_50.15, constants.%DestroyOp.b0ebf8.4 +// CHECK:STDOUT: %DestroyOp.bound.loc8: = bound_method %.loc8_50.15, constants.%DestroyOp.b0ebf8.2 // CHECK:STDOUT: %DestroyOp.call.loc8: init %empty_tuple.type = call %DestroyOp.bound.loc8(%.loc8_50.15) // CHECK:STDOUT: return // CHECK:STDOUT: } @@ -367,9 +367,5 @@ fn F() { // CHECK:STDOUT: // CHECK:STDOUT: fn @initializer_list.initializer_list.loc12(%_.param: %array_type) -> out %return.param: %initializer_list = "cpp.std.initializer_list.make"; // CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc12_44.1(%self.param: ref %InitListConstructor) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc12_44.2(%self.param: ref %initializer_list) = "no_op"; -// CHECK:STDOUT: -// CHECK:STDOUT: fn @DestroyOp.loc12_44.3(%self.param: ref %array_type) = "no_op"; +// CHECK:STDOUT: fn @DestroyOp.loc12(%self.param: ref %array_type) = "no_op"; // CHECK:STDOUT: diff --git a/toolchain/lower/testdata/interop/cpp/enum.carbon b/toolchain/lower/testdata/interop/cpp/enum.carbon index 6e1379076799..242f4f3b0ec0 100644 --- a/toolchain/lower/testdata/interop/cpp/enum.carbon +++ b/toolchain/lower/testdata/interop/cpp/enum.carbon @@ -22,7 +22,7 @@ struct C { static void F(E); }; -// --- pass_as_arg.carbon +// --- fail_todo_pass_as_arg.carbon library "[[@TEST_NAME]]"; @@ -35,10 +35,38 @@ fn Pass() { Cpp.C.F(Cpp.C.c); Cpp.C.F(Cpp.C.E.a); Cpp.C.F(Cpp.C.E.b); + // CHECK:STDERR: fail_todo_pass_as_arg.carbon:[[@LINE+28]]:11: error: cannot access member of interface `Core.Destroy` in type `Cpp.E` that does not implement that interface [MissingImplInMemberAccess] + // CHECK:STDERR: Cpp.C.F(Cpp.C.E.c); + // CHECK:STDERR: ^~~~~~~~~ + // CHECK:STDERR: + // CHECK:STDERR: fail_todo_pass_as_arg.carbon:[[@LINE-5]]:11: error: cannot access member of interface `Core.Destroy` in type `Cpp.E` that does not implement that interface [MissingImplInMemberAccess] + // CHECK:STDERR: Cpp.C.F(Cpp.C.E.b); + // CHECK:STDERR: ^~~~~~~~~ + // CHECK:STDERR: + // CHECK:STDERR: fail_todo_pass_as_arg.carbon:[[@LINE-10]]:11: error: cannot access member of interface `Core.Destroy` in type `Cpp.E` that does not implement that interface [MissingImplInMemberAccess] + // CHECK:STDERR: Cpp.C.F(Cpp.C.E.a); + // CHECK:STDERR: ^~~~~~~~~ + // CHECK:STDERR: + // CHECK:STDERR: fail_todo_pass_as_arg.carbon:[[@LINE-15]]:11: error: cannot access member of interface `Core.Destroy` in type `Cpp.E` that does not implement that interface [MissingImplInMemberAccess] + // CHECK:STDERR: Cpp.C.F(Cpp.C.c); + // CHECK:STDERR: ^~~~~~~ + // CHECK:STDERR: + // CHECK:STDERR: fail_todo_pass_as_arg.carbon:[[@LINE-20]]:11: error: cannot access member of interface `Core.Destroy` in type `Cpp.E` that does not implement that interface [MissingImplInMemberAccess] + // CHECK:STDERR: Cpp.C.F(Cpp.C.b); + // CHECK:STDERR: ^~~~~~~ + // CHECK:STDERR: + // CHECK:STDERR: fail_todo_pass_as_arg.carbon:[[@LINE-25]]:11: error: cannot access member of interface `Core.Destroy` in type `Cpp.E` that does not implement that interface [MissingImplInMemberAccess] + // CHECK:STDERR: Cpp.C.F(Cpp.C.a); + // CHECK:STDERR: ^~~~~~~ + // CHECK:STDERR: + // CHECK:STDERR: fail_todo_pass_as_arg.carbon:[[@LINE-30]]:11: error: cannot access member of interface `Core.Destroy` in type `Cpp.E` that does not implement that interface [MissingImplInMemberAccess] + // CHECK:STDERR: Cpp.C.F(Cpp.C.a); + // CHECK:STDERR: ^~~~~~~ + // CHECK:STDERR: Cpp.C.F(Cpp.C.E.c); } -// --- convert.carbon +// --- fail_todo_convert.carbon library "[[@TEST_NAME]]"; @@ -55,6 +83,10 @@ fn ConvertEnumToI16(e: Cpp.C.E) { } fn ConvertI16ToEnum(n: i16) { + // CHECK:STDERR: fail_todo_convert.carbon:[[@LINE+4]]:11: error: cannot access member of interface `Core.Destroy` in type `Cpp.E` that does not implement that interface [MissingImplInMemberAccess] + // CHECK:STDERR: Cpp.C.F(n as Cpp.C.E); + // CHECK:STDERR: ^~~~~~~~~~~~ + // CHECK:STDERR: Cpp.C.F(n as Cpp.C.E); } @@ -81,234 +113,3 @@ fn BitOr(a: Cpp.Bits, b: Cpp.Bits) -> Cpp.Bits = "int.or"; fn Call() { Cpp.Take(BitOr(Cpp.A, Cpp.C)); } - -// CHECK:STDOUT: ; ModuleID = 'pass_as_arg.carbon' -// CHECK:STDOUT: source_filename = "pass_as_arg.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: ; Function Attrs: alwaysinline mustprogress uwtable -// CHECK:STDOUT: define dso_local void @_ZN1C1FENS_1EE.carbon_thunk(ptr noundef %0) #0 { -// CHECK:STDOUT: entry: -// CHECK:STDOUT: %.addr = alloca ptr, align 8 -// CHECK:STDOUT: store ptr %0, ptr %.addr, align 8, !tbaa !12 -// CHECK:STDOUT: %1 = load ptr, ptr %.addr, align 8, !tbaa !12 -// CHECK:STDOUT: %2 = load i16, ptr %1, align 2, !tbaa !14 -// CHECK:STDOUT: call void @_ZN1C1FENS_1EE(i16 noundef signext %2) -// CHECK:STDOUT: ret void -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: declare void @_ZN1C1FENS_1EE(i16 noundef signext) #1 -// CHECK:STDOUT: -// CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define void @_CPass.Main() #2 !dbg !16 { -// CHECK:STDOUT: entry: -// CHECK:STDOUT: %.loc7_16.1.temp = alloca i16, align 2, !dbg !19 -// CHECK:STDOUT: %.loc8_16.1.temp = alloca i16, align 2, !dbg !20 -// CHECK:STDOUT: %.loc9_16.1.temp = alloca i16, align 2, !dbg !21 -// CHECK:STDOUT: %.loc10_16.1.temp = alloca i16, align 2, !dbg !22 -// CHECK:STDOUT: %.loc11_18.1.temp = alloca i16, align 2, !dbg !23 -// CHECK:STDOUT: %.loc12_18.1.temp = alloca i16, align 2, !dbg !24 -// CHECK:STDOUT: %.loc13_18.1.temp = alloca i16, align 2, !dbg !25 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc7_16.1.temp), !dbg !19 -// CHECK:STDOUT: store i16 0, ptr %.loc7_16.1.temp, align 2, !dbg !19 -// CHECK:STDOUT: call void @_ZN1C1FENS_1EE.carbon_thunk(ptr %.loc7_16.1.temp), !dbg !26 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc8_16.1.temp), !dbg !20 -// CHECK:STDOUT: store i16 0, ptr %.loc8_16.1.temp, align 2, !dbg !20 -// CHECK:STDOUT: call void @_ZN1C1FENS_1EE.carbon_thunk(ptr %.loc8_16.1.temp), !dbg !27 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc9_16.1.temp), !dbg !21 -// CHECK:STDOUT: store i16 7, ptr %.loc9_16.1.temp, align 2, !dbg !21 -// CHECK:STDOUT: call void @_ZN1C1FENS_1EE.carbon_thunk(ptr %.loc9_16.1.temp), !dbg !28 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc10_16.1.temp), !dbg !22 -// CHECK:STDOUT: store i16 8, ptr %.loc10_16.1.temp, align 2, !dbg !22 -// CHECK:STDOUT: call void @_ZN1C1FENS_1EE.carbon_thunk(ptr %.loc10_16.1.temp), !dbg !29 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc11_18.1.temp), !dbg !23 -// CHECK:STDOUT: store i16 0, ptr %.loc11_18.1.temp, align 2, !dbg !23 -// CHECK:STDOUT: call void @_ZN1C1FENS_1EE.carbon_thunk(ptr %.loc11_18.1.temp), !dbg !30 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc12_18.1.temp), !dbg !24 -// CHECK:STDOUT: store i16 7, ptr %.loc12_18.1.temp, align 2, !dbg !24 -// CHECK:STDOUT: call void @_ZN1C1FENS_1EE.carbon_thunk(ptr %.loc12_18.1.temp), !dbg !31 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc13_18.1.temp), !dbg !25 -// CHECK:STDOUT: store i16 8, ptr %.loc13_18.1.temp, align 2, !dbg !25 -// CHECK:STDOUT: call void @_ZN1C1FENS_1EE.carbon_thunk(ptr %.loc13_18.1.temp), !dbg !32 -// CHECK:STDOUT: ret void, !dbg !33 -// 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: ; uselistorder directives -// CHECK:STDOUT: uselistorder ptr @llvm.lifetime.start.p0, { 6, 5, 4, 3, 2, 1, 0 } -// CHECK:STDOUT: -// CHECK:STDOUT: attributes #0 = { 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 #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" } -// CHECK:STDOUT: attributes #2 = { nounwind } -// CHECK:STDOUT: attributes #3 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } -// CHECK:STDOUT: -// CHECK:STDOUT: !llvm.module.flags = !{!0, !1, !2, !3, !4, !5} -// CHECK:STDOUT: !llvm.dbg.cu = !{!6} -// CHECK:STDOUT: !llvm.errno.tbaa = !{!8} -// CHECK:STDOUT: -// CHECK:STDOUT: !0 = !{i32 7, !"Dwarf Version", i32 5} -// CHECK:STDOUT: !1 = !{i32 2, !"Debug Info Version", i32 3} -// CHECK:STDOUT: !2 = !{i32 1, !"wchar_size", i32 4} -// CHECK:STDOUT: !3 = !{i32 8, !"PIC Level", i32 2} -// CHECK:STDOUT: !4 = !{i32 7, !"PIE Level", i32 2} -// CHECK:STDOUT: !5 = !{i32 7, !"uwtable", i32 2} -// CHECK:STDOUT: !6 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !7, producer: "carbon", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug) -// CHECK:STDOUT: !7 = !DIFile(filename: "pass_as_arg.carbon", directory: "") -// CHECK:STDOUT: !8 = !{!9, !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 = !{!13, !13, i64 0} -// CHECK:STDOUT: !13 = !{!"any pointer", !10, i64 0} -// CHECK:STDOUT: !14 = !{!15, !15, i64 0} -// CHECK:STDOUT: !15 = !{!"_ZTSN1C1EE", !10, i64 0} -// CHECK:STDOUT: !16 = distinct !DISubprogram(name: "Pass", linkageName: "_CPass.Main", scope: null, file: !7, line: 6, type: !17, spFlags: DISPFlagDefinition, unit: !6) -// CHECK:STDOUT: !17 = !DISubroutineType(types: !18) -// CHECK:STDOUT: !18 = !{null} -// CHECK:STDOUT: !19 = !DILocation(line: 7, column: 11, scope: !16) -// CHECK:STDOUT: !20 = !DILocation(line: 8, column: 11, scope: !16) -// CHECK:STDOUT: !21 = !DILocation(line: 9, column: 11, scope: !16) -// CHECK:STDOUT: !22 = !DILocation(line: 10, column: 11, scope: !16) -// CHECK:STDOUT: !23 = !DILocation(line: 11, column: 11, scope: !16) -// CHECK:STDOUT: !24 = !DILocation(line: 12, column: 11, scope: !16) -// CHECK:STDOUT: !25 = !DILocation(line: 13, column: 11, scope: !16) -// CHECK:STDOUT: !26 = !DILocation(line: 7, column: 3, scope: !16) -// CHECK:STDOUT: !27 = !DILocation(line: 8, column: 3, scope: !16) -// CHECK:STDOUT: !28 = !DILocation(line: 9, column: 3, scope: !16) -// CHECK:STDOUT: !29 = !DILocation(line: 10, column: 3, scope: !16) -// CHECK:STDOUT: !30 = !DILocation(line: 11, column: 3, scope: !16) -// CHECK:STDOUT: !31 = !DILocation(line: 12, column: 3, scope: !16) -// CHECK:STDOUT: !32 = !DILocation(line: 13, column: 3, scope: !16) -// CHECK:STDOUT: !33 = !DILocation(line: 6, column: 1, scope: !16) -// CHECK:STDOUT: ; ModuleID = 'convert.carbon' -// CHECK:STDOUT: source_filename = "convert.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: ; Function Attrs: alwaysinline mustprogress uwtable -// CHECK:STDOUT: define dso_local void @_ZN1C1FENS_1EE.carbon_thunk(ptr noundef %0) #0 { -// CHECK:STDOUT: entry: -// CHECK:STDOUT: %.addr = alloca ptr, align 8 -// CHECK:STDOUT: store ptr %0, ptr %.addr, align 8, !tbaa !12 -// CHECK:STDOUT: %1 = load ptr, ptr %.addr, align 8, !tbaa !12 -// CHECK:STDOUT: %2 = load i16, ptr %1, align 2, !tbaa !14 -// CHECK:STDOUT: call void @_ZN1C1FENS_1EE(i16 noundef signext %2) -// CHECK:STDOUT: ret void -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: declare void @_ZN1C1FENS_1EE(i16 noundef signext) #1 -// CHECK:STDOUT: -// CHECK:STDOUT: declare void @_CTakeI16.Main(i16) -// CHECK:STDOUT: -// CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define void @_CPassEnum.Main() #2 !dbg !16 { -// CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @_CTakeI16.Main(i16 7), !dbg !19 -// CHECK:STDOUT: ret void, !dbg !20 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define void @_CConvertEnumToI16.Main(i16 %e) #2 !dbg !21 { -// CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @_CTakeI16.Main(i16 %e), !dbg !27 -// CHECK:STDOUT: ret void, !dbg !28 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: ; Function Attrs: nounwind -// CHECK:STDOUT: define void @_CConvertI16ToEnum.Main(i16 %n) #2 !dbg !29 { -// CHECK:STDOUT: entry: -// CHECK:STDOUT: %.loc17_13.3.temp = alloca i16, align 2, !dbg !32 -// CHECK:STDOUT: call void @llvm.lifetime.start.p0(ptr %.loc17_13.3.temp), !dbg !32 -// CHECK:STDOUT: store i16 %n, ptr %.loc17_13.3.temp, align 2, !dbg !32 -// CHECK:STDOUT: call void @_ZN1C1FENS_1EE.carbon_thunk(ptr %.loc17_13.3.temp), !dbg !33 -// CHECK:STDOUT: ret void, !dbg !34 -// 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: attributes #0 = { 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 #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" } -// CHECK:STDOUT: attributes #2 = { nounwind } -// CHECK:STDOUT: attributes #3 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) } -// CHECK:STDOUT: -// CHECK:STDOUT: !llvm.module.flags = !{!0, !1, !2, !3, !4, !5} -// CHECK:STDOUT: !llvm.dbg.cu = !{!6} -// CHECK:STDOUT: !llvm.errno.tbaa = !{!8} -// CHECK:STDOUT: -// CHECK:STDOUT: !0 = !{i32 7, !"Dwarf Version", i32 5} -// CHECK:STDOUT: !1 = !{i32 2, !"Debug Info Version", i32 3} -// CHECK:STDOUT: !2 = !{i32 1, !"wchar_size", i32 4} -// CHECK:STDOUT: !3 = !{i32 8, !"PIC Level", i32 2} -// CHECK:STDOUT: !4 = !{i32 7, !"PIE Level", i32 2} -// CHECK:STDOUT: !5 = !{i32 7, !"uwtable", i32 2} -// CHECK:STDOUT: !6 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !7, producer: "carbon", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug) -// CHECK:STDOUT: !7 = !DIFile(filename: "convert.carbon", directory: "") -// CHECK:STDOUT: !8 = !{!9, !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 = !{!13, !13, i64 0} -// CHECK:STDOUT: !13 = !{!"any pointer", !10, i64 0} -// CHECK:STDOUT: !14 = !{!15, !15, i64 0} -// CHECK:STDOUT: !15 = !{!"_ZTSN1C1EE", !10, i64 0} -// CHECK:STDOUT: !16 = distinct !DISubprogram(name: "PassEnum", linkageName: "_CPassEnum.Main", scope: null, file: !7, line: 8, type: !17, spFlags: DISPFlagDefinition, unit: !6) -// CHECK:STDOUT: !17 = !DISubroutineType(types: !18) -// CHECK:STDOUT: !18 = !{null} -// CHECK:STDOUT: !19 = !DILocation(line: 9, column: 3, scope: !16) -// CHECK:STDOUT: !20 = !DILocation(line: 8, column: 1, scope: !16) -// CHECK:STDOUT: !21 = distinct !DISubprogram(name: "ConvertEnumToI16", linkageName: "_CConvertEnumToI16.Main", scope: null, file: !7, line: 12, type: !22, spFlags: DISPFlagDefinition, unit: !6, retainedNodes: !25) -// CHECK:STDOUT: !22 = !DISubroutineType(types: !23) -// CHECK:STDOUT: !23 = !{null, !24} -// CHECK:STDOUT: !24 = !DIBasicType(name: "int", size: 16, encoding: DW_ATE_signed) -// CHECK:STDOUT: !25 = !{!26} -// CHECK:STDOUT: !26 = !DILocalVariable(arg: 1, scope: !21, type: !24) -// CHECK:STDOUT: !27 = !DILocation(line: 13, column: 3, scope: !21) -// CHECK:STDOUT: !28 = !DILocation(line: 12, column: 1, scope: !21) -// CHECK:STDOUT: !29 = distinct !DISubprogram(name: "ConvertI16ToEnum", linkageName: "_CConvertI16ToEnum.Main", scope: null, file: !7, line: 16, type: !22, spFlags: DISPFlagDefinition, unit: !6, retainedNodes: !30) -// CHECK:STDOUT: !30 = !{!31} -// CHECK:STDOUT: !31 = !DILocalVariable(arg: 1, scope: !29, type: !24) -// CHECK:STDOUT: !32 = !DILocation(line: 17, column: 11, scope: !29) -// CHECK:STDOUT: !33 = !DILocation(line: 17, column: 3, scope: !29) -// CHECK:STDOUT: !34 = !DILocation(line: 16, column: 1, scope: !29) -// CHECK:STDOUT: ; ModuleID = 'use_bitmask.carbon' -// CHECK:STDOUT: source_filename = "use_bitmask.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: ; Function Attrs: nounwind -// CHECK:STDOUT: define void @_CCall.Main() #0 !dbg !12 { -// CHECK:STDOUT: entry: -// CHECK:STDOUT: call void @_Z4Take4Bits(i32 5), !dbg !15 -// CHECK:STDOUT: ret void, !dbg !16 -// CHECK:STDOUT: } -// CHECK:STDOUT: -// CHECK:STDOUT: declare void @_Z4Take4Bits(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" } -// CHECK:STDOUT: -// CHECK:STDOUT: !llvm.module.flags = !{!0, !1, !2, !3, !4, !5} -// CHECK:STDOUT: !llvm.dbg.cu = !{!6} -// CHECK:STDOUT: !llvm.errno.tbaa = !{!8} -// CHECK:STDOUT: -// CHECK:STDOUT: !0 = !{i32 7, !"Dwarf Version", i32 5} -// CHECK:STDOUT: !1 = !{i32 2, !"Debug Info Version", i32 3} -// CHECK:STDOUT: !2 = !{i32 1, !"wchar_size", i32 4} -// CHECK:STDOUT: !3 = !{i32 8, !"PIC Level", i32 2} -// CHECK:STDOUT: !4 = !{i32 7, !"PIE Level", i32 2} -// CHECK:STDOUT: !5 = !{i32 7, !"uwtable", i32 2} -// CHECK:STDOUT: !6 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !7, producer: "carbon", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug) -// CHECK:STDOUT: !7 = !DIFile(filename: "use_bitmask.carbon", directory: "") -// CHECK:STDOUT: !8 = !{!9, !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: "Call", linkageName: "_CCall.Main", scope: null, file: !7, line: 10, type: !13, spFlags: DISPFlagDefinition, unit: !6) -// CHECK:STDOUT: !13 = !DISubroutineType(types: !14) -// CHECK:STDOUT: !14 = !{null} -// CHECK:STDOUT: !15 = !DILocation(line: 11, column: 3, scope: !12) -// CHECK:STDOUT: !16 = !DILocation(line: 10, column: 1, scope: !12)