mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
Skip ImplWitnessTable::elements_id when generating fingerprints (#7629)
Implementing interface modifiers causes an infinite loop when generating fingerprints because the witness value generates a fingerprint that's dependent on something dependent on the witness value. We've debugged this to the witness table's `elements_id` field. This hack is a workaround for creating a new block type whose value is not codependent with its identity. Co-authored-by: Richard Smith <richard@metafoo.co.uk> Co-authored-by: Richard Smith <richard@metafoo.co.uk>
This commit is contained in:
co-authored by
Richard Smith
parent
cb5e9b6555
commit
4ea5ef45dd
+6
-6
@@ -305,18 +305,18 @@ fn EqualWitnesses(p: Wrap(Cpp.Copyable)*) -> Wrap(Cpp.Copyable)* {
|
||||
// CHECK:STDOUT: %Copy.specific_fn: <specific function> = specific_function %Copy, @Copy.loc6(%Copy.facet.07e) [concrete]
|
||||
// CHECK:STDOUT: %Wrap.993: type = class_type @Wrap, @Wrap(%Copy.facet.07e) [concrete]
|
||||
// CHECK:STDOUT: %ptr.fa1: type = ptr_type %Wrap.993 [concrete]
|
||||
// CHECK:STDOUT: %Copy.impl_witness.73a: <witness> = impl_witness imports.%Copy.impl_witness_table.4f1, @ptr.as.Copy.impl(%Wrap.993) [concrete]
|
||||
// CHECK:STDOUT: %Copy.impl_witness.8c2: <witness> = impl_witness imports.%Copy.impl_witness_table.fb0, @ptr.as.Copy.impl(%Wrap.993) [concrete]
|
||||
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.type.085: type = fn_type @ptr.as.Copy.impl.Op, @ptr.as.Copy.impl(%Wrap.993) [concrete]
|
||||
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.a0b: %ptr.as.Copy.impl.Op.type.085 = struct_value () [concrete]
|
||||
// CHECK:STDOUT: %Copy.facet.ba8: %Copy.type.bd0 = facet_value %ptr.fa1, (%Copy.impl_witness.73a) [concrete]
|
||||
// CHECK:STDOUT: %Copy.WithSelf.Op.type.b3b: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.ba8) [concrete]
|
||||
// CHECK:STDOUT: %.a0e: type = fn_type_with_self_type %Copy.WithSelf.Op.type.b3b, %Copy.facet.ba8 [concrete]
|
||||
// CHECK:STDOUT: %Copy.facet.13d: %Copy.type.bd0 = facet_value %ptr.fa1, (%Copy.impl_witness.8c2) [concrete]
|
||||
// CHECK:STDOUT: %Copy.WithSelf.Op.type.c10: type = fn_type @Copy.WithSelf.Op, @Copy.WithSelf(%Copy.facet.13d) [concrete]
|
||||
// CHECK:STDOUT: %.85e: type = fn_type_with_self_type %Copy.WithSelf.Op.type.c10, %Copy.facet.13d [concrete]
|
||||
// CHECK:STDOUT: %ptr.as.Copy.impl.Op.specific_fn: <specific function> = specific_function %ptr.as.Copy.impl.Op.a0b, @ptr.as.Copy.impl.Op(%Wrap.993) [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: imports {
|
||||
// CHECK:STDOUT: %Core.import_ref.e5f: @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op.type (%ptr.as.Copy.impl.Op.type.ff5) = import_ref Core//prelude/parts/copy, loc{{\d+_\d+}}, loaded [symbolic = @ptr.as.Copy.impl.%ptr.as.Copy.impl.Op (constants.%ptr.as.Copy.impl.Op.ce9)]
|
||||
// CHECK:STDOUT: %Copy.impl_witness_table.4f1 = impl_witness_table (%Core.import_ref.e5f), @ptr.as.Copy.impl [concrete]
|
||||
// CHECK:STDOUT: %Copy.impl_witness_table.fb0 = impl_witness_table (%Core.import_ref.e5f), @ptr.as.Copy.impl [concrete]
|
||||
// CHECK:STDOUT: }
|
||||
// CHECK:STDOUT:
|
||||
// CHECK:STDOUT: fn @DoCopy(%c.param: %Copyable) -> out %return.param: %Copyable {
|
||||
@@ -337,7 +337,7 @@ fn EqualWitnesses(p: Wrap(Cpp.Copyable)*) -> Wrap(Cpp.Copyable)* {
|
||||
// CHECK:STDOUT: fn @EqualWitnesses(%p.param: %ptr.fa1) -> out %return.param: %ptr.fa1 {
|
||||
// CHECK:STDOUT: !entry:
|
||||
// CHECK:STDOUT: %p.ref: %ptr.fa1 = name_ref p, %p
|
||||
// CHECK:STDOUT: %impl.elem0: %.a0e = impl_witness_access constants.%Copy.impl_witness.73a, element0 [concrete = constants.%ptr.as.Copy.impl.Op.a0b]
|
||||
// CHECK:STDOUT: %impl.elem0: %.85e = impl_witness_access constants.%Copy.impl_witness.8c2, element0 [concrete = constants.%ptr.as.Copy.impl.Op.a0b]
|
||||
// CHECK:STDOUT: %bound_method.loc20_10.1: <bound method> = bound_method %p.ref, %impl.elem0
|
||||
// CHECK:STDOUT: %specific_fn: <specific function> = specific_function %impl.elem0, @ptr.as.Copy.impl.Op(constants.%Wrap.993) [concrete = constants.%ptr.as.Copy.impl.Op.specific_fn]
|
||||
// CHECK:STDOUT: %bound_method.loc20_10.2: <bound method> = bound_method %p.ref, %specific_fn
|
||||
|
||||
Reference in New Issue
Block a user