Skip to content

Commit 05af854

Browse files
committed
try-move-requirecompletetype
1 parent 9305cca commit 05af854

File tree

3 files changed

+44
-130
lines changed

3 files changed

+44
-130
lines changed

toolchain/check/handle_require.cpp

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ struct ValidateRequireResult {
163163
static auto ValidateRequire(Context& context, SemIR::LocId loc_id,
164164
SemIR::TypeInstId self_inst_id,
165165
SemIR::InstId constraint_inst_id,
166-
SemIR::InstId scope_inst_id, bool extend)
166+
SemIR::InstId scope_inst_id)
167167
-> std::optional<ValidateRequireResult> {
168168
auto constraint_constant_value_id =
169169
context.constant_values().Get(constraint_inst_id);
@@ -210,22 +210,6 @@ static auto ValidateRequire(Context& context, SemIR::LocId loc_id,
210210
return std::nullopt;
211211
}
212212

213-
if (extend) {
214-
if (!RequireCompleteType(
215-
context, constraint_type_id, SemIR::LocId(constraint_inst_id), [&] {
216-
CARBON_DIAGNOSTIC(RequireImplsIncompleteFacetType, Error,
217-
"`extend require` of incomplete facet type {0}",
218-
InstIdAsType);
219-
return context.emitter().Build(constraint_inst_id,
220-
RequireImplsIncompleteFacetType,
221-
constraint_inst_id);
222-
})) {
223-
// The constraint is invalid, and a diagnostic was emitted by
224-
// RequireCompleteType().
225-
return std::nullopt;
226-
}
227-
}
228-
229213
if (scope_inst_id == SemIR::ErrorInst::InstId) {
230214
// `require` is in the wrong scope.
231215
return std::nullopt;
@@ -257,10 +241,8 @@ auto HandleParseNode(Context& context, Parse::RequireDeclId node_id) -> bool {
257241
auto scope_inst_id =
258242
context.node_stack().Pop<Parse::NodeKind::RequireIntroducer>();
259243

260-
bool extend = introducer.modifier_set.HasAnyOf(KeywordModifierSet::Extend);
261-
262244
auto validated = ValidateRequire(context, node_id, self_inst_id,
263-
constraint_inst_id, scope_inst_id, extend);
245+
constraint_inst_id, scope_inst_id);
264246
if (!validated) {
265247
DiscardGenericDecl(context);
266248
return true;
@@ -273,6 +255,8 @@ auto HandleParseNode(Context& context, Parse::RequireDeclId node_id) -> bool {
273255
return true;
274256
}
275257

258+
bool extend = introducer.modifier_set.HasAnyOf(KeywordModifierSet::Extend);
259+
276260
auto require_impls_decl =
277261
SemIR::RequireImplsDecl{// To be filled in after.
278262
.require_impls_id = SemIR::RequireImplsId::None,
@@ -291,6 +275,26 @@ auto HandleParseNode(Context& context, Parse::RequireDeclId node_id) -> bool {
291275
require_impls_decl.require_impls_id = require_impls_id;
292276
ReplaceInstBeforeConstantUse(context, decl_id, require_impls_decl);
293277

278+
// We look for a complete type after BuildGenericDecl, so that the resulting
279+
// RequireCompleteType instruction is part of the enclosing interface or named
280+
// constraint generic definition. Then requiring enclosing entity to be
281+
// complete will resolve that definition and also construct a specific for the
282+
// `constraint_inst_id`, finding any monomorphization errors that result.
283+
if (extend) {
284+
if (!RequireCompleteType(
285+
context, constraint_type_id, SemIR::LocId(constraint_inst_id), [&] {
286+
CARBON_DIAGNOSTIC(RequireImplsIncompleteFacetType, Error,
287+
"`extend require` of incomplete facet type {0}",
288+
InstIdAsType);
289+
return context.emitter().Build(constraint_inst_id,
290+
RequireImplsIncompleteFacetType,
291+
constraint_inst_id);
292+
})) {
293+
DiscardGenericDecl(context);
294+
return true;
295+
}
296+
}
297+
294298
context.require_impls_stack().AppendToTop(require_impls_id);
295299

296300
return true;

toolchain/check/testdata/impl/import_generic.carbon

Lines changed: 20 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,8 @@ impl forall [T:! type] D as N(T*) {}
265265
// CHECK:STDOUT: !definition:
266266
// CHECK:STDOUT: %N.type: type = facet_type <@N, @N(%T.loc14_14.1)> [symbolic = %N.type (constants.%N.type.b8d)]
267267
// CHECK:STDOUT: %Self.loc14_24.2: @N.%N.type (%N.type.b8d) = symbolic_binding Self, 1 [symbolic = %Self.loc14_24.2 (constants.%Self.aa1)]
268+
// CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T.loc14_14.1)> [symbolic = %I.type (constants.%I.type.070)]
269+
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %I.type [symbolic = %require_complete (constants.%require_complete.c94)]
268270
// CHECK:STDOUT:
269271
// CHECK:STDOUT: constraint {
270272
// CHECK:STDOUT: %Self.loc14_24.1: @N.%N.type (%N.type.b8d) = symbolic_binding Self, 1 [symbolic = %Self.loc14_24.2 (constants.%Self.aa1)]
@@ -295,7 +297,6 @@ impl forall [T:! type] D as N(T*) {}
295297
// CHECK:STDOUT: %Self: @N.require0.%N.type (%N.type.b8d) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.aa1)]
296298
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 1, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
297299
// CHECK:STDOUT: %I.type.loc15_27.2: type = facet_type <@I, @I(%T)> [symbolic = %I.type.loc15_27.2 (constants.%I.type.070)]
298-
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %I.type.loc15_27.2 [symbolic = %require_complete (constants.%require_complete.c94)]
299300
// CHECK:STDOUT: }
300301
// CHECK:STDOUT:
301302
// CHECK:STDOUT: generic impl @C.as.I.impl.f3e(%T.loc8_14.1: type) {
@@ -375,7 +376,6 @@ impl forall [T:! type] D as N(T*) {}
375376
// CHECK:STDOUT: %Self => constants.%Self.aa1
376377
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
377378
// CHECK:STDOUT: %I.type.loc15_27.2 => constants.%I.type.070
378-
// CHECK:STDOUT: %require_complete => constants.%require_complete.c94
379379
// CHECK:STDOUT: }
380380
// CHECK:STDOUT:
381381
// CHECK:STDOUT: --- fail_import_generic.impl.carbon
@@ -533,6 +533,8 @@ impl forall [T:! type] D as N(T*) {}
533533
// CHECK:STDOUT: !definition:
534534
// CHECK:STDOUT: %N.type: type = facet_type <@N, @N(%T)> [symbolic = %N.type (constants.%N.type.b8d23b.1)]
535535
// CHECK:STDOUT: %Self: @N.%N.type (%N.type.b8d23b.1) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.aa1)]
536+
// CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.070)]
537+
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %I.type [symbolic = %require_complete (constants.%require_complete.c94)]
536538
// CHECK:STDOUT:
537539
// CHECK:STDOUT: constraint {
538540
// CHECK:STDOUT: !members:
@@ -551,7 +553,6 @@ impl forall [T:! type] D as N(T*) {}
551553
// CHECK:STDOUT: %Self: @N.require0.%N.type (%N.type.b8d23b.1) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.aa1)]
552554
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 1, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
553555
// CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.070)]
554-
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %I.type [symbolic = %require_complete (constants.%require_complete.c94)]
555556
// CHECK:STDOUT: }
556557
// CHECK:STDOUT:
557558
// CHECK:STDOUT: generic impl @C.as.I.impl.f3ed6b.1(imports.%Main.import_ref.efcd44.2: type) [from "import_generic.carbon"] {
@@ -709,7 +710,6 @@ impl forall [T:! type] D as N(T*) {}
709710
// CHECK:STDOUT: %Self => constants.%Self.aa1
710711
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
711712
// CHECK:STDOUT: %I.type => constants.%I.type.070
712-
// CHECK:STDOUT: %require_complete => constants.%require_complete.c94
713713
// CHECK:STDOUT: }
714714
// CHECK:STDOUT:
715715
// CHECK:STDOUT: specific @C.as.I.impl.3f8440.1(constants.%T) {
@@ -809,6 +809,8 @@ impl forall [T:! type] D as N(T*) {}
809809
// CHECK:STDOUT: !definition:
810810
// CHECK:STDOUT: %N.type: type = facet_type <@N, @N(%T.loc9_14.1)> [symbolic = %N.type (constants.%N.type.b8d)]
811811
// CHECK:STDOUT: %Self.loc9_24.2: @N.%N.type (%N.type.b8d) = symbolic_binding Self, 1 [symbolic = %Self.loc9_24.2 (constants.%Self.aa1)]
812+
// CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T.loc9_14.1)> [symbolic = %I.type (constants.%I.type.070)]
813+
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %I.type [symbolic = %require_complete (constants.%require_complete)]
812814
// CHECK:STDOUT:
813815
// CHECK:STDOUT: constraint {
814816
// CHECK:STDOUT: %Self.loc9_24.1: @N.%N.type (%N.type.b8d) = symbolic_binding Self, 1 [symbolic = %Self.loc9_24.2 (constants.%Self.aa1)]
@@ -839,7 +841,6 @@ impl forall [T:! type] D as N(T*) {}
839841
// CHECK:STDOUT: %Self: @N.require0.%N.type (%N.type.b8d) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.aa1)]
840842
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 1, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
841843
// CHECK:STDOUT: %I.type.loc10_27.2: type = facet_type <@I, @I(%T)> [symbolic = %I.type.loc10_27.2 (constants.%I.type.070)]
842-
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %I.type.loc10_27.2 [symbolic = %require_complete (constants.%require_complete)]
843844
// CHECK:STDOUT: }
844845
// CHECK:STDOUT:
845846
// CHECK:STDOUT: generic impl @C.as.I.impl(%T.loc7_14.1: type) {
@@ -889,7 +890,6 @@ impl forall [T:! type] D as N(T*) {}
889890
// CHECK:STDOUT: %Self => constants.%Self.aa1
890891
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
891892
// CHECK:STDOUT: %I.type.loc10_27.2 => constants.%I.type.070
892-
// CHECK:STDOUT: %require_complete => constants.%require_complete
893893
// CHECK:STDOUT: }
894894
// CHECK:STDOUT:
895895
// CHECK:STDOUT: --- import_generic_with_different_specific.impl.carbon
@@ -920,9 +920,9 @@ impl forall [T:! type] D as N(T*) {}
920920
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 1, %Self.aa1546.1 [symbolic]
921921
// CHECK:STDOUT: %ptr.3f2: type = ptr_type %ptr.4f0 [symbolic]
922922
// CHECK:STDOUT: %N.type.b8d23b.2: type = facet_type <@N, @N(%ptr.3f2)> [symbolic]
923+
// CHECK:STDOUT: %Self.aa1546.2: %N.type.b8d23b.2 = symbolic_binding Self, 1 [symbolic]
923924
// CHECK:STDOUT: %I.type.71a: type = facet_type <@I, @I(%ptr.3f2)> [symbolic]
924925
// CHECK:STDOUT: %require_complete.08c: <witness> = require_complete_type %I.type.71a [symbolic]
925-
// CHECK:STDOUT: %Self.aa1546.2: %N.type.b8d23b.2 = symbolic_binding Self, 1 [symbolic]
926926
// CHECK:STDOUT: %require_complete.a37: <witness> = require_complete_type %N.type.b8d23b.2 [symbolic]
927927
// CHECK:STDOUT: %I.impl_witness.524: <witness> = impl_witness file.%I.impl_witness_table.loc6, @C.as.I.impl.3f8(%T) [symbolic]
928928
// CHECK:STDOUT: }
@@ -1006,6 +1006,8 @@ impl forall [T:! type] D as N(T*) {}
10061006
// CHECK:STDOUT: !definition:
10071007
// CHECK:STDOUT: %N.type: type = facet_type <@N, @N(%T)> [symbolic = %N.type (constants.%N.type.b8d23b.1)]
10081008
// CHECK:STDOUT: %Self: @N.%N.type (%N.type.b8d23b.1) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.aa1546.1)]
1009+
// CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.070)]
1010+
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %I.type [symbolic = %require_complete (constants.%require_complete.c94)]
10091011
// CHECK:STDOUT:
10101012
// CHECK:STDOUT: constraint {
10111013
// CHECK:STDOUT: !members:
@@ -1024,7 +1026,6 @@ impl forall [T:! type] D as N(T*) {}
10241026
// CHECK:STDOUT: %Self: @N.require0.%N.type (%N.type.b8d23b.1) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.aa1546.1)]
10251027
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 1, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
10261028
// CHECK:STDOUT: %I.type: type = facet_type <@I, @I(%T)> [symbolic = %I.type (constants.%I.type.070)]
1027-
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %I.type [symbolic = %require_complete (constants.%require_complete.c94)]
10281029
// CHECK:STDOUT: }
10291030
// CHECK:STDOUT:
10301031
// CHECK:STDOUT: generic impl @C.as.I.impl.f3e(imports.%Main.import_ref.efcd44.2: type) [from "import_generic_with_different_specific.carbon"] {
@@ -1120,7 +1121,6 @@ impl forall [T:! type] D as N(T*) {}
11201121
// CHECK:STDOUT: %Self => constants.%Self.aa1546.1
11211122
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
11221123
// CHECK:STDOUT: %I.type => constants.%I.type.070
1123-
// CHECK:STDOUT: %require_complete => constants.%require_complete.c94
11241124
// CHECK:STDOUT: }
11251125
// CHECK:STDOUT:
11261126
// CHECK:STDOUT: specific @N(constants.%ptr.3f2) {
@@ -1129,6 +1129,8 @@ impl forall [T:! type] D as N(T*) {}
11291129
// CHECK:STDOUT: !definition:
11301130
// CHECK:STDOUT: %N.type => constants.%N.type.b8d23b.2
11311131
// CHECK:STDOUT: %Self => constants.%Self.aa1546.2
1132+
// CHECK:STDOUT: %I.type => constants.%I.type.71a
1133+
// CHECK:STDOUT: %require_complete => constants.%require_complete.08c
11321134
// CHECK:STDOUT: }
11331135
// CHECK:STDOUT:
11341136
// CHECK:STDOUT: specific @C.as.I.impl.3f8(constants.%T) {
@@ -1140,15 +1142,6 @@ impl forall [T:! type] D as N(T*) {}
11401142
// CHECK:STDOUT: %I.impl_witness => constants.%I.impl_witness.524
11411143
// CHECK:STDOUT: }
11421144
// CHECK:STDOUT:
1143-
// CHECK:STDOUT: specific @N.require0(constants.%ptr.3f2, constants.%Self.aa1546.1) {
1144-
// CHECK:STDOUT: %T => constants.%ptr.3f2
1145-
// CHECK:STDOUT: %N.type => constants.%N.type.b8d23b.2
1146-
// CHECK:STDOUT: %Self => constants.%Self.aa1546.1
1147-
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
1148-
// CHECK:STDOUT: %I.type => constants.%I.type.71a
1149-
// CHECK:STDOUT: %require_complete => constants.%require_complete.08c
1150-
// CHECK:STDOUT: }
1151-
// CHECK:STDOUT:
11521145
// CHECK:STDOUT: specific @I(constants.%ptr.3f2) {
11531146
// CHECK:STDOUT: %T => constants.%ptr.3f2
11541147
// CHECK:STDOUT: }
@@ -1249,6 +1242,8 @@ impl forall [T:! type] D as N(T*) {}
12491242
// CHECK:STDOUT: !definition:
12501243
// CHECK:STDOUT: %N.type: type = facet_type <@N, @N(%T.loc7_14.1)> [symbolic = %N.type (constants.%N.type.b8d)]
12511244
// CHECK:STDOUT: %Self.loc7_24.2: @N.%N.type (%N.type.b8d) = symbolic_binding Self, 1 [symbolic = %Self.loc7_24.2 (constants.%Self.aa1)]
1245+
// CHECK:STDOUT: %J.type: type = facet_type <@J, @J(%T.loc7_14.1)> [symbolic = %J.type (constants.%J.type.8ec)]
1246+
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %J.type [symbolic = %require_complete (constants.%require_complete)]
12521247
// CHECK:STDOUT:
12531248
// CHECK:STDOUT: constraint {
12541249
// CHECK:STDOUT: %Self.loc7_24.1: @N.%N.type (%N.type.b8d) = symbolic_binding Self, 1 [symbolic = %Self.loc7_24.2 (constants.%Self.aa1)]
@@ -1279,7 +1274,6 @@ impl forall [T:! type] D as N(T*) {}
12791274
// CHECK:STDOUT: %Self: @N.require0.%N.type (%N.type.b8d) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.aa1)]
12801275
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 1, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
12811276
// CHECK:STDOUT: %J.type.loc8_27.2: type = facet_type <@J, @J(%T)> [symbolic = %J.type.loc8_27.2 (constants.%J.type.8ec)]
1282-
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %J.type.loc8_27.2 [symbolic = %require_complete (constants.%require_complete)]
12831277
// CHECK:STDOUT: }
12841278
// CHECK:STDOUT:
12851279
// CHECK:STDOUT: generic impl @D.as.J.impl.b47(%T.loc15_14.1: type) {
@@ -1325,7 +1319,6 @@ impl forall [T:! type] D as N(T*) {}
13251319
// CHECK:STDOUT: %Self => constants.%Self.aa1
13261320
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
13271321
// CHECK:STDOUT: %J.type.loc8_27.2 => constants.%J.type.8ec
1328-
// CHECK:STDOUT: %require_complete => constants.%require_complete
13291322
// CHECK:STDOUT: }
13301323
// CHECK:STDOUT:
13311324
// CHECK:STDOUT: specific @D.as.J.impl.b47(constants.%T) {
@@ -1372,8 +1365,8 @@ impl forall [T:! type] D as N(T*) {}
13721365
// CHECK:STDOUT: %require_complete.a37d6c.1: <witness> = require_complete_type %N.type.b8d23b.1 [symbolic]
13731366
// CHECK:STDOUT: %J.impl_witness.b5245e.1: <witness> = impl_witness file.%J.impl_witness_table.loc29, @D.as.J.impl.3b0484.1(%T) [symbolic]
13741367
// CHECK:STDOUT: %N.type.b8d23b.2: type = facet_type <@N, @N(%ptr)> [symbolic]
1375-
// CHECK:STDOUT: %require_complete.d4d: <witness> = require_complete_type %J.type.4fa [symbolic]
13761368
// CHECK:STDOUT: %Self.aa1546.2: %N.type.b8d23b.2 = symbolic_binding Self, 1 [symbolic]
1369+
// CHECK:STDOUT: %require_complete.d4d: <witness> = require_complete_type %J.type.4fa [symbolic]
13771370
// CHECK:STDOUT: %require_complete.a37d6c.2: <witness> = require_complete_type %N.type.b8d23b.2 [symbolic]
13781371
// CHECK:STDOUT: %J.impl_witness.b5245e.2: <witness> = impl_witness file.%J.impl_witness_table.loc39, @D.as.J.impl.3b0484.2(%T) [symbolic]
13791372
// CHECK:STDOUT: }
@@ -1500,6 +1493,8 @@ impl forall [T:! type] D as N(T*) {}
15001493
// CHECK:STDOUT: !definition:
15011494
// CHECK:STDOUT: %N.type: type = facet_type <@N, @N(%T)> [symbolic = %N.type (constants.%N.type.b8d23b.1)]
15021495
// CHECK:STDOUT: %Self: @N.%N.type (%N.type.b8d23b.1) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.aa1546.1)]
1496+
// CHECK:STDOUT: %J.type: type = facet_type <@J, @J(%T)> [symbolic = %J.type (constants.%J.type.8ec)]
1497+
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %J.type [symbolic = %require_complete (constants.%require_complete.387)]
15031498
// CHECK:STDOUT:
15041499
// CHECK:STDOUT: constraint {
15051500
// CHECK:STDOUT: !members:
@@ -1518,7 +1513,6 @@ impl forall [T:! type] D as N(T*) {}
15181513
// CHECK:STDOUT: %Self: @N.require0.%N.type (%N.type.b8d23b.1) = symbolic_binding Self, 1 [symbolic = %Self (constants.%Self.aa1546.1)]
15191514
// CHECK:STDOUT: %Self.binding.as_type: type = symbolic_binding_type Self, 1, %Self [symbolic = %Self.binding.as_type (constants.%Self.binding.as_type)]
15201515
// CHECK:STDOUT: %J.type: type = facet_type <@J, @J(%T)> [symbolic = %J.type (constants.%J.type.8ec)]
1521-
// CHECK:STDOUT: %require_complete: <witness> = require_complete_type %J.type [symbolic = %require_complete (constants.%require_complete.387)]
15221516
// CHECK:STDOUT: }
15231517
// CHECK:STDOUT:
15241518
// CHECK:STDOUT: generic impl @D.as.J.impl.b470bf.1(imports.%Main.import_ref.efcd44.2: type) [from "fail_import_generic_decl.carbon"] {
@@ -1667,6 +1661,8 @@ impl forall [T:! type] D as N(T*) {}
16671661
// CHECK:STDOUT: !definition:
16681662
// CHECK:STDOUT: %N.type => constants.%N.type.b8d23b.1
16691663
// CHECK:STDOUT: %Self => constants.%Self.aa1546.1
1664+
// CHECK:STDOUT: %J.type => constants.%J.type.8ec
1665+
// CHECK:STDOUT: %require_complete => constants.%require_complete.387
16701666
// CHECK:STDOUT: }
16711667
// CHECK:STDOUT:
16721668
// CHECK:STDOUT: specific @N.require0(constants.%T, constants.%Self.aa1546.1) {
@@ -1675,7 +1671,6 @@ impl forall [T:! type] D as N(T*) {}
16751671
// CHECK:STDOUT: %Self => constants.%Self.aa1546.1
16761672
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
16771673
// CHECK:STDOUT: %J.type => constants.%J.type.8ec
1678-
// CHECK:STDOUT: %require_complete => constants.%require_complete.387
16791674
// CHECK:STDOUT: }
16801675
// CHECK:STDOUT:
16811676
// CHECK:STDOUT: specific @D.as.J.impl.3b0484.1(constants.%T) {
@@ -1691,6 +1686,8 @@ impl forall [T:! type] D as N(T*) {}
16911686
// CHECK:STDOUT: !definition:
16921687
// CHECK:STDOUT: %N.type => constants.%N.type.b8d23b.2
16931688
// CHECK:STDOUT: %Self => constants.%Self.aa1546.2
1689+
// CHECK:STDOUT: %J.type => constants.%J.type.4fa
1690+
// CHECK:STDOUT: %require_complete => constants.%require_complete.d4d
16941691
// CHECK:STDOUT: }
16951692
// CHECK:STDOUT:
16961693
// CHECK:STDOUT: specific @D.as.J.impl.3b0484.2(constants.%T) {
@@ -1701,12 +1698,3 @@ impl forall [T:! type] D as N(T*) {}
17011698
// CHECK:STDOUT: %J.impl_witness => constants.%J.impl_witness.b5245e.2
17021699
// CHECK:STDOUT: }
17031700
// CHECK:STDOUT:
1704-
// CHECK:STDOUT: specific @N.require0(constants.%ptr, constants.%Self.aa1546.1) {
1705-
// CHECK:STDOUT: %T => constants.%ptr
1706-
// CHECK:STDOUT: %N.type => constants.%N.type.b8d23b.2
1707-
// CHECK:STDOUT: %Self => constants.%Self.aa1546.1
1708-
// CHECK:STDOUT: %Self.binding.as_type => constants.%Self.binding.as_type
1709-
// CHECK:STDOUT: %J.type => constants.%J.type.4fa
1710-
// CHECK:STDOUT: %require_complete => constants.%require_complete.d4d
1711-
// CHECK:STDOUT: }
1712-
// CHECK:STDOUT:

0 commit comments

Comments
 (0)