Clean up some TODO and other comments (#5813)

This commit is contained in:
David Blaikie
2025-07-17 18:58:34 +00:00
committed by GitHub
parent c2a0ee98c5
commit aeba878335
5 changed files with 62 additions and 66 deletions
-2
View File
@@ -604,8 +604,6 @@ static auto ConvertStructToClass(
auto result_id = ConvertStructToStructOrClass<SemIR::ClassElementAccess>(
context, src_type, dest_struct_type, value_id, target,
// TODO: Pass down the specific_id of the passed in
// dest_vtable_ptr_inst_id, or from the dest_type.specific_id.
dest_vtable_ptr_inst_id);
if (need_temporary) {
+1 -1
View File
@@ -60,7 +60,7 @@ struct ConversionTarget {
// TODO: The `vtable_id` parameter is too much of a special case here, and
// should be removed - once partial classes are implemented, the vtable pointer
// initialization will be done not in this conversion, but during initialization
// of the object of non-partial class time from the object of partial class
// of the object of non-partial class type from the object of partial class
// type.
auto Convert(Context& context, SemIR::LocId loc_id, SemIR::InstId expr_id,
ConversionTarget target,
-1
View File
@@ -325,7 +325,6 @@ auto HandleParseNode(Context& context, Parse::PrefixOperatorPartialId node_id)
context.emitter().Emit(node_id, PartialOnFinal, inner_type.type_id);
}
// TODO: Add diagnostics for partial applied to non-base/abstract types.
AddInstAndPush<SemIR::PartialType>(
context, node_id,
{.type_id = SemIR::TypeType::TypeId, .inner_id = inner_type.inst_id});
+55 -57
View File
@@ -124,11 +124,9 @@ base class Base {
fn F() {
var i: i32 = 3;
// TODO: These should initialize element1 (.m), not element0 (the vptr)
var b1: Base = {.m2 = i, .m1 = i};
var b2: Base = {.m2 = 3, .m1 = 5};
// This one is good, though.
b1.m2 = 4;
}
@@ -1458,74 +1456,74 @@ var v: Base(T1) = {};
// CHECK:STDOUT: %b1.var_patt: %pattern_type.bcc = var_pattern %b1.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %b1.var: ref %Base = var %b1.var_patt
// CHECK:STDOUT: %i.ref.loc14_25: ref %i32 = name_ref i, %i
// CHECK:STDOUT: %i.ref.loc14_34: ref %i32 = name_ref i, %i
// CHECK:STDOUT: %.loc14_35.1: %struct_type.m2.m1.68c = struct_literal (%i.ref.loc14_25, %i.ref.loc14_34)
// CHECK:STDOUT: %.loc14_35.2: ref %ptr.454 = class_element_access %b1.var, element0
// CHECK:STDOUT: %.loc14_35.3: init %ptr.454 = initialize_from @Base.%vtable_ptr to %.loc14_35.2 [concrete = constants.%Base.vtable_ptr]
// CHECK:STDOUT: %.loc14_34: %i32 = bind_value %i.ref.loc14_34
// CHECK:STDOUT: %.loc14_35.4: ref %i32 = class_element_access %b1.var, element2
// CHECK:STDOUT: %.loc14_35.5: init %i32 = initialize_from %.loc14_34 to %.loc14_35.4
// CHECK:STDOUT: %.loc14_25: %i32 = bind_value %i.ref.loc14_25
// CHECK:STDOUT: %.loc14_35.6: ref %i32 = class_element_access %b1.var, element1
// CHECK:STDOUT: %.loc14_35.7: init %i32 = initialize_from %.loc14_25 to %.loc14_35.6
// CHECK:STDOUT: %.loc14_35.8: init %Base = class_init (%.loc14_35.3, %.loc14_35.5, %.loc14_35.7), %b1.var
// CHECK:STDOUT: %.loc14_3: init %Base = converted %.loc14_35.1, %.loc14_35.8
// CHECK:STDOUT: assign %b1.var, %.loc14_3
// CHECK:STDOUT: %Base.ref.loc14: type = name_ref Base, file.%Base.decl [concrete = constants.%Base]
// CHECK:STDOUT: %i.ref.loc13_25: ref %i32 = name_ref i, %i
// CHECK:STDOUT: %i.ref.loc13_34: ref %i32 = name_ref i, %i
// CHECK:STDOUT: %.loc13_35.1: %struct_type.m2.m1.68c = struct_literal (%i.ref.loc13_25, %i.ref.loc13_34)
// CHECK:STDOUT: %.loc13_35.2: ref %ptr.454 = class_element_access %b1.var, element0
// CHECK:STDOUT: %.loc13_35.3: init %ptr.454 = initialize_from @Base.%vtable_ptr to %.loc13_35.2 [concrete = constants.%Base.vtable_ptr]
// CHECK:STDOUT: %.loc13_34: %i32 = bind_value %i.ref.loc13_34
// CHECK:STDOUT: %.loc13_35.4: ref %i32 = class_element_access %b1.var, element2
// CHECK:STDOUT: %.loc13_35.5: init %i32 = initialize_from %.loc13_34 to %.loc13_35.4
// CHECK:STDOUT: %.loc13_25: %i32 = bind_value %i.ref.loc13_25
// CHECK:STDOUT: %.loc13_35.6: ref %i32 = class_element_access %b1.var, element1
// CHECK:STDOUT: %.loc13_35.7: init %i32 = initialize_from %.loc13_25 to %.loc13_35.6
// CHECK:STDOUT: %.loc13_35.8: init %Base = class_init (%.loc13_35.3, %.loc13_35.5, %.loc13_35.7), %b1.var
// CHECK:STDOUT: %.loc13_3: init %Base = converted %.loc13_35.1, %.loc13_35.8
// CHECK:STDOUT: assign %b1.var, %.loc13_3
// CHECK:STDOUT: %Base.ref.loc13: type = name_ref Base, file.%Base.decl [concrete = constants.%Base]
// CHECK:STDOUT: %b1: ref %Base = bind_name b1, %b1.var
// CHECK:STDOUT: name_binding_decl {
// CHECK:STDOUT: %b2.patt: %pattern_type.bcc = binding_pattern b2 [concrete]
// CHECK:STDOUT: %b2.var_patt: %pattern_type.bcc = var_pattern %b2.patt [concrete]
// CHECK:STDOUT: }
// CHECK:STDOUT: %b2.var: ref %Base = var %b2.var_patt
// CHECK:STDOUT: %int_3.loc15: Core.IntLiteral = int_value 3 [concrete = constants.%int_3.1ba]
// CHECK:STDOUT: %int_3.loc14: Core.IntLiteral = int_value 3 [concrete = constants.%int_3.1ba]
// CHECK:STDOUT: %int_5: Core.IntLiteral = int_value 5 [concrete = constants.%int_5.64b]
// CHECK:STDOUT: %.loc15_35.1: %struct_type.m2.m1.5f2 = struct_literal (%int_3.loc15, %int_5)
// CHECK:STDOUT: %.loc15_35.2: ref %ptr.454 = class_element_access %b2.var, element0
// CHECK:STDOUT: %.loc15_35.3: init %ptr.454 = initialize_from @Base.%vtable_ptr to %.loc15_35.2 [concrete = constants.%Base.vtable_ptr]
// CHECK:STDOUT: %impl.elem0.loc15_35.1: %.9c3 = impl_witness_access constants.%ImplicitAs.impl_witness.c75, element0 [concrete = constants.%Convert.956]
// CHECK:STDOUT: %bound_method.loc15_35.1: <bound method> = bound_method %int_5, %impl.elem0.loc15_35.1 [concrete = constants.%Convert.bound.4e6]
// CHECK:STDOUT: %specific_fn.loc15_35.1: <specific function> = specific_function %impl.elem0.loc15_35.1, @Convert.2(constants.%int_32) [concrete = constants.%Convert.specific_fn]
// CHECK:STDOUT: %bound_method.loc15_35.2: <bound method> = bound_method %int_5, %specific_fn.loc15_35.1 [concrete = constants.%bound_method.a25]
// CHECK:STDOUT: %int.convert_checked.loc15_35.1: init %i32 = call %bound_method.loc15_35.2(%int_5) [concrete = constants.%int_5.0f6]
// CHECK:STDOUT: %.loc15_35.4: init %i32 = converted %int_5, %int.convert_checked.loc15_35.1 [concrete = constants.%int_5.0f6]
// CHECK:STDOUT: %.loc15_35.5: ref %i32 = class_element_access %b2.var, element2
// CHECK:STDOUT: %.loc15_35.6: init %i32 = initialize_from %.loc15_35.4 to %.loc15_35.5 [concrete = constants.%int_5.0f6]
// CHECK:STDOUT: %impl.elem0.loc15_35.2: %.9c3 = impl_witness_access constants.%ImplicitAs.impl_witness.c75, element0 [concrete = constants.%Convert.956]
// CHECK:STDOUT: %bound_method.loc15_35.3: <bound method> = bound_method %int_3.loc15, %impl.elem0.loc15_35.2 [concrete = constants.%Convert.bound.b30]
// CHECK:STDOUT: %specific_fn.loc15_35.2: <specific function> = specific_function %impl.elem0.loc15_35.2, @Convert.2(constants.%int_32) [concrete = constants.%Convert.specific_fn]
// CHECK:STDOUT: %bound_method.loc15_35.4: <bound method> = bound_method %int_3.loc15, %specific_fn.loc15_35.2 [concrete = constants.%bound_method.047]
// CHECK:STDOUT: %int.convert_checked.loc15_35.2: init %i32 = call %bound_method.loc15_35.4(%int_3.loc15) [concrete = constants.%int_3.822]
// CHECK:STDOUT: %.loc15_35.7: init %i32 = converted %int_3.loc15, %int.convert_checked.loc15_35.2 [concrete = constants.%int_3.822]
// CHECK:STDOUT: %.loc15_35.8: ref %i32 = class_element_access %b2.var, element1
// CHECK:STDOUT: %.loc15_35.9: init %i32 = initialize_from %.loc15_35.7 to %.loc15_35.8 [concrete = constants.%int_3.822]
// CHECK:STDOUT: %.loc15_35.10: init %Base = class_init (%.loc15_35.3, %.loc15_35.6, %.loc15_35.9), %b2.var [concrete = constants.%Base.val]
// CHECK:STDOUT: %.loc15_3: init %Base = converted %.loc15_35.1, %.loc15_35.10 [concrete = constants.%Base.val]
// CHECK:STDOUT: assign %b2.var, %.loc15_3
// CHECK:STDOUT: %Base.ref.loc15: type = name_ref Base, file.%Base.decl [concrete = constants.%Base]
// CHECK:STDOUT: %.loc14_35.1: %struct_type.m2.m1.5f2 = struct_literal (%int_3.loc14, %int_5)
// CHECK:STDOUT: %.loc14_35.2: ref %ptr.454 = class_element_access %b2.var, element0
// CHECK:STDOUT: %.loc14_35.3: init %ptr.454 = initialize_from @Base.%vtable_ptr to %.loc14_35.2 [concrete = constants.%Base.vtable_ptr]
// CHECK:STDOUT: %impl.elem0.loc14_35.1: %.9c3 = impl_witness_access constants.%ImplicitAs.impl_witness.c75, element0 [concrete = constants.%Convert.956]
// CHECK:STDOUT: %bound_method.loc14_35.1: <bound method> = bound_method %int_5, %impl.elem0.loc14_35.1 [concrete = constants.%Convert.bound.4e6]
// CHECK:STDOUT: %specific_fn.loc14_35.1: <specific function> = specific_function %impl.elem0.loc14_35.1, @Convert.2(constants.%int_32) [concrete = constants.%Convert.specific_fn]
// CHECK:STDOUT: %bound_method.loc14_35.2: <bound method> = bound_method %int_5, %specific_fn.loc14_35.1 [concrete = constants.%bound_method.a25]
// CHECK:STDOUT: %int.convert_checked.loc14_35.1: init %i32 = call %bound_method.loc14_35.2(%int_5) [concrete = constants.%int_5.0f6]
// CHECK:STDOUT: %.loc14_35.4: init %i32 = converted %int_5, %int.convert_checked.loc14_35.1 [concrete = constants.%int_5.0f6]
// CHECK:STDOUT: %.loc14_35.5: ref %i32 = class_element_access %b2.var, element2
// CHECK:STDOUT: %.loc14_35.6: init %i32 = initialize_from %.loc14_35.4 to %.loc14_35.5 [concrete = constants.%int_5.0f6]
// CHECK:STDOUT: %impl.elem0.loc14_35.2: %.9c3 = impl_witness_access constants.%ImplicitAs.impl_witness.c75, element0 [concrete = constants.%Convert.956]
// CHECK:STDOUT: %bound_method.loc14_35.3: <bound method> = bound_method %int_3.loc14, %impl.elem0.loc14_35.2 [concrete = constants.%Convert.bound.b30]
// CHECK:STDOUT: %specific_fn.loc14_35.2: <specific function> = specific_function %impl.elem0.loc14_35.2, @Convert.2(constants.%int_32) [concrete = constants.%Convert.specific_fn]
// CHECK:STDOUT: %bound_method.loc14_35.4: <bound method> = bound_method %int_3.loc14, %specific_fn.loc14_35.2 [concrete = constants.%bound_method.047]
// CHECK:STDOUT: %int.convert_checked.loc14_35.2: init %i32 = call %bound_method.loc14_35.4(%int_3.loc14) [concrete = constants.%int_3.822]
// CHECK:STDOUT: %.loc14_35.7: init %i32 = converted %int_3.loc14, %int.convert_checked.loc14_35.2 [concrete = constants.%int_3.822]
// CHECK:STDOUT: %.loc14_35.8: ref %i32 = class_element_access %b2.var, element1
// CHECK:STDOUT: %.loc14_35.9: init %i32 = initialize_from %.loc14_35.7 to %.loc14_35.8 [concrete = constants.%int_3.822]
// CHECK:STDOUT: %.loc14_35.10: init %Base = class_init (%.loc14_35.3, %.loc14_35.6, %.loc14_35.9), %b2.var [concrete = constants.%Base.val]
// CHECK:STDOUT: %.loc14_3: init %Base = converted %.loc14_35.1, %.loc14_35.10 [concrete = constants.%Base.val]
// CHECK:STDOUT: assign %b2.var, %.loc14_3
// CHECK:STDOUT: %Base.ref.loc14: 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 [concrete = @Base.%.loc6]
// CHECK:STDOUT: %.loc18_5: ref %i32 = class_element_access %b1.ref, element2
// CHECK:STDOUT: %.loc16_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]
// CHECK:STDOUT: %bound_method.loc18_9.1: <bound method> = bound_method %int_4, %impl.elem0.loc18 [concrete = constants.%Convert.bound.ac3]
// CHECK:STDOUT: %specific_fn.loc18: <specific function> = specific_function %impl.elem0.loc18, @Convert.2(constants.%int_32) [concrete = constants.%Convert.specific_fn]
// CHECK:STDOUT: %bound_method.loc18_9.2: <bound method> = bound_method %int_4, %specific_fn.loc18 [concrete = constants.%bound_method.1da]
// CHECK:STDOUT: %int.convert_checked.loc18: init %i32 = call %bound_method.loc18_9.2(%int_4) [concrete = constants.%int_4.940]
// CHECK:STDOUT: %.loc18_9: init %i32 = converted %int_4, %int.convert_checked.loc18 [concrete = constants.%int_4.940]
// CHECK:STDOUT: assign %.loc18_5, %.loc18_9
// CHECK:STDOUT: %Op.bound.loc15: <bound method> = bound_method %b2.var, constants.%Op.345
// CHECK:STDOUT: %impl.elem0.loc16: %.9c3 = impl_witness_access constants.%ImplicitAs.impl_witness.c75, element0 [concrete = constants.%Convert.956]
// CHECK:STDOUT: %bound_method.loc16_9.1: <bound method> = bound_method %int_4, %impl.elem0.loc16 [concrete = constants.%Convert.bound.ac3]
// CHECK:STDOUT: %specific_fn.loc16: <specific function> = specific_function %impl.elem0.loc16, @Convert.2(constants.%int_32) [concrete = constants.%Convert.specific_fn]
// CHECK:STDOUT: %bound_method.loc16_9.2: <bound method> = bound_method %int_4, %specific_fn.loc16 [concrete = constants.%bound_method.1da]
// CHECK:STDOUT: %int.convert_checked.loc16: init %i32 = call %bound_method.loc16_9.2(%int_4) [concrete = constants.%int_4.940]
// CHECK:STDOUT: %.loc16_9: init %i32 = converted %int_4, %int.convert_checked.loc16 [concrete = constants.%int_4.940]
// CHECK:STDOUT: assign %.loc16_5, %.loc16_9
// CHECK:STDOUT: %Op.bound.loc14: <bound method> = bound_method %b2.var, constants.%Op.345
// CHECK:STDOUT: %Op.specific_fn.1: <specific function> = specific_function constants.%Op.345, @Op.3(constants.%Base) [concrete = constants.%Op.specific_fn.083]
// CHECK:STDOUT: %bound_method.loc15_3: <bound method> = bound_method %b2.var, %Op.specific_fn.1
// CHECK:STDOUT: %addr.loc15: %ptr.11f = addr_of %b2.var
// CHECK:STDOUT: %no_op.loc15: init %empty_tuple.type = call %bound_method.loc15_3(%addr.loc15)
// CHECK:STDOUT: %Op.bound.loc14: <bound method> = bound_method %b1.var, constants.%Op.345
// CHECK:STDOUT: %bound_method.loc14_3: <bound method> = bound_method %b2.var, %Op.specific_fn.1
// CHECK:STDOUT: %addr.loc14: %ptr.11f = addr_of %b2.var
// CHECK:STDOUT: %no_op.loc14: init %empty_tuple.type = call %bound_method.loc14_3(%addr.loc14)
// CHECK:STDOUT: %Op.bound.loc13: <bound method> = bound_method %b1.var, constants.%Op.345
// CHECK:STDOUT: %Op.specific_fn.2: <specific function> = specific_function constants.%Op.345, @Op.3(constants.%Base) [concrete = constants.%Op.specific_fn.083]
// CHECK:STDOUT: %bound_method.loc14: <bound method> = bound_method %b1.var, %Op.specific_fn.2
// CHECK:STDOUT: %addr.loc14: %ptr.11f = addr_of %b1.var
// CHECK:STDOUT: %no_op.loc14: init %empty_tuple.type = call %bound_method.loc14(%addr.loc14)
// CHECK:STDOUT: %bound_method.loc13: <bound method> = bound_method %b1.var, %Op.specific_fn.2
// CHECK:STDOUT: %addr.loc13: %ptr.11f = addr_of %b1.var
// CHECK:STDOUT: %no_op.loc13: init %empty_tuple.type = call %bound_method.loc13(%addr.loc13)
// CHECK:STDOUT: %Op.bound.loc12: <bound method> = bound_method %i.var, constants.%Op.e6a
// CHECK:STDOUT: %Op.specific_fn.3: <specific function> = specific_function constants.%Op.e6a, @Op.3(constants.%i32) [concrete = constants.%Op.specific_fn.014]
// CHECK:STDOUT: %bound_method.loc12_3.3: <bound method> = bound_method %i.var, %Op.specific_fn.3
+6 -5
View File
@@ -37,7 +37,8 @@ fn Create() {
var b: Classes.Base = {};
var i: Classes.Intermediate = {.base = {}};
var d: Classes.Derived = {.base = {.base = {}}};
// TODO: Support vptr initialization without explicit source initializers.
// Implicit initialization creates an object with the unformed state, which
// doesn't include vptr initialization.
var d2: Classes.Derived;
}
@@ -254,14 +255,14 @@ fn Make() {
// CHECK:STDOUT: !7 = !DILocation(line: 7, column: 3, scope: !4)
// CHECK:STDOUT: !8 = !DILocation(line: 8, column: 3, scope: !4)
// CHECK:STDOUT: !9 = !DILocation(line: 9, column: 3, scope: !4)
// CHECK:STDOUT: !10 = !DILocation(line: 11, column: 3, scope: !4)
// CHECK:STDOUT: !10 = !DILocation(line: 12, column: 3, scope: !4)
// CHECK:STDOUT: !11 = !DILocation(line: 8, column: 33, scope: !4)
// CHECK:STDOUT: !12 = !DILocation(line: 9, column: 28, scope: !4)
// CHECK:STDOUT: !13 = !DILocation(line: 9, column: 37, scope: !4)
// CHECK:STDOUT: !14 = !DILocation(line: 6, column: 1, scope: !4)
// CHECK:STDOUT: !15 = distinct !DISubprogram(name: "Use", linkageName: "_CUse.Create", scope: null, file: !3, line: 14, type: !5, spFlags: DISPFlagDefinition, unit: !2)
// CHECK:STDOUT: !16 = !DILocation(line: 15, column: 3, scope: !15)
// CHECK:STDOUT: !17 = !DILocation(line: 14, column: 1, scope: !15)
// CHECK:STDOUT: !15 = distinct !DISubprogram(name: "Use", linkageName: "_CUse.Create", scope: null, file: !3, line: 15, type: !5, spFlags: DISPFlagDefinition, unit: !2)
// CHECK:STDOUT: !16 = !DILocation(line: 16, column: 3, scope: !15)
// CHECK:STDOUT: !17 = !DILocation(line: 15, column: 1, scope: !15)
// CHECK:STDOUT: ; ModuleID = 'member_init.carbon'
// CHECK:STDOUT: source_filename = "member_init.carbon"
// CHECK:STDOUT: