diff --git a/toolchain/check/handle_binding_pattern.cpp b/toolchain/check/handle_binding_pattern.cpp index 5c921015f4fd..ec4088ed565b 100644 --- a/toolchain/check/handle_binding_pattern.cpp +++ b/toolchain/check/handle_binding_pattern.cpp @@ -117,55 +117,6 @@ static auto HandleAnyBindingPattern(Context& context, Parse::NodeId node_id, context.emitter().Emit(node_id, SelfOutsideImplicitParamList); } - // A `var` binding in a class scope declares a field, not a true binding, - // so we handle it separately. - if (auto parent_class_decl = - context.scope_stack().GetCurrentScopeAs(); - parent_class_decl.has_value() && !is_generic && - node_kind == Parse::NodeKind::VarBindingPattern) { - if (name_id == SemIR::NameId::Underscore) { - // The action item here may be to document this as not allowed, and - // add a proper diagnostic. - context.TODO(node_id, "_ used as field name"); - } - cast_type_id = AsConcreteType( - context, cast_type_id, type_node, - [&] { - CARBON_DIAGNOSTIC(IncompleteTypeInFieldDecl, Error, - "field has incomplete type {0}", SemIR::TypeId); - return context.emitter().Build(type_node, IncompleteTypeInFieldDecl, - cast_type_id); - }, - [&] { - CARBON_DIAGNOSTIC(AbstractTypeInFieldDecl, Error, - "field has abstract type {0}", SemIR::TypeId); - return context.emitter().Build(type_node, AbstractTypeInFieldDecl, - cast_type_id); - }); - if (cast_type_id == SemIR::ErrorInst::TypeId) { - cast_type_inst_id = SemIR::ErrorInst::TypeInstId; - } - auto binding_id = - context.parse_tree().As(node_id); - auto& class_info = context.classes().Get(parent_class_decl->class_id); - auto field_type_id = GetUnboundElementType( - context, context.types().GetInstId(class_info.self_type_id), - cast_type_inst_id); - auto field_id = - AddInst(context, binding_id, - {.type_id = field_type_id, - .name_id = name_id, - .index = SemIR::ElementIndex::None}); - context.field_decls_stack().AppendToTop(field_id); - - context.node_stack().Push(node_id, field_id); - auto name_context = - context.decl_name_stack().MakeUnqualifiedName(node_id, name_id); - context.decl_name_stack().AddNameOrDiagnose( - name_context, field_id, introducer.modifier_set.GetAccessKind()); - return true; - } - // A binding in an interface scope declares an associated constant, not a // true binding, so we handle it separately. if (auto parent_interface_decl = @@ -373,6 +324,54 @@ auto HandleParseNode(Context& context, return HandleAnyBindingPattern(context, node_id, node_kind); } +auto HandleParseNode(Context& context, Parse::FieldNameAndTypeId node_id) + -> bool { + auto [type_node, parsed_type_id] = context.node_stack().PopExprWithNodeId(); + auto [cast_type_inst_id, cast_type_id] = + ExprAsType(context, type_node, parsed_type_id); + auto [name_node, name_id] = context.node_stack().PopNameWithNodeId(); + + auto parent_class_decl = + context.scope_stack().GetCurrentScopeAs(); + CARBON_CHECK(parent_class_decl); + cast_type_id = AsConcreteType( + context, cast_type_id, type_node, + [&] { + CARBON_DIAGNOSTIC(IncompleteTypeInFieldDecl, Error, + "field has incomplete type {0}", SemIR::TypeId); + return context.emitter().Build(type_node, IncompleteTypeInFieldDecl, + cast_type_id); + }, + [&] { + CARBON_DIAGNOSTIC(AbstractTypeInFieldDecl, Error, + "field has abstract type {0}", SemIR::TypeId); + return context.emitter().Build(type_node, AbstractTypeInFieldDecl, + cast_type_id); + }); + if (cast_type_id == SemIR::ErrorInst::TypeId) { + cast_type_inst_id = SemIR::ErrorInst::TypeInstId; + } + auto& class_info = context.classes().Get(parent_class_decl->class_id); + auto field_type_id = GetUnboundElementType( + context, context.types().GetInstId(class_info.self_type_id), + cast_type_inst_id); + auto field_id = + AddInst(context, node_id, + {.type_id = field_type_id, + .name_id = name_id, + .index = SemIR::ElementIndex::None}); + context.field_decls_stack().AppendToTop(field_id); + + auto name_context = + context.decl_name_stack().MakeUnqualifiedName(node_id, name_id); + context.decl_name_stack().AddNameOrDiagnose( + name_context, field_id, + context.decl_introducer_state_stack() + .innermost() + .modifier_set.GetAccessKind()); + return true; +} + auto HandleParseNode(Context& context, Parse::AddrId node_id) -> bool { auto param_pattern_id = context.node_stack().PopPattern(); if (SemIR::IsSelfPattern(context.sem_ir(), param_pattern_id)) { diff --git a/toolchain/check/handle_let_and_var.cpp b/toolchain/check/handle_let_and_var.cpp index 8ae52472d29b..fe55818e1724 100644 --- a/toolchain/check/handle_let_and_var.cpp +++ b/toolchain/check/handle_let_and_var.cpp @@ -106,6 +106,13 @@ auto HandleParseNode(Context& context, Parse::VariableIntroducerId node_id) return HandleIntroducer(context, node_id); } +auto HandleParseNode(Context& context, Parse::FieldIntroducerId node_id) + -> bool { + context.decl_introducer_state_stack().Push(); + context.node_stack().Push(node_id); + return true; +} + // Returns a VarStorage inst for the given `var` pattern. If the pattern // is the body of a returned var, this reuses the return slot, and otherwise it // adds a new inst. @@ -211,6 +218,12 @@ auto HandleParseNode(Context& context, Parse::VariableInitializerId node_id) return HandleInitializer(context, node_id); } +auto HandleParseNode(Context& context, Parse::FieldInitializerId node_id) + -> bool { + context.node_stack().Push(node_id); + return true; +} + namespace { // State from HandleDecl, returned for type-specific handling. struct DeclInfo { @@ -371,26 +384,6 @@ auto HandleParseNode(Context& context, Parse::VariableDeclId node_id) -> bool { context, decl_info.introducer, KeywordModifierSet::Access | KeywordModifierSet::Returned); - if (auto class_scope = - context.scope_stack().GetCurrentScopeAs()) { - auto var = context.insts().GetAs(decl_info.pattern_id); - if (!context.insts().TryGetAs(var.subpattern_id)) { - CARBON_DIAGNOSTIC(ExpectedSymbolicBindingInFieldDecl, Error, - "pattern in field declaration is not a " - "single `:` binding"); - context.emitter().Emit(context.insts().GetLocId(var.subpattern_id), - ExpectedSymbolicBindingInFieldDecl); - context.name_scopes() - .Get(context.classes().Get(class_scope->class_id).scope_id) - .set_has_error(); - } - if (decl_info.init_id.has_value()) { - // TODO: In a class scope, we should instead save the initializer - // somewhere so that we can use it as a default. - context.TODO(node_id, "Field initializer"); - } - return true; - } if (context.scope_stack().GetCurrentScopeAs()) { CARBON_DIAGNOSTIC(VarInInterfaceDecl, Error, "`var` declaration in interface"); @@ -402,4 +395,27 @@ auto HandleParseNode(Context& context, Parse::VariableDeclId node_id) -> bool { return true; } +auto HandleParseNode(Context& context, Parse::FieldDeclId node_id) -> bool { + if (context.node_stack().PeekNextIs(Parse::NodeKind::FieldInitializer)) { + // TODO: In a class scope, we should instead save the initializer + // somewhere so that we can use it as a default. + context.TODO(node_id, "Field initializer"); + context.node_stack().PopExpr(); + context.node_stack() + .PopAndDiscardSoloNodeId(); + } + + context.node_stack() + .PopAndDiscardSoloNodeId(); + auto parent_scope_inst = + context.name_scopes() + .GetInstIfValid(context.scope_stack().PeekNameScopeId()) + .second; + auto introducer = + context.decl_introducer_state_stack().Pop(); + CheckAccessModifiersOnDecl(context, introducer, parent_scope_inst); + LimitModifiersOnDecl(context, introducer, KeywordModifierSet::Access); + return true; +} + } // namespace Carbon::Check diff --git a/toolchain/check/node_stack.h b/toolchain/check/node_stack.h index bfdd86fec688..d98cebf20498 100644 --- a/toolchain/check/node_stack.h +++ b/toolchain/check/node_stack.h @@ -410,6 +410,7 @@ class NodeStack { -> std::optional { switch (node_kind) { case Parse::NodeKind::CallExprStart: + case Parse::NodeKind::FieldNameAndType: case Parse::NodeKind::IfExprThen: case Parse::NodeKind::ReturnType: case Parse::NodeKind::ShortCircuitOperandAnd: @@ -446,6 +447,8 @@ class NodeStack { case Parse::NodeKind::ClassIntroducer: case Parse::NodeKind::CodeBlockStart: case Parse::NodeKind::ExplicitParamListStart: + case Parse::NodeKind::FieldInitializer: + case Parse::NodeKind::FieldIntroducer: case Parse::NodeKind::FunctionIntroducer: case Parse::NodeKind::IfStatementElse: case Parse::NodeKind::ImplicitParamListStart: diff --git a/toolchain/check/testdata/alias/no_prelude/import_order.carbon b/toolchain/check/testdata/alias/no_prelude/import_order.carbon index 0442dcb5f92c..494334f87249 100644 --- a/toolchain/check/testdata/alias/no_prelude/import_order.carbon +++ b/toolchain/check/testdata/alias/no_prelude/import_order.carbon @@ -60,11 +60,9 @@ var a_val: a = {.v = b_val.v}; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { +// CHECK:STDOUT: %.loc4_19.1: %empty_tuple.type = tuple_literal () +// CHECK:STDOUT: %.loc4_19.2: type = converted %.loc4_19.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: %.loc4_16: %C.elem = field_decl v, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc4_11: %C.elem = var_pattern %.loc4_16 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %C.elem = var // CHECK:STDOUT: %struct_type.v: type = struct_type {.v: %empty_tuple.type} [concrete = constants.%struct_type.v] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.v [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type diff --git a/toolchain/check/testdata/alias/no_prelude/in_namespace.carbon b/toolchain/check/testdata/alias/no_prelude/in_namespace.carbon index 0342f951fb91..a48b3b978c88 100644 --- a/toolchain/check/testdata/alias/no_prelude/in_namespace.carbon +++ b/toolchain/check/testdata/alias/no_prelude/in_namespace.carbon @@ -74,11 +74,9 @@ fn F() -> NS.a { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { +// CHECK:STDOUT: %.loc11_19.1: %empty_tuple.type = tuple_literal () +// CHECK:STDOUT: %.loc11_19.2: type = converted %.loc11_19.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: %.loc11_16: %C.elem = field_decl v, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc11_11: %C.elem = var_pattern %.loc11_16 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %C.elem = var // CHECK:STDOUT: %struct_type.v: type = struct_type {.v: %empty_tuple.type} [concrete = constants.%struct_type.v] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.v [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type diff --git a/toolchain/check/testdata/as/adapter_conversion.carbon b/toolchain/check/testdata/as/adapter_conversion.carbon index d6b2907b36ca..f64f8973fa9b 100644 --- a/toolchain/check/testdata/as/adapter_conversion.carbon +++ b/toolchain/check/testdata/as/adapter_conversion.carbon @@ -255,16 +255,12 @@ var b: B = {.x = 1} as B; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @A { -// CHECK:STDOUT: %.loc5_8: %A.elem = field_decl x, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_3: %A.elem = var_pattern %.loc5_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc5: ref %A.elem = var -// CHECK:STDOUT: %.loc6_8: %A.elem = field_decl y, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc6_3: %A.elem = var_pattern %.loc6_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc6: ref %A.elem = var +// CHECK:STDOUT: %int_32.loc5: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc5: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc5: %A.elem = field_decl x, element0 [concrete] +// CHECK:STDOUT: %int_32.loc6: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc6: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc6: %A.elem = field_decl y, element1 [concrete] // CHECK:STDOUT: %Make.decl: %Make.type = fn_decl @Make [concrete = constants.%Make] { // CHECK:STDOUT: %return.patt: %A = return_slot_pattern // CHECK:STDOUT: %return.param_patt: %A = out_param_pattern %return.patt, call_param0 @@ -279,8 +275,8 @@ var b: B = {.x = 1} as B; // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%A -// CHECK:STDOUT: .x = %.loc5_8 -// CHECK:STDOUT: .y = %.loc6_8 +// CHECK:STDOUT: .x = %.loc5 +// CHECK:STDOUT: .y = %.loc6 // CHECK:STDOUT: .A = // CHECK:STDOUT: .Make = %Make.decl // CHECK:STDOUT: } @@ -611,24 +607,20 @@ var b: B = {.x = 1} as B; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @A { -// CHECK:STDOUT: %.loc5_8: %A.elem = field_decl x, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_3: %A.elem = var_pattern %.loc5_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc5: ref %A.elem = var -// CHECK:STDOUT: %.loc6_8: %A.elem = field_decl y, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc6_3: %A.elem = var_pattern %.loc6_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc6: ref %A.elem = var +// CHECK:STDOUT: %int_32.loc5: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc5: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc5: %A.elem = field_decl x, element0 [concrete] +// CHECK:STDOUT: %int_32.loc6: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc6: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc6: %A.elem = field_decl y, element1 [concrete] // CHECK:STDOUT: %struct_type.x.y: type = struct_type {.x: %i32, .y: %i32} [concrete = constants.%struct_type.x.y.871] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x.y [concrete = constants.%complete_type.70a] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%A -// CHECK:STDOUT: .x = %.loc5_8 -// CHECK:STDOUT: .y = %.loc6_8 +// CHECK:STDOUT: .x = %.loc5 +// CHECK:STDOUT: .y = %.loc6 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @B { @@ -734,24 +726,20 @@ var b: B = {.x = 1} as B; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @A { -// CHECK:STDOUT: %.loc5_8: %A.elem = field_decl x, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_3: %A.elem = var_pattern %.loc5_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc5: ref %A.elem = var -// CHECK:STDOUT: %.loc6_8: %A.elem = field_decl y, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc6_3: %A.elem = var_pattern %.loc6_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc6: ref %A.elem = var +// CHECK:STDOUT: %int_32.loc5: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc5: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc5: %A.elem = field_decl x, element0 [concrete] +// CHECK:STDOUT: %int_32.loc6: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc6: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc6: %A.elem = field_decl y, element1 [concrete] // CHECK:STDOUT: %struct_type.x.y: type = struct_type {.x: %i32, .y: %i32} [concrete = constants.%struct_type.x.y.871] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x.y [concrete = constants.%complete_type.70a] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%A -// CHECK:STDOUT: .x = %.loc5_8 -// CHECK:STDOUT: .y = %.loc6_8 +// CHECK:STDOUT: .x = %.loc5 +// CHECK:STDOUT: .y = %.loc6 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @B { @@ -1029,18 +1017,16 @@ var b: B = {.x = 1} as B; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @A { -// CHECK:STDOUT: %.loc5_8: %A.elem = field_decl x, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_3: %A.elem = var_pattern %.loc5_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %A.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc5: %A.elem = field_decl x, element0 [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %i32} [concrete = constants.%struct_type.x.ed6] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete = constants.%complete_type.1ec] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%A -// CHECK:STDOUT: .x = %.loc5_8 +// CHECK:STDOUT: .x = %.loc5 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @B { diff --git a/toolchain/check/testdata/as/overloaded.carbon b/toolchain/check/testdata/as/overloaded.carbon index 396f44accbc7..168d58173bee 100644 --- a/toolchain/check/testdata/as/overloaded.carbon +++ b/toolchain/check/testdata/as/overloaded.carbon @@ -156,18 +156,16 @@ let n: i32 = ((4 as i32) as X) as i32; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @X { -// CHECK:STDOUT: %.loc12_8: %X.elem = field_decl n, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc12_3: %X.elem = var_pattern %.loc12_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %X.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc12: %X.elem = field_decl n, element0 [concrete] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete = constants.%struct_type.n] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.n [concrete = constants.%complete_type.54b] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%X -// CHECK:STDOUT: .n = %.loc12_8 +// CHECK:STDOUT: .n = %.loc12 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Convert.2[%self.param_patt: %i32]() -> %return.param_patt: %X { @@ -184,7 +182,7 @@ let n: i32 = ((4 as i32) as X) as i32; // CHECK:STDOUT: fn @Convert.3[%self.param_patt: %X]() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: %X = name_ref self, %self -// CHECK:STDOUT: %n.ref: %X.elem = name_ref n, @X.%.loc12_8 [concrete = @X.%.loc12_8] +// CHECK:STDOUT: %n.ref: %X.elem = name_ref n, @X.%.loc12 [concrete = @X.%.loc12] // CHECK:STDOUT: %.loc20_45.1: ref %i32 = class_element_access %self.ref, element0 // CHECK:STDOUT: %.loc20_45.2: %i32 = bind_value %.loc20_45.1 // CHECK:STDOUT: return %.loc20_45.2 diff --git a/toolchain/check/testdata/class/access_modifers.carbon b/toolchain/check/testdata/class/access_modifers.carbon index 809ca407d6f2..741ff46cc62a 100644 --- a/toolchain/check/testdata/class/access_modifers.carbon +++ b/toolchain/check/testdata/class/access_modifers.carbon @@ -203,18 +203,16 @@ class A { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Circle { -// CHECK:STDOUT: %.loc5_21: %Circle.elem = field_decl radius, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_11: %Circle.elem = var_pattern %.loc5_21 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Circle.elem = var +// CHECK:STDOUT: %int_32.loc5: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc5: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc5: %Circle.elem = field_decl radius, element0 [concrete] // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %SOME_INTERNAL_CONSTANT.patt: %i32 = binding_pattern SOME_INTERNAL_CONSTANT // CHECK:STDOUT: } // CHECK:STDOUT: %int_5: Core.IntLiteral = int_value 5 [concrete = constants.%int_5.64b] -// CHECK:STDOUT: %.loc6_39: type = splice_block %i32 [concrete = constants.%i32] { -// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] -// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc6_39: type = splice_block %i32.loc6 [concrete = constants.%i32] { +// CHECK:STDOUT: %int_32.loc6: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc6: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: } // CHECK:STDOUT: %impl.elem0: %.9c3 = impl_witness_access constants.%ImplicitAs.impl_witness.c75, element0 [concrete = constants.%Convert.956] // CHECK:STDOUT: %bound_method.loc6_45.1: = bound_method %int_5, %impl.elem0 [concrete = constants.%Convert.bound.4e6] @@ -247,7 +245,7 @@ class A { // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Circle -// CHECK:STDOUT: .radius [private] = %.loc5_21 +// CHECK:STDOUT: .radius [private] = %.loc5 // CHECK:STDOUT: .SOME_INTERNAL_CONSTANT [private] = %SOME_INTERNAL_CONSTANT // CHECK:STDOUT: .SomeInternalFunction [private] = %SomeInternalFunction.decl // CHECK:STDOUT: .Make = %Make.decl @@ -349,18 +347,16 @@ class A { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @A { -// CHECK:STDOUT: %.loc5_18: %A.elem = field_decl x, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_13: %A.elem = var_pattern %.loc5_18 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %A.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc5: %A.elem = field_decl x, element0 [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %i32} [concrete = constants.%struct_type.x] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete = constants.%complete_type.1ec] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%A -// CHECK:STDOUT: .x [protected] = %.loc5_18 +// CHECK:STDOUT: .x [protected] = %.loc5 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Run() { @@ -427,11 +423,9 @@ class A { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Circle { -// CHECK:STDOUT: %.loc5_21: %Circle.elem = field_decl radius, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_11: %Circle.elem = var_pattern %.loc5_21 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Circle.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc5: %Circle.elem = field_decl radius, element0 [concrete] // CHECK:STDOUT: %GetRadius.decl: %GetRadius.type = fn_decl @GetRadius [concrete = constants.%GetRadius] { // CHECK:STDOUT: %self.patt: %Circle = binding_pattern self // CHECK:STDOUT: %self.param_patt: %Circle = value_param_pattern %self.patt, call_param0 @@ -475,7 +469,7 @@ class A { // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Circle -// CHECK:STDOUT: .radius [private] = %.loc5_21 +// CHECK:STDOUT: .radius [private] = %.loc5 // CHECK:STDOUT: .GetRadius = %GetRadius.decl // CHECK:STDOUT: .SomeInternalFunction [private] = %SomeInternalFunction.decl // CHECK:STDOUT: .Compute = %Compute.decl @@ -484,7 +478,7 @@ class A { // CHECK:STDOUT: fn @GetRadius[%self.param_patt: %Circle]() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: %Circle = name_ref self, %self -// CHECK:STDOUT: %radius.ref: %Circle.elem = name_ref radius, @Circle.%.loc5_21 [concrete = @Circle.%.loc5_21] +// CHECK:STDOUT: %radius.ref: %Circle.elem = name_ref radius, @Circle.%.loc5 [concrete = @Circle.%.loc5] // CHECK:STDOUT: %.loc8_16.1: ref %i32 = class_element_access %self.ref, element0 // CHECK:STDOUT: %.loc8_16.2: %i32 = bind_value %.loc8_16.1 // CHECK:STDOUT: return %.loc8_16.2 diff --git a/toolchain/check/testdata/class/adapter/adapt.carbon b/toolchain/check/testdata/class/adapter/adapt.carbon index f257dc8e9d95..ee4645418541 100644 --- a/toolchain/check/testdata/class/adapter/adapt.carbon +++ b/toolchain/check/testdata/class/adapter/adapt.carbon @@ -99,24 +99,20 @@ interface I { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @SomeClass { -// CHECK:STDOUT: %.loc5_8: %SomeClass.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_3: %SomeClass.elem = var_pattern %.loc5_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc5: ref %SomeClass.elem = var -// CHECK:STDOUT: %.loc6_8: %SomeClass.elem = field_decl b, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc6_3: %SomeClass.elem = var_pattern %.loc6_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc6: ref %SomeClass.elem = var +// CHECK:STDOUT: %int_32.loc5: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc5: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc5: %SomeClass.elem = field_decl a, element0 [concrete] +// CHECK:STDOUT: %int_32.loc6: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc6: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc6: %SomeClass.elem = field_decl b, element1 [concrete] // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete = constants.%struct_type.a.b] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a.b [concrete = constants.%complete_type.705] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%SomeClass -// CHECK:STDOUT: .a = %.loc5_8 -// CHECK:STDOUT: .b = %.loc6_8 +// CHECK:STDOUT: .a = %.loc5 +// CHECK:STDOUT: .b = %.loc6 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @SomeClassAdapter { diff --git a/toolchain/check/testdata/class/adapter/extend_adapt.carbon b/toolchain/check/testdata/class/adapter/extend_adapt.carbon index 8a52a48dfd3e..1a29a00dedc2 100644 --- a/toolchain/check/testdata/class/adapter/extend_adapt.carbon +++ b/toolchain/check/testdata/class/adapter/extend_adapt.carbon @@ -212,16 +212,12 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @SomeClass { -// CHECK:STDOUT: %.loc7_8: %SomeClass.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc7_3: %SomeClass.elem = var_pattern %.loc7_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc7: ref %SomeClass.elem = var -// CHECK:STDOUT: %.loc8_8: %SomeClass.elem = field_decl b, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc8_3: %SomeClass.elem = var_pattern %.loc8_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc8: ref %SomeClass.elem = var +// CHECK:STDOUT: %int_32.loc7: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc7: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc7: %SomeClass.elem = field_decl a, element0 [concrete] +// CHECK:STDOUT: %int_32.loc8: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc8: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc8: %SomeClass.elem = field_decl b, element1 [concrete] // CHECK:STDOUT: %StaticMemberFunction.decl: %StaticMemberFunction.type = fn_decl @StaticMemberFunction [concrete = constants.%StaticMemberFunction] {} {} // CHECK:STDOUT: %AdapterMethod.decl: %AdapterMethod.type = fn_decl @AdapterMethod [concrete = constants.%AdapterMethod] { // CHECK:STDOUT: %self.patt: %SomeClassAdapter = binding_pattern self @@ -237,8 +233,8 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%SomeClass -// CHECK:STDOUT: .a = %.loc7_8 -// CHECK:STDOUT: .b = %.loc8_8 +// CHECK:STDOUT: .a = %.loc7 +// CHECK:STDOUT: .b = %.loc8 // CHECK:STDOUT: .StaticMemberFunction = %StaticMemberFunction.decl // CHECK:STDOUT: .SomeClassAdapter = // CHECK:STDOUT: .AdapterMethod = %AdapterMethod.decl @@ -400,24 +396,20 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @SomeClass { -// CHECK:STDOUT: %.loc5_8: %SomeClass.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_3: %SomeClass.elem = var_pattern %.loc5_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc5: ref %SomeClass.elem = var -// CHECK:STDOUT: %.loc6_8: %SomeClass.elem = field_decl b, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc6_3: %SomeClass.elem = var_pattern %.loc6_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc6: ref %SomeClass.elem = var +// CHECK:STDOUT: %int_32.loc5: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc5: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc5: %SomeClass.elem = field_decl a, element0 [concrete] +// CHECK:STDOUT: %int_32.loc6: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc6: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc6: %SomeClass.elem = field_decl b, element1 [concrete] // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete = constants.%struct_type.a.b] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a.b [concrete = constants.%complete_type.705] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%SomeClass -// CHECK:STDOUT: .a = %.loc5_8 -// CHECK:STDOUT: .b = %.loc6_8 +// CHECK:STDOUT: .a = %.loc5 +// CHECK:STDOUT: .b = %.loc6 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @SomeClassAdapter { @@ -436,7 +428,7 @@ fn F(a: IntAdapter) -> i32 { // CHECK:STDOUT: fn @F(%a.param_patt: %SomeClassAdapter) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %a.ref: %SomeClassAdapter = name_ref a, %a -// CHECK:STDOUT: %b.ref: %SomeClass.elem = name_ref b, @SomeClass.%.loc6_8 [concrete = @SomeClass.%.loc6_8] +// CHECK:STDOUT: %b.ref: %SomeClass.elem = name_ref b, @SomeClass.%.loc6 [concrete = @SomeClass.%.loc6] // CHECK:STDOUT: %.loc21_11.1: %SomeClass = converted %a.ref, [concrete = ] // CHECK:STDOUT: %.loc21_11.2: %i32 = class_element_access , element1 [concrete = ] // CHECK:STDOUT: return diff --git a/toolchain/check/testdata/class/adapter/fail_adapt_with_subobjects.carbon b/toolchain/check/testdata/class/adapter/fail_adapt_with_subobjects.carbon index b0ecf34d599f..a2d54ffe7063 100644 --- a/toolchain/check/testdata/class/adapter/fail_adapt_with_subobjects.carbon +++ b/toolchain/check/testdata/class/adapter/fail_adapt_with_subobjects.carbon @@ -161,47 +161,39 @@ class AdaptWithBaseAndFields { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @AdaptWithField { -// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] -// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] -// CHECK:STDOUT: adapt_decl %i32 [concrete] -// CHECK:STDOUT: %.loc13_8: %AdaptWithField.elem = field_decl n, element [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc13_3: %AdaptWithField.elem = var_pattern %.loc13_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %AdaptWithField.elem = var +// CHECK:STDOUT: %int_32.loc8: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc8: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: adapt_decl %i32.loc8 [concrete] +// CHECK:STDOUT: %int_32.loc13: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc13: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc13: %AdaptWithField.elem = field_decl n, element [concrete] // CHECK:STDOUT: complete_type_witness = // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%AdaptWithField -// CHECK:STDOUT: .n = %.loc13_8 +// CHECK:STDOUT: .n = %.loc13 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @AdaptWithFields { -// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] -// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] -// CHECK:STDOUT: adapt_decl %i32 [concrete] -// CHECK:STDOUT: %.loc25_8: %AdaptWithFields.elem = field_decl a, element [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc25_3: %AdaptWithFields.elem = var_pattern %.loc25_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc25: ref %AdaptWithFields.elem = var -// CHECK:STDOUT: %.loc26_8: %AdaptWithFields.elem = field_decl b, element [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc26_3: %AdaptWithFields.elem = var_pattern %.loc26_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc26: ref %AdaptWithFields.elem = var -// CHECK:STDOUT: %.loc27_8: %AdaptWithFields.elem = field_decl c, element [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc27_3: %AdaptWithFields.elem = var_pattern %.loc27_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc27: ref %AdaptWithFields.elem = var +// CHECK:STDOUT: %int_32.loc20: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc20: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: adapt_decl %i32.loc20 [concrete] +// CHECK:STDOUT: %int_32.loc25: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc25: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc25: %AdaptWithFields.elem = field_decl a, element [concrete] +// CHECK:STDOUT: %int_32.loc26: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc26: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc26: %AdaptWithFields.elem = field_decl b, element [concrete] +// CHECK:STDOUT: %int_32.loc27: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc27: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc27: %AdaptWithFields.elem = field_decl c, element [concrete] // CHECK:STDOUT: complete_type_witness = // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%AdaptWithFields -// CHECK:STDOUT: .a = %.loc25_8 -// CHECK:STDOUT: .b = %.loc26_8 -// CHECK:STDOUT: .c = %.loc27_8 +// CHECK:STDOUT: .a = %.loc25 +// CHECK:STDOUT: .b = %.loc26 +// CHECK:STDOUT: .c = %.loc27 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_adapt_with_base_and_fields.carbon @@ -248,11 +240,9 @@ class AdaptWithBaseAndFields { // CHECK:STDOUT: class @AdaptWithBaseAndFields { // CHECK:STDOUT: %Base.ref: type = name_ref Base, file.%Base.decl [concrete = constants.%Base] // CHECK:STDOUT: %.loc7: %AdaptWithBaseAndFields.elem.767 = base_decl %Base.ref, element [concrete] -// CHECK:STDOUT: %.loc8_8: %AdaptWithBaseAndFields.elem.ddf = field_decl n, element [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc8_3: %AdaptWithBaseAndFields.elem.ddf = var_pattern %.loc8_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %AdaptWithBaseAndFields.elem.ddf = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc8: %AdaptWithBaseAndFields.elem.ddf = field_decl n, element [concrete] // CHECK:STDOUT: %.loc16_10: %empty_struct_type = struct_literal () // CHECK:STDOUT: %.loc16_11: type = converted %.loc16_10, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: adapt_decl %.loc16_11 [concrete] @@ -262,7 +252,7 @@ class AdaptWithBaseAndFields { // CHECK:STDOUT: .Self = constants.%AdaptWithBaseAndFields // CHECK:STDOUT: .Base = // CHECK:STDOUT: .base = %.loc7 -// CHECK:STDOUT: .n = %.loc8_8 +// CHECK:STDOUT: .n = %.loc8 // CHECK:STDOUT: extend %Base.ref // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/adapter/init_adapt.carbon b/toolchain/check/testdata/class/adapter/init_adapt.carbon index fc1c11332980..5a0812f9aac2 100644 --- a/toolchain/check/testdata/class/adapter/init_adapt.carbon +++ b/toolchain/check/testdata/class/adapter/init_adapt.carbon @@ -220,24 +220,20 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %.loc5_8: %C.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_3: %C.elem = var_pattern %.loc5_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc5: ref %C.elem = var -// CHECK:STDOUT: %.loc6_8: %C.elem = field_decl b, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc6_3: %C.elem = var_pattern %.loc6_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc6: ref %C.elem = var +// CHECK:STDOUT: %int_32.loc5: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc5: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc5: %C.elem = field_decl a, element0 [concrete] +// CHECK:STDOUT: %int_32.loc6: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc6: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc6: %C.elem = field_decl b, element1 [concrete] // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete = constants.%struct_type.a.b.501] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a.b [concrete = constants.%complete_type.705] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%C -// CHECK:STDOUT: .a = %.loc5_8 -// CHECK:STDOUT: .b = %.loc6_8 +// CHECK:STDOUT: .a = %.loc5 +// CHECK:STDOUT: .b = %.loc6 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @AdaptC { @@ -415,24 +411,20 @@ var e: C = MakeAdaptC(); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %.loc5_8: %C.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_3: %C.elem = var_pattern %.loc5_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc5: ref %C.elem = var -// CHECK:STDOUT: %.loc6_8: %C.elem = field_decl b, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc6_3: %C.elem = var_pattern %.loc6_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc6: ref %C.elem = var +// CHECK:STDOUT: %int_32.loc5: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc5: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc5: %C.elem = field_decl a, element0 [concrete] +// CHECK:STDOUT: %int_32.loc6: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc6: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc6: %C.elem = field_decl b, element1 [concrete] // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete = constants.%struct_type.a.b.501] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a.b [concrete = constants.%complete_type.705] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%C -// CHECK:STDOUT: .a = %.loc5_8 -// CHECK:STDOUT: .b = %.loc6_8 +// CHECK:STDOUT: .a = %.loc5 +// CHECK:STDOUT: .b = %.loc6 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @AdaptC { diff --git a/toolchain/check/testdata/class/base.carbon b/toolchain/check/testdata/class/base.carbon index 23f923c4314b..2f38c22bf4c4 100644 --- a/toolchain/check/testdata/class/base.carbon +++ b/toolchain/check/testdata/class/base.carbon @@ -137,28 +137,24 @@ class Derived { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Base { -// CHECK:STDOUT: %.loc4_8: %Base.elem = field_decl b, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc4_3: %Base.elem = var_pattern %.loc4_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Base.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc4: %Base.elem = field_decl b, element0 [concrete] // CHECK:STDOUT: %struct_type.b: type = struct_type {.b: %i32} [concrete = constants.%struct_type.b.0a3] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.b [concrete = constants.%complete_type.ba8] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Base -// CHECK:STDOUT: .b = %.loc4_8 +// CHECK:STDOUT: .b = %.loc4 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Derived { // CHECK:STDOUT: %Base.ref: type = name_ref Base, file.%Base.decl [concrete = constants.%Base] // CHECK:STDOUT: %.loc8: %Derived.elem.69e = base_decl %Base.ref, element0 [concrete] -// CHECK:STDOUT: %.loc10_8: %Derived.elem.344 = field_decl d, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc10_3: %Derived.elem.344 = var_pattern %.loc10_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Derived.elem.344 = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc10: %Derived.elem.344 = field_decl d, element1 [concrete] // CHECK:STDOUT: %struct_type.base.d: type = struct_type {.base: %Base, .d: %i32} [concrete = constants.%struct_type.base.d.f8f] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.base.d [concrete = constants.%complete_type.da6] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -167,7 +163,7 @@ class Derived { // CHECK:STDOUT: .Self = constants.%Derived // CHECK:STDOUT: .Base = // CHECK:STDOUT: .base = %.loc8 -// CHECK:STDOUT: .d = %.loc10_8 +// CHECK:STDOUT: .d = %.loc10 // CHECK:STDOUT: extend %Base.ref // CHECK:STDOUT: } // CHECK:STDOUT: @@ -204,14 +200,14 @@ class Derived { // CHECK:STDOUT: fn @Access(%d.param_patt: %Derived) -> %return.param_patt: %tuple.type.d07 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %d.ref.loc18_11: %Derived = name_ref d, %d -// CHECK:STDOUT: %d.ref.loc18_12: %Derived.elem.344 = name_ref d, @Derived.%.loc10_8 [concrete = @Derived.%.loc10_8] +// CHECK:STDOUT: %d.ref.loc18_12: %Derived.elem.344 = name_ref d, @Derived.%.loc10 [concrete = @Derived.%.loc10] // CHECK:STDOUT: %.loc18_12.1: ref %i32 = class_element_access %d.ref.loc18_11, element1 // CHECK:STDOUT: %.loc18_12.2: %i32 = bind_value %.loc18_12.1 // CHECK:STDOUT: %d.ref.loc18_16: %Derived = name_ref d, %d // CHECK:STDOUT: %base.ref: %Derived.elem.69e = name_ref base, @Derived.%.loc8 [concrete = @Derived.%.loc8] // CHECK:STDOUT: %.loc18_17.1: ref %Base = class_element_access %d.ref.loc18_16, element0 // CHECK:STDOUT: %.loc18_17.2: %Base = bind_value %.loc18_17.1 -// CHECK:STDOUT: %b.ref: %Base.elem = name_ref b, @Base.%.loc4_8 [concrete = @Base.%.loc4_8] +// CHECK:STDOUT: %b.ref: %Base.elem = name_ref b, @Base.%.loc4 [concrete = @Base.%.loc4] // CHECK:STDOUT: %.loc18_22.1: ref %i32 = class_element_access %.loc18_17.2, element0 // CHECK:STDOUT: %.loc18_22.2: %i32 = bind_value %.loc18_22.1 // CHECK:STDOUT: %.loc18_24.1: %tuple.type.d07 = tuple_literal (%.loc18_12.2, %.loc18_22.2) @@ -267,11 +263,9 @@ class Derived { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Derived { -// CHECK:STDOUT: %.loc7_8: %Derived.elem = field_decl d, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc7_3: %Derived.elem = var_pattern %.loc7_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Derived.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc7: %Derived.elem = field_decl d, element0 [concrete] // CHECK:STDOUT: %Base.ref: type = name_ref Base, file.%Base.decl [concrete = constants.%Base] // CHECK:STDOUT: %struct_type.d: type = struct_type {.d: %i32} [concrete = constants.%struct_type.d] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.d [concrete = constants.%complete_type.860] @@ -279,7 +273,7 @@ class Derived { // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Derived -// CHECK:STDOUT: .d = %.loc7_8 +// CHECK:STDOUT: .d = %.loc7 // CHECK:STDOUT: .Base = // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/base_field.carbon b/toolchain/check/testdata/class/base_field.carbon index c95ff3a7c9e0..e802a4b6ef68 100644 --- a/toolchain/check/testdata/class/base_field.carbon +++ b/toolchain/check/testdata/class/base_field.carbon @@ -84,45 +84,35 @@ fn Access(p: Derived*) -> i32* { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Base { -// CHECK:STDOUT: %.loc12_8: %Base.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc12_3: %Base.elem = var_pattern %.loc12_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc12: ref %Base.elem = var -// CHECK:STDOUT: %.loc13_8: %Base.elem = field_decl b, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc13_3: %Base.elem = var_pattern %.loc13_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc13: ref %Base.elem = var -// CHECK:STDOUT: %.loc14_8: %Base.elem = field_decl c, element2 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc14_3: %Base.elem = var_pattern %.loc14_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc14: ref %Base.elem = var +// CHECK:STDOUT: %int_32.loc12: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc12: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc12: %Base.elem = field_decl a, element0 [concrete] +// CHECK:STDOUT: %int_32.loc13: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc13: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc13: %Base.elem = field_decl b, element1 [concrete] +// CHECK:STDOUT: %int_32.loc14: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc14: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc14: %Base.elem = field_decl c, element2 [concrete] // CHECK:STDOUT: %struct_type.a.b.c: type = struct_type {.a: %i32, .b: %i32, .c: %i32} [concrete = constants.%struct_type.a.b.c] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a.b.c [concrete = constants.%complete_type.ebc] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Base -// CHECK:STDOUT: .a = %.loc12_8 -// CHECK:STDOUT: .b = %.loc13_8 -// CHECK:STDOUT: .c = %.loc14_8 +// CHECK:STDOUT: .a = %.loc12 +// CHECK:STDOUT: .b = %.loc13 +// CHECK:STDOUT: .c = %.loc14 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Derived { // CHECK:STDOUT: %Base.ref: type = name_ref Base, file.%Base.decl [concrete = constants.%Base] // CHECK:STDOUT: %.loc18: %Derived.elem.69e = base_decl %Base.ref, element0 [concrete] -// CHECK:STDOUT: %.loc20_8: %Derived.elem.344 = field_decl d, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc20_3: %Derived.elem.344 = var_pattern %.loc20_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc20: ref %Derived.elem.344 = var -// CHECK:STDOUT: %.loc21_8: %Derived.elem.344 = field_decl e, element2 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc21_3: %Derived.elem.344 = var_pattern %.loc21_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc21: ref %Derived.elem.344 = var +// CHECK:STDOUT: %int_32.loc20: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc20: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc20: %Derived.elem.344 = field_decl d, element1 [concrete] +// CHECK:STDOUT: %int_32.loc21: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc21: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc21: %Derived.elem.344 = field_decl e, element2 [concrete] // CHECK:STDOUT: %struct_type.base.d.e: type = struct_type {.base: %Base, .d: %i32, .e: %i32} [concrete = constants.%struct_type.base.d.e.6a7] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.base.d.e [concrete = constants.%complete_type.401] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -131,8 +121,8 @@ fn Access(p: Derived*) -> i32* { // CHECK:STDOUT: .Self = constants.%Derived // CHECK:STDOUT: .Base = // CHECK:STDOUT: .base = %.loc18 -// CHECK:STDOUT: .d = %.loc20_8 -// CHECK:STDOUT: .e = %.loc21_8 +// CHECK:STDOUT: .d = %.loc20 +// CHECK:STDOUT: .e = %.loc21 // CHECK:STDOUT: .c = // CHECK:STDOUT: extend %Base.ref // CHECK:STDOUT: } @@ -141,7 +131,7 @@ fn Access(p: Derived*) -> i32* { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %p.ref: %ptr.404 = name_ref p, %p // CHECK:STDOUT: %.loc25_12: ref %Derived = deref %p.ref -// CHECK:STDOUT: %c.ref: %Base.elem = name_ref c, @Base.%.loc14_8 [concrete = @Base.%.loc14_8] +// CHECK:STDOUT: %c.ref: %Base.elem = name_ref c, @Base.%.loc14 [concrete = @Base.%.loc14] // CHECK:STDOUT: %.loc25_15.1: ref %Base = class_element_access %.loc25_12, element0 // CHECK:STDOUT: %.loc25_15.2: ref %Base = converted %.loc25_12, %.loc25_15.1 // CHECK:STDOUT: %.loc25_15.3: ref %i32 = class_element_access %.loc25_15.2, element2 diff --git a/toolchain/check/testdata/class/base_method.carbon b/toolchain/check/testdata/class/base_method.carbon index 1c726dda850f..1f479270d0b1 100644 --- a/toolchain/check/testdata/class/base_method.carbon +++ b/toolchain/check/testdata/class/base_method.carbon @@ -106,11 +106,9 @@ fn Call(p: Derived*) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Base { -// CHECK:STDOUT: %.loc12_8: %Base.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc12_3: %Base.elem = var_pattern %.loc12_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Base.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc12: %Base.elem = field_decl a, element0 [concrete] // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { // CHECK:STDOUT: %self.patt: %ptr.11f = binding_pattern self // CHECK:STDOUT: %self.param_patt: %ptr.11f = value_param_pattern %self.patt, call_param0 @@ -129,7 +127,7 @@ fn Call(p: Derived*) { // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Base -// CHECK:STDOUT: .a = %.loc12_8 +// CHECK:STDOUT: .a = %.loc12 // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: } // CHECK:STDOUT: @@ -152,7 +150,7 @@ fn Call(p: Derived*) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: %ptr.11f = name_ref self, %self.loc17 // CHECK:STDOUT: %.loc18_4: ref %Base = deref %self.ref -// CHECK:STDOUT: %a.ref: %Base.elem = name_ref a, @Base.%.loc12_8 [concrete = @Base.%.loc12_8] +// CHECK:STDOUT: %a.ref: %Base.elem = name_ref a, @Base.%.loc12 [concrete = @Base.%.loc12] // CHECK:STDOUT: %.loc18_10: ref %i32 = class_element_access %.loc18_4, element0 // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %impl.elem0: %.9c3 = impl_witness_access constants.%ImplicitAs.impl_witness.c75, element0 [concrete = constants.%Convert.956] diff --git a/toolchain/check/testdata/class/basic.carbon b/toolchain/check/testdata/class/basic.carbon index 5f686703cea1..a9a326e1dfcf 100644 --- a/toolchain/check/testdata/class/basic.carbon +++ b/toolchain/check/testdata/class/basic.carbon @@ -138,11 +138,9 @@ fn Run() -> i32 { // CHECK:STDOUT: %return.param.loc16: ref %i32 = out_param call_param1 // CHECK:STDOUT: %return.loc16: ref %i32 = return_slot %return.param.loc16 // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc18_8: %Class.elem = field_decl k, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc18_3: %Class.elem = var_pattern %.loc18_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Class.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc18: %Class.elem = field_decl k, element0 [concrete] // CHECK:STDOUT: %struct_type.k: type = struct_type {.k: %i32} [concrete = constants.%struct_type.k] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.k [concrete = constants.%complete_type.954] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -151,7 +149,7 @@ fn Run() -> i32 { // CHECK:STDOUT: .Self = constants.%Class // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: .G = %G.decl -// CHECK:STDOUT: .k = %.loc18_8 +// CHECK:STDOUT: .k = %.loc18 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F(%n.param_patt: %i32) -> %i32 { diff --git a/toolchain/check/testdata/class/complete_in_member_fn.carbon b/toolchain/check/testdata/class/complete_in_member_fn.carbon index 10982f6ca092..f31b1cd08753 100644 --- a/toolchain/check/testdata/class/complete_in_member_fn.carbon +++ b/toolchain/check/testdata/class/complete_in_member_fn.carbon @@ -59,11 +59,9 @@ class C { // CHECK:STDOUT: %return.param: ref %i32 = out_param call_param1 // CHECK:STDOUT: %return: ref %i32 = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc14_8: %C.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc14_3: %C.elem = var_pattern %.loc14_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %C.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc14: %C.elem = field_decl a, element0 [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %i32} [concrete = constants.%struct_type.a] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a [concrete = constants.%complete_type.fd7] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -72,13 +70,13 @@ class C { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: .C = // CHECK:STDOUT: .F = %F.decl -// CHECK:STDOUT: .a = %.loc14_8 +// CHECK:STDOUT: .a = %.loc14 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F(%c.param_patt: %C) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %c.ref: %C = name_ref c, %c -// CHECK:STDOUT: %a.ref: %C.elem = name_ref a, @C.%.loc14_8 [concrete = @C.%.loc14_8] +// CHECK:STDOUT: %a.ref: %C.elem = name_ref a, @C.%.loc14 [concrete = @C.%.loc14] // CHECK:STDOUT: %.loc12_31.1: ref %i32 = class_element_access %c.ref, element0 // CHECK:STDOUT: %.loc12_31.2: %i32 = bind_value %.loc12_31.1 // CHECK:STDOUT: return %.loc12_31.2 diff --git a/toolchain/check/testdata/class/compound_field.carbon b/toolchain/check/testdata/class/compound_field.carbon index 341a2e04ea02..e94307349c20 100644 --- a/toolchain/check/testdata/class/compound_field.carbon +++ b/toolchain/check/testdata/class/compound_field.carbon @@ -151,45 +151,35 @@ fn AccessBaseIndirect(p: Derived*) -> i32* { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Base { -// CHECK:STDOUT: %.loc12_8: %Base.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc12_3: %Base.elem = var_pattern %.loc12_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc12: ref %Base.elem = var -// CHECK:STDOUT: %.loc13_8: %Base.elem = field_decl b, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc13_3: %Base.elem = var_pattern %.loc13_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc13: ref %Base.elem = var -// CHECK:STDOUT: %.loc14_8: %Base.elem = field_decl c, element2 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc14_3: %Base.elem = var_pattern %.loc14_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc14: ref %Base.elem = var +// CHECK:STDOUT: %int_32.loc12: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc12: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc12: %Base.elem = field_decl a, element0 [concrete] +// CHECK:STDOUT: %int_32.loc13: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc13: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc13: %Base.elem = field_decl b, element1 [concrete] +// CHECK:STDOUT: %int_32.loc14: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc14: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc14: %Base.elem = field_decl c, element2 [concrete] // CHECK:STDOUT: %struct_type.a.b.c: type = struct_type {.a: %i32, .b: %i32, .c: %i32} [concrete = constants.%struct_type.a.b.c] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a.b.c [concrete = constants.%complete_type.ebc] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Base -// CHECK:STDOUT: .a = %.loc12_8 -// CHECK:STDOUT: .b = %.loc13_8 -// CHECK:STDOUT: .c = %.loc14_8 +// CHECK:STDOUT: .a = %.loc12 +// CHECK:STDOUT: .b = %.loc13 +// CHECK:STDOUT: .c = %.loc14 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Derived { // CHECK:STDOUT: %Base.ref: type = name_ref Base, file.%Base.decl [concrete = constants.%Base] // CHECK:STDOUT: %.loc18: %Derived.elem.69e = base_decl %Base.ref, element0 [concrete] -// CHECK:STDOUT: %.loc20_8: %Derived.elem.344 = field_decl d, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc20_3: %Derived.elem.344 = var_pattern %.loc20_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc20: ref %Derived.elem.344 = var -// CHECK:STDOUT: %.loc21_8: %Derived.elem.344 = field_decl e, element2 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc21_3: %Derived.elem.344 = var_pattern %.loc21_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc21: ref %Derived.elem.344 = var +// CHECK:STDOUT: %int_32.loc20: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc20: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc20: %Derived.elem.344 = field_decl d, element1 [concrete] +// CHECK:STDOUT: %int_32.loc21: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc21: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc21: %Derived.elem.344 = field_decl e, element2 [concrete] // CHECK:STDOUT: %struct_type.base.d.e: type = struct_type {.base: %Base, .d: %i32, .e: %i32} [concrete = constants.%struct_type.base.d.e.6a7] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.base.d.e [concrete = constants.%complete_type.401] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -198,8 +188,8 @@ fn AccessBaseIndirect(p: Derived*) -> i32* { // CHECK:STDOUT: .Self = constants.%Derived // CHECK:STDOUT: .Base = // CHECK:STDOUT: .base = %.loc18 -// CHECK:STDOUT: .d = %.loc20_8 -// CHECK:STDOUT: .e = %.loc21_8 +// CHECK:STDOUT: .d = %.loc20 +// CHECK:STDOUT: .e = %.loc21 // CHECK:STDOUT: extend %Base.ref // CHECK:STDOUT: } // CHECK:STDOUT: @@ -207,7 +197,7 @@ fn AccessBaseIndirect(p: Derived*) -> i32* { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %d.ref.loc25_10: %Derived = name_ref d, %d // CHECK:STDOUT: %Derived.ref.loc25: type = name_ref Derived, file.%Derived.decl [concrete = constants.%Derived] -// CHECK:STDOUT: %d.ref.loc25_20: %Derived.elem.344 = name_ref d, @Derived.%.loc20_8 [concrete = @Derived.%.loc20_8] +// CHECK:STDOUT: %d.ref.loc25_20: %Derived.elem.344 = name_ref d, @Derived.%.loc20 [concrete = @Derived.%.loc20] // CHECK:STDOUT: %.loc25_11.1: ref %i32 = class_element_access %d.ref.loc25_10, element1 // CHECK:STDOUT: %.loc25_11.2: %i32 = bind_value %.loc25_11.1 // CHECK:STDOUT: return %.loc25_11.2 @@ -217,7 +207,7 @@ fn AccessBaseIndirect(p: Derived*) -> i32* { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %d.ref: %Derived = name_ref d, %d // CHECK:STDOUT: %Base.ref: type = name_ref Base, file.%Base.decl [concrete = constants.%Base] -// CHECK:STDOUT: %b.ref: %Base.elem = name_ref b, @Base.%.loc13_8 [concrete = @Base.%.loc13_8] +// CHECK:STDOUT: %b.ref: %Base.elem = name_ref b, @Base.%.loc13 [concrete = @Base.%.loc13] // CHECK:STDOUT: %.loc29_11.1: ref %Base = class_element_access %d.ref, element0 // CHECK:STDOUT: %.loc29_11.2: ref %Base = converted %d.ref, %.loc29_11.1 // CHECK:STDOUT: %.loc29_11.3: ref %i32 = class_element_access %.loc29_11.2, element1 @@ -229,7 +219,7 @@ fn AccessBaseIndirect(p: Derived*) -> i32* { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %p.ref: %ptr.404 = name_ref p, %p // CHECK:STDOUT: %Derived.ref.loc33: type = name_ref Derived, file.%Derived.decl [concrete = constants.%Derived] -// CHECK:STDOUT: %d.ref: %Derived.elem.344 = name_ref d, @Derived.%.loc20_8 [concrete = @Derived.%.loc20_8] +// CHECK:STDOUT: %d.ref: %Derived.elem.344 = name_ref d, @Derived.%.loc20 [concrete = @Derived.%.loc20] // CHECK:STDOUT: %.loc33_12.1: ref %Derived = deref %p.ref // CHECK:STDOUT: %.loc33_12.2: ref %i32 = class_element_access %.loc33_12.1, element1 // CHECK:STDOUT: %addr: %ptr.235 = addr_of %.loc33_12.2 @@ -240,7 +230,7 @@ fn AccessBaseIndirect(p: Derived*) -> i32* { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %p.ref: %ptr.404 = name_ref p, %p // CHECK:STDOUT: %Base.ref: type = name_ref Base, file.%Base.decl [concrete = constants.%Base] -// CHECK:STDOUT: %b.ref: %Base.elem = name_ref b, @Base.%.loc13_8 [concrete = @Base.%.loc13_8] +// CHECK:STDOUT: %b.ref: %Base.elem = name_ref b, @Base.%.loc13 [concrete = @Base.%.loc13] // CHECK:STDOUT: %.loc37_12.1: ref %Derived = deref %p.ref // CHECK:STDOUT: %.loc37_12.2: ref %Base = class_element_access %.loc37_12.1, element0 // CHECK:STDOUT: %.loc37_12.3: ref %Base = converted %.loc37_12.1, %.loc37_12.2 diff --git a/toolchain/check/testdata/class/derived_to_base.carbon b/toolchain/check/testdata/class/derived_to_base.carbon index e8b5f7f48c5c..64c94f7f73f4 100644 --- a/toolchain/check/testdata/class/derived_to_base.carbon +++ b/toolchain/check/testdata/class/derived_to_base.carbon @@ -207,28 +207,24 @@ fn ConvertInit() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @A { -// CHECK:STDOUT: %.loc12_8: %A.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc12_3: %A.elem = var_pattern %.loc12_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %A.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc12: %A.elem = field_decl a, element0 [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %i32} [concrete = constants.%struct_type.a.ba9] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a [concrete = constants.%complete_type.fd7] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%A -// CHECK:STDOUT: .a = %.loc12_8 +// CHECK:STDOUT: .a = %.loc12 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @B { // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] // CHECK:STDOUT: %.loc16: %B.elem.e38 = base_decl %A.ref, element0 [concrete] -// CHECK:STDOUT: %.loc17_8: %B.elem.5c3 = field_decl b, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc17_3: %B.elem.5c3 = var_pattern %.loc17_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %B.elem.5c3 = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc17: %B.elem.5c3 = field_decl b, element1 [concrete] // CHECK:STDOUT: %struct_type.base.b: type = struct_type {.base: %A, .b: %i32} [concrete = constants.%struct_type.base.b.b44] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.base.b [concrete = constants.%complete_type.725] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -237,18 +233,16 @@ fn ConvertInit() { // CHECK:STDOUT: .Self = constants.%B // CHECK:STDOUT: .A = // CHECK:STDOUT: .base = %.loc16 -// CHECK:STDOUT: .b = %.loc17_8 +// CHECK:STDOUT: .b = %.loc17 // CHECK:STDOUT: extend %A.ref // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { // CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B] // CHECK:STDOUT: %.loc21: %C.elem.f0c = base_decl %B.ref, element0 [concrete] -// CHECK:STDOUT: %.loc22_8: %C.elem.646 = field_decl c, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc22_3: %C.elem.646 = var_pattern %.loc22_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %C.elem.646 = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc22: %C.elem.646 = field_decl c, element1 [concrete] // CHECK:STDOUT: %struct_type.base.c: type = struct_type {.base: %B, .c: %i32} [concrete = constants.%struct_type.base.c.8e2] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.base.c [concrete = constants.%complete_type.58a] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -257,7 +251,7 @@ fn ConvertInit() { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: .B = // CHECK:STDOUT: .base = %.loc21 -// CHECK:STDOUT: .c = %.loc22_8 +// CHECK:STDOUT: .c = %.loc22 // CHECK:STDOUT: extend %B.ref // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/fail_base_bad_type.carbon b/toolchain/check/testdata/class/fail_base_bad_type.carbon index 2085b8e21a0e..c30fcda5cbde 100644 --- a/toolchain/check/testdata/class/fail_base_bad_type.carbon +++ b/toolchain/check/testdata/class/fail_base_bad_type.carbon @@ -846,18 +846,16 @@ fn AccessMemberWithInvalidBaseFinal_NoMember(p: DeriveFromFinal*) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Final { -// CHECK:STDOUT: %.loc5_8: %Final.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_3: %Final.elem = var_pattern %.loc5_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Final.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc5: %Final.elem = field_decl a, element0 [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %i32} [concrete = constants.%struct_type.a] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a [concrete = constants.%complete_type.fd7] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Final -// CHECK:STDOUT: .a = %.loc5_8 +// CHECK:STDOUT: .a = %.loc5 // CHECK:STDOUT: .b = // CHECK:STDOUT: } // CHECK:STDOUT: @@ -891,7 +889,7 @@ fn AccessMemberWithInvalidBaseFinal_NoMember(p: DeriveFromFinal*) -> i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %p.ref: %ptr.160 = name_ref p, %p // CHECK:STDOUT: %.loc22_11: ref %DeriveFromFinal = deref %p.ref -// CHECK:STDOUT: %a.ref: %Final.elem = name_ref a, @Final.%.loc5_8 [concrete = @Final.%.loc5_8] +// CHECK:STDOUT: %a.ref: %Final.elem = name_ref a, @Final.%.loc5 [concrete = @Final.%.loc5] // CHECK:STDOUT: %.loc22_14.1: ref %Final = class_element_access %.loc22_11, element0 // CHECK:STDOUT: %.loc22_14.2: ref %Final = converted %.loc22_11, %.loc22_14.1 // CHECK:STDOUT: %.loc22_14.3: ref %i32 = class_element_access %.loc22_14.2, element0 diff --git a/toolchain/check/testdata/class/fail_compound_type_mismatch.carbon b/toolchain/check/testdata/class/fail_compound_type_mismatch.carbon index 774fcfe6272a..b6cb15591c46 100644 --- a/toolchain/check/testdata/class/fail_compound_type_mismatch.carbon +++ b/toolchain/check/testdata/class/fail_compound_type_mismatch.carbon @@ -80,40 +80,36 @@ fn AccessBInA(a: A) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @A { -// CHECK:STDOUT: %.loc12_8: %A.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc12_3: %A.elem = var_pattern %.loc12_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %A.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc12: %A.elem = field_decl a, element0 [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %i32} [concrete = constants.%struct_type.a] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a [concrete = constants.%complete_type.fd7] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%A -// CHECK:STDOUT: .a = %.loc12_8 +// CHECK:STDOUT: .a = %.loc12 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @B { -// CHECK:STDOUT: %.loc16_8: %B.elem = field_decl b, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc16_3: %B.elem = var_pattern %.loc16_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %B.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc16: %B.elem = field_decl b, element0 [concrete] // CHECK:STDOUT: %struct_type.b: type = struct_type {.b: %i32} [concrete = constants.%struct_type.b] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.b [concrete = constants.%complete_type.ba8] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%B -// CHECK:STDOUT: .b = %.loc16_8 +// CHECK:STDOUT: .b = %.loc16 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @AccessBInA(%a.param_patt: %A) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %a.ref: %A = name_ref a, %a // CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B] -// CHECK:STDOUT: %b.ref: %B.elem = name_ref b, @B.%.loc16_8 [concrete = @B.%.loc16_8] +// CHECK:STDOUT: %b.ref: %B.elem = name_ref b, @B.%.loc16 [concrete = @B.%.loc16] // CHECK:STDOUT: %.loc27_11.1: %B = converted %a.ref, [concrete = ] // CHECK:STDOUT: %.loc27_11.2: %i32 = class_element_access , element0 [concrete = ] // CHECK:STDOUT: return diff --git a/toolchain/check/testdata/class/fail_convert_to_invalid.carbon b/toolchain/check/testdata/class/fail_convert_to_invalid.carbon index f8547507886d..f8954f6e6d3b 100644 --- a/toolchain/check/testdata/class/fail_convert_to_invalid.carbon +++ b/toolchain/check/testdata/class/fail_convert_to_invalid.carbon @@ -57,11 +57,8 @@ fn Make() -> C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %.loc16_8: = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc16_3: = var_pattern %.loc16_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref = var +// CHECK:STDOUT: %NoSuchType.ref: = name_ref NoSuchType, [concrete = ] +// CHECK:STDOUT: %.loc16: = field_decl a, element0 [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: } [concrete = ] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a [concrete = ] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -69,7 +66,7 @@ fn Make() -> C { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: .NoSuchType = -// CHECK:STDOUT: .a = %.loc16_8 +// CHECK:STDOUT: .a = %.loc16 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Make() -> %return.param_patt: %C { diff --git a/toolchain/check/testdata/class/fail_derived_to_base.carbon b/toolchain/check/testdata/class/fail_derived_to_base.carbon index 3c6ab84eeb47..89187dfd5c42 100644 --- a/toolchain/check/testdata/class/fail_derived_to_base.carbon +++ b/toolchain/check/testdata/class/fail_derived_to_base.carbon @@ -129,43 +129,37 @@ fn ConvertIncomplete(p: Incomplete*) -> A2* { return p; } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @A1 { -// CHECK:STDOUT: %.loc12_8: %A1.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc12_3: %A1.elem = var_pattern %.loc12_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %A1.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc12: %A1.elem = field_decl a, element0 [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %i32} [concrete = constants.%struct_type.a] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a [concrete = constants.%complete_type.fd7] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%A1 -// CHECK:STDOUT: .a = %.loc12_8 +// CHECK:STDOUT: .a = %.loc12 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @A2 { -// CHECK:STDOUT: %.loc16_8: %A2.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc16_3: %A2.elem = var_pattern %.loc16_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %A2.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc16: %A2.elem = field_decl a, element0 [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %i32} [concrete = constants.%struct_type.a] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a [concrete = constants.%complete_type.fd7] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%A2 -// CHECK:STDOUT: .a = %.loc16_8 +// CHECK:STDOUT: .a = %.loc16 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @B2 { // CHECK:STDOUT: %A2.ref: type = name_ref A2, file.%A2.decl [concrete = constants.%A2] // CHECK:STDOUT: %.loc20: %B2.elem.a92 = base_decl %A2.ref, element0 [concrete] -// CHECK:STDOUT: %.loc21_8: %B2.elem.4b2 = field_decl b, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc21_3: %B2.elem.4b2 = var_pattern %.loc21_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %B2.elem.4b2 = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc21: %B2.elem.4b2 = field_decl b, element1 [concrete] // CHECK:STDOUT: %struct_type.base.b: type = struct_type {.base: %A2, .b: %i32} [concrete = constants.%struct_type.base.b.618] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.base.b [concrete = constants.%complete_type.92f] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -174,7 +168,7 @@ fn ConvertIncomplete(p: Incomplete*) -> A2* { return p; } // CHECK:STDOUT: .Self = constants.%B2 // CHECK:STDOUT: .A2 = // CHECK:STDOUT: .base = %.loc20 -// CHECK:STDOUT: .b = %.loc21_8 +// CHECK:STDOUT: .b = %.loc21 // CHECK:STDOUT: extend %A2.ref // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/fail_extend_cycle.carbon b/toolchain/check/testdata/class/fail_extend_cycle.carbon index ccece1d287f2..bf50e3fcd72f 100644 --- a/toolchain/check/testdata/class/fail_extend_cycle.carbon +++ b/toolchain/check/testdata/class/fail_extend_cycle.carbon @@ -93,11 +93,8 @@ base class A { // CHECK:STDOUT: class @A.2 { // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl.loc11 [concrete = constants.%A.466950.1] // CHECK:STDOUT: %.loc27: %A.elem = base_decl %A.ref, element0 [concrete] -// CHECK:STDOUT: %.loc32_8: = field_decl c, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc32_3: = var_pattern %.loc32_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref = var +// CHECK:STDOUT: %C.ref: = name_ref C, [concrete = ] +// CHECK:STDOUT: %.loc32: = field_decl c, element1 [concrete] // CHECK:STDOUT: %struct_type.base.c: type = struct_type {.base: %A.466950.1, .c: } [concrete = ] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.base.c [concrete = ] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -107,7 +104,7 @@ base class A { // CHECK:STDOUT: .A = // CHECK:STDOUT: .base = %.loc27 // CHECK:STDOUT: .C = -// CHECK:STDOUT: .c = %.loc32_8 +// CHECK:STDOUT: .c = %.loc32 // CHECK:STDOUT: extend %A.ref // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/fail_field_initializer.carbon b/toolchain/check/testdata/class/fail_field_initializer.carbon new file mode 100644 index 000000000000..a22e4cc700d4 --- /dev/null +++ b/toolchain/check/testdata/class/fail_field_initializer.carbon @@ -0,0 +1,61 @@ +// 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 +// +// AUTOUPDATE +// TIP: To test this file alone, run: +// TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/class/fail_field_initializer.carbon +// TIP: To dump output, run: +// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/check/testdata/class/fail_field_initializer.carbon + +class Class { + // CHECK:STDERR: fail_field_initializer.carbon:[[@LINE+4]]:3: error: semantics TODO: `Field initializer` [SemanticsTodo] + // CHECK:STDERR: var field: i32 = 0; + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~ + // CHECK:STDERR: + var field: i32 = 0; +} + +// CHECK:STDOUT: --- fail_field_initializer.carbon +// CHECK:STDOUT: +// CHECK:STDOUT: constants { +// CHECK:STDOUT: %Class: type = class_type @Class [concrete] +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(%int_32) [concrete] +// CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, %i32 [concrete] +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete] +// CHECK:STDOUT: %struct_type.field: type = struct_type {.field: %i32} [concrete] +// CHECK:STDOUT: %complete_type.d48: = complete_type_witness %struct_type.field [concrete] +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: imports { +// CHECK:STDOUT: %Core: = namespace file.%Core.import, [concrete] { +// CHECK:STDOUT: .Int = %Core.Int +// CHECK:STDOUT: import Core//prelude +// CHECK:STDOUT: import Core//prelude/... +// CHECK:STDOUT: } +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: file { +// CHECK:STDOUT: package: = namespace [concrete] { +// CHECK:STDOUT: .Core = imports.%Core +// CHECK:STDOUT: .Class = %Class.decl +// CHECK:STDOUT: } +// CHECK:STDOUT: %Core.import = import Core +// CHECK:STDOUT: %Class.decl: type = class_decl @Class [concrete = constants.%Class] {} {} +// CHECK:STDOUT: } +// CHECK:STDOUT: +// CHECK:STDOUT: class @Class { +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc16: %Class.elem = field_decl field, element0 [concrete] +// CHECK:STDOUT: %int_0: Core.IntLiteral = int_value 0 [concrete = constants.%int_0] +// CHECK:STDOUT: %struct_type.field: type = struct_type {.field: %i32} [concrete = constants.%struct_type.field] +// CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.field [concrete = constants.%complete_type.d48] +// CHECK:STDOUT: complete_type_witness = %complete_type +// CHECK:STDOUT: +// CHECK:STDOUT: !members: +// CHECK:STDOUT: .Self = constants.%Class +// CHECK:STDOUT: .field = %.loc16 +// CHECK:STDOUT: } +// CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/fail_field_modifiers.carbon b/toolchain/check/testdata/class/fail_field_modifiers.carbon index 78cf4f140830..8c064b51c8af 100644 --- a/toolchain/check/testdata/class/fail_field_modifiers.carbon +++ b/toolchain/check/testdata/class/fail_field_modifiers.carbon @@ -82,16 +82,12 @@ class Class { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Class { -// CHECK:STDOUT: %.loc17_16: %Class.elem = field_decl j, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc17_11: %Class.elem = var_pattern %.loc17_16 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc17: ref %Class.elem = var -// CHECK:STDOUT: %.loc23_14: %Class.elem = field_decl k, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc23_9: %Class.elem = var_pattern %.loc23_14 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc23: ref %Class.elem = var +// CHECK:STDOUT: %int_32.loc17: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc17: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc17: %Class.elem = field_decl j, element0 [concrete] +// CHECK:STDOUT: %int_32.loc23: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc23: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc23: %Class.elem = field_decl k, element1 [concrete] // CHECK:STDOUT: name_binding_decl { // CHECK:STDOUT: %l.patt: %i32 = binding_pattern l // CHECK:STDOUT: } @@ -130,8 +126,8 @@ class Class { // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Class -// CHECK:STDOUT: .j = %.loc17_16 -// CHECK:STDOUT: .k = %.loc23_14 +// CHECK:STDOUT: .j = %.loc17 +// CHECK:STDOUT: .k = %.loc23 // CHECK:STDOUT: .l = %l // CHECK:STDOUT: .m = %m // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/class/fail_generic_method.carbon b/toolchain/check/testdata/class/fail_generic_method.carbon index 7be7d9197cfe..13bedd9c2900 100644 --- a/toolchain/check/testdata/class/fail_generic_method.carbon +++ b/toolchain/check/testdata/class/fail_generic_method.carbon @@ -108,11 +108,8 @@ fn Class(N:! i32).F[self: Self](n: T) {} // CHECK:STDOUT: %complete_type.loc14_1.2: = complete_type_witness %struct_type.a.loc14_1.2 [symbolic = %complete_type.loc14_1.2 (constants.%complete_type.f1b)] // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %.loc12_8: @Class.%Class.elem (%Class.elem) = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc12_3: @Class.%Class.elem (%Class.elem) = var_pattern %.loc12_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref @Class.%Class.elem (%Class.elem) = var +// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc11_13.1 [symbolic = %T.loc11_13.2 (constants.%T)] +// CHECK:STDOUT: %.loc12: @Class.%Class.elem (%Class.elem) = field_decl a, element0 [concrete] // CHECK:STDOUT: %F.decl: @Class.%F.type (%F.type.6d6) = fn_decl @F.1 [symbolic = @Class.%F (constants.%F.cca)] { // CHECK:STDOUT: %self.patt: @F.1.%Class (%Class) = binding_pattern self // CHECK:STDOUT: %self.param_patt: @F.1.%Class (%Class) = value_param_pattern %self.patt, call_param0 @@ -136,7 +133,7 @@ fn Class(N:! i32).F[self: Self](n: T) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Class // CHECK:STDOUT: .T = -// CHECK:STDOUT: .a = %.loc12_8 +// CHECK:STDOUT: .a = %.loc12 // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: } // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/class/fail_incomplete.carbon b/toolchain/check/testdata/class/fail_incomplete.carbon index 3d67f33b6a4c..d329c3677ca7 100644 --- a/toolchain/check/testdata/class/fail_incomplete.carbon +++ b/toolchain/check/testdata/class/fail_incomplete.carbon @@ -497,11 +497,8 @@ class C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %.loc12_8: = field_decl c, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc12_3: = var_pattern %.loc12_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref = var +// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %.loc12: = field_decl c, element0 [concrete] // CHECK:STDOUT: %struct_type.c: type = struct_type {.c: } [concrete = ] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.c [concrete = ] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -509,6 +506,6 @@ class C { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: .C = -// CHECK:STDOUT: .c = %.loc12_8 +// CHECK:STDOUT: .c = %.loc12 // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/fail_init.carbon b/toolchain/check/testdata/class/fail_init.carbon index 69aa35eb2b04..efdf67fb70a7 100644 --- a/toolchain/check/testdata/class/fail_init.carbon +++ b/toolchain/check/testdata/class/fail_init.carbon @@ -83,24 +83,20 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Class { -// CHECK:STDOUT: %.loc12_8: %Class.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc12_3: %Class.elem = var_pattern %.loc12_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc12: ref %Class.elem = var -// CHECK:STDOUT: %.loc13_8: %Class.elem = field_decl b, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc13_3: %Class.elem = var_pattern %.loc13_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc13: ref %Class.elem = var +// CHECK:STDOUT: %int_32.loc12: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc12: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc12: %Class.elem = field_decl a, element0 [concrete] +// CHECK:STDOUT: %int_32.loc13: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc13: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc13: %Class.elem = field_decl b, element1 [concrete] // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete = constants.%struct_type.a.b] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a.b [concrete = constants.%complete_type.705] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Class -// CHECK:STDOUT: .a = %.loc12_8 -// CHECK:STDOUT: .b = %.loc13_8 +// CHECK:STDOUT: .a = %.loc12 +// CHECK:STDOUT: .b = %.loc13 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { diff --git a/toolchain/check/testdata/class/fail_init_as_inplace.carbon b/toolchain/check/testdata/class/fail_init_as_inplace.carbon index b4b0219b6574..8713062ea2ee 100644 --- a/toolchain/check/testdata/class/fail_init_as_inplace.carbon +++ b/toolchain/check/testdata/class/fail_init_as_inplace.carbon @@ -96,24 +96,20 @@ fn F() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Class { -// CHECK:STDOUT: %.loc12_8: %Class.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc12_3: %Class.elem = var_pattern %.loc12_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc12: ref %Class.elem = var -// CHECK:STDOUT: %.loc13_8: %Class.elem = field_decl b, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc13_3: %Class.elem = var_pattern %.loc13_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc13: ref %Class.elem = var +// CHECK:STDOUT: %int_32.loc12: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc12: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc12: %Class.elem = field_decl a, element0 [concrete] +// CHECK:STDOUT: %int_32.loc13: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc13: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc13: %Class.elem = field_decl b, element1 [concrete] // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete = constants.%struct_type.a.b.501] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a.b [concrete = constants.%complete_type.705] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Class -// CHECK:STDOUT: .a = %.loc12_8 -// CHECK:STDOUT: .b = %.loc13_8 +// CHECK:STDOUT: .a = %.loc12 +// CHECK:STDOUT: .b = %.loc13 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @G(%p.param_patt: %ptr.e71); diff --git a/toolchain/check/testdata/class/fail_memaccess_category.carbon b/toolchain/check/testdata/class/fail_memaccess_category.carbon index 643331960fc7..7fb582ed691d 100644 --- a/toolchain/check/testdata/class/fail_memaccess_category.carbon +++ b/toolchain/check/testdata/class/fail_memaccess_category.carbon @@ -116,11 +116,8 @@ fn F(s: {.a: A}, b: B) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @B { -// CHECK:STDOUT: %.loc16_8: %B.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc16_3: %B.elem = var_pattern %.loc16_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %B.elem = var +// CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] +// CHECK:STDOUT: %.loc16: %B.elem = field_decl a, element0 [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %A} [concrete = constants.%struct_type.a.72c] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a [concrete = constants.%complete_type.2b9] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -128,7 +125,7 @@ fn F(s: {.a: A}, b: B) { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%B // CHECK:STDOUT: .A = -// CHECK:STDOUT: .a = %.loc16_8 +// CHECK:STDOUT: .a = %.loc16 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F.1[addr %self.param_patt: %ptr.6db](); @@ -143,7 +140,7 @@ fn F(s: {.a: A}, b: B) { // CHECK:STDOUT: %addr.loc28: %ptr.6db = addr_of %.loc28_4.2 // CHECK:STDOUT: %F.call.loc28: init %empty_tuple.type = call %F.bound.loc28(%addr.loc28) // CHECK:STDOUT: %b.ref: %B = name_ref b, %b -// CHECK:STDOUT: %a.ref: %B.elem = name_ref a, @B.%.loc16_8 [concrete = @B.%.loc16_8] +// CHECK:STDOUT: %a.ref: %B.elem = name_ref a, @B.%.loc16 [concrete = @B.%.loc16] // CHECK:STDOUT: %.loc39_4.1: ref %A = class_element_access %b.ref, element0 // CHECK:STDOUT: %.loc39_4.2: %A = bind_value %.loc39_4.1 // CHECK:STDOUT: %F.ref.loc39: %F.type.649 = name_ref F, @A.%F.decl [concrete = constants.%F.485] diff --git a/toolchain/check/testdata/class/fail_self_type_member.carbon b/toolchain/check/testdata/class/fail_self_type_member.carbon index ff5f7e631ef7..746b2d895804 100644 --- a/toolchain/check/testdata/class/fail_self_type_member.carbon +++ b/toolchain/check/testdata/class/fail_self_type_member.carbon @@ -30,6 +30,8 @@ fn F() -> bool { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %Class: type = class_type @Class [concrete] +// CHECK:STDOUT: %Bool.type: type = fn_type @Bool [concrete] +// CHECK:STDOUT: %Bool: %Bool.type = struct_value () [concrete] // CHECK:STDOUT: %Class.elem: type = unbound_element_type %Class, bool [concrete] // CHECK:STDOUT: %struct_type.b: type = struct_type {.b: bool} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.b [concrete] @@ -38,11 +40,10 @@ fn F() -> bool { // CHECK:STDOUT: file {} // CHECK:STDOUT: // CHECK:STDOUT: class @Class { +// CHECK:STDOUT: %bool.make_type: init type = call constants.%Bool() [concrete = bool] +// CHECK:STDOUT: %.loc12_10.1: type = value_of_initializer %bool.make_type [concrete = bool] +// CHECK:STDOUT: %.loc12_10.2: type = converted %bool.make_type, %.loc12_10.1 [concrete = bool] // CHECK:STDOUT: %.loc12_8: %Class.elem = field_decl b, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc12_3: %Class.elem = var_pattern %.loc12_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Class.elem = var // CHECK:STDOUT: %struct_type.b: type = struct_type {.b: bool} [concrete = constants.%struct_type.b] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.b [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type diff --git a/toolchain/check/testdata/class/fail_unbound_field.carbon b/toolchain/check/testdata/class/fail_unbound_field.carbon index fdfaff3835f8..fa56fb2f624a 100644 --- a/toolchain/check/testdata/class/fail_unbound_field.carbon +++ b/toolchain/check/testdata/class/fail_unbound_field.carbon @@ -70,11 +70,9 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Class { -// CHECK:STDOUT: %.loc12_12: %Class.elem = field_decl field, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc12_3: %Class.elem = var_pattern %.loc12_12 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Class.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc12: %Class.elem = field_decl field, element0 [concrete] // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] { // CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern // CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 @@ -90,20 +88,20 @@ fn G() -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Class -// CHECK:STDOUT: .field = %.loc12_12 +// CHECK:STDOUT: .field = %.loc12 // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F() -> %i32 { // CHECK:STDOUT: !entry: -// CHECK:STDOUT: %field.ref: %Class.elem = name_ref field, @Class.%.loc12_12 [concrete = @Class.%.loc12_12] +// CHECK:STDOUT: %field.ref: %Class.elem = name_ref field, @Class.%.loc12 [concrete = @Class.%.loc12] // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @G() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] -// CHECK:STDOUT: %field.ref: %Class.elem = name_ref field, @Class.%.loc12_12 [concrete = @Class.%.loc12_12] +// CHECK:STDOUT: %field.ref: %Class.elem = name_ref field, @Class.%.loc12 [concrete = @Class.%.loc12] // CHECK:STDOUT: return // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/fail_unknown_member.carbon b/toolchain/check/testdata/class/fail_unknown_member.carbon index 61b18ea970e4..ecbf4b0b217f 100644 --- a/toolchain/check/testdata/class/fail_unknown_member.carbon +++ b/toolchain/check/testdata/class/fail_unknown_member.carbon @@ -67,18 +67,16 @@ fn G(c: Class) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Class { -// CHECK:STDOUT: %.loc12_8: %Class.elem = field_decl n, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc12_3: %Class.elem = var_pattern %.loc12_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Class.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc12: %Class.elem = field_decl n, element0 [concrete] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete = constants.%struct_type.n] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.n [concrete = constants.%complete_type.54b] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Class -// CHECK:STDOUT: .n = %.loc12_8 +// CHECK:STDOUT: .n = %.loc12 // CHECK:STDOUT: .something = // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/field_access.carbon b/toolchain/check/testdata/class/field_access.carbon index 982b50193bff..cc57166c027a 100644 --- a/toolchain/check/testdata/class/field_access.carbon +++ b/toolchain/check/testdata/class/field_access.carbon @@ -72,24 +72,20 @@ fn Run() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Class { -// CHECK:STDOUT: %.loc12_8: %Class.elem = field_decl j, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc12_3: %Class.elem = var_pattern %.loc12_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc12: ref %Class.elem = var -// CHECK:STDOUT: %.loc13_8: %Class.elem = field_decl k, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc13_3: %Class.elem = var_pattern %.loc13_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc13: ref %Class.elem = var +// CHECK:STDOUT: %int_32.loc12: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc12: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc12: %Class.elem = field_decl j, element0 [concrete] +// CHECK:STDOUT: %int_32.loc13: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc13: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc13: %Class.elem = field_decl k, element1 [concrete] // CHECK:STDOUT: %struct_type.j.k: type = struct_type {.j: %i32, .k: %i32} [concrete = constants.%struct_type.j.k] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.j.k [concrete = constants.%complete_type.cf7] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Class -// CHECK:STDOUT: .j = %.loc12_8 -// CHECK:STDOUT: .k = %.loc13_8 +// CHECK:STDOUT: .j = %.loc12 +// CHECK:STDOUT: .k = %.loc13 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Run() { @@ -102,7 +98,7 @@ fn Run() { // CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %c: ref %Class = bind_name c, %c.var // CHECK:STDOUT: %c.ref.loc18: ref %Class = name_ref c, %c -// CHECK:STDOUT: %j.ref.loc18: %Class.elem = name_ref j, @Class.%.loc12_8 [concrete = @Class.%.loc12_8] +// CHECK:STDOUT: %j.ref.loc18: %Class.elem = name_ref j, @Class.%.loc12 [concrete = @Class.%.loc12] // CHECK:STDOUT: %.loc18_4: ref %i32 = class_element_access %c.ref.loc18, element0 // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %impl.elem0.loc18: %.9c3 = impl_witness_access constants.%ImplicitAs.impl_witness.c75, element0 [concrete = constants.%Convert.956] @@ -113,7 +109,7 @@ fn Run() { // CHECK:STDOUT: %.loc18_7: init %i32 = converted %int_1, %int.convert_checked.loc18 [concrete = constants.%int_1.5d2] // CHECK:STDOUT: assign %.loc18_4, %.loc18_7 // CHECK:STDOUT: %c.ref.loc19: ref %Class = name_ref c, %c -// CHECK:STDOUT: %k.ref.loc19: %Class.elem = name_ref k, @Class.%.loc13_8 [concrete = @Class.%.loc13_8] +// CHECK:STDOUT: %k.ref.loc19: %Class.elem = name_ref k, @Class.%.loc13 [concrete = @Class.%.loc13] // CHECK:STDOUT: %.loc19_4: ref %i32 = class_element_access %c.ref.loc19, element1 // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc] // CHECK:STDOUT: %impl.elem0.loc19: %.9c3 = impl_witness_access constants.%ImplicitAs.impl_witness.c75, element0 [concrete = constants.%Convert.956] @@ -129,7 +125,7 @@ fn Run() { // CHECK:STDOUT: } // CHECK:STDOUT: %cj.var: ref %i32 = var cj // CHECK:STDOUT: %c.ref.loc20: ref %Class = name_ref c, %c -// CHECK:STDOUT: %j.ref.loc20: %Class.elem = name_ref j, @Class.%.loc12_8 [concrete = @Class.%.loc12_8] +// CHECK:STDOUT: %j.ref.loc20: %Class.elem = name_ref j, @Class.%.loc12 [concrete = @Class.%.loc12] // CHECK:STDOUT: %.loc20_18.1: ref %i32 = class_element_access %c.ref.loc20, element0 // CHECK:STDOUT: %.loc20_18.2: %i32 = bind_value %.loc20_18.1 // CHECK:STDOUT: assign %cj.var, %.loc20_18.2 @@ -144,7 +140,7 @@ fn Run() { // CHECK:STDOUT: } // CHECK:STDOUT: %ck.var: ref %i32 = var ck // CHECK:STDOUT: %c.ref.loc21: ref %Class = name_ref c, %c -// CHECK:STDOUT: %k.ref.loc21: %Class.elem = name_ref k, @Class.%.loc13_8 [concrete = @Class.%.loc13_8] +// CHECK:STDOUT: %k.ref.loc21: %Class.elem = name_ref k, @Class.%.loc13 [concrete = @Class.%.loc13] // CHECK:STDOUT: %.loc21_18.1: ref %i32 = class_element_access %c.ref.loc21, element1 // CHECK:STDOUT: %.loc21_18.2: %i32 = bind_value %.loc21_18.1 // CHECK:STDOUT: assign %ck.var, %.loc21_18.2 diff --git a/toolchain/check/testdata/class/field_access_in_value.carbon b/toolchain/check/testdata/class/field_access_in_value.carbon index 2334cb456a08..f870cef12347 100644 --- a/toolchain/check/testdata/class/field_access_in_value.carbon +++ b/toolchain/check/testdata/class/field_access_in_value.carbon @@ -73,24 +73,20 @@ fn Test() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Class { -// CHECK:STDOUT: %.loc12_8: %Class.elem = field_decl j, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc12_3: %Class.elem = var_pattern %.loc12_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc12: ref %Class.elem = var -// CHECK:STDOUT: %.loc13_8: %Class.elem = field_decl k, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc13_3: %Class.elem = var_pattern %.loc13_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc13: ref %Class.elem = var +// CHECK:STDOUT: %int_32.loc12: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc12: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc12: %Class.elem = field_decl j, element0 [concrete] +// CHECK:STDOUT: %int_32.loc13: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc13: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc13: %Class.elem = field_decl k, element1 [concrete] // CHECK:STDOUT: %struct_type.j.k: type = struct_type {.j: %i32, .k: %i32} [concrete = constants.%struct_type.j.k] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.j.k [concrete = constants.%complete_type.cf7] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Class -// CHECK:STDOUT: .j = %.loc12_8 -// CHECK:STDOUT: .k = %.loc13_8 +// CHECK:STDOUT: .j = %.loc12 +// CHECK:STDOUT: .k = %.loc13 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Test() { @@ -103,7 +99,7 @@ fn Test() { // CHECK:STDOUT: %Class.ref.loc17: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] // CHECK:STDOUT: %cv: ref %Class = bind_name cv, %cv.var // CHECK:STDOUT: %cv.ref.loc18: ref %Class = name_ref cv, %cv -// CHECK:STDOUT: %j.ref.loc18: %Class.elem = name_ref j, @Class.%.loc12_8 [concrete = @Class.%.loc12_8] +// CHECK:STDOUT: %j.ref.loc18: %Class.elem = name_ref j, @Class.%.loc12 [concrete = @Class.%.loc12] // CHECK:STDOUT: %.loc18_5: ref %i32 = class_element_access %cv.ref.loc18, element0 // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %impl.elem0.loc18: %.9c3 = impl_witness_access constants.%ImplicitAs.impl_witness.c75, element0 [concrete = constants.%Convert.956] @@ -114,7 +110,7 @@ fn Test() { // CHECK:STDOUT: %.loc18_8: init %i32 = converted %int_1, %int.convert_checked.loc18 [concrete = constants.%int_1.5d2] // CHECK:STDOUT: assign %.loc18_5, %.loc18_8 // CHECK:STDOUT: %cv.ref.loc19: ref %Class = name_ref cv, %cv -// CHECK:STDOUT: %k.ref.loc19: %Class.elem = name_ref k, @Class.%.loc13_8 [concrete = @Class.%.loc13_8] +// CHECK:STDOUT: %k.ref.loc19: %Class.elem = name_ref k, @Class.%.loc13 [concrete = @Class.%.loc13] // CHECK:STDOUT: %.loc19_5: ref %i32 = class_element_access %cv.ref.loc19, element1 // CHECK:STDOUT: %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc] // CHECK:STDOUT: %impl.elem0.loc19: %.9c3 = impl_witness_access constants.%ImplicitAs.impl_witness.c75, element0 [concrete = constants.%Convert.956] @@ -136,7 +132,7 @@ fn Test() { // CHECK:STDOUT: } // CHECK:STDOUT: %cj.var: ref %i32 = var cj // CHECK:STDOUT: %c.ref.loc21: ref %Class = name_ref c, %c -// CHECK:STDOUT: %j.ref.loc21: %Class.elem = name_ref j, @Class.%.loc12_8 [concrete = @Class.%.loc12_8] +// CHECK:STDOUT: %j.ref.loc21: %Class.elem = name_ref j, @Class.%.loc12 [concrete = @Class.%.loc12] // CHECK:STDOUT: %.loc21_18.1: ref %i32 = class_element_access %c.ref.loc21, element0 // CHECK:STDOUT: %.loc21_18.2: %i32 = bind_value %.loc21_18.1 // CHECK:STDOUT: assign %cj.var, %.loc21_18.2 @@ -151,7 +147,7 @@ fn Test() { // CHECK:STDOUT: } // CHECK:STDOUT: %ck.var: ref %i32 = var ck // CHECK:STDOUT: %c.ref.loc22: ref %Class = name_ref c, %c -// CHECK:STDOUT: %k.ref.loc22: %Class.elem = name_ref k, @Class.%.loc13_8 [concrete = @Class.%.loc13_8] +// CHECK:STDOUT: %k.ref.loc22: %Class.elem = name_ref k, @Class.%.loc13 [concrete = @Class.%.loc13] // CHECK:STDOUT: %.loc22_18.1: ref %i32 = class_element_access %c.ref.loc22, element1 // CHECK:STDOUT: %.loc22_18.2: %i32 = bind_value %.loc22_18.1 // CHECK:STDOUT: assign %ck.var, %.loc22_18.2 diff --git a/toolchain/check/testdata/class/generic/adapt.carbon b/toolchain/check/testdata/class/generic/adapt.carbon index 7472b1fe581e..dd2ec0978d6c 100644 --- a/toolchain/check/testdata/class/generic/adapt.carbon +++ b/toolchain/check/testdata/class/generic/adapt.carbon @@ -196,11 +196,8 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %complete_type.loc6_1.2: = complete_type_witness %struct_type.x.loc6_1.2 [symbolic = %complete_type.loc6_1.2 (constants.%complete_type.433)] // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %.loc5_8: @C.%C.elem (%C.elem.66c) = field_decl x, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_3: @C.%C.elem (%C.elem.66c) = var_pattern %.loc5_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref @C.%C.elem (%C.elem.66c) = var +// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4_9.1 [symbolic = %T.loc4_9.2 (constants.%T)] +// CHECK:STDOUT: %.loc5: @C.%C.elem (%C.elem.66c) = field_decl x, element0 [concrete] // CHECK:STDOUT: %struct_type.x.loc6_1.1: type = struct_type {.x: %T} [symbolic = %struct_type.x.loc6_1.2 (constants.%struct_type.x.2ac)] // CHECK:STDOUT: %complete_type.loc6_1.1: = complete_type_witness %struct_type.x.loc6_1.1 [symbolic = %complete_type.loc6_1.2 (constants.%complete_type.433)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc6_1.1 @@ -208,7 +205,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%C.f2e // CHECK:STDOUT: .T = -// CHECK:STDOUT: .x = %.loc5_8 +// CHECK:STDOUT: .x = %.loc5 // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -235,7 +232,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %C: type = class_type @C, @C(constants.%i32) [concrete = constants.%C.98a] // CHECK:STDOUT: %.loc13_13.1: %C.98a = as_compatible %a.ref // CHECK:STDOUT: %.loc13_13.2: %C.98a = converted %a.ref, %.loc13_13.1 -// CHECK:STDOUT: %x.ref: %C.elem.476 = name_ref x, @C.%.loc5_8 [concrete = @C.%.loc5_8] +// CHECK:STDOUT: %x.ref: %C.elem.476 = name_ref x, @C.%.loc5 [concrete = @C.%.loc5] // CHECK:STDOUT: %.loc13_23.1: ref %i32 = class_element_access %.loc13_13.2, element0 // CHECK:STDOUT: %.loc13_23.2: %i32 = bind_value %.loc13_23.1 // CHECK:STDOUT: return %.loc13_23.2 @@ -299,7 +296,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %Main.import_ref.4c0 = import_ref Main//adapt_specific_type, inst27 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.262: @C.%C.elem (%C.elem.66c) = import_ref Main//adapt_specific_type, loc5_8, loaded [concrete = %.22b] // CHECK:STDOUT: %Main.import_ref.709: = import_ref Main//adapt_specific_type, loc10_1, loaded [concrete = constants.%complete_type.c07] -// CHECK:STDOUT: %Main.import_ref.feb = import_ref Main//adapt_specific_type, inst46 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.feb = import_ref Main//adapt_specific_type, inst43 [no loc], unloaded // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -465,11 +462,8 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %complete_type.loc6_1.2: = complete_type_witness %struct_type.x.loc6_1.2 [symbolic = %complete_type.loc6_1.2 (constants.%complete_type.433)] // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %.loc5_8: @C.%C.elem (%C.elem.66c) = field_decl x, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_3: @C.%C.elem (%C.elem.66c) = var_pattern %.loc5_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref @C.%C.elem (%C.elem.66c) = var +// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4_9.1 [symbolic = %T.loc4_9.2 (constants.%T)] +// CHECK:STDOUT: %.loc5: @C.%C.elem (%C.elem.66c) = field_decl x, element0 [concrete] // CHECK:STDOUT: %struct_type.x.loc6_1.1: type = struct_type {.x: %T} [symbolic = %struct_type.x.loc6_1.2 (constants.%struct_type.x.2ac)] // CHECK:STDOUT: %complete_type.loc6_1.1: = complete_type_witness %struct_type.x.loc6_1.1 [symbolic = %complete_type.loc6_1.2 (constants.%complete_type.433)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc6_1.1 @@ -477,7 +471,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%C.f2e // CHECK:STDOUT: .T = -// CHECK:STDOUT: .x = %.loc5_8 +// CHECK:STDOUT: .x = %.loc5 // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -500,7 +494,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: fn @Access(%a.param_patt: %Adapter) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %a.ref: %Adapter = name_ref a, %a -// CHECK:STDOUT: %x.ref: %C.elem.476 = name_ref x, @C.%.loc5_8 [concrete = @C.%.loc5_8] +// CHECK:STDOUT: %x.ref: %C.elem.476 = name_ref x, @C.%.loc5 [concrete = @C.%.loc5] // CHECK:STDOUT: %.loc21_11.1: %C.98a = converted %a.ref, [concrete = ] // CHECK:STDOUT: %.loc21_11.2: %i32 = class_element_access , element0 [concrete = ] // CHECK:STDOUT: return @@ -583,11 +577,8 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %complete_type.loc9_1.2: = complete_type_witness %struct_type.x.loc9_1.2 [symbolic = %complete_type.loc9_1.2 (constants.%complete_type.433)] // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %.loc8_8: @C.%C.elem (%C.elem.66c) = field_decl x, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc8_3: @C.%C.elem (%C.elem.66c) = var_pattern %.loc8_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref @C.%C.elem (%C.elem.66c) = var +// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc7_9.1 [symbolic = %T.loc7_9.2 (constants.%T)] +// CHECK:STDOUT: %.loc8: @C.%C.elem (%C.elem.66c) = field_decl x, element0 [concrete] // CHECK:STDOUT: %struct_type.x.loc9_1.1: type = struct_type {.x: %T} [symbolic = %struct_type.x.loc9_1.2 (constants.%struct_type.x.2ac)] // CHECK:STDOUT: %complete_type.loc9_1.1: = complete_type_witness %struct_type.x.loc9_1.1 [symbolic = %complete_type.loc9_1.2 (constants.%complete_type.433)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc9_1.1 @@ -595,7 +586,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%C.f2e // CHECK:STDOUT: .T = -// CHECK:STDOUT: .x = %.loc8_8 +// CHECK:STDOUT: .x = %.loc8 // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -670,7 +661,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %Main.import_ref.4c0 = import_ref Main//extend_adapt_specific_type_library, inst27 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.262: @C.%C.elem (%C.elem.66c) = import_ref Main//extend_adapt_specific_type_library, loc8_8, loaded [concrete = %.22b] // CHECK:STDOUT: %Main.import_ref.709: = import_ref Main//extend_adapt_specific_type_library, loc13_1, loaded [concrete = constants.%complete_type.c07] -// CHECK:STDOUT: %Main.import_ref.feb = import_ref Main//extend_adapt_specific_type_library, inst46 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.feb = import_ref Main//extend_adapt_specific_type_library, inst43 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.19d12e.2: type = import_ref Main//extend_adapt_specific_type_library, loc12_21, loaded [concrete = constants.%C.239] // CHECK:STDOUT: } // CHECK:STDOUT: @@ -969,18 +960,16 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %.loc11_8: %C.elem = field_decl n, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc11_3: %C.elem = var_pattern %.loc11_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %C.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc11: %C.elem = field_decl n, element0 [concrete] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete = constants.%struct_type.n] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.n [concrete = constants.%complete_type.54b] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%C -// CHECK:STDOUT: .n = %.loc11_8 +// CHECK:STDOUT: .n = %.loc11 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @ImportedConvert(%a.param_patt: %Adapter.e4c) -> %i32 { @@ -999,7 +988,7 @@ fn ImportedConvertLocal(a: Adapter(C)) -> i32 { // CHECK:STDOUT: %C.ref.loc15: type = name_ref C, file.%C.decl [concrete = constants.%C] // CHECK:STDOUT: %.loc15_13.1: %C = as_compatible %a.ref // CHECK:STDOUT: %.loc15_13.2: %C = converted %a.ref, %.loc15_13.1 -// CHECK:STDOUT: %n.ref: %C.elem = name_ref n, @C.%.loc11_8 [concrete = @C.%.loc11_8] +// CHECK:STDOUT: %n.ref: %C.elem = name_ref n, @C.%.loc11 [concrete = @C.%.loc11] // CHECK:STDOUT: %.loc15_18.1: ref %i32 = class_element_access %.loc15_13.2, element0 // CHECK:STDOUT: %.loc15_18.2: %i32 = bind_value %.loc15_18.1 // CHECK:STDOUT: return %.loc15_18.2 diff --git a/toolchain/check/testdata/class/generic/base_is_generic.carbon b/toolchain/check/testdata/class/generic/base_is_generic.carbon index a2dc0e386d60..14cb170c51c7 100644 --- a/toolchain/check/testdata/class/generic/base_is_generic.carbon +++ b/toolchain/check/testdata/class/generic/base_is_generic.carbon @@ -167,11 +167,8 @@ fn H() { // CHECK:STDOUT: %complete_type.loc6_1.2: = complete_type_witness %struct_type.x.loc6_1.2 [symbolic = %complete_type.loc6_1.2 (constants.%complete_type.433)] // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %.loc5_8: @Base.%Base.elem (%Base.elem.9af) = field_decl x, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_3: @Base.%Base.elem (%Base.elem.9af) = var_pattern %.loc5_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref @Base.%Base.elem (%Base.elem.9af) = var +// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4_17.1 [symbolic = %T.loc4_17.2 (constants.%T)] +// CHECK:STDOUT: %.loc5: @Base.%Base.elem (%Base.elem.9af) = field_decl x, element0 [concrete] // CHECK:STDOUT: %struct_type.x.loc6_1.1: type = struct_type {.x: %T} [symbolic = %struct_type.x.loc6_1.2 (constants.%struct_type.x.2ac)] // CHECK:STDOUT: %complete_type.loc6_1.1: = complete_type_witness %struct_type.x.loc6_1.1 [symbolic = %complete_type.loc6_1.2 (constants.%complete_type.433)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc6_1.1 @@ -179,23 +176,21 @@ fn H() { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Base.370 // CHECK:STDOUT: .T = -// CHECK:STDOUT: .x = %.loc5_8 +// CHECK:STDOUT: .x = %.loc5 // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Param { -// CHECK:STDOUT: %.loc9_8: %Param.elem = field_decl y, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc9_3: %Param.elem = var_pattern %.loc9_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Param.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc9: %Param.elem = field_decl y, element0 [concrete] // CHECK:STDOUT: %struct_type.y: type = struct_type {.y: %i32} [concrete = constants.%struct_type.y] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.y [concrete = constants.%complete_type.0f9] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Param -// CHECK:STDOUT: .y = %.loc9_8 +// CHECK:STDOUT: .y = %.loc9 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Derived { @@ -219,11 +214,11 @@ fn H() { // CHECK:STDOUT: fn @DoubleFieldAccess(%d.param_patt: %Derived) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %d.ref: %Derived = name_ref d, %d -// CHECK:STDOUT: %x.ref: %Base.elem.d1f = name_ref x, @Base.%.loc5_8 [concrete = @Base.%.loc5_8] +// CHECK:STDOUT: %x.ref: %Base.elem.d1f = name_ref x, @Base.%.loc5 [concrete = @Base.%.loc5] // CHECK:STDOUT: %.loc17_11.1: ref %Base.7a8 = class_element_access %d.ref, element0 // CHECK:STDOUT: %.loc17_11.2: ref %Base.7a8 = converted %d.ref, %.loc17_11.1 // CHECK:STDOUT: %.loc17_11.3: ref %Param = class_element_access %.loc17_11.2, element0 -// CHECK:STDOUT: %y.ref: %Param.elem = name_ref y, @Param.%.loc9_8 [concrete = @Param.%.loc9_8] +// CHECK:STDOUT: %y.ref: %Param.elem = name_ref y, @Param.%.loc9 [concrete = @Param.%.loc9] // CHECK:STDOUT: %.loc17_13.1: ref %i32 = class_element_access %.loc17_11.3, element0 // CHECK:STDOUT: %.loc17_13.2: %i32 = bind_value %.loc17_13.1 // CHECK:STDOUT: return %.loc17_13.2 @@ -286,14 +281,14 @@ fn H() { // CHECK:STDOUT: import Core//prelude/... // CHECK:STDOUT: } // CHECK:STDOUT: %Main.import_ref.e8d: = import_ref Main//extend_generic_base, loc10_1, loaded [concrete = constants.%complete_type.09d] -// CHECK:STDOUT: %Main.import_ref.446 = import_ref Main//extend_generic_base, inst46 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.446 = import_ref Main//extend_generic_base, inst43 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.a92: %Param.elem = import_ref Main//extend_generic_base, loc9_8, loaded [concrete = %.be7] // CHECK:STDOUT: %Main.import_ref.5ab: type = import_ref Main//extend_generic_base, loc4_17, loaded [symbolic = @Base.%T (constants.%T)] // CHECK:STDOUT: %Main.import_ref.b5f: = import_ref Main//extend_generic_base, loc6_1, loaded [symbolic = @Base.%complete_type (constants.%complete_type.433)] // CHECK:STDOUT: %Main.import_ref.8e0 = import_ref Main//extend_generic_base, inst27 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.7f7: @Base.%Base.elem (%Base.elem.9af) = import_ref Main//extend_generic_base, loc5_8, loaded [concrete = %.e66] // CHECK:STDOUT: %Main.import_ref.bd0: = import_ref Main//extend_generic_base, loc14_1, loaded [concrete = constants.%complete_type.b07] -// CHECK:STDOUT: %Main.import_ref.f6c = import_ref Main//extend_generic_base, inst84 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.f6c = import_ref Main//extend_generic_base, inst78 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.d24 = import_ref Main//extend_generic_base, loc13_27, unloaded // CHECK:STDOUT: %Main.import_ref.77a301.2: type = import_ref Main//extend_generic_base, loc13_26, loaded [concrete = constants.%Base.7a8] // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/class/generic/basic.carbon b/toolchain/check/testdata/class/generic/basic.carbon index 8b3350077024..051cddfa3729 100644 --- a/toolchain/check/testdata/class/generic/basic.carbon +++ b/toolchain/check/testdata/class/generic/basic.carbon @@ -125,11 +125,8 @@ class Declaration(T:! type); // CHECK:STDOUT: %return.param: ref @GetValue.%T (%T) = out_param call_param1 // CHECK:STDOUT: %return: ref @GetValue.%T (%T) = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc21_8: @Class.%Class.elem (%Class.elem) = field_decl k, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc21_3: @Class.%Class.elem (%Class.elem) = var_pattern %.loc21_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref @Class.%Class.elem (%Class.elem) = var +// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc11_13.1 [symbolic = %T.loc11_13.2 (constants.%T)] +// CHECK:STDOUT: %.loc21: @Class.%Class.elem (%Class.elem) = field_decl k, element0 [concrete] // CHECK:STDOUT: %struct_type.k.loc22_1.1: type = struct_type {.k: %T} [symbolic = %struct_type.k.loc22_1.2 (constants.%struct_type.k)] // CHECK:STDOUT: %complete_type.loc22_1.1: = complete_type_witness %struct_type.k.loc22_1.1 [symbolic = %complete_type.loc22_1.2 (constants.%complete_type)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc22_1.1 @@ -139,7 +136,7 @@ class Declaration(T:! type); // CHECK:STDOUT: .T = // CHECK:STDOUT: .GetAddr = %GetAddr.decl // CHECK:STDOUT: .GetValue = %GetValue.decl -// CHECK:STDOUT: .k = %.loc21_8 +// CHECK:STDOUT: .k = %.loc21 // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -166,7 +163,7 @@ class Declaration(T:! type); // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: @GetAddr.%ptr.loc12_29.1 (%ptr.955) = name_ref self, %self // CHECK:STDOUT: %.loc13_17.1: ref @GetAddr.%Class (%Class) = deref %self.ref -// CHECK:STDOUT: %k.ref: @GetAddr.%Class.elem (%Class.elem) = name_ref k, @Class.%.loc21_8 [concrete = @Class.%.loc21_8] +// CHECK:STDOUT: %k.ref: @GetAddr.%Class.elem (%Class.elem) = name_ref k, @Class.%.loc21 [concrete = @Class.%.loc21] // CHECK:STDOUT: %.loc13_17.2: ref @GetAddr.%T (%T) = class_element_access %.loc13_17.1, element0 // CHECK:STDOUT: %addr: @GetAddr.%ptr.loc12_38.1 (%ptr.79f) = addr_of %.loc13_17.2 // CHECK:STDOUT: return %addr @@ -185,7 +182,7 @@ class Declaration(T:! type); // CHECK:STDOUT: fn[%self.param_patt: @GetValue.%Class (%Class)]() -> @GetValue.%T (%T) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: @GetValue.%Class (%Class) = name_ref self, %self -// CHECK:STDOUT: %k.ref: @GetValue.%Class.elem (%Class.elem) = name_ref k, @Class.%.loc21_8 [concrete = @Class.%.loc21_8] +// CHECK:STDOUT: %k.ref: @GetValue.%Class.elem (%Class.elem) = name_ref k, @Class.%.loc21 [concrete = @Class.%.loc21] // CHECK:STDOUT: %.loc18_16.1: ref @GetValue.%T (%T) = class_element_access %self.ref, element0 // CHECK:STDOUT: %.loc18_16.2: @GetValue.%T (%T) = bind_value %.loc18_16.1 // CHECK:STDOUT: return %.loc18_16.2 diff --git a/toolchain/check/testdata/class/generic/complete_in_conversion.carbon b/toolchain/check/testdata/class/generic/complete_in_conversion.carbon index e66a998b9aca..29486635e70d 100644 --- a/toolchain/check/testdata/class/generic/complete_in_conversion.carbon +++ b/toolchain/check/testdata/class/generic/complete_in_conversion.carbon @@ -49,9 +49,15 @@ fn F(a: A(0)*) { // CHECK:STDOUT: %A.generic: %A.type = struct_value () [concrete] // CHECK:STDOUT: %A.dd3: type = class_type @A, @A(%N.51e) [symbolic] // CHECK:STDOUT: %A.elem.500: type = unbound_element_type %A.dd3, %B [symbolic] +// CHECK:STDOUT: %ImplicitAs.type.2fd: type = facet_type <@ImplicitAs, @ImplicitAs(Core.IntLiteral)> [concrete] +// CHECK:STDOUT: %Convert.type.71e: type = fn_type @Convert.1, @ImplicitAs(Core.IntLiteral) [concrete] // CHECK:STDOUT: %ImplicitAs.impl_witness_table.a2f = impl_witness_table (imports.%Core.import_ref.a5b), @impl.4f9 [concrete] +// CHECK:STDOUT: %ImplicitAs.impl_witness_table.1d9 = impl_witness_table (imports.%Core.import_ref.85c), @impl.971 [concrete] +// CHECK:STDOUT: %ImplicitAs.impl_witness.a11: = impl_witness %ImplicitAs.impl_witness_table.1d9, @impl.971(%int_32) [concrete] // CHECK:STDOUT: %Convert.type.4ad: type = fn_type @Convert.3, @impl.971(%int_32) [concrete] // CHECK:STDOUT: %Convert.960: %Convert.type.4ad = struct_value () [concrete] +// CHECK:STDOUT: %ImplicitAs.facet.f49: %ImplicitAs.type.2fd = facet_value %i32, (%ImplicitAs.impl_witness.a11) [concrete] +// CHECK:STDOUT: %.0ea: type = fn_type_with_self_type %Convert.type.71e, %ImplicitAs.facet.f49 [concrete] // CHECK:STDOUT: %Convert.bound.588: = bound_method %N.51e, %Convert.960 [symbolic] // CHECK:STDOUT: %Convert.specific_fn.8a8: = specific_function %Convert.960, @Convert.3(%int_32) [concrete] // CHECK:STDOUT: %bound_method.f9c: = bound_method %N.51e, %Convert.specific_fn.8a8 [symbolic] @@ -172,9 +178,9 @@ fn F(a: A(0)*) { // CHECK:STDOUT: %A: type = class_type @A, @A(%N.loc6_9.2) [symbolic = %A (constants.%A.dd3)] // CHECK:STDOUT: %A.elem.loc7: type = unbound_element_type %A, constants.%B [symbolic = %A.elem.loc7 (constants.%A.elem.500)] // CHECK:STDOUT: %Convert.bound: = bound_method %N.loc6_9.2, constants.%Convert.960 [symbolic = %Convert.bound (constants.%Convert.bound.588)] -// CHECK:STDOUT: %bound_method: = bound_method %N.loc6_9.2, constants.%Convert.specific_fn.8a8 [symbolic = %bound_method (constants.%bound_method.f9c)] -// CHECK:STDOUT: %int.convert_checked: init Core.IntLiteral = call %bound_method(%N.loc6_9.2) [symbolic = %int.convert_checked (constants.%int.convert_checked)] -// CHECK:STDOUT: %iN.builtin: type = int_type signed, %int.convert_checked [symbolic = %iN.builtin (constants.%iN.builtin.8fe)] +// CHECK:STDOUT: %bound_method.loc12_14.3: = bound_method %N.loc6_9.2, constants.%Convert.specific_fn.8a8 [symbolic = %bound_method.loc12_14.3 (constants.%bound_method.f9c)] +// CHECK:STDOUT: %int.convert_checked.loc12_14.2: init Core.IntLiteral = call %bound_method.loc12_14.3(%N.loc6_9.2) [symbolic = %int.convert_checked.loc12_14.2 (constants.%int.convert_checked)] +// CHECK:STDOUT: %iN.builtin: type = int_type signed, %int.convert_checked.loc12_14.2 [symbolic = %iN.builtin (constants.%iN.builtin.8fe)] // CHECK:STDOUT: %require_complete: = require_complete_type %iN.builtin [symbolic = %require_complete (constants.%require_complete.e34)] // CHECK:STDOUT: %A.elem.loc12: type = unbound_element_type %A, %iN.builtin [symbolic = %A.elem.loc12 (constants.%A.elem.07f)] // CHECK:STDOUT: %struct_type.base.n.loc13_1.2: type = struct_type {.base: %B, .n: @A.%iN.builtin (%iN.builtin.8fe)} [symbolic = %struct_type.base.n.loc13_1.2 (constants.%struct_type.base.n)] @@ -183,11 +189,19 @@ fn F(a: A(0)*) { // CHECK:STDOUT: class { // CHECK:STDOUT: %B.ref: type = name_ref B, file.%B.decl [concrete = constants.%B] // CHECK:STDOUT: %.loc7: @A.%A.elem.loc7 (%A.elem.500) = base_decl %B.ref, element0 [concrete] +// CHECK:STDOUT: %Int.ref: %Int.type.913 = name_ref Int, file.%Int.decl [concrete = constants.%Int.779] +// CHECK:STDOUT: %N.ref: %i32 = name_ref N, %N.loc6_9.1 [symbolic = %N.loc6_9.2 (constants.%N.51e)] +// CHECK:STDOUT: %impl.elem0: %.0ea = impl_witness_access constants.%ImplicitAs.impl_witness.a11, element0 [concrete = constants.%Convert.960] +// CHECK:STDOUT: %bound_method.loc12_14.1: = bound_method %N.ref, %impl.elem0 [symbolic = %Convert.bound (constants.%Convert.bound.588)] +// CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @Convert.3(constants.%int_32) [concrete = constants.%Convert.specific_fn.8a8] +// CHECK:STDOUT: %bound_method.loc12_14.2: = bound_method %N.ref, %specific_fn [symbolic = %bound_method.loc12_14.3 (constants.%bound_method.f9c)] +// CHECK:STDOUT: %int.convert_checked.loc12_14.1: init Core.IntLiteral = call %bound_method.loc12_14.2(%N.ref) [symbolic = %int.convert_checked.loc12_14.2 (constants.%int.convert_checked)] +// CHECK:STDOUT: %.loc12_14.1: Core.IntLiteral = value_of_initializer %int.convert_checked.loc12_14.1 [symbolic = %int.convert_checked.loc12_14.2 (constants.%int.convert_checked)] +// CHECK:STDOUT: %.loc12_14.2: Core.IntLiteral = converted %N.ref, %.loc12_14.1 [symbolic = %int.convert_checked.loc12_14.2 (constants.%int.convert_checked)] +// CHECK:STDOUT: %int.make_type_signed: init type = call %Int.ref(%.loc12_14.2) [symbolic = %iN.builtin (constants.%iN.builtin.8fe)] +// CHECK:STDOUT: %.loc12_15.1: type = value_of_initializer %int.make_type_signed [symbolic = %iN.builtin (constants.%iN.builtin.8fe)] +// CHECK:STDOUT: %.loc12_15.2: type = converted %int.make_type_signed, %.loc12_15.1 [symbolic = %iN.builtin (constants.%iN.builtin.8fe)] // CHECK:STDOUT: %.loc12_8: @A.%A.elem.loc12 (%A.elem.07f) = field_decl n, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc12_3: @A.%A.elem.loc12 (%A.elem.07f) = var_pattern %.loc12_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref @A.%A.elem.loc12 (%A.elem.07f) = var // CHECK:STDOUT: %struct_type.base.n.loc13_1.1: type = struct_type {.base: %B, .n: %iN.builtin.8fe} [symbolic = %struct_type.base.n.loc13_1.2 (constants.%struct_type.base.n)] // CHECK:STDOUT: %complete_type.loc13_1.1: = complete_type_witness %struct_type.base.n.loc13_1.1 [symbolic = %complete_type.loc13_1.2 (constants.%complete_type.beb)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc13_1.1 @@ -238,8 +252,8 @@ fn F(a: A(0)*) { // CHECK:STDOUT: %A => constants.%A.6fc // CHECK:STDOUT: %A.elem.loc7 => constants.%A.elem.d81 // CHECK:STDOUT: %Convert.bound => constants.%Convert.bound.0fd -// CHECK:STDOUT: %bound_method => constants.%bound_method.4b5 -// CHECK:STDOUT: %int.convert_checked => constants.%int_0.5c6 +// CHECK:STDOUT: %bound_method.loc12_14.3 => constants.%bound_method.4b5 +// CHECK:STDOUT: %int.convert_checked.loc12_14.2 => constants.%int_0.5c6 // CHECK:STDOUT: %iN.builtin => // CHECK:STDOUT: %require_complete => // CHECK:STDOUT: %A.elem.loc12 => diff --git a/toolchain/check/testdata/class/generic/field.carbon b/toolchain/check/testdata/class/generic/field.carbon index a84eaf6fc32b..d3de2d216c89 100644 --- a/toolchain/check/testdata/class/generic/field.carbon +++ b/toolchain/check/testdata/class/generic/field.carbon @@ -154,11 +154,8 @@ fn H(U:! type, c: Class(U)) -> U { // CHECK:STDOUT: %complete_type.loc13_1.2: = complete_type_witness %struct_type.x.loc13_1.2 [symbolic = %complete_type.loc13_1.2 (constants.%complete_type.4339b3.1)] // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %.loc12_8: @Class.%Class.elem (%Class.elem.e262de.1) = field_decl x, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc12_3: @Class.%Class.elem (%Class.elem.e262de.1) = var_pattern %.loc12_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref @Class.%Class.elem (%Class.elem.e262de.1) = var +// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc11_13.1 [symbolic = %T.loc11_13.2 (constants.%T)] +// CHECK:STDOUT: %.loc12: @Class.%Class.elem (%Class.elem.e262de.1) = field_decl x, element0 [concrete] // CHECK:STDOUT: %struct_type.x.loc13_1.1: type = struct_type {.x: %T} [symbolic = %struct_type.x.loc13_1.2 (constants.%struct_type.x.2ac3f0.1)] // CHECK:STDOUT: %complete_type.loc13_1.1: = complete_type_witness %struct_type.x.loc13_1.1 [symbolic = %complete_type.loc13_1.2 (constants.%complete_type.4339b3.1)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc13_1.1 @@ -166,14 +163,14 @@ fn H(U:! type, c: Class(U)) -> U { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Class.fe1b2d.1 // CHECK:STDOUT: .T = -// CHECK:STDOUT: .x = %.loc12_8 +// CHECK:STDOUT: .x = %.loc12 // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F(%c.param_patt: %Class.247) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %c.ref: %Class.247 = name_ref c, %c -// CHECK:STDOUT: %x.ref: %Class.elem.2d8 = name_ref x, @Class.%.loc12_8 [concrete = @Class.%.loc12_8] +// CHECK:STDOUT: %x.ref: %Class.elem.2d8 = name_ref x, @Class.%.loc12 [concrete = @Class.%.loc12] // CHECK:STDOUT: %.loc16_11.1: ref %i32 = class_element_access %c.ref, element0 // CHECK:STDOUT: %.loc16_11.2: %i32 = bind_value %.loc16_11.1 // CHECK:STDOUT: return %.loc16_11.2 @@ -192,7 +189,7 @@ fn H(U:! type, c: Class(U)) -> U { // CHECK:STDOUT: fn(%T.patt.loc19_6.1: type, %c.param_patt: @G.%Class.loc19_26.2 (%Class.fe1b2d.1)) -> @G.%T.loc19_6.2 (%T) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %c.ref: @G.%Class.loc19_26.2 (%Class.fe1b2d.1) = name_ref c, %c -// CHECK:STDOUT: %x.ref: @G.%Class.elem (%Class.elem.e262de.1) = name_ref x, @Class.%.loc12_8 [concrete = @Class.%.loc12_8] +// CHECK:STDOUT: %x.ref: @G.%Class.elem (%Class.elem.e262de.1) = name_ref x, @Class.%.loc12 [concrete = @Class.%.loc12] // CHECK:STDOUT: %.loc20_11.1: ref @G.%T.loc19_6.2 (%T) = class_element_access %c.ref, element0 // CHECK:STDOUT: %.loc20_11.2: @G.%T.loc19_6.2 (%T) = bind_value %.loc20_11.1 // CHECK:STDOUT: return %.loc20_11.2 @@ -212,7 +209,7 @@ fn H(U:! type, c: Class(U)) -> U { // CHECK:STDOUT: fn(%U.patt.loc23_6.1: type, %c.param_patt: @H.%Class.loc23_26.2 (%Class.fe1b2d.2)) -> @H.%U.loc23_6.2 (%U) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %c.ref: @H.%Class.loc23_26.2 (%Class.fe1b2d.2) = name_ref c, %c -// CHECK:STDOUT: %x.ref: @H.%Class.elem (%Class.elem.e262de.2) = name_ref x, @Class.%.loc12_8 [concrete = @Class.%.loc12_8] +// CHECK:STDOUT: %x.ref: @H.%Class.elem (%Class.elem.e262de.2) = name_ref x, @Class.%.loc12 [concrete = @Class.%.loc12] // CHECK:STDOUT: %.loc24_11.1: ref @H.%U.loc23_6.2 (%U) = class_element_access %c.ref, element0 // CHECK:STDOUT: %.loc24_11.2: @H.%U.loc23_6.2 (%U) = bind_value %.loc24_11.1 // CHECK:STDOUT: return %.loc24_11.2 diff --git a/toolchain/check/testdata/class/generic/import.carbon b/toolchain/check/testdata/class/generic/import.carbon index c3e1be69b5a0..9127257ffdee 100644 --- a/toolchain/check/testdata/class/generic/import.carbon +++ b/toolchain/check/testdata/class/generic/import.carbon @@ -178,11 +178,9 @@ class Class(U:! type) { // CHECK:STDOUT: %F: @CompleteClass.%F.type (%F.type.14f) = struct_value () [symbolic = %F (constants.%F.874)] // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %.loc7_8: @CompleteClass.%CompleteClass.elem (%CompleteClass.elem) = field_decl n, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc7_3: @CompleteClass.%CompleteClass.elem (%CompleteClass.elem) = var_pattern %.loc7_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref @CompleteClass.%CompleteClass.elem (%CompleteClass.elem) = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc7: @CompleteClass.%CompleteClass.elem (%CompleteClass.elem) = field_decl n, element0 [concrete] // CHECK:STDOUT: %F.decl: @CompleteClass.%F.type (%F.type.14f) = fn_decl @F.1 [symbolic = @CompleteClass.%F (constants.%F.874)] { // CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern // CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 @@ -198,7 +196,7 @@ class Class(U:! type) { // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%CompleteClass.f97 -// CHECK:STDOUT: .n = %.loc7_8 +// CHECK:STDOUT: .n = %.loc7 // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: } // CHECK:STDOUT: } @@ -349,11 +347,8 @@ class Class(U:! type) { // CHECK:STDOUT: %complete_type.loc6_1.2: = complete_type_witness %struct_type.x.loc6_1.2 [symbolic = %complete_type.loc6_1.2 (constants.%complete_type.433)] // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %.loc5_8: @Class.%Class.elem (%Class.elem) = field_decl x, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_3: @Class.%Class.elem (%Class.elem) = var_pattern %.loc5_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref @Class.%Class.elem (%Class.elem) = var +// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4 [symbolic = %T.1 (constants.%T)] +// CHECK:STDOUT: %.loc5: @Class.%Class.elem (%Class.elem) = field_decl x, element0 [concrete] // CHECK:STDOUT: %struct_type.x.loc6_1.1: type = struct_type {.x: %T} [symbolic = %struct_type.x.loc6_1.2 (constants.%struct_type.x)] // CHECK:STDOUT: %complete_type.loc6_1.1: = complete_type_witness %struct_type.x.loc6_1.1 [symbolic = %complete_type.loc6_1.2 (constants.%complete_type.433)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc6_1.1 @@ -361,7 +356,7 @@ class Class(U:! type) { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Class // CHECK:STDOUT: .T = -// CHECK:STDOUT: .x = %.loc5_8 +// CHECK:STDOUT: .x = %.loc5 // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -834,11 +829,8 @@ class Class(U:! type) { // CHECK:STDOUT: !definition: // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %.loc17_8: = field_decl x, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc17_3: = var_pattern %.loc17_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref = var +// CHECK:STDOUT: %T.ref: = name_ref T, [concrete = ] +// CHECK:STDOUT: %.loc17: = field_decl x, element0 [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: } [concrete = ] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete = ] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -846,7 +838,7 @@ class Class(U:! type) { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Class.fe1b2d.2 // CHECK:STDOUT: .T = -// CHECK:STDOUT: .x = %.loc17_8 +// CHECK:STDOUT: .x = %.loc17 // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/class/generic/init.carbon b/toolchain/check/testdata/class/generic/init.carbon index b1c852a3b408..85d3e09cb77b 100644 --- a/toolchain/check/testdata/class/generic/init.carbon +++ b/toolchain/check/testdata/class/generic/init.carbon @@ -136,11 +136,8 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: %complete_type.loc6_1.2: = complete_type_witness %struct_type.k.loc6_1.2 [symbolic = %complete_type.loc6_1.2 (constants.%complete_type.b9e)] // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %.loc5_8: @Class.%Class.elem (%Class.elem.e26) = field_decl k, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_3: @Class.%Class.elem (%Class.elem.e26) = var_pattern %.loc5_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref @Class.%Class.elem (%Class.elem.e26) = var +// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4_13.1 [symbolic = %T.loc4_13.2 (constants.%T)] +// CHECK:STDOUT: %.loc5: @Class.%Class.elem (%Class.elem.e26) = field_decl k, element0 [concrete] // CHECK:STDOUT: %struct_type.k.loc6_1.1: type = struct_type {.k: %T} [symbolic = %struct_type.k.loc6_1.2 (constants.%struct_type.k.b21)] // CHECK:STDOUT: %complete_type.loc6_1.1: = complete_type_witness %struct_type.k.loc6_1.1 [symbolic = %complete_type.loc6_1.2 (constants.%complete_type.b9e)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc6_1.1 @@ -148,7 +145,7 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Class.fe1 // CHECK:STDOUT: .T = -// CHECK:STDOUT: .k = %.loc5_8 +// CHECK:STDOUT: .k = %.loc5 // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -184,7 +181,7 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %v: ref @InitFromStructGeneric.%Class.loc9_17.2 (%Class.fe1) = bind_name v, %v.var // CHECK:STDOUT: %v.ref: ref @InitFromStructGeneric.%Class.loc9_17.2 (%Class.fe1) = name_ref v, %v -// CHECK:STDOUT: %k.ref: @InitFromStructGeneric.%Class.elem (%Class.elem.e26) = name_ref k, @Class.%.loc5_8 [concrete = @Class.%.loc5_8] +// CHECK:STDOUT: %k.ref: @InitFromStructGeneric.%Class.elem (%Class.elem.e26) = name_ref k, @Class.%.loc5 [concrete = @Class.%.loc5] // CHECK:STDOUT: %.loc10_11.1: ref @InitFromStructGeneric.%T.loc8_26.2 (%T) = class_element_access %v.ref, element0 // CHECK:STDOUT: %.loc10_11.2: @InitFromStructGeneric.%T.loc8_26.2 (%T) = bind_value %.loc10_11.1 // CHECK:STDOUT: return %.loc10_11.2 @@ -213,7 +210,7 @@ fn InitFromAdaptedSpecific(x: i32) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %v: ref %Class.247 = bind_name v, %v.var // CHECK:STDOUT: %v.ref: ref %Class.247 = name_ref v, %v -// CHECK:STDOUT: %k.ref: %Class.elem.2d8 = name_ref k, @Class.%.loc5_8 [concrete = @Class.%.loc5_8] +// CHECK:STDOUT: %k.ref: %Class.elem.2d8 = name_ref k, @Class.%.loc5 [concrete = @Class.%.loc5] // CHECK:STDOUT: %.loc15_11.1: ref %i32 = class_element_access %v.ref, element0 // CHECK:STDOUT: %.loc15_11.2: %i32 = bind_value %.loc15_11.1 // CHECK:STDOUT: return %.loc15_11.2 diff --git a/toolchain/check/testdata/class/generic/member_access.carbon b/toolchain/check/testdata/class/generic/member_access.carbon index c0a5eb50fd1a..58ba044523dd 100644 --- a/toolchain/check/testdata/class/generic/member_access.carbon +++ b/toolchain/check/testdata/class/generic/member_access.carbon @@ -194,11 +194,8 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: %complete_type.loc8_1.2: = complete_type_witness %struct_type.x.loc8_1.2 [symbolic = %complete_type.loc8_1.2 (constants.%complete_type.433)] // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %.loc3_8: @Class.%Class.elem (%Class.elem.e26) = field_decl x, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc3_3: @Class.%Class.elem (%Class.elem.e26) = var_pattern %.loc3_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref @Class.%Class.elem (%Class.elem.e26) = var +// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc2_13.1 [symbolic = %T.loc2_13.2 (constants.%T)] +// CHECK:STDOUT: %.loc3: @Class.%Class.elem (%Class.elem.e26) = field_decl x, element0 [concrete] // CHECK:STDOUT: %Get.decl: @Class.%Get.type (%Get.type.fd9) = fn_decl @Get [symbolic = @Class.%Get (constants.%Get.cf9)] { // CHECK:STDOUT: %self.patt: @Get.%Class (%Class.fe1) = binding_pattern self // CHECK:STDOUT: %self.param_patt: @Get.%Class (%Class.fe1) = value_param_pattern %self.patt, call_param0 @@ -241,7 +238,7 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Class.fe1 // CHECK:STDOUT: .T = -// CHECK:STDOUT: .x = %.loc3_8 +// CHECK:STDOUT: .x = %.loc3 // CHECK:STDOUT: .Get = %Get.decl // CHECK:STDOUT: .GetAddr = %GetAddr.decl // CHECK:STDOUT: } @@ -259,7 +256,7 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: fn[%self.param_patt: @Get.%Class (%Class.fe1)]() -> @Get.%T (%T) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: @Get.%Class (%Class.fe1) = name_ref self, %self -// CHECK:STDOUT: %x.ref: @Get.%Class.elem (%Class.elem.e26) = name_ref x, @Class.%.loc3_8 [concrete = @Class.%.loc3_8] +// CHECK:STDOUT: %x.ref: @Get.%Class.elem (%Class.elem.e26) = name_ref x, @Class.%.loc3 [concrete = @Class.%.loc3] // CHECK:STDOUT: %.loc5_42.1: ref @Get.%T (%T) = class_element_access %self.ref, element0 // CHECK:STDOUT: %.loc5_42.2: @Get.%T (%T) = bind_value %.loc5_42.1 // CHECK:STDOUT: return %.loc5_42.2 @@ -282,7 +279,7 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: @GetAddr.%ptr.loc7_29.1 (%ptr.955) = name_ref self, %self // CHECK:STDOUT: %.loc7_54.1: ref @GetAddr.%Class (%Class.fe1) = deref %self.ref -// CHECK:STDOUT: %x.ref: @GetAddr.%Class.elem (%Class.elem.e26) = name_ref x, @Class.%.loc3_8 [concrete = @Class.%.loc3_8] +// CHECK:STDOUT: %x.ref: @GetAddr.%Class.elem (%Class.elem.e26) = name_ref x, @Class.%.loc3 [concrete = @Class.%.loc3] // CHECK:STDOUT: %.loc7_54.2: ref @GetAddr.%T (%T) = class_element_access %.loc7_54.1, element0 // CHECK:STDOUT: %addr: @GetAddr.%ptr.loc7_38.1 (%ptr.79f) = addr_of %.loc7_54.2 // CHECK:STDOUT: return %addr @@ -292,7 +289,7 @@ fn StaticMemberFunctionCall(T:! type) -> Class(T) { // CHECK:STDOUT: fn @DirectFieldAccess(%x.param_patt: %Class.247) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %x.ref.loc11_10: %Class.247 = name_ref x, %x -// CHECK:STDOUT: %x.ref.loc11_11: %Class.elem.2d8 = name_ref x, @Class.%.loc3_8 [concrete = @Class.%.loc3_8] +// CHECK:STDOUT: %x.ref.loc11_11: %Class.elem.2d8 = name_ref x, @Class.%.loc3 [concrete = @Class.%.loc3] // CHECK:STDOUT: %.loc11_11.1: ref %i32 = class_element_access %x.ref.loc11_10, element0 // CHECK:STDOUT: %.loc11_11.2: %i32 = bind_value %.loc11_11.1 // CHECK:STDOUT: return %.loc11_11.2 diff --git a/toolchain/check/testdata/class/generic/member_inline.carbon b/toolchain/check/testdata/class/generic/member_inline.carbon index e829ca6b95b8..98f21b012ddb 100644 --- a/toolchain/check/testdata/class/generic/member_inline.carbon +++ b/toolchain/check/testdata/class/generic/member_inline.carbon @@ -123,11 +123,8 @@ class C(T:! type) { // CHECK:STDOUT: %return.param: ref @G.%T (%T) = out_param call_param1 // CHECK:STDOUT: %return: ref @G.%T (%T) = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc13_8: @Class.%Class.elem (%Class.elem) = field_decl n, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc13_3: @Class.%Class.elem (%Class.elem) = var_pattern %.loc13_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref @Class.%Class.elem (%Class.elem) = var +// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4_13.1 [symbolic = %T.loc4_13.2 (constants.%T)] +// CHECK:STDOUT: %.loc13: @Class.%Class.elem (%Class.elem) = field_decl n, element0 [concrete] // CHECK:STDOUT: %struct_type.n.loc14_1.1: type = struct_type {.n: %T} [symbolic = %struct_type.n.loc14_1.2 (constants.%struct_type.n)] // CHECK:STDOUT: %complete_type.loc14_1.1: = complete_type_witness %struct_type.n.loc14_1.1 [symbolic = %complete_type.loc14_1.2 (constants.%complete_type)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc14_1.1 @@ -137,7 +134,7 @@ class C(T:! type) { // CHECK:STDOUT: .T = // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: .G = %G.decl -// CHECK:STDOUT: .n = %.loc13_8 +// CHECK:STDOUT: .n = %.loc13 // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -166,7 +163,7 @@ class C(T:! type) { // CHECK:STDOUT: fn[%self.param_patt: @G.%Class (%Class)]() -> @G.%T (%T) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: @G.%Class (%Class) = name_ref self, %self -// CHECK:STDOUT: %n.ref: @G.%Class.elem (%Class.elem) = name_ref n, @Class.%.loc13_8 [concrete = @Class.%.loc13_8] +// CHECK:STDOUT: %n.ref: @G.%Class.elem (%Class.elem) = name_ref n, @Class.%.loc13 [concrete = @Class.%.loc13] // CHECK:STDOUT: %.loc10_16.1: ref @G.%T (%T) = class_element_access %self.ref, element0 // CHECK:STDOUT: %.loc10_16.2: @G.%T (%T) = bind_value %.loc10_16.1 // CHECK:STDOUT: return %.loc10_16.2 @@ -250,11 +247,9 @@ class C(T:! type) { // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %F.decl: @C.%F.type (%F.type) = fn_decl @F [symbolic = @C.%F (constants.%F)] {} {} +// CHECK:STDOUT: %.loc12_14.1: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc12_14.2: type = converted %.loc12_14.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: %.loc12_11: @C.%C.elem (%C.elem) = field_decl data, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc12_3: @C.%C.elem (%C.elem) = var_pattern %.loc12_11 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref @C.%C.elem (%C.elem) = var // CHECK:STDOUT: %struct_type.data: type = struct_type {.data: %empty_struct_type} [concrete = constants.%struct_type.data] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.data [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type diff --git a/toolchain/check/testdata/class/generic/member_lookup.carbon b/toolchain/check/testdata/class/generic/member_lookup.carbon index d9054f2d3930..851224708163 100644 --- a/toolchain/check/testdata/class/generic/member_lookup.carbon +++ b/toolchain/check/testdata/class/generic/member_lookup.carbon @@ -211,11 +211,8 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: %complete_type.loc6_1.2: = complete_type_witness %struct_type.b.loc6_1.2 [symbolic = %complete_type.loc6_1.2 (constants.%complete_type.eaf)] // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %.loc5_8: @Base.%Base.elem (%Base.elem.9af) = field_decl b, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_3: @Base.%Base.elem (%Base.elem.9af) = var_pattern %.loc5_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref @Base.%Base.elem (%Base.elem.9af) = var +// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4_17.1 [symbolic = %T.loc4_17.2 (constants.%T)] +// CHECK:STDOUT: %.loc5: @Base.%Base.elem (%Base.elem.9af) = field_decl b, element0 [concrete] // CHECK:STDOUT: %struct_type.b.loc6_1.1: type = struct_type {.b: %T} [symbolic = %struct_type.b.loc6_1.2 (constants.%struct_type.b.f69)] // CHECK:STDOUT: %complete_type.loc6_1.1: = complete_type_witness %struct_type.b.loc6_1.1 [symbolic = %complete_type.loc6_1.2 (constants.%complete_type.eaf)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc6_1.1 @@ -223,7 +220,7 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Base.370 // CHECK:STDOUT: .T = -// CHECK:STDOUT: .b = %.loc5_8 +// CHECK:STDOUT: .b = %.loc5 // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -243,14 +240,11 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %Base.ref: %Base.type = name_ref Base, file.%Base.decl [concrete = constants.%Base.generic] -// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc8_15.1 [symbolic = %T.loc8_15.2 (constants.%T)] +// CHECK:STDOUT: %T.ref.loc9: type = name_ref T, %T.loc8_15.1 [symbolic = %T.loc8_15.2 (constants.%T)] // CHECK:STDOUT: %Base.loc9_22.1: type = class_type @Base, @Base(constants.%T) [symbolic = %Base.loc9_22.2 (constants.%Base.370)] // CHECK:STDOUT: %.loc9: @Derived.%Derived.elem.loc9 (%Derived.elem.8b3) = base_decl %Base.loc9_22.1, element0 [concrete] -// CHECK:STDOUT: %.loc10_8: @Derived.%Derived.elem.loc10 (%Derived.elem.6d2) = field_decl d, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc10_3: @Derived.%Derived.elem.loc10 (%Derived.elem.6d2) = var_pattern %.loc10_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref @Derived.%Derived.elem.loc10 (%Derived.elem.6d2) = var +// CHECK:STDOUT: %T.ref.loc10: type = name_ref T, %T.loc8_15.1 [symbolic = %T.loc8_15.2 (constants.%T)] +// CHECK:STDOUT: %.loc10: @Derived.%Derived.elem.loc10 (%Derived.elem.6d2) = field_decl d, element1 [concrete] // CHECK:STDOUT: %struct_type.base.d.loc11_1.1: type = struct_type {.base: %Base.370, .d: %T} [symbolic = %struct_type.base.d.loc11_1.2 (constants.%struct_type.base.d.37c)] // CHECK:STDOUT: %complete_type.loc11_1.1: = complete_type_witness %struct_type.base.d.loc11_1.1 [symbolic = %complete_type.loc11_1.2 (constants.%complete_type.8ad)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc11_1.1 @@ -260,7 +254,7 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: .Base = // CHECK:STDOUT: .T = // CHECK:STDOUT: .base = %.loc9 -// CHECK:STDOUT: .d = %.loc10_8 +// CHECK:STDOUT: .d = %.loc10 // CHECK:STDOUT: .b = // CHECK:STDOUT: extend %Base.loc9_22.1 // CHECK:STDOUT: } @@ -279,7 +273,7 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: fn[%T.patt.loc13_18.1: type](%x.param_patt: @AccessDerived.%Derived.loc13_40.2 (%Derived.85c)) -> @AccessDerived.%T.loc13_18.2 (%T) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %x.ref: @AccessDerived.%Derived.loc13_40.2 (%Derived.85c) = name_ref x, %x -// CHECK:STDOUT: %d.ref: @AccessDerived.%Derived.elem (%Derived.elem.6d2) = name_ref d, @Derived.%.loc10_8 [concrete = @Derived.%.loc10_8] +// CHECK:STDOUT: %d.ref: @AccessDerived.%Derived.elem (%Derived.elem.6d2) = name_ref d, @Derived.%.loc10 [concrete = @Derived.%.loc10] // CHECK:STDOUT: %.loc14_11.1: ref @AccessDerived.%T.loc13_18.2 (%T) = class_element_access %x.ref, element1 // CHECK:STDOUT: %.loc14_11.2: @AccessDerived.%T.loc13_18.2 (%T) = bind_value %.loc14_11.1 // CHECK:STDOUT: return %.loc14_11.2 @@ -301,7 +295,7 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: fn[%T.patt.loc17_15.1: type](%x.param_patt: @AccessBase.%Derived.loc17_37.2 (%Derived.85c)) -> @AccessBase.%T.loc17_15.2 (%T) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %x.ref: @AccessBase.%Derived.loc17_37.2 (%Derived.85c) = name_ref x, %x -// CHECK:STDOUT: %b.ref: @AccessBase.%Base.elem (%Base.elem.9af) = name_ref b, @Base.%.loc5_8 [concrete = @Base.%.loc5_8] +// CHECK:STDOUT: %b.ref: @AccessBase.%Base.elem (%Base.elem.9af) = name_ref b, @Base.%.loc5 [concrete = @Base.%.loc5] // CHECK:STDOUT: %.loc18_11.1: ref @AccessBase.%Base (%Base.370) = class_element_access %x.ref, element0 // CHECK:STDOUT: %.loc18_11.2: ref @AccessBase.%Base (%Base.370) = converted %x.ref, %.loc18_11.1 // CHECK:STDOUT: %.loc18_11.3: ref @AccessBase.%T.loc17_15.2 (%T) = class_element_access %.loc18_11.2, element0 @@ -313,7 +307,7 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: fn @AccessConcrete(%x.param_patt: %Derived.115) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %x.ref: %Derived.115 = name_ref x, %x -// CHECK:STDOUT: %b.ref: %Base.elem.a98 = name_ref b, @Base.%.loc5_8 [concrete = @Base.%.loc5_8] +// CHECK:STDOUT: %b.ref: %Base.elem.a98 = name_ref b, @Base.%.loc5 [concrete = @Base.%.loc5] // CHECK:STDOUT: %.loc22_11.1: ref %Base.10a = class_element_access %x.ref, element0 // CHECK:STDOUT: %.loc22_11.2: ref %Base.10a = converted %x.ref, %.loc22_11.1 // CHECK:STDOUT: %.loc22_11.3: ref %i32 = class_element_access %.loc22_11.2, element0 @@ -540,11 +534,8 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: %complete_type.loc6_1.2: = complete_type_witness %struct_type.b.loc6_1.2 [symbolic = %complete_type.loc6_1.2 (constants.%complete_type.eaf)] // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %.loc5_8: @Base.%Base.elem (%Base.elem.9af) = field_decl b, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_3: @Base.%Base.elem (%Base.elem.9af) = var_pattern %.loc5_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref @Base.%Base.elem (%Base.elem.9af) = var +// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4_17.1 [symbolic = %T.loc4_17.2 (constants.%T)] +// CHECK:STDOUT: %.loc5: @Base.%Base.elem (%Base.elem.9af) = field_decl b, element0 [concrete] // CHECK:STDOUT: %struct_type.b.loc6_1.1: type = struct_type {.b: %T} [symbolic = %struct_type.b.loc6_1.2 (constants.%struct_type.b.f69)] // CHECK:STDOUT: %complete_type.loc6_1.1: = complete_type_witness %struct_type.b.loc6_1.1 [symbolic = %complete_type.loc6_1.2 (constants.%complete_type.eaf)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc6_1.1 @@ -552,7 +543,7 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Base.370 // CHECK:STDOUT: .T = -// CHECK:STDOUT: .b = %.loc5_8 +// CHECK:STDOUT: .b = %.loc5 // CHECK:STDOUT: .nonesuch = // CHECK:STDOUT: } // CHECK:STDOUT: } @@ -573,14 +564,11 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: class { // CHECK:STDOUT: %Base.ref: %Base.type = name_ref Base, file.%Base.decl [concrete = constants.%Base.generic] -// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc8_15.1 [symbolic = %T.loc8_15.2 (constants.%T)] +// CHECK:STDOUT: %T.ref.loc9: type = name_ref T, %T.loc8_15.1 [symbolic = %T.loc8_15.2 (constants.%T)] // CHECK:STDOUT: %Base.loc9_22.1: type = class_type @Base, @Base(constants.%T) [symbolic = %Base.loc9_22.2 (constants.%Base.370)] // CHECK:STDOUT: %.loc9: @Derived.%Derived.elem.loc9 (%Derived.elem.8b3) = base_decl %Base.loc9_22.1, element0 [concrete] -// CHECK:STDOUT: %.loc10_8: @Derived.%Derived.elem.loc10 (%Derived.elem.6d2) = field_decl d, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc10_3: @Derived.%Derived.elem.loc10 (%Derived.elem.6d2) = var_pattern %.loc10_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref @Derived.%Derived.elem.loc10 (%Derived.elem.6d2) = var +// CHECK:STDOUT: %T.ref.loc10: type = name_ref T, %T.loc8_15.1 [symbolic = %T.loc8_15.2 (constants.%T)] +// CHECK:STDOUT: %.loc10: @Derived.%Derived.elem.loc10 (%Derived.elem.6d2) = field_decl d, element1 [concrete] // CHECK:STDOUT: %struct_type.base.d.loc11_1.1: type = struct_type {.base: %Base.370, .d: %T} [symbolic = %struct_type.base.d.loc11_1.2 (constants.%struct_type.base.d.37c)] // CHECK:STDOUT: %complete_type.loc11_1.1: = complete_type_witness %struct_type.base.d.loc11_1.1 [symbolic = %complete_type.loc11_1.2 (constants.%complete_type.8ad)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc11_1.1 @@ -590,7 +578,7 @@ fn AccessMissingConcrete(x: Derived(i32)) -> i32 { // CHECK:STDOUT: .Base = // CHECK:STDOUT: .T = // CHECK:STDOUT: .base = %.loc9 -// CHECK:STDOUT: .d = %.loc10_8 +// CHECK:STDOUT: .d = %.loc10 // CHECK:STDOUT: .nonesuch = // CHECK:STDOUT: extend %Base.loc9_22.1 // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/class/generic/member_out_of_line.carbon b/toolchain/check/testdata/class/generic/member_out_of_line.carbon index 247cfaafd058..65fd9466e1ee 100644 --- a/toolchain/check/testdata/class/generic/member_out_of_line.carbon +++ b/toolchain/check/testdata/class/generic/member_out_of_line.carbon @@ -221,11 +221,8 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: %return.param.loc6: ref @G.%T.loc6 (%T) = out_param call_param1 // CHECK:STDOUT: %return.loc6: ref @G.%T.loc6 (%T) = return_slot %return.param.loc6 // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc7_8: @Class.%Class.elem (%Class.elem) = field_decl n, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc7_3: @Class.%Class.elem (%Class.elem) = var_pattern %.loc7_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref @Class.%Class.elem (%Class.elem) = var +// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc4_13.1 [symbolic = %T.loc4_13.2 (constants.%T)] +// CHECK:STDOUT: %.loc7: @Class.%Class.elem (%Class.elem) = field_decl n, element0 [concrete] // CHECK:STDOUT: %struct_type.n.loc8_1.1: type = struct_type {.n: %T} [symbolic = %struct_type.n.loc8_1.2 (constants.%struct_type.n)] // CHECK:STDOUT: %complete_type.loc8_1.1: = complete_type_witness %struct_type.n.loc8_1.1 [symbolic = %complete_type.loc8_1.2 (constants.%complete_type)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc8_1.1 @@ -235,7 +232,7 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: .T = // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: .G = %G.decl -// CHECK:STDOUT: .n = %.loc7_8 +// CHECK:STDOUT: .n = %.loc7 // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -264,7 +261,7 @@ fn Generic(T:! ()).WrongType() {} // CHECK:STDOUT: fn[%self.param_patt: @G.%Class (%Class)]() -> @G.%T.loc6 (%T) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: @G.%Class (%Class) = name_ref self, %self.loc14 -// CHECK:STDOUT: %n.ref: @G.%Class.elem (%Class.elem) = name_ref n, @Class.%.loc7_8 [concrete = @Class.%.loc7_8] +// CHECK:STDOUT: %n.ref: @G.%Class.elem (%Class.elem) = name_ref n, @Class.%.loc7 [concrete = @Class.%.loc7] // CHECK:STDOUT: %.loc15_14.1: ref @G.%T.loc6 (%T) = class_element_access %self.ref, element0 // CHECK:STDOUT: %.loc15_14.2: @G.%T.loc6 (%T) = bind_value %.loc15_14.1 // CHECK:STDOUT: return %.loc15_14.2 diff --git a/toolchain/check/testdata/class/generic/member_type.carbon b/toolchain/check/testdata/class/generic/member_type.carbon index 81362935f903..532ba6b17e40 100644 --- a/toolchain/check/testdata/class/generic/member_type.carbon +++ b/toolchain/check/testdata/class/generic/member_type.carbon @@ -178,11 +178,8 @@ fn Test() -> i32 { // CHECK:STDOUT: %complete_type.loc7_3.2: = complete_type_witness %struct_type.n.loc7_3.2 [symbolic = %complete_type.loc7_3.2 (constants.%complete_type.84b)] // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %.loc6_10: @Inner.%Inner.elem (%Inner.elem.310) = field_decl n, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc6_5: @Inner.%Inner.elem (%Inner.elem.310) = var_pattern %.loc6_10 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref @Inner.%Inner.elem (%Inner.elem.310) = var +// CHECK:STDOUT: %T.ref: type = name_ref T, @Outer.%T.loc4_13.1 [symbolic = %T (constants.%T)] +// CHECK:STDOUT: %.loc6: @Inner.%Inner.elem (%Inner.elem.310) = field_decl n, element0 [concrete] // CHECK:STDOUT: %struct_type.n.loc7_3.1: type = struct_type {.n: %T} [symbolic = %struct_type.n.loc7_3.2 (constants.%struct_type.n.848)] // CHECK:STDOUT: %complete_type.loc7_3.1: = complete_type_witness %struct_type.n.loc7_3.1 [symbolic = %complete_type.loc7_3.2 (constants.%complete_type.84b)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc7_3.1 @@ -190,7 +187,7 @@ fn Test() -> i32 { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Inner.51b // CHECK:STDOUT: .T = -// CHECK:STDOUT: .n = %.loc6_10 +// CHECK:STDOUT: .n = %.loc6 // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -250,7 +247,7 @@ fn Test() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %c: ref %Inner.721 = bind_name c, %c.var // CHECK:STDOUT: %c.ref: ref %Inner.721 = name_ref c, %c -// CHECK:STDOUT: %n.ref: %Inner.elem.6c2 = name_ref n, @Inner.%.loc6_10 [concrete = @Inner.%.loc6_10] +// CHECK:STDOUT: %n.ref: %Inner.elem.6c2 = name_ref n, @Inner.%.loc6 [concrete = @Inner.%.loc6] // CHECK:STDOUT: %.loc14_11.1: ref %i32 = class_element_access %c.ref, element0 // CHECK:STDOUT: %.loc14_11.2: %i32 = bind_value %.loc14_11.1 // CHECK:STDOUT: return %.loc14_11.2 diff --git a/toolchain/check/testdata/class/generic/stringify.carbon b/toolchain/check/testdata/class/generic/stringify.carbon index 74ba8072bff0..410648aee98a 100644 --- a/toolchain/check/testdata/class/generic/stringify.carbon +++ b/toolchain/check/testdata/class/generic/stringify.carbon @@ -538,24 +538,20 @@ var g: E({.a = 1, .b = 2}) = {} as E({.a = 3, .b = 4} as D); // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @D { -// CHECK:STDOUT: %.loc5_8: %D.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_3: %D.elem = var_pattern %.loc5_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc5: ref %D.elem = var -// CHECK:STDOUT: %.loc6_8: %D.elem = field_decl b, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc6_3: %D.elem = var_pattern %.loc6_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc6: ref %D.elem = var +// CHECK:STDOUT: %int_32.loc5: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc5: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc5: %D.elem = field_decl a, element0 [concrete] +// CHECK:STDOUT: %int_32.loc6: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc6: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc6: %D.elem = field_decl b, element1 [concrete] // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete = constants.%struct_type.a.b.501] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a.b [concrete = constants.%complete_type.705] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%D -// CHECK:STDOUT: .a = %.loc5_8 -// CHECK:STDOUT: .b = %.loc6_8 +// CHECK:STDOUT: .a = %.loc5 +// CHECK:STDOUT: .b = %.loc6 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @E(%F.loc9_9.1: %D) { diff --git a/toolchain/check/testdata/class/generic_method.carbon b/toolchain/check/testdata/class/generic_method.carbon index 543ac36750a7..d5be2c86977a 100644 --- a/toolchain/check/testdata/class/generic_method.carbon +++ b/toolchain/check/testdata/class/generic_method.carbon @@ -83,11 +83,8 @@ fn Class(T:! type).F[self: Self](n: T) {} // CHECK:STDOUT: %complete_type.loc14_1.2: = complete_type_witness %struct_type.a.loc14_1.2 [symbolic = %complete_type.loc14_1.2 (constants.%complete_type)] // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %.loc12_8: @Class.%Class.elem (%Class.elem) = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc12_3: @Class.%Class.elem (%Class.elem) = var_pattern %.loc12_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref @Class.%Class.elem (%Class.elem) = var +// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc11_13.1 [symbolic = %T.loc11_13.2 (constants.%T)] +// CHECK:STDOUT: %.loc12: @Class.%Class.elem (%Class.elem) = field_decl a, element0 [concrete] // CHECK:STDOUT: %F.decl: @Class.%F.type (%F.type) = fn_decl @F [symbolic = @Class.%F (constants.%F)] { // CHECK:STDOUT: %self.patt: @F.%Class (%Class) = binding_pattern self // CHECK:STDOUT: %self.param_patt: @F.%Class (%Class) = value_param_pattern %self.patt, call_param0 @@ -111,7 +108,7 @@ fn Class(T:! type).F[self: Self](n: T) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Class // CHECK:STDOUT: .T = -// CHECK:STDOUT: .a = %.loc12_8 +// CHECK:STDOUT: .a = %.loc12 // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: } // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/class/import.carbon b/toolchain/check/testdata/class/import.carbon index 1d47fec133fa..f184ef05dac8 100644 --- a/toolchain/check/testdata/class/import.carbon +++ b/toolchain/check/testdata/class/import.carbon @@ -104,18 +104,16 @@ fn Run() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Field { -// CHECK:STDOUT: %.loc8_8: %Field.elem = field_decl x, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc8_3: %Field.elem = var_pattern %.loc8_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Field.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc8: %Field.elem = field_decl x, element0 [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %i32} [concrete = constants.%struct_type.x] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete = constants.%complete_type.1ec] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Field -// CHECK:STDOUT: .x = %.loc8_8 +// CHECK:STDOUT: .x = %.loc8 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @ForwardDeclared { @@ -217,11 +215,11 @@ fn Run() { // CHECK:STDOUT: %Main.import_ref.845 = import_ref Main//a, inst24 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.4d2: %Field.elem = import_ref Main//a, loc8_8, loaded [concrete = %.d33] // CHECK:STDOUT: %Main.import_ref.8f24d3.2: = import_ref Main//a, loc16_1, loaded [concrete = constants.%complete_type.357] -// CHECK:STDOUT: %Main.import_ref.39e731.1 = import_ref Main//a, inst63 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.39e731.1 = import_ref Main//a, inst60 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.760: %F.type = import_ref Main//a, loc14_21, loaded [concrete = constants.%F] // CHECK:STDOUT: %Main.import_ref.26e: %G.type = import_ref Main//a, loc15_27, loaded [concrete = constants.%G] // CHECK:STDOUT: %Main.import_ref.8f24d3.3: = import_ref Main//a, loc16_1, loaded [concrete = constants.%complete_type.357] -// CHECK:STDOUT: %Main.import_ref.39e731.2 = import_ref Main//a, inst63 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.39e731.2 = import_ref Main//a, inst60 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.42a = import_ref Main//a, loc14_21, unloaded // CHECK:STDOUT: %Main.import_ref.67a = import_ref Main//a, loc15_27, unloaded // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/class/import_base.carbon b/toolchain/check/testdata/class/import_base.carbon index bd0c0102933f..65199f29ed00 100644 --- a/toolchain/check/testdata/class/import_base.carbon +++ b/toolchain/check/testdata/class/import_base.carbon @@ -91,16 +91,12 @@ fn Run() { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Base [concrete = constants.%Base] // CHECK:STDOUT: %self: %Base = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc8_8: %Base.elem = field_decl x, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc8_3: %Base.elem = var_pattern %.loc8_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc8: ref %Base.elem = var -// CHECK:STDOUT: %.loc9_13: %Base.elem = field_decl unused, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc9_3: %Base.elem = var_pattern %.loc9_13 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc9: ref %Base.elem = var +// CHECK:STDOUT: %int_32.loc8: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc8: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc8: %Base.elem = field_decl x, element0 [concrete] +// CHECK:STDOUT: %int_32.loc9: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc9: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc9: %Base.elem = field_decl unused, element1 [concrete] // CHECK:STDOUT: %struct_type.x.unused: type = struct_type {.x: %i32, .unused: %i32} [concrete = constants.%struct_type.x.unused] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x.unused [concrete = constants.%complete_type.20c] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -109,8 +105,8 @@ fn Run() { // CHECK:STDOUT: .Self = constants.%Base // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: .Unused = %Unused.decl -// CHECK:STDOUT: .x = %.loc8_8 -// CHECK:STDOUT: .unused = %.loc9_13 +// CHECK:STDOUT: .x = %.loc8 +// CHECK:STDOUT: .unused = %.loc9 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Child { @@ -190,7 +186,7 @@ fn Run() { // CHECK:STDOUT: %Main.import_ref.e67: %Base.elem = import_ref Main//a, loc8_8, loaded [concrete = %.720] // CHECK:STDOUT: %Main.import_ref.2e4 = import_ref Main//a, loc9_13, unloaded // CHECK:STDOUT: %Main.import_ref.c5f: = import_ref Main//a, loc14_1, loaded [concrete = constants.%complete_type.15c] -// CHECK:STDOUT: %Main.import_ref.9a9 = import_ref Main//a, inst79 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.9a9 = import_ref Main//a, inst73 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.7e5 = import_ref Main//a, loc13_20, unloaded // CHECK:STDOUT: %Main.import_ref.a21640.2: type = import_ref Main//a, loc13_16, loaded [concrete = constants.%Base] // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/class/import_member_cycle.carbon b/toolchain/check/testdata/class/import_member_cycle.carbon index 81509be8c117..2c3938b3b6fc 100644 --- a/toolchain/check/testdata/class/import_member_cycle.carbon +++ b/toolchain/check/testdata/class/import_member_cycle.carbon @@ -53,11 +53,9 @@ fn Run() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Cycle { -// CHECK:STDOUT: %.loc5_8: %Cycle.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_3: %Cycle.elem = var_pattern %.loc5_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Cycle.elem = var +// CHECK:STDOUT: %Cycle.ref: type = name_ref Cycle, file.%Cycle.decl [concrete = constants.%Cycle] +// CHECK:STDOUT: %ptr: type = ptr_type %Cycle.ref [concrete = constants.%ptr] +// CHECK:STDOUT: %.loc5: %Cycle.elem = field_decl a, element0 [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %ptr} [concrete = constants.%struct_type.a] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -65,7 +63,7 @@ fn Run() { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Cycle // CHECK:STDOUT: .Cycle = -// CHECK:STDOUT: .a = %.loc5_8 +// CHECK:STDOUT: .a = %.loc5 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- b.carbon diff --git a/toolchain/check/testdata/class/import_struct_cyle.carbon b/toolchain/check/testdata/class/import_struct_cyle.carbon index 25c506b735b4..c8382a915c7f 100644 --- a/toolchain/check/testdata/class/import_struct_cyle.carbon +++ b/toolchain/check/testdata/class/import_struct_cyle.carbon @@ -72,11 +72,10 @@ fn Run() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Cycle { -// CHECK:STDOUT: %.loc10_8: %Cycle.elem = field_decl c, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc10_3: %Cycle.elem = var_pattern %.loc10_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Cycle.elem = var +// CHECK:STDOUT: %Cycle.ref: type = name_ref Cycle, file.%Cycle.decl.loc4 [concrete = constants.%Cycle] +// CHECK:STDOUT: %ptr: type = ptr_type %Cycle.ref [concrete = constants.%ptr] +// CHECK:STDOUT: %struct_type.b: type = struct_type {.b: %ptr} [concrete = constants.%struct_type.b] +// CHECK:STDOUT: %.loc10: %Cycle.elem = field_decl c, element0 [concrete] // CHECK:STDOUT: %struct_type.c: type = struct_type {.c: %struct_type.b} [concrete = constants.%struct_type.c] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.c [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -84,7 +83,7 @@ fn Run() { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Cycle // CHECK:STDOUT: .Cycle = -// CHECK:STDOUT: .c = %.loc10_8 +// CHECK:STDOUT: .c = %.loc10 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- b.carbon diff --git a/toolchain/check/testdata/class/inheritance_access.carbon b/toolchain/check/testdata/class/inheritance_access.carbon index 2327db294de8..12aa0cf52193 100644 --- a/toolchain/check/testdata/class/inheritance_access.carbon +++ b/toolchain/check/testdata/class/inheritance_access.carbon @@ -266,24 +266,20 @@ class B { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Shape { -// CHECK:STDOUT: %.loc5_18: %Shape.elem = field_decl x, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_13: %Shape.elem = var_pattern %.loc5_18 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc5: ref %Shape.elem = var -// CHECK:STDOUT: %.loc6_18: %Shape.elem = field_decl y, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc6_13: %Shape.elem = var_pattern %.loc6_18 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc6: ref %Shape.elem = var +// CHECK:STDOUT: %int_32.loc5: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc5: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc5: %Shape.elem = field_decl x, element0 [concrete] +// CHECK:STDOUT: %int_32.loc6: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc6: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc6: %Shape.elem = field_decl y, element1 [concrete] // CHECK:STDOUT: %struct_type.x.y: type = struct_type {.x: %i32, .y: %i32} [concrete = constants.%struct_type.x.y] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x.y [concrete = constants.%complete_type.70a] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Shape -// CHECK:STDOUT: .x [protected] = %.loc5_18 -// CHECK:STDOUT: .y [protected] = %.loc6_18 +// CHECK:STDOUT: .x [protected] = %.loc5 +// CHECK:STDOUT: .y [protected] = %.loc6 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Circle { @@ -324,12 +320,12 @@ class B { // CHECK:STDOUT: fn @GetPosition[%self.param_patt: %Circle]() -> %return.param_patt: %tuple.type.d07 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref.loc13_13: %Circle = name_ref self, %self -// CHECK:STDOUT: %x.ref: %Shape.elem = name_ref x, @Shape.%.loc5_18 [concrete = @Shape.%.loc5_18] +// CHECK:STDOUT: %x.ref: %Shape.elem = name_ref x, @Shape.%.loc5 [concrete = @Shape.%.loc5] // CHECK:STDOUT: %.loc13_17.1: ref %Shape = class_element_access %self.ref.loc13_13, element0 // CHECK:STDOUT: %.loc13_17.2: ref %Shape = converted %self.ref.loc13_13, %.loc13_17.1 // CHECK:STDOUT: %.loc13_17.3: ref %i32 = class_element_access %.loc13_17.2, element0 // CHECK:STDOUT: %self.ref.loc13_21: %Circle = name_ref self, %self -// CHECK:STDOUT: %y.ref: %Shape.elem = name_ref y, @Shape.%.loc6_18 [concrete = @Shape.%.loc6_18] +// CHECK:STDOUT: %y.ref: %Shape.elem = name_ref y, @Shape.%.loc6 [concrete = @Shape.%.loc6] // CHECK:STDOUT: %.loc13_25.1: ref %Shape = class_element_access %self.ref.loc13_21, element0 // CHECK:STDOUT: %.loc13_25.2: ref %Shape = converted %self.ref.loc13_21, %.loc13_25.1 // CHECK:STDOUT: %.loc13_25.3: ref %i32 = class_element_access %.loc13_25.2, element1 @@ -664,18 +660,16 @@ class B { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Shape { -// CHECK:STDOUT: %.loc5_16: %Shape.elem = field_decl y, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_11: %Shape.elem = var_pattern %.loc5_16 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Shape.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc5: %Shape.elem = field_decl y, element0 [concrete] // CHECK:STDOUT: %struct_type.y: type = struct_type {.y: %i32} [concrete = constants.%struct_type.y] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.y [concrete = constants.%complete_type.0f9] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Shape -// CHECK:STDOUT: .y [private] = %.loc5_16 +// CHECK:STDOUT: .y [private] = %.loc5 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Square { @@ -1099,11 +1093,8 @@ class B { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @B { -// CHECK:STDOUT: %.loc14_23: %B.elem = field_decl internal, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc14_11: %B.elem = var_pattern %.loc14_23 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %B.elem = var +// CHECK:STDOUT: %Internal.ref: type = name_ref Internal, file.%Internal.decl [concrete = constants.%Internal] +// CHECK:STDOUT: %.loc14: %B.elem = field_decl internal, element0 [concrete] // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] { // CHECK:STDOUT: %return.patt: %i32 = return_slot_pattern // CHECK:STDOUT: %return.param_patt: %i32 = out_param_pattern %return.patt, call_param0 @@ -1134,7 +1125,7 @@ class B { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%B // CHECK:STDOUT: .Internal = -// CHECK:STDOUT: .internal [private] = %.loc14_23 +// CHECK:STDOUT: .internal [private] = %.loc14 // CHECK:STDOUT: .G = %G.decl // CHECK:STDOUT: .SomeFunc = %SomeFunc.decl // CHECK:STDOUT: .A = @@ -1152,7 +1143,7 @@ class B { // CHECK:STDOUT: fn @SomeFunc[%self.param_patt: %B]() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: %B = name_ref self, %self -// CHECK:STDOUT: %internal.ref: %B.elem = name_ref internal, @B.%.loc14_23 [concrete = @B.%.loc14_23] +// CHECK:STDOUT: %internal.ref: %B.elem = name_ref internal, @B.%.loc14 [concrete = @B.%.loc14] // CHECK:STDOUT: %.loc44_16.1: ref %Internal = class_element_access %self.ref, element0 // CHECK:STDOUT: %.loc44_16.2: %Internal = bind_value %.loc44_16.1 // CHECK:STDOUT: %INTERNAL_CONSTANT.ref: = name_ref INTERNAL_CONSTANT, [concrete = ] @@ -1196,18 +1187,16 @@ class B { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @A { -// CHECK:STDOUT: %.loc5_16: %A.elem = field_decl x, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_11: %A.elem = var_pattern %.loc5_16 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %A.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc5: %A.elem = field_decl x, element0 [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %i32} [concrete = constants.%struct_type.x] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete = constants.%complete_type.1ec] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%A -// CHECK:STDOUT: .x [private] = %.loc5_16 +// CHECK:STDOUT: .x [private] = %.loc5 // CHECK:STDOUT: .A = // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1279,18 +1268,16 @@ class B { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @A { -// CHECK:STDOUT: %.loc5_18: %A.elem = field_decl x, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_13: %A.elem = var_pattern %.loc5_18 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %A.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc5: %A.elem = field_decl x, element0 [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %i32} [concrete = constants.%struct_type.x] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete = constants.%complete_type.1ec] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%A -// CHECK:STDOUT: .x [protected] = %.loc5_18 +// CHECK:STDOUT: .x [protected] = %.loc5 // CHECK:STDOUT: .A = // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1321,7 +1308,7 @@ class B { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: %B = name_ref self, %self // CHECK:STDOUT: %A.ref: type = name_ref A, file.%A.decl [concrete = constants.%A] -// CHECK:STDOUT: %x.ref: %A.elem = name_ref x, @A.%.loc5_18 [concrete = @A.%.loc5_18] +// CHECK:STDOUT: %x.ref: %A.elem = name_ref x, @A.%.loc5 [concrete = @A.%.loc5] // CHECK:STDOUT: %.loc12_9.1: ref %A = class_element_access %self.ref, element0 // CHECK:STDOUT: %.loc12_9.2: ref %A = converted %self.ref, %.loc12_9.1 // CHECK:STDOUT: %.loc12_9.3: ref %i32 = class_element_access %.loc12_9.2, element0 diff --git a/toolchain/check/testdata/class/init.carbon b/toolchain/check/testdata/class/init.carbon index 2e23e70558f6..add574945a78 100644 --- a/toolchain/check/testdata/class/init.carbon +++ b/toolchain/check/testdata/class/init.carbon @@ -107,25 +107,21 @@ fn MakeReorder(n: i32, next: Class*) -> Class { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Class { -// CHECK:STDOUT: %.loc12_8: %Class.elem.c91 = field_decl n, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc12_3: %Class.elem.c91 = var_pattern %.loc12_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc12: ref %Class.elem.c91 = var -// CHECK:STDOUT: %.loc13_11: %Class.elem.0c0 = field_decl next, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc13_3: %Class.elem.0c0 = var_pattern %.loc13_11 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc13: ref %Class.elem.0c0 = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc12: %Class.elem.c91 = field_decl n, element0 [concrete] +// CHECK:STDOUT: %Class.ref: type = name_ref Class, file.%Class.decl [concrete = constants.%Class] +// CHECK:STDOUT: %ptr: type = ptr_type %Class.ref [concrete = constants.%ptr.e71] +// CHECK:STDOUT: %.loc13: %Class.elem.0c0 = field_decl next, element1 [concrete] // CHECK:STDOUT: %struct_type.n.next: type = struct_type {.n: %i32, .next: %ptr.e71} [concrete = constants.%struct_type.n.next] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.n.next [concrete = constants.%complete_type.78f] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Class -// CHECK:STDOUT: .n = %.loc12_8 +// CHECK:STDOUT: .n = %.loc12 // CHECK:STDOUT: .Class = -// CHECK:STDOUT: .next = %.loc13_11 +// CHECK:STDOUT: .next = %.loc13 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Make(%n.param_patt: %i32, %next.param_patt: %ptr.e71) -> %return.param_patt: %Class { diff --git a/toolchain/check/testdata/class/init_as.carbon b/toolchain/check/testdata/class/init_as.carbon index ba6bb70e5c9d..3c8cff57f762 100644 --- a/toolchain/check/testdata/class/init_as.carbon +++ b/toolchain/check/testdata/class/init_as.carbon @@ -78,24 +78,20 @@ fn F() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Class { -// CHECK:STDOUT: %.loc12_8: %Class.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc12_3: %Class.elem = var_pattern %.loc12_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc12: ref %Class.elem = var -// CHECK:STDOUT: %.loc13_8: %Class.elem = field_decl b, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc13_3: %Class.elem = var_pattern %.loc13_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc13: ref %Class.elem = var +// CHECK:STDOUT: %int_32.loc12: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc12: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc12: %Class.elem = field_decl a, element0 [concrete] +// CHECK:STDOUT: %int_32.loc13: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc13: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc13: %Class.elem = field_decl b, element1 [concrete] // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete = constants.%struct_type.a.b.501] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a.b [concrete = constants.%complete_type.705] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Class -// CHECK:STDOUT: .a = %.loc12_8 -// CHECK:STDOUT: .b = %.loc13_8 +// CHECK:STDOUT: .a = %.loc12 +// CHECK:STDOUT: .b = %.loc13 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F() -> %i32 { @@ -124,7 +120,7 @@ fn F() -> i32 { // CHECK:STDOUT: %.loc17_26.9: init %Class = class_init (%.loc17_26.5, %.loc17_26.8), %.loc17_26.3 [concrete = constants.%Class.val] // CHECK:STDOUT: %.loc17_26.10: ref %Class = temporary %.loc17_26.3, %.loc17_26.9 // CHECK:STDOUT: %.loc17_28: ref %Class = converted %.loc17_26.1, %.loc17_26.10 -// CHECK:STDOUT: %a.ref: %Class.elem = name_ref a, @Class.%.loc12_8 [concrete = @Class.%.loc12_8] +// CHECK:STDOUT: %a.ref: %Class.elem = name_ref a, @Class.%.loc12 [concrete = @Class.%.loc12] // CHECK:STDOUT: %.loc17_37.1: ref %i32 = class_element_access %.loc17_28, element0 // CHECK:STDOUT: %.loc17_37.2: %i32 = bind_value %.loc17_37.1 // CHECK:STDOUT: return %.loc17_37.2 diff --git a/toolchain/check/testdata/class/init_nested.carbon b/toolchain/check/testdata/class/init_nested.carbon index 50ed414209d6..3d5413383117 100644 --- a/toolchain/check/testdata/class/init_nested.carbon +++ b/toolchain/check/testdata/class/init_nested.carbon @@ -81,37 +81,27 @@ fn MakeOuter() -> Outer { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Inner { -// CHECK:STDOUT: %.loc12_8: %Inner.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc12_3: %Inner.elem = var_pattern %.loc12_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc12: ref %Inner.elem = var -// CHECK:STDOUT: %.loc13_8: %Inner.elem = field_decl b, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc13_3: %Inner.elem = var_pattern %.loc13_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc13: ref %Inner.elem = var +// CHECK:STDOUT: %int_32.loc12: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc12: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc12: %Inner.elem = field_decl a, element0 [concrete] +// CHECK:STDOUT: %int_32.loc13: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc13: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc13: %Inner.elem = field_decl b, element1 [concrete] // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete = constants.%struct_type.a.b] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a.b [concrete = constants.%complete_type.705] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Inner -// CHECK:STDOUT: .a = %.loc12_8 -// CHECK:STDOUT: .b = %.loc13_8 +// CHECK:STDOUT: .a = %.loc12 +// CHECK:STDOUT: .b = %.loc13 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Outer { -// CHECK:STDOUT: %.loc19_8: %Outer.elem = field_decl c, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc19_3: %Outer.elem = var_pattern %.loc19_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc19: ref %Outer.elem = var -// CHECK:STDOUT: %.loc20_8: %Outer.elem = field_decl d, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc20_3: %Outer.elem = var_pattern %.loc20_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc20: ref %Outer.elem = var +// CHECK:STDOUT: %Inner.ref.loc19: type = name_ref Inner, file.%Inner.decl [concrete = constants.%Inner] +// CHECK:STDOUT: %.loc19: %Outer.elem = field_decl c, element0 [concrete] +// CHECK:STDOUT: %Inner.ref.loc20: type = name_ref Inner, file.%Inner.decl [concrete = constants.%Inner] +// CHECK:STDOUT: %.loc20: %Outer.elem = field_decl d, element1 [concrete] // CHECK:STDOUT: %struct_type.c.d: type = struct_type {.c: %Inner, .d: %Inner} [concrete = constants.%struct_type.c.d.dce] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.c.d [concrete = constants.%complete_type.8b6] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -119,8 +109,8 @@ fn MakeOuter() -> Outer { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Outer // CHECK:STDOUT: .Inner = -// CHECK:STDOUT: .c = %.loc19_8 -// CHECK:STDOUT: .d = %.loc20_8 +// CHECK:STDOUT: .c = %.loc19 +// CHECK:STDOUT: .d = %.loc20 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @MakeInner() -> %Inner; diff --git a/toolchain/check/testdata/class/local.carbon b/toolchain/check/testdata/class/local.carbon index b450ef89e18a..bc80e929b9d4 100644 --- a/toolchain/check/testdata/class/local.carbon +++ b/toolchain/check/testdata/class/local.carbon @@ -102,11 +102,9 @@ class A { // CHECK:STDOUT: %return.param: ref %B = out_param call_param0 // CHECK:STDOUT: %return: ref %B = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc19_12: %B.elem = field_decl n, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc19_7: %B.elem = var_pattern %.loc19_12 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %B.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc19: %B.elem = field_decl n, element0 [concrete] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete = constants.%struct_type.n.033] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.n [concrete = constants.%complete_type.54b] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -114,7 +112,7 @@ class A { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%B // CHECK:STDOUT: .Make = %Make.decl -// CHECK:STDOUT: .n = %.loc19_12 +// CHECK:STDOUT: .n = %.loc19 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F() -> %i32 { @@ -125,7 +123,7 @@ class A { // CHECK:STDOUT: %.loc22_19.1: ref %B = temporary_storage // CHECK:STDOUT: %Make.call: init %B = call %Make.ref() to %.loc22_19.1 // CHECK:STDOUT: %.loc22_19.2: ref %B = temporary %.loc22_19.1, %Make.call -// CHECK:STDOUT: %n.ref: %B.elem = name_ref n, @B.%.loc19_12 [concrete = @B.%.loc19_12] +// CHECK:STDOUT: %n.ref: %B.elem = name_ref n, @B.%.loc19 [concrete = @B.%.loc19] // CHECK:STDOUT: %.loc22_20.1: ref %i32 = class_element_access %.loc22_19.2, element0 // CHECK:STDOUT: %.loc22_20.2: %i32 = bind_value %.loc22_20.1 // CHECK:STDOUT: return %.loc22_20.2 diff --git a/toolchain/check/testdata/class/method.carbon b/toolchain/check/testdata/class/method.carbon index 54b142a8a5dc..539018e7b1d8 100644 --- a/toolchain/check/testdata/class/method.carbon +++ b/toolchain/check/testdata/class/method.carbon @@ -289,11 +289,9 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: %F.ref: %F.type = name_ref F, %F.decl [concrete = constants.%F] // CHECK:STDOUT: %A: %F.type = bind_alias A, %F.decl [concrete = constants.%F] -// CHECK:STDOUT: %.loc17_8: %Class.elem = field_decl k, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc17_3: %Class.elem = var_pattern %.loc17_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Class.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc17: %Class.elem = field_decl k, element0 [concrete] // CHECK:STDOUT: %struct_type.k: type = struct_type {.k: %i32} [concrete = constants.%struct_type.k.0bf] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.k [concrete = constants.%complete_type.954] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -303,13 +301,13 @@ fn CallGOnInitializingExpr() -> i32 { // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: .G = %G.decl // CHECK:STDOUT: .A = %A -// CHECK:STDOUT: .k = %.loc17_8 +// CHECK:STDOUT: .k = %.loc17 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F[%self.param_patt: %Class]() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: %Class = name_ref self, %self.loc20 -// CHECK:STDOUT: %k.ref: %Class.elem = name_ref k, @Class.%.loc17_8 [concrete = @Class.%.loc17_8] +// CHECK:STDOUT: %k.ref: %Class.elem = name_ref k, @Class.%.loc17 [concrete = @Class.%.loc17] // CHECK:STDOUT: %.loc21_14.1: ref %i32 = class_element_access %self.ref, element0 // CHECK:STDOUT: %.loc21_14.2: %i32 = bind_value %.loc21_14.1 // CHECK:STDOUT: return %.loc21_14.2 diff --git a/toolchain/check/testdata/class/nested.carbon b/toolchain/check/testdata/class/nested.carbon index 01afcf2e73d4..7602fd1f2e42 100644 --- a/toolchain/check/testdata/class/nested.carbon +++ b/toolchain/check/testdata/class/nested.carbon @@ -106,21 +106,15 @@ fn F(a: Outer*) { // CHECK:STDOUT: %F.decl: %F.type.288 = fn_decl @F.1 [concrete = constants.%F.bd8] {} {} // CHECK:STDOUT: %Inner.decl: type = class_decl @Inner [concrete = constants.%Inner] {} {} // CHECK:STDOUT: %H.decl: %H.type = fn_decl @H [concrete = constants.%H] {} {} -// CHECK:STDOUT: %.loc36_9: %Outer.elem.a16 = field_decl po, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc36_3: %Outer.elem.a16 = var_pattern %.loc36_9 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc36: ref %Outer.elem.a16 = var -// CHECK:STDOUT: %.loc37_9: %Outer.elem.a16 = field_decl qo, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc37_3: %Outer.elem.a16 = var_pattern %.loc37_9 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc37: ref %Outer.elem.a16 = var -// CHECK:STDOUT: %.loc38_9: %Outer.elem.fe9 = field_decl pi, element2 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc38_3: %Outer.elem.fe9 = var_pattern %.loc38_9 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc38: ref %Outer.elem.fe9 = var +// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Outer [concrete = constants.%Outer] +// CHECK:STDOUT: %ptr.loc36: type = ptr_type %Self.ref [concrete = constants.%ptr.5df] +// CHECK:STDOUT: %.loc36: %Outer.elem.a16 = field_decl po, element0 [concrete] +// CHECK:STDOUT: %Outer.ref: type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer] +// CHECK:STDOUT: %ptr.loc37: type = ptr_type %Outer.ref [concrete = constants.%ptr.5df] +// CHECK:STDOUT: %.loc37: %Outer.elem.a16 = field_decl qo, element1 [concrete] +// CHECK:STDOUT: %Inner.ref: type = name_ref Inner, %Inner.decl [concrete = constants.%Inner] +// CHECK:STDOUT: %ptr.loc38: type = ptr_type %Inner.ref [concrete = constants.%ptr.36a] +// CHECK:STDOUT: %.loc38: %Outer.elem.fe9 = field_decl pi, element2 [concrete] // CHECK:STDOUT: %struct_type.po.qo.pi: type = struct_type {.po: %ptr.5df, .qo: %ptr.5df, .pi: %ptr.36a} [concrete = constants.%struct_type.po.qo.pi] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.po.qo.pi [concrete = constants.%complete_type.e99] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -131,27 +125,21 @@ fn F(a: Outer*) { // CHECK:STDOUT: .Inner = %Inner.decl // CHECK:STDOUT: .Outer = // CHECK:STDOUT: .H = %H.decl -// CHECK:STDOUT: .po = %.loc36_9 -// CHECK:STDOUT: .qo = %.loc37_9 -// CHECK:STDOUT: .pi = %.loc38_9 +// CHECK:STDOUT: .po = %.loc36 +// CHECK:STDOUT: .qo = %.loc37 +// CHECK:STDOUT: .pi = %.loc38 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Inner { -// CHECK:STDOUT: %.loc19_11: %Inner.elem.640 = field_decl pi, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc19_5: %Inner.elem.640 = var_pattern %.loc19_11 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc19: ref %Inner.elem.640 = var -// CHECK:STDOUT: %.loc20_11: %Inner.elem.c30 = field_decl po, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc20_5: %Inner.elem.c30 = var_pattern %.loc20_11 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc20: ref %Inner.elem.c30 = var -// CHECK:STDOUT: %.loc21_11: %Inner.elem.640 = field_decl qi, element2 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc21_5: %Inner.elem.640 = var_pattern %.loc21_11 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc21: ref %Inner.elem.640 = var +// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Inner [concrete = constants.%Inner] +// CHECK:STDOUT: %ptr.loc19: type = ptr_type %Self.ref [concrete = constants.%ptr.36a] +// CHECK:STDOUT: %.loc19: %Inner.elem.640 = field_decl pi, element0 [concrete] +// CHECK:STDOUT: %Outer.ref: type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer] +// CHECK:STDOUT: %ptr.loc20: type = ptr_type %Outer.ref [concrete = constants.%ptr.5df] +// CHECK:STDOUT: %.loc20: %Inner.elem.c30 = field_decl po, element1 [concrete] +// CHECK:STDOUT: %Inner.ref: type = name_ref Inner, @Outer.%Inner.decl [concrete = constants.%Inner] +// CHECK:STDOUT: %ptr.loc21: type = ptr_type %Inner.ref [concrete = constants.%ptr.36a] +// CHECK:STDOUT: %.loc21: %Inner.elem.640 = field_decl qi, element2 [concrete] // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {} {} // CHECK:STDOUT: %struct_type.pi.po.qi: type = struct_type {.pi: %ptr.36a, .po: %ptr.5df, .qi: %ptr.36a} [concrete = constants.%struct_type.pi.po.qi] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.pi.po.qi [concrete = constants.%complete_type.7ae] @@ -159,11 +147,11 @@ fn F(a: Outer*) { // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Inner -// CHECK:STDOUT: .pi = %.loc19_11 +// CHECK:STDOUT: .pi = %.loc19 // CHECK:STDOUT: .Outer = -// CHECK:STDOUT: .po = %.loc20_11 +// CHECK:STDOUT: .po = %.loc20 // CHECK:STDOUT: .Inner = -// CHECK:STDOUT: .qi = %.loc21_11 +// CHECK:STDOUT: .qi = %.loc21 // CHECK:STDOUT: .G = %G.decl // CHECK:STDOUT: } // CHECK:STDOUT: @@ -231,7 +219,7 @@ fn F(a: Outer*) { // CHECK:STDOUT: } // CHECK:STDOUT: %a.ref.loc42: %ptr.5df = name_ref a, %a // CHECK:STDOUT: %.loc42_26: ref %Outer = deref %a.ref.loc42 -// CHECK:STDOUT: %pi.ref.loc42: %Outer.elem.fe9 = name_ref pi, @Outer.%.loc38_9 [concrete = @Outer.%.loc38_9] +// CHECK:STDOUT: %pi.ref.loc42: %Outer.elem.fe9 = name_ref pi, @Outer.%.loc38 [concrete = @Outer.%.loc38] // CHECK:STDOUT: %.loc42_29: ref %ptr.36a = class_element_access %.loc42_26, element2 // CHECK:STDOUT: %.loc42_21: type = splice_block %ptr.loc42 [concrete = constants.%ptr.36a] { // CHECK:STDOUT: %Outer.ref.loc42: type = name_ref Outer, file.%Outer.decl [concrete = constants.%Outer] @@ -241,52 +229,52 @@ fn F(a: Outer*) { // CHECK:STDOUT: %b: ref %ptr.36a = bind_name b, %.loc42_29 // CHECK:STDOUT: %a.ref.loc44_3: %ptr.5df = name_ref a, %a // CHECK:STDOUT: %.loc44_4.1: ref %Outer = deref %a.ref.loc44_3 -// CHECK:STDOUT: %po.ref.loc44: %Outer.elem.a16 = name_ref po, @Outer.%.loc36_9 [concrete = @Outer.%.loc36_9] +// CHECK:STDOUT: %po.ref.loc44: %Outer.elem.a16 = name_ref po, @Outer.%.loc36 [concrete = @Outer.%.loc36] // CHECK:STDOUT: %.loc44_4.2: ref %ptr.5df = class_element_access %.loc44_4.1, element0 // CHECK:STDOUT: %a.ref.loc44_11: %ptr.5df = name_ref a, %a // CHECK:STDOUT: assign %.loc44_4.2, %a.ref.loc44_11 // CHECK:STDOUT: %a.ref.loc45_3: %ptr.5df = name_ref a, %a // CHECK:STDOUT: %.loc45_4.1: ref %Outer = deref %a.ref.loc45_3 -// CHECK:STDOUT: %qo.ref: %Outer.elem.a16 = name_ref qo, @Outer.%.loc37_9 [concrete = @Outer.%.loc37_9] +// CHECK:STDOUT: %qo.ref: %Outer.elem.a16 = name_ref qo, @Outer.%.loc37 [concrete = @Outer.%.loc37] // CHECK:STDOUT: %.loc45_4.2: ref %ptr.5df = class_element_access %.loc45_4.1, element1 // CHECK:STDOUT: %a.ref.loc45_11: %ptr.5df = name_ref a, %a // CHECK:STDOUT: assign %.loc45_4.2, %a.ref.loc45_11 // CHECK:STDOUT: %a.ref.loc46_3: %ptr.5df = name_ref a, %a // CHECK:STDOUT: %.loc46_4.1: ref %Outer = deref %a.ref.loc46_3 -// CHECK:STDOUT: %pi.ref.loc46_4: %Outer.elem.fe9 = name_ref pi, @Outer.%.loc38_9 [concrete = @Outer.%.loc38_9] +// CHECK:STDOUT: %pi.ref.loc46_4: %Outer.elem.fe9 = name_ref pi, @Outer.%.loc38 [concrete = @Outer.%.loc38] // CHECK:STDOUT: %.loc46_4.2: ref %ptr.36a = class_element_access %.loc46_4.1, element2 // CHECK:STDOUT: %a.ref.loc46_11: %ptr.5df = name_ref a, %a // CHECK:STDOUT: %.loc46_12.1: ref %Outer = deref %a.ref.loc46_11 -// CHECK:STDOUT: %pi.ref.loc46_12: %Outer.elem.fe9 = name_ref pi, @Outer.%.loc38_9 [concrete = @Outer.%.loc38_9] +// CHECK:STDOUT: %pi.ref.loc46_12: %Outer.elem.fe9 = name_ref pi, @Outer.%.loc38 [concrete = @Outer.%.loc38] // CHECK:STDOUT: %.loc46_12.2: ref %ptr.36a = class_element_access %.loc46_12.1, element2 // CHECK:STDOUT: %.loc46_12.3: %ptr.36a = bind_value %.loc46_12.2 // CHECK:STDOUT: assign %.loc46_4.2, %.loc46_12.3 // CHECK:STDOUT: %b.ref.loc47: ref %ptr.36a = name_ref b, %b // CHECK:STDOUT: %.loc47_3: %ptr.36a = bind_value %b.ref.loc47 // CHECK:STDOUT: %.loc47_4.1: ref %Inner = deref %.loc47_3 -// CHECK:STDOUT: %po.ref.loc47: %Inner.elem.c30 = name_ref po, @Inner.%.loc20_11 [concrete = @Inner.%.loc20_11] +// CHECK:STDOUT: %po.ref.loc47: %Inner.elem.c30 = name_ref po, @Inner.%.loc20 [concrete = @Inner.%.loc20] // CHECK:STDOUT: %.loc47_4.2: ref %ptr.5df = class_element_access %.loc47_4.1, element1 // CHECK:STDOUT: %a.ref.loc47: %ptr.5df = name_ref a, %a // CHECK:STDOUT: assign %.loc47_4.2, %a.ref.loc47 // CHECK:STDOUT: %b.ref.loc48: ref %ptr.36a = name_ref b, %b // CHECK:STDOUT: %.loc48_3: %ptr.36a = bind_value %b.ref.loc48 // CHECK:STDOUT: %.loc48_4.1: ref %Inner = deref %.loc48_3 -// CHECK:STDOUT: %pi.ref.loc48_4: %Inner.elem.640 = name_ref pi, @Inner.%.loc19_11 [concrete = @Inner.%.loc19_11] +// CHECK:STDOUT: %pi.ref.loc48_4: %Inner.elem.640 = name_ref pi, @Inner.%.loc19 [concrete = @Inner.%.loc19] // CHECK:STDOUT: %.loc48_4.2: ref %ptr.36a = class_element_access %.loc48_4.1, element0 // CHECK:STDOUT: %a.ref.loc48: %ptr.5df = name_ref a, %a // CHECK:STDOUT: %.loc48_12.1: ref %Outer = deref %a.ref.loc48 -// CHECK:STDOUT: %pi.ref.loc48_12: %Outer.elem.fe9 = name_ref pi, @Outer.%.loc38_9 [concrete = @Outer.%.loc38_9] +// CHECK:STDOUT: %pi.ref.loc48_12: %Outer.elem.fe9 = name_ref pi, @Outer.%.loc38 [concrete = @Outer.%.loc38] // CHECK:STDOUT: %.loc48_12.2: ref %ptr.36a = class_element_access %.loc48_12.1, element2 // CHECK:STDOUT: %.loc48_12.3: %ptr.36a = bind_value %.loc48_12.2 // CHECK:STDOUT: assign %.loc48_4.2, %.loc48_12.3 // CHECK:STDOUT: %b.ref.loc49: ref %ptr.36a = name_ref b, %b // CHECK:STDOUT: %.loc49_3: %ptr.36a = bind_value %b.ref.loc49 // CHECK:STDOUT: %.loc49_4.1: ref %Inner = deref %.loc49_3 -// CHECK:STDOUT: %qi.ref: %Inner.elem.640 = name_ref qi, @Inner.%.loc21_11 [concrete = @Inner.%.loc21_11] +// CHECK:STDOUT: %qi.ref: %Inner.elem.640 = name_ref qi, @Inner.%.loc21 [concrete = @Inner.%.loc21] // CHECK:STDOUT: %.loc49_4.2: ref %ptr.36a = class_element_access %.loc49_4.1, element2 // CHECK:STDOUT: %a.ref.loc49: %ptr.5df = name_ref a, %a // CHECK:STDOUT: %.loc49_12.1: ref %Outer = deref %a.ref.loc49 -// CHECK:STDOUT: %pi.ref.loc49: %Outer.elem.fe9 = name_ref pi, @Outer.%.loc38_9 [concrete = @Outer.%.loc38_9] +// CHECK:STDOUT: %pi.ref.loc49: %Outer.elem.fe9 = name_ref pi, @Outer.%.loc38 [concrete = @Outer.%.loc38] // CHECK:STDOUT: %.loc49_12.2: ref %ptr.36a = class_element_access %.loc49_12.1, element2 // CHECK:STDOUT: %.loc49_12.3: %ptr.36a = bind_value %.loc49_12.2 // CHECK:STDOUT: assign %.loc49_4.2, %.loc49_12.3 diff --git a/toolchain/check/testdata/class/nested_name.carbon b/toolchain/check/testdata/class/nested_name.carbon index 259cf980b14d..69513b3c4a92 100644 --- a/toolchain/check/testdata/class/nested_name.carbon +++ b/toolchain/check/testdata/class/nested_name.carbon @@ -96,24 +96,22 @@ fn G(o: Outer) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Inner { -// CHECK:STDOUT: %.loc13_10: %Inner.elem = field_decl n, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc13_5: %Inner.elem = var_pattern %.loc13_10 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Inner.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc13: %Inner.elem = field_decl n, element0 [concrete] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete = constants.%struct_type.n] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.n [concrete = constants.%complete_type.54b] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Inner -// CHECK:STDOUT: .n = %.loc13_10 +// CHECK:STDOUT: .n = %.loc13 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F(%oi.param_patt: %Inner) -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %oi.ref: %Inner = name_ref oi, %oi -// CHECK:STDOUT: %n.ref: %Inner.elem = name_ref n, @Inner.%.loc13_10 [concrete = @Inner.%.loc13_10] +// CHECK:STDOUT: %n.ref: %Inner.elem = name_ref n, @Inner.%.loc13 [concrete = @Inner.%.loc13] // CHECK:STDOUT: %.loc18_12.1: ref %i32 = class_element_access %oi.ref, element0 // CHECK:STDOUT: %.loc18_12.2: %i32 = bind_value %.loc18_12.1 // CHECK:STDOUT: return %.loc18_12.2 diff --git a/toolchain/check/testdata/class/no_prelude/comp_time_field.carbon b/toolchain/check/testdata/class/no_prelude/comp_time_field.carbon index f9598964f4b8..78a5946ae43b 100644 --- a/toolchain/check/testdata/class/no_prelude/comp_time_field.carbon +++ b/toolchain/check/testdata/class/no_prelude/comp_time_field.carbon @@ -31,19 +31,19 @@ class Class { library "[[@TEST_NAME]]"; class Class { - // CHECK:STDERR: fail_var.carbon:[[@LINE+8]]:7: error: semantics TODO: `handle invalid parse trees in `check`` [SemanticsTodo] + // CHECK:STDERR: fail_var.carbon:[[@LINE+8]]:8: error: expected `:` in field declaration [ExpectedFieldColon] // CHECK:STDERR: var C:! type = Class; - // CHECK:STDERR: ^~~~~~~~ + // CHECK:STDERR: ^~ // CHECK:STDERR: - // CHECK:STDERR: fail_var.carbon:[[@LINE+4]]:16: error: `var` pattern cannot declare a compile-time binding [CompileTimeBindingInVarDecl] + // CHECK:STDERR: fail_var.carbon:[[@LINE+4]]:3: error: semantics TODO: `handle invalid parse trees in `check`` [SemanticsTodo] // CHECK:STDERR: var C:! type = Class; - // CHECK:STDERR: ^ + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: var C:! type = Class; - // CHECK:STDERR: fail_var.carbon:[[@LINE+4]]:25: error: `var` pattern cannot declare a compile-time binding [CompileTimeBindingInVarDecl] + // CHECK:STDERR: fail_var.carbon:[[@LINE+4]]:7: error: expected identifier in field declaration [ExpectedFieldIdentifier] // CHECK:STDERR: var template D:! type = Class; - // CHECK:STDERR: ^ + // CHECK:STDERR: ^~~~~~~~ // CHECK:STDERR: var template D:! type = Class; } diff --git a/toolchain/check/testdata/class/no_prelude/fail_abstract.carbon b/toolchain/check/testdata/class/no_prelude/fail_abstract.carbon index c9c5006cc171..7d3278254557 100644 --- a/toolchain/check/testdata/class/no_prelude/fail_abstract.carbon +++ b/toolchain/check/testdata/class/no_prelude/fail_abstract.carbon @@ -217,11 +217,8 @@ fn CallReturnAbstract() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Contains { -// CHECK:STDOUT: %.loc15_8: = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc15_3: = var_pattern %.loc15_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref = var +// CHECK:STDOUT: %Abstract.ref: type = name_ref Abstract, file.%Abstract.decl [concrete = constants.%Abstract] +// CHECK:STDOUT: %.loc15: = field_decl a, element0 [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: } [concrete = ] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a [concrete = ] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -229,7 +226,7 @@ fn CallReturnAbstract() { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Contains // CHECK:STDOUT: .Abstract = -// CHECK:STDOUT: .a = %.loc15_8 +// CHECK:STDOUT: .a = %.loc15 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_abstract_var.carbon @@ -459,11 +456,9 @@ fn CallReturnAbstract() { // CHECK:STDOUT: class @Derived { // CHECK:STDOUT: %Abstract.ref: type = name_ref Abstract, file.%Abstract.decl [concrete = constants.%Abstract] // CHECK:STDOUT: %.loc8: %Derived.elem.513 = base_decl %Abstract.ref, element0 [concrete] +// CHECK:STDOUT: %.loc10_11.1: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc10_11.2: type = converted %.loc10_11.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: %.loc10_8: %Derived.elem.ad9 = field_decl d, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc10_3: %Derived.elem.ad9 = var_pattern %.loc10_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Derived.elem.ad9 = var // CHECK:STDOUT: %struct_type.base.d: type = struct_type {.base: %Abstract, .d: %empty_struct_type} [concrete = constants.%struct_type.base.d.c06] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.base.d [concrete = constants.%complete_type.b4a] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -534,11 +529,9 @@ fn CallReturnAbstract() { // CHECK:STDOUT: class @Derived { // CHECK:STDOUT: %Abstract.ref: type = name_ref Abstract, file.%Abstract.decl [concrete = constants.%Abstract] // CHECK:STDOUT: %.loc8: %Derived.elem.513 = base_decl %Abstract.ref, element0 [concrete] +// CHECK:STDOUT: %.loc10_11.1: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc10_11.2: type = converted %.loc10_11.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: %.loc10_8: %Derived.elem.ad9 = field_decl d, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc10_3: %Derived.elem.ad9 = var_pattern %.loc10_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Derived.elem.ad9 = var // CHECK:STDOUT: %struct_type.base.d: type = struct_type {.base: %Abstract, .d: %empty_struct_type} [concrete = constants.%struct_type.base.d] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.base.d [concrete = constants.%complete_type.b4a] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -599,11 +592,9 @@ fn CallReturnAbstract() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Abstract { +// CHECK:STDOUT: %.loc5_11.1: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc5_11.2: type = converted %.loc5_11.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: %.loc5_8: %Abstract.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_3: %Abstract.elem = var_pattern %.loc5_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Abstract.elem = var // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %empty_struct_type} [concrete = constants.%struct_type.a.225] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a [concrete = constants.%complete_type.8c6] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -616,11 +607,9 @@ fn CallReturnAbstract() { // CHECK:STDOUT: class @Derived { // CHECK:STDOUT: %Abstract.ref: type = name_ref Abstract, file.%Abstract.decl [concrete = constants.%Abstract] // CHECK:STDOUT: %.loc9: %Derived.elem.513 = base_decl %Abstract.ref, element0 [concrete] +// CHECK:STDOUT: %.loc11_11.1: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc11_11.2: type = converted %.loc11_11.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: %.loc11_8: %Derived.elem.ad9 = field_decl d, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc11_3: %Derived.elem.ad9 = var_pattern %.loc11_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Derived.elem.ad9 = var // CHECK:STDOUT: %struct_type.base.d: type = struct_type {.base: %Abstract, .d: %empty_struct_type} [concrete = constants.%struct_type.base.d.c06] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.base.d [concrete = constants.%complete_type.b4a] // CHECK:STDOUT: complete_type_witness = %complete_type diff --git a/toolchain/check/testdata/class/no_prelude/fail_abstract_in_struct.carbon b/toolchain/check/testdata/class/no_prelude/fail_abstract_in_struct.carbon index f58e808d21cb..95221879c63a 100644 --- a/toolchain/check/testdata/class/no_prelude/fail_abstract_in_struct.carbon +++ b/toolchain/check/testdata/class/no_prelude/fail_abstract_in_struct.carbon @@ -128,6 +128,7 @@ fn Var5() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %Contains: type = class_type @Contains [concrete] +// CHECK:STDOUT: %struct_type.m1.198: type = struct_type {.m1: %Abstract1} [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -149,11 +150,9 @@ fn Var5() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Contains { -// CHECK:STDOUT: %.loc13_8: = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc13_3: = var_pattern %.loc13_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref = var +// CHECK:STDOUT: %Abstract1.ref: type = name_ref Abstract1, file.%Abstract1.decl [concrete = constants.%Abstract1] +// CHECK:STDOUT: %struct_type.m1: type = struct_type {.m1: %Abstract1} [concrete = constants.%struct_type.m1.198] +// CHECK:STDOUT: %.loc13: = field_decl a, element0 [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: } [concrete = ] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a [concrete = ] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -161,7 +160,7 @@ fn Var5() { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Contains // CHECK:STDOUT: .Abstract1 = -// CHECK:STDOUT: .a = %.loc13_8 +// CHECK:STDOUT: .a = %.loc13 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_abstract_var.carbon diff --git a/toolchain/check/testdata/class/no_prelude/fail_abstract_in_tuple.carbon b/toolchain/check/testdata/class/no_prelude/fail_abstract_in_tuple.carbon index 591c5ed78268..15d03d25e95a 100644 --- a/toolchain/check/testdata/class/no_prelude/fail_abstract_in_tuple.carbon +++ b/toolchain/check/testdata/class/no_prelude/fail_abstract_in_tuple.carbon @@ -128,6 +128,8 @@ fn Var5() { // CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] // CHECK:STDOUT: %complete_type: = complete_type_witness %empty_struct_type [concrete] // CHECK:STDOUT: %Contains: type = class_type @Contains [concrete] +// CHECK:STDOUT: %tuple.type.85c: type = tuple_type (type) [concrete] +// CHECK:STDOUT: %tuple.type.f19: type = tuple_type (%Abstract1) [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: file { @@ -149,11 +151,10 @@ fn Var5() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Contains { +// CHECK:STDOUT: %Abstract1.ref: type = name_ref Abstract1, file.%Abstract1.decl [concrete = constants.%Abstract1] +// CHECK:STDOUT: %.loc13_21.1: %tuple.type.85c = tuple_literal (%Abstract1.ref) +// CHECK:STDOUT: %.loc13_21.2: type = converted %.loc13_21.1, constants.%tuple.type.f19 [concrete = constants.%tuple.type.f19] // CHECK:STDOUT: %.loc13_8: = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc13_3: = var_pattern %.loc13_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref = var // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: } [concrete = ] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a [concrete = ] // CHECK:STDOUT: complete_type_witness = %complete_type diff --git a/toolchain/check/testdata/class/no_prelude/syntactic_merge.carbon b/toolchain/check/testdata/class/no_prelude/syntactic_merge.carbon index 416ea8b0680d..aff74b64b9bb 100644 --- a/toolchain/check/testdata/class/no_prelude/syntactic_merge.carbon +++ b/toolchain/check/testdata/class/no_prelude/syntactic_merge.carbon @@ -1130,11 +1130,9 @@ fn Base.F[addr self: Base*]() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Base { +// CHECK:STDOUT: %.loc5_11.1: %empty_tuple.type = tuple_literal () +// CHECK:STDOUT: %.loc5_11.2: type = converted %.loc5_11.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: %.loc5_8: %Base.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_3: %Base.elem = var_pattern %.loc5_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Base.elem = var // CHECK:STDOUT: %F.decl: %F.type.7c6384.1 = fn_decl @F.1 [concrete = constants.%F.d17bbc.1] { // CHECK:STDOUT: %self.patt: %ptr.11f = binding_pattern self // CHECK:STDOUT: %self.param_patt: %ptr.11f = value_param_pattern %self.patt, call_param0 diff --git a/toolchain/check/testdata/class/raw_self.carbon b/toolchain/check/testdata/class/raw_self.carbon index 7c1e444864f4..8ef7142d0d98 100644 --- a/toolchain/check/testdata/class/raw_self.carbon +++ b/toolchain/check/testdata/class/raw_self.carbon @@ -150,11 +150,9 @@ fn Class.G[self: Self](r#self: i32) -> (i32, i32) { // CHECK:STDOUT: %return.param.loc13: ref %tuple.type.d07 = out_param call_param2 // CHECK:STDOUT: %return.loc13: ref %tuple.type.d07 = return_slot %return.param.loc13 // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc14_8: %Class.elem = field_decl n, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc14_3: %Class.elem = var_pattern %.loc14_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Class.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc14: %Class.elem = field_decl n, element0 [concrete] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete = constants.%struct_type.n] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.n [concrete = constants.%complete_type.54b] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -163,14 +161,14 @@ fn Class.G[self: Self](r#self: i32) -> (i32, i32) { // CHECK:STDOUT: .Self = constants.%Class // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: .G = %G.decl -// CHECK:STDOUT: .n = %.loc14_8 +// CHECK:STDOUT: .n = %.loc14 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F[addr %self.param_patt.loc17_21: %ptr.e71](%self.param_patt.loc17_36: %i32) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref.loc18_5: %ptr.e71 = name_ref self, %self.loc17_17 // CHECK:STDOUT: %.loc18_4: ref %Class = deref %self.ref.loc18_5 -// CHECK:STDOUT: %n.ref: %Class.elem = name_ref n, @Class.%.loc14_8 [concrete = @Class.%.loc14_8] +// CHECK:STDOUT: %n.ref: %Class.elem = name_ref n, @Class.%.loc14 [concrete = @Class.%.loc14] // CHECK:STDOUT: %.loc18_10: ref %i32 = class_element_access %.loc18_4, element0 // CHECK:STDOUT: %self.ref.loc18_15: %i32 = name_ref r#self, %self.loc17_30 // CHECK:STDOUT: assign %.loc18_10, %self.ref.loc18_15 @@ -180,7 +178,7 @@ fn Class.G[self: Self](r#self: i32) -> (i32, i32) { // CHECK:STDOUT: fn @G[%self.param_patt.loc21_16: %Class](%self.param_patt.loc21_30: %i32) -> %return.param_patt: %tuple.type.d07 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref.loc22_11: %Class = name_ref self, %self.loc21_12 -// CHECK:STDOUT: %n.ref: %Class.elem = name_ref n, @Class.%.loc14_8 [concrete = @Class.%.loc14_8] +// CHECK:STDOUT: %n.ref: %Class.elem = name_ref n, @Class.%.loc14 [concrete = @Class.%.loc14] // CHECK:STDOUT: %.loc22_15.1: ref %i32 = class_element_access %self.ref.loc22_11, element0 // CHECK:STDOUT: %.loc22_15.2: %i32 = bind_value %.loc22_15.1 // CHECK:STDOUT: %self.ref.loc22_19: %i32 = name_ref r#self, %self.loc21_24 diff --git a/toolchain/check/testdata/class/reorder_qualified.carbon b/toolchain/check/testdata/class/reorder_qualified.carbon index 0cbdbd038fd7..4acd6e90a086 100644 --- a/toolchain/check/testdata/class/reorder_qualified.carbon +++ b/toolchain/check/testdata/class/reorder_qualified.carbon @@ -135,11 +135,9 @@ class A { // CHECK:STDOUT: %B.decl: type = class_decl @B [concrete = constants.%B] {} {} // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %AF.decl: %AF.type = fn_decl @AF [concrete = constants.%AF] {} {} -// CHECK:STDOUT: %.loc46_8: %A.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc46_3: %A.elem = var_pattern %.loc46_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %A.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc46: %A.elem = field_decl a, element0 [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %i32} [concrete = constants.%struct_type.a.ba9] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a [concrete = constants.%complete_type.fd7] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -148,18 +146,16 @@ class A { // CHECK:STDOUT: .Self = constants.%A // CHECK:STDOUT: .B = %B.decl // CHECK:STDOUT: .AF = %AF.decl -// CHECK:STDOUT: .a = %.loc46_8 +// CHECK:STDOUT: .a = %.loc46 // CHECK:STDOUT: .A = // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @B { // CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} // CHECK:STDOUT: %BF.decl: %BF.type = fn_decl @BF [concrete = constants.%BF] {} {} -// CHECK:STDOUT: %.loc16_10: %B.elem = field_decl b, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc16_5: %B.elem = var_pattern %.loc16_10 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %B.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc16: %B.elem = field_decl b, element0 [concrete] // CHECK:STDOUT: %struct_type.b: type = struct_type {.b: %i32} [concrete = constants.%struct_type.b.0a3] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.b [concrete = constants.%complete_type.ba8] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -168,7 +164,7 @@ class A { // CHECK:STDOUT: .Self = constants.%B // CHECK:STDOUT: .C = %C.decl // CHECK:STDOUT: .BF = %BF.decl -// CHECK:STDOUT: .b = %.loc16_10 +// CHECK:STDOUT: .b = %.loc16 // CHECK:STDOUT: .A = // CHECK:STDOUT: .B = // CHECK:STDOUT: .AF = @@ -178,11 +174,9 @@ class A { // CHECK:STDOUT: %D.decl: type = class_decl @D [concrete = constants.%D] {} {} // CHECK:STDOUT: %DF.decl: %DF.type = fn_decl @DF [concrete = constants.%DF] {} {} // CHECK:STDOUT: %CF.decl: %CF.type = fn_decl @CF [concrete = constants.%CF] {} {} -// CHECK:STDOUT: %.loc42_10: %C.elem = field_decl c, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc42_5: %C.elem = var_pattern %.loc42_10 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %C.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc42: %C.elem = field_decl c, element0 [concrete] // CHECK:STDOUT: %struct_type.c: type = struct_type {.c: %i32} [concrete = constants.%struct_type.c.b66] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.c [concrete = constants.%complete_type.836] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -191,7 +185,7 @@ class A { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: .D = %D.decl // CHECK:STDOUT: .CF = %CF.decl -// CHECK:STDOUT: .c = %.loc42_10 +// CHECK:STDOUT: .c = %.loc42 // CHECK:STDOUT: .A = // CHECK:STDOUT: .B = // CHECK:STDOUT: .C = @@ -202,11 +196,9 @@ class A { // CHECK:STDOUT: class @D { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} // CHECK:STDOUT: %DF.decl: %DF.type = fn_decl @DF [concrete = constants.%DF] {} {} -// CHECK:STDOUT: %.loc24_12: %D.elem = field_decl d, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc24_7: %D.elem = var_pattern %.loc24_12 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %D.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc24: %D.elem = field_decl d, element0 [concrete] // CHECK:STDOUT: %struct_type.d: type = struct_type {.d: %i32} [concrete = constants.%struct_type.d.b7b] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.d [concrete = constants.%complete_type.860] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -215,7 +207,7 @@ class A { // CHECK:STDOUT: .Self = constants.%D // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: .DF = %DF.decl -// CHECK:STDOUT: .d = %.loc24_12 +// CHECK:STDOUT: .d = %.loc24 // CHECK:STDOUT: .A = // CHECK:STDOUT: .B = // CHECK:STDOUT: .C = diff --git a/toolchain/check/testdata/class/self.carbon b/toolchain/check/testdata/class/self.carbon index 48dbbb50e65a..66e55ab4a1b0 100644 --- a/toolchain/check/testdata/class/self.carbon +++ b/toolchain/check/testdata/class/self.carbon @@ -140,11 +140,9 @@ class Class { // CHECK:STDOUT: %return.param.loc6: ref %i32 = out_param call_param1 // CHECK:STDOUT: %return.loc6: ref %i32 = return_slot %return.param.loc6 // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc8_8: %Class.elem = field_decl n, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc8_3: %Class.elem = var_pattern %.loc8_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Class.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc8: %Class.elem = field_decl n, element0 [concrete] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete = constants.%struct_type.n] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.n [concrete = constants.%complete_type.54b] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -153,13 +151,13 @@ class Class { // CHECK:STDOUT: .Self = constants.%Class // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: .G = %G.decl -// CHECK:STDOUT: .n = %.loc8_8 +// CHECK:STDOUT: .n = %.loc8 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F[%self.param_patt: %Class]() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: %Class = name_ref self, %self.loc11 -// CHECK:STDOUT: %n.ref: %Class.elem = name_ref n, @Class.%.loc8_8 [concrete = @Class.%.loc8_8] +// CHECK:STDOUT: %n.ref: %Class.elem = name_ref n, @Class.%.loc8 [concrete = @Class.%.loc8] // CHECK:STDOUT: %.loc12_14.1: ref %i32 = class_element_access %self.ref, element0 // CHECK:STDOUT: %.loc12_14.2: %i32 = bind_value %.loc12_14.1 // CHECK:STDOUT: return %.loc12_14.2 @@ -169,7 +167,7 @@ class Class { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: %ptr.e71 = name_ref self, %self.loc15 // CHECK:STDOUT: %.loc16_11: ref %Class = deref %self.ref -// CHECK:STDOUT: %n.ref: %Class.elem = name_ref n, @Class.%.loc8_8 [concrete = @Class.%.loc8_8] +// CHECK:STDOUT: %n.ref: %Class.elem = name_ref n, @Class.%.loc8 [concrete = @Class.%.loc8] // CHECK:STDOUT: %.loc16_17.1: ref %i32 = class_element_access %.loc16_11, element0 // CHECK:STDOUT: %.loc16_17.2: %i32 = bind_value %.loc16_17.1 // CHECK:STDOUT: return %.loc16_17.2 diff --git a/toolchain/check/testdata/class/self_conversion.carbon b/toolchain/check/testdata/class/self_conversion.carbon index 0f72b2847fb1..6b3aca2add26 100644 --- a/toolchain/check/testdata/class/self_conversion.carbon +++ b/toolchain/check/testdata/class/self_conversion.carbon @@ -134,18 +134,16 @@ fn Call(p: Derived*) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Base { -// CHECK:STDOUT: %.loc12_8: %Base.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc12_3: %Base.elem = var_pattern %.loc12_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Base.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc12: %Base.elem = field_decl a, element0 [concrete] // CHECK:STDOUT: %struct_type.a: type = struct_type {.a: %i32} [concrete = constants.%struct_type.a] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a [concrete = constants.%complete_type.fd7] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Base -// CHECK:STDOUT: .a = %.loc12_8 +// CHECK:STDOUT: .a = %.loc12 // CHECK:STDOUT: .Base = // CHECK:STDOUT: } // CHECK:STDOUT: @@ -194,7 +192,7 @@ fn Call(p: Derived*) -> i32 { // CHECK:STDOUT: fn @SelfBase[%self.param_patt: %Base]() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: %Base = name_ref self, %self.loc22 -// CHECK:STDOUT: %a.ref: %Base.elem = name_ref a, @Base.%.loc12_8 [concrete = @Base.%.loc12_8] +// CHECK:STDOUT: %a.ref: %Base.elem = name_ref a, @Base.%.loc12 [concrete = @Base.%.loc12] // CHECK:STDOUT: %.loc23_14.1: ref %i32 = class_element_access %self.ref, element0 // CHECK:STDOUT: %.loc23_14.2: %i32 = bind_value %.loc23_14.1 // CHECK:STDOUT: return %.loc23_14.2 @@ -204,7 +202,7 @@ fn Call(p: Derived*) -> i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: %ptr.11f = name_ref self, %self.loc26 // CHECK:STDOUT: %.loc27_4: ref %Base = deref %self.ref -// CHECK:STDOUT: %a.ref: %Base.elem = name_ref a, @Base.%.loc12_8 [concrete = @Base.%.loc12_8] +// CHECK:STDOUT: %a.ref: %Base.elem = name_ref a, @Base.%.loc12 [concrete = @Base.%.loc12] // CHECK:STDOUT: %.loc27_10: ref %i32 = class_element_access %.loc27_4, element0 // CHECK:STDOUT: %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8] // CHECK:STDOUT: %impl.elem0: %.9c3 = impl_witness_access constants.%ImplicitAs.impl_witness.c75, element0 [concrete = constants.%Convert.956] diff --git a/toolchain/check/testdata/class/self_type.carbon b/toolchain/check/testdata/class/self_type.carbon index 5492679d1bc0..7152568f5f8c 100644 --- a/toolchain/check/testdata/class/self_type.carbon +++ b/toolchain/check/testdata/class/self_type.carbon @@ -92,11 +92,9 @@ fn Class.F[self: Self]() -> i32 { // CHECK:STDOUT: %return.param: ref %Class = out_param call_param0 // CHECK:STDOUT: %return: ref %Class = return_slot %return.param // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc18_8: %Class.elem = field_decl p, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc18_3: %Class.elem = var_pattern %.loc18_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Class.elem = var +// CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%Class [concrete = constants.%Class] +// CHECK:STDOUT: %ptr: type = ptr_type %Self.ref [concrete = constants.%ptr.e71] +// CHECK:STDOUT: %.loc18: %Class.elem = field_decl p, element0 [concrete] // CHECK:STDOUT: %struct_type.p: type = struct_type {.p: %ptr.e71} [concrete = constants.%struct_type.p] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.p [concrete = constants.%complete_type.56d] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -105,13 +103,13 @@ fn Class.F[self: Self]() -> i32 { // CHECK:STDOUT: .Self = constants.%Class // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: .Make = %Make.decl -// CHECK:STDOUT: .p = %.loc18_8 +// CHECK:STDOUT: .p = %.loc18 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F[%self.param_patt: %Class]() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: %Class = name_ref self, %self.loc21 -// CHECK:STDOUT: %p.ref: %Class.elem = name_ref p, @Class.%.loc18_8 [concrete = @Class.%.loc18_8] +// CHECK:STDOUT: %p.ref: %Class.elem = name_ref p, @Class.%.loc18 [concrete = @Class.%.loc18] // CHECK:STDOUT: %.loc22_16.1: ref %ptr.e71 = class_element_access %self.ref, element0 // CHECK:STDOUT: %.loc22_16.2: %ptr.e71 = bind_value %.loc22_16.1 // CHECK:STDOUT: %.loc22_11.1: ref %Class = deref %.loc22_16.2 diff --git a/toolchain/check/testdata/class/todo_access_modifiers.carbon b/toolchain/check/testdata/class/todo_access_modifiers.carbon index c21ab7a99c38..fdbab05a9733 100644 --- a/toolchain/check/testdata/class/todo_access_modifiers.carbon +++ b/toolchain/check/testdata/class/todo_access_modifiers.carbon @@ -54,16 +54,12 @@ class Access { // CHECK:STDOUT: class @Access { // CHECK:STDOUT: %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {} // CHECK:STDOUT: %G.decl: %G.type = fn_decl @G [concrete = constants.%G] {} {} -// CHECK:STDOUT: %.loc17_16: %Access.elem = field_decl k, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc17_11: %Access.elem = var_pattern %.loc17_16 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc17: ref %Access.elem = var -// CHECK:STDOUT: %.loc19_18: %Access.elem = field_decl l, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc19_13: %Access.elem = var_pattern %.loc19_18 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc19: ref %Access.elem = var +// CHECK:STDOUT: %int_32.loc17: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc17: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc17: %Access.elem = field_decl k, element0 [concrete] +// CHECK:STDOUT: %int_32.loc19: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc19: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc19: %Access.elem = field_decl l, element1 [concrete] // CHECK:STDOUT: %struct_type.k.l: type = struct_type {.k: %i32, .l: %i32} [concrete = constants.%struct_type.k.l] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.k.l [concrete = constants.%complete_type.48a] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -72,8 +68,8 @@ class Access { // CHECK:STDOUT: .Self = constants.%Access // CHECK:STDOUT: .F [private] = %F.decl // CHECK:STDOUT: .G [protected] = %G.decl -// CHECK:STDOUT: .k [private] = %.loc17_16 -// CHECK:STDOUT: .l [protected] = %.loc19_18 +// CHECK:STDOUT: .k [private] = %.loc17 +// CHECK:STDOUT: .l [protected] = %.loc19 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F(); diff --git a/toolchain/check/testdata/class/virtual_modifiers.carbon b/toolchain/check/testdata/class/virtual_modifiers.carbon index 588dfce6828f..a76212296f57 100644 --- a/toolchain/check/testdata/class/virtual_modifiers.carbon +++ b/toolchain/check/testdata/class/virtual_modifiers.carbon @@ -1021,16 +1021,12 @@ class T2 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Base { -// CHECK:STDOUT: %.loc5_9: %Base.elem = field_decl m1, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_3: %Base.elem = var_pattern %.loc5_9 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc5: ref %Base.elem = var -// CHECK:STDOUT: %.loc6_9: %Base.elem = field_decl m2, element2 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc6_3: %Base.elem = var_pattern %.loc6_9 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc6: ref %Base.elem = var +// CHECK:STDOUT: %int_32.loc5: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc5: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc5: %Base.elem = field_decl m1, element1 [concrete] +// CHECK:STDOUT: %int_32.loc6: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc6: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc6: %Base.elem = field_decl m2, element2 [concrete] // CHECK:STDOUT: %F.decl: %F.type.7c6 = fn_decl @F.1 [concrete = constants.%F.d17] { // CHECK:STDOUT: %self.patt: %Base = binding_pattern self // CHECK:STDOUT: %self.param_patt: %Base = value_param_pattern %self.patt, call_param0 @@ -1046,8 +1042,8 @@ class T2 { // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Base -// CHECK:STDOUT: .m1 = %.loc5_9 -// CHECK:STDOUT: .m2 = %.loc6_9 +// CHECK:STDOUT: .m1 = %.loc5 +// CHECK:STDOUT: .m2 = %.loc6 // CHECK:STDOUT: .F = %F.decl // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1128,7 +1124,7 @@ class T2 { // CHECK:STDOUT: %Base.ref.loc15: type = name_ref Base, file.%Base.decl [concrete = constants.%Base] // CHECK:STDOUT: %b2: ref %Base = bind_name b2, %b2.var // CHECK:STDOUT: %b1.ref: ref %Base = name_ref b1, %b1 -// CHECK:STDOUT: %m2.ref: %Base.elem = name_ref m2, @Base.%.loc6_9 [concrete = @Base.%.loc6_9] +// CHECK:STDOUT: %m2.ref: %Base.elem = name_ref m2, @Base.%.loc6 [concrete = @Base.%.loc6] // CHECK:STDOUT: %.loc18_5: ref %i32 = class_element_access %b1.ref, element2 // CHECK:STDOUT: %int_4: Core.IntLiteral = int_value 4 [concrete = constants.%int_4.0c1] // CHECK:STDOUT: %impl.elem0.loc18: %.9c3 = impl_witness_access constants.%ImplicitAs.impl_witness.c75, element0 [concrete = constants.%Convert.956] diff --git a/toolchain/check/testdata/deduce/value_with_type_through_access.carbon b/toolchain/check/testdata/deduce/value_with_type_through_access.carbon index 5bae1e0466cd..8ae8b8656078 100644 --- a/toolchain/check/testdata/deduce/value_with_type_through_access.carbon +++ b/toolchain/check/testdata/deduce/value_with_type_through_access.carbon @@ -531,7 +531,7 @@ fn G() { // CHECK:STDOUT: %a.param: = value_param call_param1 // CHECK:STDOUT: %.1: = splice_block [concrete = ] { // CHECK:STDOUT: %T.ref.loc21_37: %Class = name_ref T, %T.loc21_6.1 [symbolic = %T.loc21_6.2 (constants.%T)] -// CHECK:STDOUT: %t.ref: %Class.elem = name_ref t, @Class.%.loc5_8 [concrete = @Class.%.loc5_8] +// CHECK:STDOUT: %t.ref: %Class.elem = name_ref t, @Class.%.loc5 [concrete = @Class.%.loc5] // CHECK:STDOUT: %.loc21_38.1: ref type = class_element_access %T.ref.loc21_37, element0 [symbolic = %.loc21_38.3 (constants.%.2fe)] // CHECK:STDOUT: %.loc21_38.2: type = bind_value %.loc21_38.1 // CHECK:STDOUT: } @@ -542,18 +542,14 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Class { -// CHECK:STDOUT: %.loc5_8: %Class.elem = field_decl t, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_3: %Class.elem = var_pattern %.loc5_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Class.elem = var +// CHECK:STDOUT: %.loc5: %Class.elem = field_decl t, element0 [concrete] // CHECK:STDOUT: %struct_type.t: type = struct_type {.t: type} [concrete = constants.%struct_type.t] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.t [concrete = constants.%complete_type.509] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Class -// CHECK:STDOUT: .t = %.loc5_8 +// CHECK:STDOUT: .t = %.loc5 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @HoldsType(%T.loc8_17.1: %Class) { diff --git a/toolchain/check/testdata/facet/min_prelude/runtime_value.carbon b/toolchain/check/testdata/facet/min_prelude/runtime_value.carbon index 2bd63c22253a..c0dc044fbf98 100644 --- a/toolchain/check/testdata/facet/min_prelude/runtime_value.carbon +++ b/toolchain/check/testdata/facet/min_prelude/runtime_value.carbon @@ -112,11 +112,8 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %.loc6_8: %C.elem = field_decl i, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc6_3: %C.elem = var_pattern %.loc6_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %C.elem = var +// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type] +// CHECK:STDOUT: %.loc6: %C.elem = field_decl i, element0 [concrete] // CHECK:STDOUT: %struct_type.i: type = struct_type {.i: %I.type} [concrete = constants.%struct_type.i] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.i [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -124,7 +121,7 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: .I = -// CHECK:STDOUT: .i = %.loc6_8 +// CHECK:STDOUT: .i = %.loc6 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F(%c.param_patt: %C) { @@ -133,7 +130,7 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: %a.patt: %I.type = binding_pattern a // CHECK:STDOUT: } // CHECK:STDOUT: %c.ref: %C = name_ref c, %c -// CHECK:STDOUT: %i.ref: %C.elem = name_ref i, @C.%.loc6_8 [concrete = @C.%.loc6_8] +// CHECK:STDOUT: %i.ref: %C.elem = name_ref i, @C.%.loc6 [concrete = @C.%.loc6] // CHECK:STDOUT: %.loc12_15.1: ref %I.type = class_element_access %c.ref, element0 // CHECK:STDOUT: %.loc12_15.2: %I.type = bind_value %.loc12_15.1 // CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type] @@ -153,6 +150,7 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: %Self.25f: %BitAnd.type = bind_symbolic_name Self, 0 [symbolic] // CHECK:STDOUT: %BitAnd.assoc_type: type = assoc_entity_type @BitAnd [concrete] // CHECK:STDOUT: %assoc0: %BitAnd.assoc_type = assoc_entity element0, imports.%Core.import_ref.a93 [concrete] +// CHECK:STDOUT: %Op.type.27a: type = fn_type @Op.1 [concrete] // CHECK:STDOUT: %Self.as_type: type = facet_access_type %Self.25f [symbolic] // CHECK:STDOUT: %T: type = bind_symbolic_name T, 0 [symbolic] // CHECK:STDOUT: %T.patt: type = symbolic_binding_pattern T, 0 [symbolic] @@ -165,6 +163,11 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: %Op.type.eb8: type = fn_type @Op.2, @impl(type) [concrete] // CHECK:STDOUT: %Op.444: %Op.type.eb8 = struct_value () [concrete] // CHECK:STDOUT: %complete_type.473: = complete_type_witness type [concrete] +// CHECK:STDOUT: %BitAnd.facet: %BitAnd.type = facet_value type, (%BitAnd.impl_witness.0e5) [concrete] +// CHECK:STDOUT: %.518: type = fn_type_with_self_type %Op.type.27a, %BitAnd.facet [concrete] +// CHECK:STDOUT: %Op.bound: = bound_method %I.type, %Op.444 [concrete] +// CHECK:STDOUT: %Op.specific_fn: = specific_function %Op.444, @Op.2(type) [concrete] +// CHECK:STDOUT: %bound_method: = bound_method %I.type, %Op.specific_fn [concrete] // CHECK:STDOUT: %facet_type: type = facet_type <@I & @J> [concrete] // CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %facet_type [concrete] // CHECK:STDOUT: %struct_type.ij: type = struct_type {.ij: %facet_type} [concrete] @@ -251,11 +254,16 @@ fn F(T: Z(C)) -> T.(Z(C).X) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { +// CHECK:STDOUT: %I.ref: type = name_ref I, file.%I.decl [concrete = constants.%I.type] +// CHECK:STDOUT: %J.ref: type = name_ref J, file.%J.decl [concrete = constants.%J.type] +// CHECK:STDOUT: %impl.elem0: %.518 = impl_witness_access constants.%BitAnd.impl_witness.0e5, element0 [concrete = constants.%Op.444] +// CHECK:STDOUT: %bound_method.loc7_13.1: = bound_method %I.ref, %impl.elem0 [concrete = constants.%Op.bound] +// CHECK:STDOUT: %specific_fn: = specific_function %impl.elem0, @Op.2(type) [concrete = constants.%Op.specific_fn] +// CHECK:STDOUT: %bound_method.loc7_13.2: = bound_method %I.ref, %specific_fn [concrete = constants.%bound_method] +// CHECK:STDOUT: %type.and: init type = call %bound_method.loc7_13.2(%I.ref, %J.ref) [concrete = constants.%facet_type] +// CHECK:STDOUT: %.loc7_13.1: type = value_of_initializer %type.and [concrete = constants.%facet_type] +// CHECK:STDOUT: %.loc7_13.2: type = converted %type.and, %.loc7_13.1 [concrete = constants.%facet_type] // CHECK:STDOUT: %.loc7_9: %C.elem = field_decl ij, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc7_3: %C.elem = var_pattern %.loc7_9 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %C.elem = var // CHECK:STDOUT: %struct_type.ij: type = struct_type {.ij: %facet_type} [concrete = constants.%struct_type.ij] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.ij [concrete = constants.%complete_type.559] // CHECK:STDOUT: complete_type_witness = %complete_type diff --git a/toolchain/check/testdata/function/generic/return_slot.carbon b/toolchain/check/testdata/function/generic/return_slot.carbon index c85c88b209e3..0ab53ea750b8 100644 --- a/toolchain/check/testdata/function/generic/return_slot.carbon +++ b/toolchain/check/testdata/function/generic/return_slot.carbon @@ -116,18 +116,18 @@ fn G() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %.loc15_18: %C.elem = field_decl arr, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc15_11: %C.elem = var_pattern %.loc15_18 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %C.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %int_100: Core.IntLiteral = int_value 100 [concrete = constants.%int_100] +// CHECK:STDOUT: %array_type: type = array_type %int_100, %i32 [concrete = constants.%array_type] +// CHECK:STDOUT: %.loc15: %C.elem = field_decl arr, element0 [concrete] // CHECK:STDOUT: %struct_type.arr: type = struct_type {.arr: %array_type} [concrete = constants.%struct_type.arr.5f2] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.arr [concrete = constants.%complete_type.22a] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%C -// CHECK:STDOUT: .arr = %.loc15_18 +// CHECK:STDOUT: .arr = %.loc15 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Make(@Wrap.%T.loc11_12.1: type) { diff --git a/toolchain/check/testdata/generic/complete_type.carbon b/toolchain/check/testdata/generic/complete_type.carbon index 63529bb77853..0c5df3cca308 100644 --- a/toolchain/check/testdata/generic/complete_type.carbon +++ b/toolchain/check/testdata/generic/complete_type.carbon @@ -156,11 +156,8 @@ fn G() { F(B); } // CHECK:STDOUT: %complete_type.loc14_1.2: = complete_type_witness %struct_type.v.loc14_1.2 [symbolic = %complete_type.loc14_1.2 (constants.%complete_type.460)] // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %.loc13_8: @A.%A.elem (%A.elem.1ce) = field_decl v, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc13_3: @A.%A.elem (%A.elem.1ce) = var_pattern %.loc13_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref @A.%A.elem (%A.elem.1ce) = var +// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc6_9.1 [symbolic = %T.loc6_9.2 (constants.%T)] +// CHECK:STDOUT: %.loc13: @A.%A.elem (%A.elem.1ce) = field_decl v, element0 [concrete] // CHECK:STDOUT: %struct_type.v.loc14_1.1: type = struct_type {.v: %T} [symbolic = %struct_type.v.loc14_1.2 (constants.%struct_type.v.ff1)] // CHECK:STDOUT: %complete_type.loc14_1.1: = complete_type_witness %struct_type.v.loc14_1.1 [symbolic = %complete_type.loc14_1.2 (constants.%complete_type.460)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc14_1.1 @@ -168,7 +165,7 @@ fn G() { F(B); } // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%A.130 // CHECK:STDOUT: .T = -// CHECK:STDOUT: .v = %.loc13_8 +// CHECK:STDOUT: .v = %.loc13 // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/generic/local.carbon b/toolchain/check/testdata/generic/local.carbon index 9422859ca41b..4235bcc36e44 100644 --- a/toolchain/check/testdata/generic/local.carbon +++ b/toolchain/check/testdata/generic/local.carbon @@ -112,11 +112,8 @@ class C(C:! type) { // CHECK:STDOUT: %complete_type.loc7_3.2: = complete_type_witness %struct_type.x.loc7_3.2 [symbolic = %complete_type.loc7_3.2 (constants.%complete_type.4339)] // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %.loc6_10: @C.%C.elem (%C.elem.cca) = field_decl x, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc6_5: @C.%C.elem (%C.elem.cca) = var_pattern %.loc6_10 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref @C.%C.elem (%C.elem.cca) = var +// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc5_11.1 [symbolic = %T.loc5_11.2 (constants.%T)] +// CHECK:STDOUT: %.loc6: @C.%C.elem (%C.elem.cca) = field_decl x, element0 [concrete] // CHECK:STDOUT: %struct_type.x.loc7_3.1: type = struct_type {.x: %T} [symbolic = %struct_type.x.loc7_3.2 (constants.%struct_type.x.2ac)] // CHECK:STDOUT: %complete_type.loc7_3.1: = complete_type_witness %struct_type.x.loc7_3.1 [symbolic = %complete_type.loc7_3.2 (constants.%complete_type.4339)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc7_3.1 @@ -124,7 +121,7 @@ class C(C:! type) { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%C.f06 // CHECK:STDOUT: .T = -// CHECK:STDOUT: .x = %.loc6_10 +// CHECK:STDOUT: .x = %.loc6 // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/generic/template/convert.carbon b/toolchain/check/testdata/generic/template/convert.carbon index d8ea72adf55e..8ac5cad743b7 100644 --- a/toolchain/check/testdata/generic/template/convert.carbon +++ b/toolchain/check/testdata/generic/template/convert.carbon @@ -197,11 +197,9 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %.loc13_8: %C.elem = field_decl n, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc13_3: %C.elem = var_pattern %.loc13_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %C.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc13: %C.elem = field_decl n, element0 [concrete] // CHECK:STDOUT: impl_decl @impl.4e3 [concrete] {} { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] // CHECK:STDOUT: %Core.ref: = name_ref Core, imports.%Core [concrete = imports.%Core] @@ -218,7 +216,7 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%C -// CHECK:STDOUT: .n = %.loc13_8 +// CHECK:STDOUT: .n = %.loc13 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc4_15.1: type) { @@ -253,7 +251,7 @@ fn Test(d: D) -> i32 { // CHECK:STDOUT: fn @Convert.2[%self.param_patt: %C]() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: %C = name_ref self, %self -// CHECK:STDOUT: %n.ref: %C.elem = name_ref n, @C.%.loc13_8 [concrete = @C.%.loc13_8] +// CHECK:STDOUT: %n.ref: %C.elem = name_ref n, @C.%.loc13 [concrete = @C.%.loc13] // CHECK:STDOUT: %.loc15_50.1: ref %i32 = class_element_access %self.ref, element0 // CHECK:STDOUT: %.loc15_50.2: %i32 = bind_value %.loc15_50.1 // CHECK:STDOUT: return %.loc15_50.2 diff --git a/toolchain/check/testdata/generic/template/member_access.carbon b/toolchain/check/testdata/generic/template/member_access.carbon index 7ea4d76facc7..dde7a31804a2 100644 --- a/toolchain/check/testdata/generic/template/member_access.carbon +++ b/toolchain/check/testdata/generic/template/member_access.carbon @@ -104,7 +104,7 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: %inst.splice_block.d20: = inst_value [concrete] { // CHECK:STDOUT: %.39c: %i32 = splice_block %.e83 { -// CHECK:STDOUT: %n.ref: %C.elem = name_ref n, @C.%.loc9_8 [concrete = @C.%.loc9_8] +// CHECK:STDOUT: %n.ref: %C.elem = name_ref n, @C.%.loc9 [concrete = @C.%.loc9] // CHECK:STDOUT: %.d20: ref %i32 = class_element_access %.fbe, element0 // CHECK:STDOUT: %.e83: %i32 = bind_value %.d20 // CHECK:STDOUT: } @@ -183,18 +183,16 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %.loc9_8: %C.elem = field_decl n, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc9_3: %C.elem = var_pattern %.loc9_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %C.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc9: %C.elem = field_decl n, element0 [concrete] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete = constants.%struct_type.n] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.n [concrete = constants.%complete_type.54b] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%C -// CHECK:STDOUT: .n = %.loc9_8 +// CHECK:STDOUT: .n = %.loc9 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc4_15.1: type) { @@ -337,18 +335,16 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @D { -// CHECK:STDOUT: %.loc12_8: %D.elem = field_decl m, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc12_3: %D.elem = var_pattern %.loc12_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %D.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc12: %D.elem = field_decl m, element0 [concrete] // CHECK:STDOUT: %struct_type.m: type = struct_type {.m: %i32} [concrete = constants.%struct_type.m] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.m [concrete = constants.%complete_type.218] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%D -// CHECK:STDOUT: .m = %.loc12_8 +// CHECK:STDOUT: .m = %.loc12 // CHECK:STDOUT: .n = // CHECK:STDOUT: } // CHECK:STDOUT: @@ -424,7 +420,7 @@ fn Test(e: E) { // CHECK:STDOUT: } // CHECK:STDOUT: %inst.splice_block.2a2: = inst_value [concrete] { // CHECK:STDOUT: %.6c9: %F.a8a = splice_block %.e29 { -// CHECK:STDOUT: %n.ref: %E.elem = name_ref n, @E.%.loc16_8 [concrete = @E.%.loc16_8] +// CHECK:STDOUT: %n.ref: %E.elem = name_ref n, @E.%.loc16 [concrete = @E.%.loc16] // CHECK:STDOUT: %.999: ref %F.a8a = class_element_access %.a66, element0 // CHECK:STDOUT: %.e29: %F.a8a = bind_value %.999 // CHECK:STDOUT: } @@ -482,11 +478,8 @@ fn Test(e: E) { // CHECK:STDOUT: // CHECK:STDOUT: class @E { // CHECK:STDOUT: %F.decl: type = class_decl @F.2 [concrete = constants.%F.a8a] {} {} -// CHECK:STDOUT: %.loc16_8: %E.elem = field_decl n, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc16_3: %E.elem = var_pattern %.loc16_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %E.elem = var +// CHECK:STDOUT: %F.ref: type = name_ref F, %F.decl [concrete = constants.%F.a8a] +// CHECK:STDOUT: %.loc16: %E.elem = field_decl n, element0 [concrete] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %F.a8a} [concrete = constants.%struct_type.n.e4c] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.n [concrete = constants.%complete_type.5ba] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -494,7 +487,7 @@ fn Test(e: E) { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%E // CHECK:STDOUT: .F = %F.decl -// CHECK:STDOUT: .n = %.loc16_8 +// CHECK:STDOUT: .n = %.loc16 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @F.2 { diff --git a/toolchain/check/testdata/generic/template/unimplemented.carbon b/toolchain/check/testdata/generic/template/unimplemented.carbon index bbeab9301f3c..c23dd2c746b3 100644 --- a/toolchain/check/testdata/generic/template/unimplemented.carbon +++ b/toolchain/check/testdata/generic/template/unimplemented.carbon @@ -185,18 +185,16 @@ fn F[template T:! type](x: T) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %.loc5_8: %C.elem = field_decl n, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_3: %C.elem = var_pattern %.loc5_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %C.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc5: %C.elem = field_decl n, element0 [concrete] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete = constants.%struct_type.n] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.n [concrete = constants.%complete_type.54b] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%C -// CHECK:STDOUT: .n = %.loc5_8 +// CHECK:STDOUT: .n = %.loc5 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%c.loc11_15.1: %C) { diff --git a/toolchain/check/testdata/if_expr/fail_not_in_function.carbon b/toolchain/check/testdata/if_expr/fail_not_in_function.carbon index fddd12e5d0a1..06a0248d80da 100644 --- a/toolchain/check/testdata/if_expr/fail_not_in_function.carbon +++ b/toolchain/check/testdata/if_expr/fail_not_in_function.carbon @@ -47,10 +47,22 @@ var y: if true then i32 else f64; fn F(a: if true then i32 else f64); class C { - // CHECK:STDERR: fail_not_in_function.carbon:[[@LINE+4]]:10: error: semantics TODO: `Control flow expressions are currently only supported inside functions.` [SemanticsTodo] + // CHECK:STDERR: fail_not_in_function.carbon:[[@LINE+16]]:10: error: semantics TODO: `Control flow expressions are currently only supported inside functions.` [SemanticsTodo] + // CHECK:STDERR: var n: if true then i32 else f64; + // CHECK:STDERR: ^~~~~~~ + // CHECK:STDERR: + // CHECK:STDERR: fail_not_in_function.carbon:[[@LINE+12]]:18: error: semantics TODO: `Control flow expressions are currently only supported inside functions.` [SemanticsTodo] + // CHECK:STDERR: var n: if true then i32 else f64; + // CHECK:STDERR: ^~~~~~~~ + // CHECK:STDERR: + // CHECK:STDERR: fail_not_in_function.carbon:[[@LINE+8]]:10: error: semantics TODO: `Control flow expressions are currently only supported inside functions.` [SemanticsTodo] // CHECK:STDERR: var n: if true then i32 else f64; // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: + // CHECK:STDERR: fail_not_in_function.carbon:[[@LINE+4]]:10: error: semantics TODO: `Control flow expressions are currently only supported inside functions.` [SemanticsTodo] + // CHECK:STDERR: var n: if true then i32 else f64; + // CHECK:STDERR: ^~~~~~~ + // CHECK:STDERR: var n: if true then i32 else f64; } @@ -63,9 +75,6 @@ class C { // CHECK:STDOUT: %F.type: type = fn_type @F [concrete] // CHECK:STDOUT: %F: %F.type = struct_value () [concrete] // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %i32 [concrete] -// CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete] -// CHECK:STDOUT: %complete_type.54b: = complete_type_witness %struct_type.n [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: imports { @@ -112,18 +121,13 @@ class C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %.loc54_8: %C.elem = field_decl n, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc54_3: %C.elem = var_pattern %.loc54_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %C.elem = var -// CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete = constants.%struct_type.n] -// CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.n [concrete = constants.%complete_type.54b] -// CHECK:STDOUT: complete_type_witness = %complete_type +// CHECK:STDOUT: %true: bool = bool_literal true [concrete = constants.%true] +// CHECK:STDOUT: if %true br !if.expr.then else br !if.expr.else +// CHECK:STDOUT: complete_type_witness = .inst1384.loc67_1 // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%C -// CHECK:STDOUT: .n = %.loc54_8 +// CHECK:STDOUT: .n = .inst1381.loc66_8 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F(%a.param_patt: %i32); diff --git a/toolchain/check/testdata/impl/extend_impl_generic.carbon b/toolchain/check/testdata/impl/extend_impl_generic.carbon index a7ae87f058b9..3043771e9516 100644 --- a/toolchain/check/testdata/impl/extend_impl_generic.carbon +++ b/toolchain/check/testdata/impl/extend_impl_generic.carbon @@ -184,18 +184,16 @@ class X(U:! type) { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Param { -// CHECK:STDOUT: %.loc9_8: %Param.elem = field_decl x, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc9_3: %Param.elem = var_pattern %.loc9_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Param.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc9: %Param.elem = field_decl x, element0 [concrete] // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %i32} [concrete = constants.%struct_type.x.ed6] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete = constants.%complete_type.1ec] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Param -// CHECK:STDOUT: .x = %.loc9_8 +// CHECK:STDOUT: .x = %.loc9 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { @@ -254,7 +252,7 @@ class X(U:! type) { // CHECK:STDOUT: %.loc21_20.1: ref %Param = temporary_storage // CHECK:STDOUT: %F.call.loc21: init %Param = call %impl.elem0.loc21() to %.loc21_20.1 // CHECK:STDOUT: %.loc21_20.2: ref %Param = temporary %.loc21_20.1, %F.call.loc21 -// CHECK:STDOUT: %x.ref.loc21: %Param.elem = name_ref x, @Param.%.loc9_8 [concrete = @Param.%.loc9_8] +// CHECK:STDOUT: %x.ref.loc21: %Param.elem = name_ref x, @Param.%.loc9 [concrete = @Param.%.loc9] // CHECK:STDOUT: %.loc21_21: ref %i32 = class_element_access %.loc21_20.2, element0 // CHECK:STDOUT: %.loc21_10: type = splice_block %i32.loc21 [concrete = constants.%i32] { // CHECK:STDOUT: %int_32.loc21: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] @@ -273,7 +271,7 @@ class X(U:! type) { // CHECK:STDOUT: %.loc22_20.1: ref %Param = temporary_storage // CHECK:STDOUT: %F.call.loc22: init %Param = call %impl.elem0.loc22() to %.loc22_20.1 // CHECK:STDOUT: %.loc22_20.2: ref %Param = temporary %.loc22_20.1, %F.call.loc22 -// CHECK:STDOUT: %x.ref.loc22: %Param.elem = name_ref x, @Param.%.loc9_8 [concrete = @Param.%.loc9_8] +// CHECK:STDOUT: %x.ref.loc22: %Param.elem = name_ref x, @Param.%.loc9 [concrete = @Param.%.loc9] // CHECK:STDOUT: %.loc22_21.1: ref %i32 = class_element_access %.loc22_20.2, element0 // CHECK:STDOUT: %.loc22_21.2: %i32 = bind_value %.loc22_21.1 // CHECK:STDOUT: assign %b.var, %.loc22_21.2 diff --git a/toolchain/check/testdata/impl/lookup/no_prelude/impl_forall.carbon b/toolchain/check/testdata/impl/lookup/no_prelude/impl_forall.carbon index 799a0fdcd4c2..219115881bed 100644 --- a/toolchain/check/testdata/impl/lookup/no_prelude/impl_forall.carbon +++ b/toolchain/check/testdata/impl/lookup/no_prelude/impl_forall.carbon @@ -282,11 +282,8 @@ fn TestSpecific(a: A({})) -> {} { // CHECK:STDOUT: %complete_type.loc5_1.2: = complete_type_witness %struct_type.n.loc5_1.2 [symbolic = %complete_type.loc5_1.2 (constants.%complete_type.84bb3d.1)] // CHECK:STDOUT: // CHECK:STDOUT: class { -// CHECK:STDOUT: %.loc4_8: @A.%A.elem (%A.elem.1ceb36.1) = field_decl n, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc4_3: @A.%A.elem (%A.elem.1ceb36.1) = var_pattern %.loc4_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref @A.%A.elem (%A.elem.1ceb36.1) = var +// CHECK:STDOUT: %T.ref: type = name_ref T, %T.loc3_9.1 [symbolic = %T.loc3_9.2 (constants.%T)] +// CHECK:STDOUT: %.loc4: @A.%A.elem (%A.elem.1ceb36.1) = field_decl n, element0 [concrete] // CHECK:STDOUT: %struct_type.n.loc5_1.1: type = struct_type {.n: %T} [symbolic = %struct_type.n.loc5_1.2 (constants.%struct_type.n.848971.1)] // CHECK:STDOUT: %complete_type.loc5_1.1: = complete_type_witness %struct_type.n.loc5_1.1 [symbolic = %complete_type.loc5_1.2 (constants.%complete_type.84bb3d.1)] // CHECK:STDOUT: complete_type_witness = %complete_type.loc5_1.1 @@ -294,7 +291,7 @@ fn TestSpecific(a: A({})) -> {} { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%A.13025a.1 // CHECK:STDOUT: .T = -// CHECK:STDOUT: .n = %.loc4_8 +// CHECK:STDOUT: .n = %.loc4 // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -319,7 +316,7 @@ fn TestSpecific(a: A({})) -> {} { // CHECK:STDOUT: fn[%self.param_patt: @F.2.%A (%A.13025a.2)]() -> @F.2.%V (%V) { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: @F.2.%A (%A.13025a.2) = name_ref self, %self -// CHECK:STDOUT: %n.ref: @F.2.%A.elem (%A.elem.1ceb36.2) = name_ref n, @A.%.loc4_8 [concrete = @A.%.loc4_8] +// CHECK:STDOUT: %n.ref: @F.2.%A.elem (%A.elem.1ceb36.2) = name_ref n, @A.%.loc4 [concrete = @A.%.loc4] // CHECK:STDOUT: %.loc13_16.1: ref @F.2.%V (%V) = class_element_access %self.ref, element0 // CHECK:STDOUT: %.loc13_16.2: @F.2.%V (%V) = bind_value %.loc13_16.1 // CHECK:STDOUT: return %.loc13_16.2 diff --git a/toolchain/check/testdata/operators/overloaded/implicit_as.carbon b/toolchain/check/testdata/operators/overloaded/implicit_as.carbon index 300e8d6d6323..f50ae41df91a 100644 --- a/toolchain/check/testdata/operators/overloaded/implicit_as.carbon +++ b/toolchain/check/testdata/operators/overloaded/implicit_as.carbon @@ -195,18 +195,16 @@ fn Test() { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @X { -// CHECK:STDOUT: %.loc12_8: %X.elem = field_decl n, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc12_3: %X.elem = var_pattern %.loc12_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %X.elem = var +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc12: %X.elem = field_decl n, element0 [concrete] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete = constants.%struct_type.n] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.n [concrete = constants.%complete_type.54b] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%X -// CHECK:STDOUT: .n = %.loc12_8 +// CHECK:STDOUT: .n = %.loc12 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Convert.2[%self.param_patt: %i32]() -> %return.param_patt: %X { @@ -223,7 +221,7 @@ fn Test() { // CHECK:STDOUT: fn @Convert.3[%self.param_patt: %X]() -> %i32 { // CHECK:STDOUT: !entry: // CHECK:STDOUT: %self.ref: %X = name_ref self, %self -// CHECK:STDOUT: %n.ref: %X.elem = name_ref n, @X.%.loc12_8 [concrete = @X.%.loc12_8] +// CHECK:STDOUT: %n.ref: %X.elem = name_ref n, @X.%.loc12 [concrete = @X.%.loc12] // CHECK:STDOUT: %.loc20_45.1: ref %i32 = class_element_access %self.ref, element0 // CHECK:STDOUT: %.loc20_45.2: %i32 = bind_value %.loc20_45.1 // CHECK:STDOUT: return %.loc20_45.2 diff --git a/toolchain/check/testdata/packages/no_prelude/cross_package_export.carbon b/toolchain/check/testdata/packages/no_prelude/cross_package_export.carbon index c10cd539f34e..b3eb6f35ca16 100644 --- a/toolchain/check/testdata/packages/no_prelude/cross_package_export.carbon +++ b/toolchain/check/testdata/packages/no_prelude/cross_package_export.carbon @@ -210,11 +210,9 @@ alias C = Other.C; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { +// CHECK:STDOUT: %.loc5_11.1: %empty_tuple.type = tuple_literal () +// CHECK:STDOUT: %.loc5_11.2: type = converted %.loc5_11.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: %.loc5_8: %C.elem = field_decl x, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_3: %C.elem = var_pattern %.loc5_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %C.elem = var // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete = constants.%struct_type.x] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type diff --git a/toolchain/check/testdata/packages/no_prelude/export_import.carbon b/toolchain/check/testdata/packages/no_prelude/export_import.carbon index a206d5960657..c821aed04bdd 100644 --- a/toolchain/check/testdata/packages/no_prelude/export_import.carbon +++ b/toolchain/check/testdata/packages/no_prelude/export_import.carbon @@ -204,11 +204,9 @@ export Poison; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { +// CHECK:STDOUT: %.loc5_11.1: %empty_tuple.type = tuple_literal () +// CHECK:STDOUT: %.loc5_11.2: type = converted %.loc5_11.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: %.loc5_8: %C.elem = field_decl x, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_3: %C.elem = var_pattern %.loc5_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %C.elem = var // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete = constants.%struct_type.x] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type diff --git a/toolchain/check/testdata/packages/no_prelude/export_mixed.carbon b/toolchain/check/testdata/packages/no_prelude/export_mixed.carbon index e46daff526f2..9a8317000407 100644 --- a/toolchain/check/testdata/packages/no_prelude/export_mixed.carbon +++ b/toolchain/check/testdata/packages/no_prelude/export_mixed.carbon @@ -138,11 +138,9 @@ var d: D = {.y = ()}; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { +// CHECK:STDOUT: %.loc5_11.1: %empty_tuple.type = tuple_literal () +// CHECK:STDOUT: %.loc5_11.2: type = converted %.loc5_11.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: %.loc5_8: %C.elem = field_decl x, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_3: %C.elem = var_pattern %.loc5_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %C.elem = var // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete = constants.%struct_type.x] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete = constants.%complete_type.9be] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -153,11 +151,9 @@ var d: D = {.y = ()}; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @D { +// CHECK:STDOUT: %.loc9_11.1: %empty_tuple.type = tuple_literal () +// CHECK:STDOUT: %.loc9_11.2: type = converted %.loc9_11.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: %.loc9_8: %D.elem = field_decl y, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc9_3: %D.elem = var_pattern %.loc9_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %D.elem = var // CHECK:STDOUT: %struct_type.y: type = struct_type {.y: %empty_tuple.type} [concrete = constants.%struct_type.y] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.y [concrete = constants.%complete_type.9f4] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -536,7 +532,7 @@ var d: D = {.y = ()}; // CHECK:STDOUT: %Main.import_ref.6a9 = import_ref Main//export_import_then_name, inst24 [indirect], unloaded // CHECK:STDOUT: %Main.import_ref.f67 = import_ref Main//export_import_then_name, inst25 [indirect], unloaded // CHECK:STDOUT: %Main.import_ref.5ab: = import_ref Main//base, loc10_1, loaded [concrete = constants.%complete_type.9f4] -// CHECK:STDOUT: %Main.import_ref.cab = import_ref Main//base, inst30 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.cab = import_ref Main//base, inst27 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.950 = import_ref Main//base, loc9_8, unloaded // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/packages/no_prelude/export_name.carbon b/toolchain/check/testdata/packages/no_prelude/export_name.carbon index 1b0e6e4e1a9a..96e0938c5cc5 100644 --- a/toolchain/check/testdata/packages/no_prelude/export_name.carbon +++ b/toolchain/check/testdata/packages/no_prelude/export_name.carbon @@ -228,11 +228,9 @@ private export C; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { +// CHECK:STDOUT: %.loc5_11.1: %empty_tuple.type = tuple_literal () +// CHECK:STDOUT: %.loc5_11.2: type = converted %.loc5_11.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: %.loc5_8: %C.elem = field_decl x, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_3: %C.elem = var_pattern %.loc5_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %C.elem = var // CHECK:STDOUT: %struct_type.x: type = struct_type {.x: %empty_tuple.type} [concrete = constants.%struct_type.x] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x [concrete = constants.%complete_type.9be] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -243,11 +241,9 @@ private export C; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @NSC { +// CHECK:STDOUT: %.loc10_11.1: %empty_tuple.type = tuple_literal () +// CHECK:STDOUT: %.loc10_11.2: type = converted %.loc10_11.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type] // CHECK:STDOUT: %.loc10_8: %NSC.elem = field_decl y, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc10_3: %NSC.elem = var_pattern %.loc10_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %NSC.elem = var // CHECK:STDOUT: %struct_type.y: type = struct_type {.y: %empty_tuple.type} [concrete = constants.%struct_type.y] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.y [concrete = constants.%complete_type.9f4] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -280,7 +276,7 @@ private export C; // CHECK:STDOUT: %Main.import_ref.2c4 = import_ref Main//base, inst16 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.276 = import_ref Main//base, loc5_8, unloaded // CHECK:STDOUT: %Main.import_ref.5ab: = import_ref Main//base, loc11_1, loaded [concrete = constants.%complete_type.9f4] -// CHECK:STDOUT: %Main.import_ref.31c = import_ref Main//base, inst31 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.31c = import_ref Main//base, inst28 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.be6 = import_ref Main//base, loc10_8, unloaded // CHECK:STDOUT: } // CHECK:STDOUT: @@ -774,7 +770,7 @@ private export C; // CHECK:STDOUT: %Main.import_ref.2c4 = import_ref Main//base, inst16 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.276 = import_ref Main//base, loc5_8, unloaded // CHECK:STDOUT: %Main.import_ref.5ab: = import_ref Main//base, loc11_1, loaded [concrete = constants.%complete_type.9f4] -// CHECK:STDOUT: %Main.import_ref.31c = import_ref Main//base, inst31 [no loc], unloaded +// CHECK:STDOUT: %Main.import_ref.31c = import_ref Main//base, inst28 [no loc], unloaded // CHECK:STDOUT: %Main.import_ref.be6 = import_ref Main//base, loc10_8, unloaded // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/packages/no_prelude/fail_export_name_member.carbon b/toolchain/check/testdata/packages/no_prelude/fail_export_name_member.carbon index 121c79b0f363..b15cb1d4a24d 100644 --- a/toolchain/check/testdata/packages/no_prelude/fail_export_name_member.carbon +++ b/toolchain/check/testdata/packages/no_prelude/fail_export_name_member.carbon @@ -52,11 +52,9 @@ export C.n; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { +// CHECK:STDOUT: %.loc5_11.1: %empty_struct_type = struct_literal () +// CHECK:STDOUT: %.loc5_11.2: type = converted %.loc5_11.1, constants.%empty_struct_type [concrete = constants.%empty_struct_type] // CHECK:STDOUT: %.loc5_8: %C.elem = field_decl n, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc5_3: %C.elem = var_pattern %.loc5_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %C.elem = var // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %empty_struct_type} [concrete = constants.%struct_type.n] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.n [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type diff --git a/toolchain/check/testdata/packages/raw_core.carbon b/toolchain/check/testdata/packages/raw_core.carbon index 0804b5d69856..ff1e503d5850 100644 --- a/toolchain/check/testdata/packages/raw_core.carbon +++ b/toolchain/check/testdata/packages/raw_core.carbon @@ -242,18 +242,18 @@ var c: r#Core = {.n = 0 as Core.Int(32)}; // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Core { -// CHECK:STDOUT: %.loc3_8: %Core.elem = field_decl n, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc3_3: %Core.elem = var_pattern %.loc3_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %Core.elem = var +// CHECK:STDOUT: %Core.ref: = name_ref Core, imports.%Core [concrete = imports.%Core] +// CHECK:STDOUT: %Int.ref: %Int.type = name_ref Int, imports.%Core.Int [concrete = constants.%Int.generic] +// CHECK:STDOUT: %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc3: %Core.elem = field_decl n, element0 [concrete] // CHECK:STDOUT: %struct_type.n: type = struct_type {.n: %i32} [concrete = constants.%struct_type.n] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.n [concrete = constants.%complete_type.54b] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%Core -// CHECK:STDOUT: .n = %.loc3_8 +// CHECK:STDOUT: .n = %.loc3 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @__global_init() { diff --git a/toolchain/check/testdata/patterns/no_prelude/underscore.carbon b/toolchain/check/testdata/patterns/no_prelude/underscore.carbon index 23b8f0cdcf7f..29aece1cb82b 100644 --- a/toolchain/check/testdata/patterns/no_prelude/underscore.carbon +++ b/toolchain/check/testdata/patterns/no_prelude/underscore.carbon @@ -75,9 +75,13 @@ fn G[_:! type]() {} library "[[@TEST_NAME]]"; class C { - // CHECK:STDERR: fail_class.carbon:[[@LINE+4]]:7: error: semantics TODO: `_ used as field name` [SemanticsTodo] + // CHECK:STDERR: fail_class.carbon:[[@LINE+8]]:7: error: expected identifier in field declaration [ExpectedFieldIdentifier] // CHECK:STDERR: var _: (); - // CHECK:STDERR: ^~~~~ + // CHECK:STDERR: ^ + // CHECK:STDERR: + // CHECK:STDERR: fail_class.carbon:[[@LINE+4]]:3: error: semantics TODO: `handle invalid parse trees in `check`` [SemanticsTodo] + // CHECK:STDERR: var _: (); + // CHECK:STDERR: ^~~~~~~~~~ // CHECK:STDERR: var _: (); } @@ -427,32 +431,15 @@ fn F() -> {} { // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %empty_tuple.type: type = tuple_type () [concrete] -// CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %empty_tuple.type [concrete] -// CHECK:STDOUT: %struct_type._: type = struct_type {._: %empty_tuple.type} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type._ [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .C = %C.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: } +// CHECK:STDOUT: file {} // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %.loc9_8: %C.elem = field_decl _, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc9_3: %C.elem = var_pattern %.loc9_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %C.elem = var -// CHECK:STDOUT: %struct_type._: type = struct_type {._: %empty_tuple.type} [concrete = constants.%struct_type._] -// CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type._ [concrete = constants.%complete_type] -// CHECK:STDOUT: complete_type_witness = %complete_type +// CHECK:STDOUT: complete_type_witness = invalid // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%C -// CHECK:STDOUT: ._ = %.loc9_8 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_interface.carbon diff --git a/toolchain/check/testdata/pointer/arrow.carbon b/toolchain/check/testdata/pointer/arrow.carbon index dc71caad7848..d0e1a6cce342 100644 --- a/toolchain/check/testdata/pointer/arrow.carbon +++ b/toolchain/check/testdata/pointer/arrow.carbon @@ -75,11 +75,9 @@ fn Foo(ptr: C*) { // CHECK:STDOUT: %Self.ref: type = name_ref Self, constants.%C [concrete = constants.%C] // CHECK:STDOUT: %self: %C = bind_name self, %self.param // CHECK:STDOUT: } -// CHECK:STDOUT: %.loc13_12: %C.elem = field_decl field, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc13_3: %C.elem = var_pattern %.loc13_12 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %C.elem = var +// CHECK:STDOUT: %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C] +// CHECK:STDOUT: %ptr: type = ptr_type %C.ref [concrete = constants.%ptr.019] +// CHECK:STDOUT: %.loc13: %C.elem = field_decl field, element0 [concrete] // CHECK:STDOUT: %struct_type.field: type = struct_type {.field: %ptr.019} [concrete = constants.%struct_type.field] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.field [concrete = constants.%complete_type] // CHECK:STDOUT: complete_type_witness = %complete_type @@ -88,7 +86,7 @@ fn Foo(ptr: C*) { // CHECK:STDOUT: .Self = constants.%C // CHECK:STDOUT: .Member = %Member.decl // CHECK:STDOUT: .C = -// CHECK:STDOUT: .field = %.loc13_12 +// CHECK:STDOUT: .field = %.loc13 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @Member[%self.param_patt: %C](); @@ -109,19 +107,19 @@ fn Foo(ptr: C*) { // CHECK:STDOUT: %Member.call.loc18: init %empty_tuple.type = call %Member.bound.loc18(%.loc18_6.2) // CHECK:STDOUT: %ptr.ref.loc20: %ptr.019 = name_ref ptr, %ptr.loc16_8 // CHECK:STDOUT: %.loc20_4: ref %C = deref %ptr.ref.loc20 -// CHECK:STDOUT: %field.ref.loc20: %C.elem = name_ref field, @C.%.loc13_12 [concrete = @C.%.loc13_12] +// CHECK:STDOUT: %field.ref.loc20: %C.elem = name_ref field, @C.%.loc13 [concrete = @C.%.loc13] // CHECK:STDOUT: %.loc20_9: ref %ptr.019 = class_element_access %.loc20_4, element0 // CHECK:STDOUT: %ptr.ref.loc21: %ptr.019 = name_ref ptr, %ptr.loc16_8 // CHECK:STDOUT: %.loc21_6.1: ref %C = deref %ptr.ref.loc21 -// CHECK:STDOUT: %field.ref.loc21: %C.elem = name_ref field, @C.%.loc13_12 [concrete = @C.%.loc13_12] +// CHECK:STDOUT: %field.ref.loc21: %C.elem = name_ref field, @C.%.loc13 [concrete = @C.%.loc13] // CHECK:STDOUT: %.loc21_6.2: ref %ptr.019 = class_element_access %.loc21_6.1, element0 // CHECK:STDOUT: %ptr.ref.loc23: %ptr.019 = name_ref ptr, %ptr.loc16_8 // CHECK:STDOUT: %.loc23_6.1: ref %C = deref %ptr.ref.loc23 -// CHECK:STDOUT: %field.ref.loc23_6: %C.elem = name_ref field, @C.%.loc13_12 [concrete = @C.%.loc13_12] +// CHECK:STDOUT: %field.ref.loc23_6: %C.elem = name_ref field, @C.%.loc13 [concrete = @C.%.loc13] // CHECK:STDOUT: %.loc23_6.2: ref %ptr.019 = class_element_access %.loc23_6.1, element0 // CHECK:STDOUT: %.loc23_6.3: %ptr.019 = bind_value %.loc23_6.2 // CHECK:STDOUT: %.loc23_13.1: ref %C = deref %.loc23_6.3 -// CHECK:STDOUT: %field.ref.loc23_13: %C.elem = name_ref field, @C.%.loc13_12 [concrete = @C.%.loc13_12] +// CHECK:STDOUT: %field.ref.loc23_13: %C.elem = name_ref field, @C.%.loc13 [concrete = @C.%.loc13] // CHECK:STDOUT: %.loc23_13.2: ref %ptr.019 = class_element_access %.loc23_13.1, element0 // CHECK:STDOUT: return // CHECK:STDOUT: } diff --git a/toolchain/check/testdata/return/fail_return_with_returned_var.carbon b/toolchain/check/testdata/return/fail_return_with_returned_var.carbon index b680bbfba6c3..f10c80dbd3b4 100644 --- a/toolchain/check/testdata/return/fail_return_with_returned_var.carbon +++ b/toolchain/check/testdata/return/fail_return_with_returned_var.carbon @@ -109,16 +109,12 @@ fn G() -> C { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { +// CHECK:STDOUT: %int_32.loc23_18: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc23_18: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc23_16: %C.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc23_11: %C.elem = var_pattern %.loc23_16 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc23_11: ref %C.elem = var +// CHECK:STDOUT: %int_32.loc23_30: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc23_30: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] // CHECK:STDOUT: %.loc23_28: %C.elem = field_decl b, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc23_23: %C.elem = var_pattern %.loc23_28 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc23_23: ref %C.elem = var // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete = constants.%struct_type.a.b.501] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a.b [concrete = constants.%complete_type.705] // CHECK:STDOUT: complete_type_witness = %complete_type diff --git a/toolchain/check/testdata/return/no_prelude/import_convert_function.carbon b/toolchain/check/testdata/return/no_prelude/import_convert_function.carbon index 67b4d4cb7d80..6f5967adb30c 100644 --- a/toolchain/check/testdata/return/no_prelude/import_convert_function.carbon +++ b/toolchain/check/testdata/return/no_prelude/import_convert_function.carbon @@ -774,16 +774,16 @@ fn F0(n: i32) -> P.D { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @D { +// CHECK:STDOUT: %int_32.loc7_18: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %int.make_type_signed.loc7_18: init type = call constants.%Int(%int_32.loc7_18) [concrete = constants.%i32.builtin] +// CHECK:STDOUT: %.loc7_18.1: type = value_of_initializer %int.make_type_signed.loc7_18 [concrete = constants.%i32.builtin] +// CHECK:STDOUT: %.loc7_18.2: type = converted %int.make_type_signed.loc7_18, %.loc7_18.1 [concrete = constants.%i32.builtin] // CHECK:STDOUT: %.loc7_16: %D.elem = field_decl n, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc7_11: %D.elem = var_pattern %.loc7_16 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc7_11: ref %D.elem = var +// CHECK:STDOUT: %int_32.loc7_30: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %int.make_type_signed.loc7_30: init type = call constants.%Int(%int_32.loc7_30) [concrete = constants.%i32.builtin] +// CHECK:STDOUT: %.loc7_30.1: type = value_of_initializer %int.make_type_signed.loc7_30 [concrete = constants.%i32.builtin] +// CHECK:STDOUT: %.loc7_30.2: type = converted %int.make_type_signed.loc7_30, %.loc7_30.1 [concrete = constants.%i32.builtin] // CHECK:STDOUT: %.loc7_28: %D.elem = field_decl m, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc7_23: %D.elem = var_pattern %.loc7_28 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc7_23: ref %D.elem = var // CHECK:STDOUT: %struct_type.n.m: type = struct_type {.n: %i32.builtin, .m: %i32.builtin} [concrete = constants.%struct_type.n.m.566] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.n.m [concrete = constants.%complete_type.682] // CHECK:STDOUT: complete_type_witness = %complete_type diff --git a/toolchain/check/testdata/return/returned_var.carbon b/toolchain/check/testdata/return/returned_var.carbon index f1c677734b4a..608819e72ddf 100644 --- a/toolchain/check/testdata/return/returned_var.carbon +++ b/toolchain/check/testdata/return/returned_var.carbon @@ -99,24 +99,20 @@ fn G() -> i32 { // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: %.loc12_8: %C.elem = field_decl a, element0 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc12_3: %C.elem = var_pattern %.loc12_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc12: ref %C.elem = var -// CHECK:STDOUT: %.loc13_8: %C.elem = field_decl b, element1 [concrete] -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc13_3: %C.elem = var_pattern %.loc13_8 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var.loc13: ref %C.elem = var +// CHECK:STDOUT: %int_32.loc12: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc12: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc12: %C.elem = field_decl a, element0 [concrete] +// CHECK:STDOUT: %int_32.loc13: Core.IntLiteral = int_value 32 [concrete = constants.%int_32] +// CHECK:STDOUT: %i32.loc13: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32] +// CHECK:STDOUT: %.loc13: %C.elem = field_decl b, element1 [concrete] // CHECK:STDOUT: %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete = constants.%struct_type.a.b.501] // CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.a.b [concrete = constants.%complete_type.705] // CHECK:STDOUT: complete_type_witness = %complete_type // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%C -// CHECK:STDOUT: .a = %.loc12_8 -// CHECK:STDOUT: .b = %.loc13_8 +// CHECK:STDOUT: .a = %.loc12 +// CHECK:STDOUT: .b = %.loc13 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F() -> %return.param_patt: %C { diff --git a/toolchain/check/testdata/tuple/no_prelude/tuple_pattern.carbon b/toolchain/check/testdata/tuple/no_prelude/tuple_pattern.carbon index cbfb70d7361b..8111e367475a 100644 --- a/toolchain/check/testdata/tuple/no_prelude/tuple_pattern.carbon +++ b/toolchain/check/testdata/tuple/no_prelude/tuple_pattern.carbon @@ -70,9 +70,13 @@ interface I { library "[[@TEST_NAME]]"; class C { - // CHECK:STDERR: fail_in_class.carbon:[[@LINE+4]]:7: error: pattern in field declaration is not a single `:` binding [ExpectedSymbolicBindingInFieldDecl] + // CHECK:STDERR: fail_in_class.carbon:[[@LINE+8]]:7: error: expected identifier in field declaration [ExpectedFieldIdentifier] // CHECK:STDERR: var (x: {}, y: {}); - // CHECK:STDERR: ^~~~~~~~~~~~~~ + // CHECK:STDERR: ^ + // CHECK:STDERR: + // CHECK:STDERR: fail_in_class.carbon:[[@LINE+4]]:3: error: semantics TODO: `handle invalid parse trees in `check`` [SemanticsTodo] + // CHECK:STDERR: var (x: {}, y: {}); + // CHECK:STDERR: ^~~~~~~~~~~~~~~~~~~ // CHECK:STDERR: var (x: {}, y: {}); } @@ -506,35 +510,15 @@ let (a: {}, b: {}) = ({}, {}, {}); // CHECK:STDOUT: // CHECK:STDOUT: constants { // CHECK:STDOUT: %C: type = class_type @C [concrete] -// CHECK:STDOUT: %empty_struct_type: type = struct_type {} [concrete] -// CHECK:STDOUT: %C.elem: type = unbound_element_type %C, %empty_struct_type [concrete] -// CHECK:STDOUT: %tuple.type: type = tuple_type (%C.elem, %C.elem) [concrete] -// CHECK:STDOUT: %struct_type.x.y: type = struct_type {.x: %empty_struct_type, .y: %empty_struct_type} [concrete] -// CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x.y [concrete] // CHECK:STDOUT: } // CHECK:STDOUT: -// CHECK:STDOUT: file { -// CHECK:STDOUT: package: = namespace [concrete] { -// CHECK:STDOUT: .C = %C.decl -// CHECK:STDOUT: } -// CHECK:STDOUT: %C.decl: type = class_decl @C [concrete = constants.%C] {} {} -// CHECK:STDOUT: } +// CHECK:STDOUT: file {} // CHECK:STDOUT: // CHECK:STDOUT: class @C { -// CHECK:STDOUT: name_binding_decl { -// CHECK:STDOUT: %.loc9_20: %tuple.type = tuple_pattern (.inst22.loc9_9, .inst25.loc9_16) -// CHECK:STDOUT: %.loc9_3: %tuple.type = var_pattern %.loc9_20 -// CHECK:STDOUT: } -// CHECK:STDOUT: %.var: ref %tuple.type = var -// CHECK:STDOUT: %struct_type.x.y: type = struct_type {.x: %empty_struct_type, .y: %empty_struct_type} [concrete = constants.%struct_type.x.y] -// CHECK:STDOUT: %complete_type: = complete_type_witness %struct_type.x.y [concrete = constants.%complete_type] -// CHECK:STDOUT: complete_type_witness = %complete_type +// CHECK:STDOUT: complete_type_witness = invalid // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = constants.%C -// CHECK:STDOUT: .x = .inst22.loc9_9 -// CHECK:STDOUT: .y = .inst25.loc9_16 -// CHECK:STDOUT: has_error // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_initializer_mismatch.carbon diff --git a/toolchain/diagnostics/diagnostic_kind.def b/toolchain/diagnostics/diagnostic_kind.def index 814056728134..697a92d9e5e8 100644 --- a/toolchain/diagnostics/diagnostic_kind.def +++ b/toolchain/diagnostics/diagnostic_kind.def @@ -140,6 +140,8 @@ CARBON_DIAGNOSTIC_KIND(ExpectedDeclSemi) CARBON_DIAGNOSTIC_KIND(ExpectedDeclSemiOrDefinition) CARBON_DIAGNOSTIC_KIND(ExpectedAfterBase) CARBON_DIAGNOSTIC_KIND(ExpectedBuiltinName) +CARBON_DIAGNOSTIC_KIND(ExpectedFieldIdentifier) +CARBON_DIAGNOSTIC_KIND(ExpectedFieldColon) CARBON_DIAGNOSTIC_KIND(ImplExpectedAfterForall) CARBON_DIAGNOSTIC_KIND(ImplExpectedAs) @@ -261,7 +263,6 @@ CARBON_DIAGNOSTIC_KIND(ClassForwardDeclaredHere) CARBON_DIAGNOSTIC_KIND(ClassSpecificDeclOutsideClass) CARBON_DIAGNOSTIC_KIND(ClassSpecificDeclPrevious) CARBON_DIAGNOSTIC_KIND(ClassIncompleteWithinDefinition) -CARBON_DIAGNOSTIC_KIND(ExpectedSymbolicBindingInFieldDecl) CARBON_DIAGNOSTIC_KIND(ImplWithoutBase) CARBON_DIAGNOSTIC_KIND(VirtualWithoutSelf) diff --git a/toolchain/parse/context.cpp b/toolchain/parse/context.cpp index e9a4cebcf7bc..57bc87a7ddc6 100644 --- a/toolchain/parse/context.cpp +++ b/toolchain/parse/context.cpp @@ -436,7 +436,9 @@ auto Context::DiagnoseExpectedDeclSemiOrDefinition(Lex::TokenKind expected_kind) // definitions are deferred, such as a class or interface. static auto ParsingInDeferredDefinitionScope(Context& context) -> bool { auto& stack = context.state_stack(); - if (stack.size() < 2 || stack.back().kind != StateKind::DeclScopeLoop) { + if (stack.size() < 2 || + (stack.back().kind != StateKind::DeclScopeLoopAsClass && + stack.back().kind != StateKind::DeclScopeLoopAsNonClass)) { return false; } auto kind = stack[stack.size() - 2].kind; diff --git a/toolchain/parse/handle_decl_definition.cpp b/toolchain/parse/handle_decl_definition.cpp index 77b84ef6bf39..9285a4dafe03 100644 --- a/toolchain/parse/handle_decl_definition.cpp +++ b/toolchain/parse/handle_decl_definition.cpp @@ -22,7 +22,11 @@ static auto HandleDeclOrDefinition(Context& context, NodeKind decl_kind, } context.PushState(state, definition_finish_state); - context.PushState(StateKind::DeclScopeLoop); + if (decl_kind == NodeKind::ClassDecl) { + context.PushState(StateKind::DeclScopeLoopAsClass); + } else { + context.PushState(StateKind::DeclScopeLoopAsNonClass); + } context.AddNode(definition_start_kind, context.Consume(), state.has_error); } diff --git a/toolchain/parse/handle_decl_scope_loop.cpp b/toolchain/parse/handle_decl_scope_loop.cpp index 9495b65ae033..87876ca7f2b0 100644 --- a/toolchain/parse/handle_decl_scope_loop.cpp +++ b/toolchain/parse/handle_decl_scope_loop.cpp @@ -44,6 +44,13 @@ static auto ApplyIntroducer(Context& context, Context::State state, } namespace { +// The kind of context in which a declaration appears. +enum DeclContextKind : int8_t { + NonClassContext = 0, + ClassContext = 1, + MaxDeclContextKind = ClassContext, +}; + // The kind of declaration introduced by an introducer keyword. enum class DeclIntroducerKind : int8_t { Unrecognized, @@ -60,26 +67,41 @@ struct DeclIntroducerInfo { } // namespace static constexpr auto DeclIntroducers = [] { - DeclIntroducerInfo introducers[] = { -#define CARBON_TOKEN(Name) \ - {.introducer_kind = DeclIntroducerKind::Unrecognized, \ - .node_kind = NodeKind::InvalidParse, \ - .state_kind = StateKind::Invalid}, + std::array introducers[] = { +#define CARBON_TOKEN(Name) \ + {{{.introducer_kind = DeclIntroducerKind::Unrecognized, \ + .node_kind = NodeKind::InvalidParse, \ + .state_kind = StateKind::Invalid}, \ + {.introducer_kind = DeclIntroducerKind::Unrecognized, \ + .node_kind = NodeKind::InvalidParse, \ + .state_kind = StateKind::Invalid}}}, #include "toolchain/lex/token_kind.def" }; auto set = [&](Lex::TokenKind token_kind, NodeKind node_kind, StateKind state) { - introducers[token_kind.AsInt()] = { + for (int i = 0; i <= MaxDeclContextKind; ++i) { + introducers[token_kind.AsInt()][i] = { + .introducer_kind = DeclIntroducerKind::NonPackagingDecl, + .node_kind = node_kind, + .state_kind = state}; + } + }; + auto set_contextual = [&](Lex::TokenKind token_kind, + DeclContextKind context_kind, NodeKind node_kind, + StateKind state) { + introducers[token_kind.AsInt()][context_kind] = { .introducer_kind = DeclIntroducerKind::NonPackagingDecl, .node_kind = node_kind, .state_kind = state}; }; auto set_packaging = [&](Lex::TokenKind token_kind, NodeKind node_kind, StateKind state) { - introducers[token_kind.AsInt()] = { - .introducer_kind = DeclIntroducerKind::PackagingDecl, - .node_kind = node_kind, - .state_kind = state}; + for (int i = 0; i <= MaxDeclContextKind; ++i) { + introducers[token_kind.AsInt()][i] = { + .introducer_kind = DeclIntroducerKind::PackagingDecl, + .node_kind = node_kind, + .state_kind = state}; + } }; set(Lex::TokenKind::Adapt, NodeKind::AdaptIntroducer, @@ -105,7 +127,10 @@ static constexpr auto DeclIntroducers = [] { set(Lex::TokenKind::Namespace, NodeKind::NamespaceStart, StateKind::Namespace); set(Lex::TokenKind::Let, NodeKind::LetIntroducer, StateKind::Let); - set(Lex::TokenKind::Var, NodeKind::VariableIntroducer, StateKind::VarAsDecl); + set_contextual(Lex::TokenKind::Var, NonClassContext, + NodeKind::VariableIntroducer, StateKind::VarAsRegular); + set_contextual(Lex::TokenKind::Var, ClassContext, NodeKind::FieldIntroducer, + StateKind::FieldDecl); set_packaging(Lex::TokenKind::Package, NodeKind::PackageIntroducer, StateKind::Package); @@ -121,8 +146,10 @@ static constexpr auto DeclIntroducers = [] { // declaration introducer keyword token, replace the placeholder node and switch // to a state to parse the rest of the declaration. static auto TryHandleAsDecl(Context& context, Context::State state, - bool saw_modifier) -> bool { - const auto& info = DeclIntroducers[context.PositionKind().AsInt()]; + bool saw_modifier, + DeclContextKind decl_context_kind) -> bool { + const auto& info = + DeclIntroducers[context.PositionKind().AsInt()][decl_context_kind]; switch (info.introducer_kind) { case DeclIntroducerKind::Unrecognized: { @@ -246,7 +273,8 @@ static auto TryHandleAsModifier(Context& context) -> bool { } } -auto HandleDecl(Context& context) -> void { +static auto HandleDecl(Context& context, DeclContextKind decl_context_kind) + -> void { auto state = context.PopState(); // Add a placeholder node, to be replaced by the declaration introducer once @@ -257,12 +285,21 @@ auto HandleDecl(Context& context) -> void { while (TryHandleAsModifier(context)) { saw_modifier = true; } - if (!TryHandleAsDecl(context, state, saw_modifier)) { + if (!TryHandleAsDecl(context, state, saw_modifier, decl_context_kind)) { HandleUnrecognizedDecl(context, state.subtree_start); } } -auto HandleDeclScopeLoop(Context& context) -> void { +auto HandleDeclAsClass(Context& context) -> void { + HandleDecl(context, ClassContext); +} + +auto HandleDeclAsNonClass(Context& context) -> void { + HandleDecl(context, NonClassContext); +} + +static auto HandleDeclScopeLoop(Context& context, StateKind decl_state_kind) + -> void { // This maintains the current state unless we're at the end of the scope. if (context.PositionIs(Lex::TokenKind::CloseCurlyBrace) || context.PositionIs(Lex::TokenKind::FileEnd)) { @@ -271,7 +308,15 @@ auto HandleDeclScopeLoop(Context& context) -> void { return; } - context.PushState(StateKind::Decl); + context.PushState(decl_state_kind); +} + +auto HandleDeclScopeLoopAsClass(Context& context) -> void { + HandleDeclScopeLoop(context, StateKind::DeclAsClass); +} + +auto HandleDeclScopeLoopAsNonClass(Context& context) -> void { + HandleDeclScopeLoop(context, StateKind::DeclAsNonClass); } } // namespace Carbon::Parse diff --git a/toolchain/parse/handle_statement.cpp b/toolchain/parse/handle_statement.cpp index c52373dd9f45..d8389ab8f724 100644 --- a/toolchain/parse/handle_statement.cpp +++ b/toolchain/parse/handle_statement.cpp @@ -67,7 +67,7 @@ auto HandleStatement(Context& context) -> void { // We intentionally don't handle Package here, because `package.` can be // used at the start of an expression, and it's not worth disambiguating it. case Lex::TokenKind::Var: { - context.PushState(StateKind::Decl); + context.PushState(StateKind::DeclAsNonClass); break; } default: { diff --git a/toolchain/parse/handle_var.cpp b/toolchain/parse/handle_var.cpp index 8df3cb6bb0a5..e6003f62762e 100644 --- a/toolchain/parse/handle_var.cpp +++ b/toolchain/parse/handle_var.cpp @@ -7,7 +7,7 @@ namespace Carbon::Parse { -// Handles VarAs(Decl|Returned). +// Handles VarAs(Regular|Returned). static auto HandleVar(Context& context, StateKind finish_state_kind, Lex::TokenIndex returned_token = Lex::TokenIndex::None) -> void { @@ -19,7 +19,7 @@ static auto HandleVar(Context& context, StateKind finish_state_kind, // TODO: is there a cleaner way to give VarAfterPattern access to the `var` // token? state.token = *(context.position() - 1); - context.PushState(state, StateKind::VarAfterPattern); + context.PushState(state, StateKind::VarAfterPatternAsVar); if (returned_token.has_value()) { context.AddLeafNode(NodeKind::ReturnedModifier, returned_token); @@ -28,8 +28,8 @@ static auto HandleVar(Context& context, StateKind finish_state_kind, context.PushStateForPattern(StateKind::Pattern, /*in_var_pattern=*/true); } -auto HandleVarAsDecl(Context& context) -> void { - HandleVar(context, StateKind::VarFinishAsDecl); +auto HandleVarAsRegular(Context& context) -> void { + HandleVar(context, StateKind::VarFinishAsRegular); } auto HandleVarAsReturned(Context& context) -> void { @@ -47,7 +47,7 @@ auto HandleVarAsReturned(Context& context) -> void { } context.AddLeafNode(NodeKind::VariableIntroducer, context.Consume()); - HandleVar(context, StateKind::VarFinishAsDecl, returned_token); + HandleVar(context, StateKind::VarFinishAsRegular, returned_token); } auto HandleVarAsFor(Context& context) -> void { @@ -59,7 +59,37 @@ auto HandleVarAsFor(Context& context) -> void { context.PushState(StateKind::Pattern); } -auto HandleVarAfterPattern(Context& context) -> void { +auto HandleFieldDecl(Context& context) -> void { + auto state = context.PopState(); + + auto identifier = context.ConsumeIf(Lex::TokenKind::Identifier); + if (!identifier) { + CARBON_DIAGNOSTIC(ExpectedFieldIdentifier, Error, + "expected identifier in field declaration"); + context.emitter().Emit(*context.position(), ExpectedFieldIdentifier); + } + auto colon = context.ConsumeIf(Lex::TokenKind::Colon); + if (identifier && !colon) { + CARBON_DIAGNOSTIC(ExpectedFieldColon, Error, + "expected `:` in field declaration"); + context.emitter().Emit(*context.position(), ExpectedFieldColon); + } + if (!identifier || !colon) { + context.AddNode(NodeKind::FieldDecl, + context.SkipPastLikelyEnd(*(context.position() - 1)), + /*has_error=*/true); + state.has_error = true; + return; + } + context.PushState(state, StateKind::VarFinishAsField); + context.AddLeafNode(NodeKind::IdentifierNameNotBeforeParams, *identifier); + state.token = *colon; + context.PushState(state, StateKind::VarAfterPatternAsField); + context.PushState(StateKind::Expr); +} + +static auto HandleVarAfterPattern(Context& context, NodeKind pattern_kind, + NodeKind init_kind) -> void { auto state = context.PopState(); if (state.has_error) { @@ -69,16 +99,26 @@ auto HandleVarAfterPattern(Context& context) -> void { } } - context.AddNode(NodeKind::VariablePattern, state.token, state.has_error); + context.AddNode(pattern_kind, state.token, state.has_error); if (context.PositionIs(Lex::TokenKind::Equal)) { - context.AddLeafNode(NodeKind::VariableInitializer, + context.AddLeafNode(init_kind, context.ConsumeChecked(Lex::TokenKind::Equal)); context.PushState(StateKind::Expr); } } -auto HandleVarFinishAsDecl(Context& context) -> void { +auto HandleVarAfterPatternAsVar(Context& context) -> void { + HandleVarAfterPattern(context, NodeKind::VariablePattern, + NodeKind::VariableInitializer); +} + +auto HandleVarAfterPatternAsField(Context& context) -> void { + HandleVarAfterPattern(context, NodeKind::FieldNameAndType, + NodeKind::FieldInitializer); +} + +static auto HandleVarFinish(Context& context, NodeKind node_kind) -> void { auto state = context.PopState(); auto end_token = state.token; @@ -90,7 +130,15 @@ auto HandleVarFinishAsDecl(Context& context) -> void { state.has_error = true; end_token = context.SkipPastLikelyEnd(state.token); } - context.AddNode(NodeKind::VariableDecl, end_token, state.has_error); + context.AddNode(node_kind, end_token, state.has_error); +} + +auto HandleVarFinishAsRegular(Context& context) -> void { + HandleVarFinish(context, NodeKind::VariableDecl); +} + +auto HandleVarFinishAsField(Context& context) -> void { + HandleVarFinish(context, NodeKind::FieldDecl); } auto HandleVarFinishAsFor(Context& context) -> void { diff --git a/toolchain/parse/node_kind.def b/toolchain/parse/node_kind.def index dcc37807003f..43697735a983 100644 --- a/toolchain/parse/node_kind.def +++ b/toolchain/parse/node_kind.def @@ -185,6 +185,11 @@ CARBON_PARSE_NODE_KIND(VariableInitializer) CARBON_PARSE_NODE_KIND(VariableDecl) CARBON_PARSE_NODE_KIND(VariablePattern) +CARBON_PARSE_NODE_KIND(FieldIntroducer) +CARBON_PARSE_NODE_KIND(FieldInitializer) +CARBON_PARSE_NODE_KIND(FieldDecl) +CARBON_PARSE_NODE_KIND(FieldNameAndType) + CARBON_PARSE_NODE_KIND(ExprStatement) CARBON_PARSE_NODE_KIND(BreakStatementStart) diff --git a/toolchain/parse/parse.cpp b/toolchain/parse/parse.cpp index 9b5872757339..b4368f7ff11c 100644 --- a/toolchain/parse/parse.cpp +++ b/toolchain/parse/parse.cpp @@ -28,7 +28,7 @@ auto Parse(Lex::TokenizedBuffer& tokens, Diagnostics::Consumer& consumer, context.AddLeafNode(NodeKind::FileStart, context.ConsumeChecked(Lex::TokenKind::FileStart)); - context.PushState(StateKind::DeclScopeLoop); + context.PushState(StateKind::DeclScopeLoopAsNonClass); while (!context.state_stack().empty()) { switch (context.state_stack().back().kind) { diff --git a/toolchain/parse/state.def b/toolchain/parse/state.def index c494938097e8..44e4217b8d32 100644 --- a/toolchain/parse/state.def +++ b/toolchain/parse/state.def @@ -355,9 +355,13 @@ CARBON_PARSE_STATE(DeclNameAndParamsAfterParams) // ^~~~~~~ // 1. Package // -// var ... +// var ... (variant is NonClass) // ^~~ -// 1. VarAsDecl +// 1. VarAsRegular +// +// var ... (variant is Class) +// ^~~ +// 1. FieldDecl // // ; // ^ @@ -366,7 +370,7 @@ CARBON_PARSE_STATE(DeclNameAndParamsAfterParams) // ??? ; // ^~~~~ // (state done) -CARBON_PARSE_STATE(Decl) +CARBON_PARSE_STATE_VARIANTS2(Decl, Class, NonClass) // Handles processing of a declaration scope, which contains a sequence of // declarations. @@ -379,10 +383,10 @@ CARBON_PARSE_STATE(Decl) // // ... // ^ -// 1. Decl -// 2. DeclScopeLoop +// 1. DeclAs(Class|NonClass) +// 2. DeclScopeLoopAs(Class|NonClass) // -CARBON_PARSE_STATE(DeclScopeLoop) +CARBON_PARSE_STATE_VARIANTS2(DeclScopeLoop, Class, NonClass) // Handles periods. Only does one `.` segment; the source is // responsible for handling chaining. @@ -1274,7 +1278,7 @@ CARBON_PARSE_STATE_VARIANTS3(TypeAfterIntroducer, Class, Interface, // // class/impl/interface/constraint name ( ... ) { // ^ -// 1. DeclScopeLoop +// 1. DeclScopeLoopAs(Class|NonClass) // 2. DeclDefinitionFinishAs(Class|Impl|Interface|NamedConstraint) // // class/impl/interface/constraint name ( ... ) ; @@ -1360,13 +1364,13 @@ CARBON_PARSE_STATE(ImplAfterForall) // 1. Expr CARBON_PARSE_STATE(ImplBeforeAs) -// Handles the start of a `var` or `returned var`. +// Handles the start of a `var` or `returned var` in a non-class context. // -// var ... (variant is Decl) +// var ... (variant is Regular) // ^ // 1. Pattern -// 2. VarAfterPattern -// 3. VarFinishAsDecl +// 2. VarAfterPatternAsVar +// 3. VarFinishAsRegular // // var ... (variant is For) // ^ @@ -1376,13 +1380,13 @@ CARBON_PARSE_STATE(ImplBeforeAs) // returned var ... (variant is Returned) // ^~~~~~~~~~~~ // 1. Pattern -// 2. VarAfterPattern -// 3. VarFinishAsDecl +// 2. VarAfterPatternAsVar +// 3. VarFinishAsRegular // // returned ??? ; (variant is Returned) // ^~~~~~~~~~~~~~ // (state done) -CARBON_PARSE_STATE_VARIANTS3(Var, Decl, Returned, For) +CARBON_PARSE_STATE_VARIANTS3(Var, Regular, Returned, For) // Handles `var` after the pattern, either followed by an initializer or the // semicolon. @@ -1396,13 +1400,13 @@ CARBON_PARSE_STATE_VARIANTS3(Var, Decl, Returned, For) // var ... ... // ^ // (state done) -CARBON_PARSE_STATE(VarAfterPattern) +CARBON_PARSE_STATE_VARIANTS2(VarAfterPattern, Var, Field) // Handles `var` parsing at the end. // -// var ... ; (variant is Semicolon) +// var ... ; (variant is Regular or Field) // ^ -// var ... ??? ; (variant is Semicolon) +// var ... ??? ; (variant is Regular or Field) // ^~~~~ // (state done) // @@ -1411,7 +1415,22 @@ CARBON_PARSE_STATE(VarAfterPattern) // var ... : (variant is For, invalid) // ^ // (state done) -CARBON_PARSE_STATE_VARIANTS2(VarFinish, Decl, For) +CARBON_PARSE_STATE_VARIANTS3(VarFinish, Regular, For, Field) + +// Handles the beginning of a field declaration (`var` in a class context). +// +// var name : type +// ^~~~~~ +// 1. Expr +// 2. VarAfterPatternAsField +// 3. VarFinishAsField +// +// var ??? ; +// ^~~~~ +// var name ??? ; +// ^~~~~~~~~ +// (state done) +CARBON_PARSE_STATE(FieldDecl) // Handles the start of a `let`. // diff --git a/toolchain/parse/testdata/class/fail_var_name.carbon b/toolchain/parse/testdata/class/fail_var_name.carbon new file mode 100644 index 000000000000..57b42f308e94 --- /dev/null +++ b/toolchain/parse/testdata/class/fail_var_name.carbon @@ -0,0 +1,91 @@ +// 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 +// +// AUTOUPDATE +// TIP: To test this file alone, run: +// TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/parse/testdata/class/fail_var_name.carbon +// TIP: To dump output, run: +// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/parse/testdata/class/fail_var_name.carbon + +class C { + // CHECK:STDERR: fail_var_name.carbon:[[@LINE+4]]:6: error: expected identifier in field declaration [ExpectedFieldIdentifier] + // CHECK:STDERR: var; + // CHECK:STDERR: ^ + // CHECK:STDERR: + var; + + // CHECK:STDERR: fail_var_name.carbon:[[@LINE+4]]:11: error: expected `:` in field declaration [ExpectedFieldColon] + // CHECK:STDERR: var name; + // CHECK:STDERR: ^ + // CHECK:STDERR: + var name; + + // CHECK:STDERR: fail_var_name.carbon:[[@LINE+4]]:7: error: expected identifier in field declaration [ExpectedFieldIdentifier] + // CHECK:STDERR: var :; + // CHECK:STDERR: ^ + // CHECK:STDERR: + var :; + + // CHECK:STDERR: fail_var_name.carbon:[[@LINE+4]]:7: error: expected identifier in field declaration [ExpectedFieldIdentifier] + // CHECK:STDERR: var : C; + // CHECK:STDERR: ^ + // CHECK:STDERR: + var : C; + + // CHECK:STDERR: fail_var_name.carbon:[[@LINE+4]]:12: error: expected expression [ExpectedExpr] + // CHECK:STDERR: var name:; + // CHECK:STDERR: ^ + // CHECK:STDERR: + var name:; + + // CHECK:STDERR: fail_var_name.carbon:[[@LINE+4]]:12: error: expected `:` in field declaration [ExpectedFieldColon] + // CHECK:STDERR: var name C; + // CHECK:STDERR: ^ + // CHECK:STDERR: + var name C; + + // CHECK:STDERR: fail_var_name.carbon:[[@LINE+4]]:15: error: `var` declarations must end with a `;` [ExpectedDeclSemi] + // CHECK:STDERR: var name: C C; + // CHECK:STDERR: ^ + // CHECK:STDERR: + var name: C C; + + // CHECK:STDERR: fail_var_name.carbon:[[@LINE+4]]:7: error: expected identifier in field declaration [ExpectedFieldIdentifier] + // CHECK:STDERR: var self: C; + // CHECK:STDERR: ^~~~ + // CHECK:STDERR: + var self: C; +} + +// CHECK:STDOUT: - filename: fail_var_name.carbon +// CHECK:STDOUT: parse_tree: [ +// CHECK:STDOUT: {kind: 'FileStart', text: ''}, +// CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, +// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'C'}, +// CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, +// CHECK:STDOUT: {kind: 'FieldIntroducer', text: 'var'}, +// CHECK:STDOUT: {kind: 'FieldDecl', text: ';', has_error: yes, subtree_size: 2}, +// CHECK:STDOUT: {kind: 'FieldIntroducer', text: 'var'}, +// CHECK:STDOUT: {kind: 'FieldDecl', text: ';', has_error: yes, subtree_size: 2}, +// CHECK:STDOUT: {kind: 'FieldIntroducer', text: 'var'}, +// CHECK:STDOUT: {kind: 'FieldDecl', text: ';', has_error: yes, subtree_size: 2}, +// CHECK:STDOUT: {kind: 'FieldIntroducer', text: 'var'}, +// CHECK:STDOUT: {kind: 'FieldDecl', text: ';', has_error: yes, subtree_size: 2}, +// CHECK:STDOUT: {kind: 'FieldIntroducer', text: 'var'}, +// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'name'}, +// CHECK:STDOUT: {kind: 'InvalidParse', text: ';', has_error: yes}, +// CHECK:STDOUT: {kind: 'FieldNameAndType', text: ':', has_error: yes, subtree_size: 3}, +// CHECK:STDOUT: {kind: 'FieldDecl', text: ';', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'FieldIntroducer', text: 'var'}, +// CHECK:STDOUT: {kind: 'FieldDecl', text: ';', has_error: yes, subtree_size: 2}, +// CHECK:STDOUT: {kind: 'FieldIntroducer', text: 'var'}, +// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'name'}, +// CHECK:STDOUT: {kind: 'IdentifierNameExpr', text: 'C'}, +// CHECK:STDOUT: {kind: 'FieldNameAndType', text: ':', subtree_size: 3}, +// CHECK:STDOUT: {kind: 'FieldDecl', text: ';', has_error: yes, subtree_size: 5}, +// CHECK:STDOUT: {kind: 'FieldIntroducer', text: 'var'}, +// CHECK:STDOUT: {kind: 'FieldDecl', text: ';', has_error: yes, subtree_size: 2}, +// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 26}, +// CHECK:STDOUT: {kind: 'FileEnd', text: ''}, +// CHECK:STDOUT: ] diff --git a/toolchain/parse/testdata/class/var.carbon b/toolchain/parse/testdata/class/var.carbon index c9df51fc9c9b..2afb18be16fb 100644 --- a/toolchain/parse/testdata/class/var.carbon +++ b/toolchain/parse/testdata/class/var.carbon @@ -10,20 +10,28 @@ class Foo { var x: i32; + var y: i32 = 0; } + // CHECK:STDOUT: - filename: var.carbon // CHECK:STDOUT: parse_tree: [ // CHECK:STDOUT: {kind: 'FileStart', text: ''}, // CHECK:STDOUT: {kind: 'ClassIntroducer', text: 'class'}, // CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'Foo'}, // CHECK:STDOUT: {kind: 'ClassDefinitionStart', text: '{', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'VariableIntroducer', text: 'var'}, -// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'x'}, -// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, -// CHECK:STDOUT: {kind: 'VarBindingPattern', text: ':', subtree_size: 3}, -// CHECK:STDOUT: {kind: 'VariablePattern', text: 'var', subtree_size: 4}, -// CHECK:STDOUT: {kind: 'VariableDecl', text: ';', subtree_size: 6}, -// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 10}, +// CHECK:STDOUT: {kind: 'FieldIntroducer', text: 'var'}, +// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'x'}, +// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, +// CHECK:STDOUT: {kind: 'FieldNameAndType', text: ':', subtree_size: 3}, +// CHECK:STDOUT: {kind: 'FieldDecl', text: ';', subtree_size: 5}, +// CHECK:STDOUT: {kind: 'FieldIntroducer', text: 'var'}, +// CHECK:STDOUT: {kind: 'IdentifierNameNotBeforeParams', text: 'y'}, +// CHECK:STDOUT: {kind: 'IntTypeLiteral', text: 'i32'}, +// CHECK:STDOUT: {kind: 'FieldNameAndType', text: ':', subtree_size: 3}, +// CHECK:STDOUT: {kind: 'FieldInitializer', text: '='}, +// CHECK:STDOUT: {kind: 'IntLiteral', text: '0'}, +// CHECK:STDOUT: {kind: 'FieldDecl', text: ';', subtree_size: 7}, +// CHECK:STDOUT: {kind: 'ClassDefinition', text: '}', subtree_size: 16}, // CHECK:STDOUT: {kind: 'FileEnd', text: ''}, // CHECK:STDOUT: ] diff --git a/toolchain/parse/typed_nodes.h b/toolchain/parse/typed_nodes.h index 3f81939580ab..5b11a2b5bf3f 100644 --- a/toolchain/parse/typed_nodes.h +++ b/toolchain/parse/typed_nodes.h @@ -562,6 +562,35 @@ struct VariableDecl { Lex::SemiTokenIndex token; }; +using FieldIntroducer = LeafNode; +using FieldInitializer = + LeafNode; + +struct FieldNameAndType { + static constexpr auto Kind = + NodeKind::FieldNameAndType.Define({.child_count = 2}); + + IdentifierNameNotBeforeParamsId name; + Lex::ColonTokenIndex token; + AnyExprId type; +}; + +struct FieldDecl { + static constexpr auto Kind = NodeKind::FieldDecl.Define( + {.category = NodeCategory::Decl, .bracketed_by = FieldIntroducer::Kind}); + + FieldIntroducerId introducer; + llvm::SmallVector modifiers; + FieldNameAndTypeId name_and_type; + + struct Initializer { + FieldInitializerId equals; + AnyExprId value; + }; + std::optional initializer; + Lex::SemiTokenIndex token; +}; + // A `var` pattern. struct VariablePattern { static constexpr auto Kind = NodeKind::VariablePattern.Define( diff --git a/toolchain/parse/typed_nodes_test.cpp b/toolchain/parse/typed_nodes_test.cpp index ac0cb8fc4bc9..53c9d5edb2c4 100644 --- a/toolchain/parse/typed_nodes_test.cpp +++ b/toolchain/parse/typed_nodes_test.cpp @@ -237,7 +237,7 @@ TEST_F(TypedNodeTest, VerifyExtractTraceExpression) { // Use Regex matching to avoid hard-coding the result of `typeinfo(T).name()`. EXPECT_THAT(err1.message(), testing::MatchesRegex( R"Trace(Aggregate [^:]*: begin -Optional [^:]*leDecl11InitializerE: begin +Optional [^:]*: begin Aggregate [^:]*: begin NodeIdInCategory Expr: kind MemberAccessExpr consumed NodeIdForKind: VariableInitializer consumed diff --git a/toolchain/sem_ir/typed_insts.h b/toolchain/sem_ir/typed_insts.h index 94831919e78d..2e335cd4b2b6 100644 --- a/toolchain/sem_ir/typed_insts.h +++ b/toolchain/sem_ir/typed_insts.h @@ -748,7 +748,7 @@ struct FacetValue { // `FieldDecl` instruction is an `UnboundElementType`. struct FieldDecl { static constexpr auto Kind = - InstKind::FieldDecl.Define( + InstKind::FieldDecl.Define( {.ir_name = "field_decl", .constant_kind = InstConstantKind::Unique}); TypeId type_id;