From ff0cea55f64da07296bacc7d66e8f896ebb803a9 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Tue, 11 Nov 2025 11:36:15 -0500 Subject: [PATCH] Add require decls to Interface and NamedConstraint (#6321) They are not used for impl lookup or verifying anything yet, but now they appear in the textual semir. --------- Co-authored-by: Jon Ross-Perkins --- toolchain/check/context.h | 18 ++++- toolchain/check/handle_interface.cpp | 9 ++- toolchain/check/handle_named_constraint.cpp | 15 ++-- toolchain/check/handle_require.cpp | 2 + toolchain/check/import_ref.cpp | 2 + toolchain/check/inst_block_stack.h | 6 +- .../testdata/basics/include_in_dumps.carbon | 6 ++ .../check/testdata/class/adapter/adapt.carbon | 2 + .../testdata/class/generic/member_type.carbon | 2 + .../facet/call_combined_impl_witness.carbon | 6 ++ .../convert_class_type_to_facet_type.carbon | 2 + ...t_class_type_to_generic_facet_value.carbon | 4 ++ ...rt_class_value_to_facet_value_value.carbon | 2 + ..._value_to_generic_facet_value_value.carbon | 8 +++ .../convert_facet_value_to_itself.carbon | 2 + ..._facet_value_to_narrowed_facet_type.carbon | 18 +++++ ...t_facet_value_value_to_blanket_impl.carbon | 4 ++ ..._value_to_generic_facet_value_value.carbon | 6 ++ ...convert_facet_value_value_to_itself.carbon | 2 + .../testdata/facet/convert_interface.carbon | 4 ++ ...t_class_type_to_generic_facet_value.carbon | 2 + ...convert_facet_value_to_missing_impl.carbon | 4 ++ ...l_convert_type_erased_type_to_facet.carbon | 2 + .../check/testdata/facet/period_self.carbon | 2 + .../testdata/facet/require_import.carbon | 4 ++ .../builtin/call_from_operator.carbon | 12 ++++ .../testdata/function/builtin/method.carbon | 2 + .../call_method_on_generic_facet.carbon | 4 ++ .../testdata/function/generic/deduce.carbon | 2 + .../generic/deduce_nested_facet_value.carbon | 6 ++ .../fail_deduce_imported_function.carbon | 4 ++ .../testdata/impl/assoc_const_self.carbon | 10 +++ toolchain/check/testdata/impl/compound.carbon | 16 +++++ .../check/testdata/impl/declaration.carbon | 2 + toolchain/check/testdata/impl/empty.carbon | 2 + .../check/testdata/impl/error_recovery.carbon | 2 + .../testdata/impl/extend_impl_generic.carbon | 4 ++ .../check/testdata/impl/fail_alias.carbon | 2 + .../testdata/impl/fail_call_invalid.carbon | 2 + .../impl/fail_extend_impl_forall.carbon | 2 + .../impl/fail_extend_impl_scope.carbon | 6 ++ .../impl/fail_extend_impl_type_as.carbon | 2 + ..._extend_partially_defined_interface.carbon | 2 + .../testdata/impl/fail_impl_as_scope.carbon | 10 +++ .../impl/fail_impl_bad_assoc_const.carbon | 2 + .../impl/fail_impl_bad_assoc_fn.carbon | 6 ++ .../impl/fail_impl_bad_interface.carbon | 2 + .../testdata/impl/fail_impl_bad_type.carbon | 2 + .../testdata/impl/fail_redefinition.carbon | 2 + .../impl/fail_self_type_mismatch.carbon | 2 + .../impl/fail_undefined_interface.carbon | 4 ++ .../check/testdata/impl/forward_decls.carbon | 34 ++++++++++ .../impl/generic_redeclaration.carbon | 18 +++++ toolchain/check/testdata/impl/impl_as.carbon | 2 + .../impl/impl_assoc_const_with_prelude.carbon | 4 ++ .../check/testdata/impl/impl_forall.carbon | 2 + .../testdata/impl/import_builtin_call.carbon | 4 ++ .../testdata/impl/import_compound.carbon | 14 ++++ .../testdata/impl/import_extend_impl.carbon | 4 ++ .../check/testdata/impl/import_generic.carbon | 8 +++ .../impl/import_interface_assoc_const.carbon | 34 ++++++++++ .../check/testdata/impl/import_self.carbon | 4 ++ .../testdata/impl/import_self_specific.carbon | 12 ++++ .../check/testdata/impl/import_thunk.carbon | 6 ++ .../testdata/impl/import_use_generic.carbon | 4 ++ .../check/testdata/impl/interface_args.carbon | 14 ++++ .../check/testdata/impl/lookup/alias.carbon | 2 + .../impl/lookup/canonical_query_self.carbon | 4 ++ .../lookup/fail_alias_impl_not_found.carbon | 2 + .../lookup/fail_todo_undefined_impl.carbon | 2 + .../check/testdata/impl/lookup/generic.carbon | 12 ++++ .../check/testdata/impl/lookup/import.carbon | 68 +++++++++++++++++++ .../impl/lookup/instance_method.carbon | 2 + ...g_generic_inside_rewrite_constraint.carbon | 8 +++ ...pecialization_with_symbolic_rewrite.carbon | 12 ++++ .../testdata/impl/lookup/specific_args.carbon | 10 +++ .../testdata/impl/lookup/transitive.carbon | 6 ++ .../testdata/impl/multiple_extend.carbon | 16 +++++ .../impl/no_definition_in_impl_file.carbon | 14 ++++ .../check/testdata/impl/redeclaration.carbon | 2 + .../check/testdata/impl/self_in_class.carbon | 2 + .../testdata/impl/self_in_signature.carbon | 4 ++ .../impl/todo_impl_with_unrelated_fn.carbon | 2 + .../testdata/impl/use_assoc_const.carbon | 28 ++++++++ .../check/testdata/interface/as_type.carbon | 2 + .../testdata/interface/as_type_of_type.carbon | 2 + .../testdata/interface/assoc_const.carbon | 2 + .../interface/assoc_const_in_generic.carbon | 2 + .../check/testdata/interface/basic.carbon | 4 ++ .../interface/compound_member_access.carbon | 18 +++++ .../compound_member_access_addr.carbon | 14 ++++ .../testdata/interface/default_fn.carbon | 2 + .../testdata/interface/export_name.carbon | 6 ++ .../fail_add_member_outside_definition.carbon | 6 ++ .../interface/fail_assoc_const_alias.carbon | 16 +++++ .../fail_assoc_const_bad_default.carbon | 2 + .../fail_assoc_fn_invalid_use.carbon | 2 + .../interface/fail_definition_imported.carbon | 2 + .../testdata/interface/fail_duplicate.carbon | 10 +++ .../fail_generic_redeclaration.carbon | 6 ++ .../interface/fail_lookup_undefined.carbon | 2 + .../interface/fail_member_lookup.carbon | 4 ++ .../testdata/interface/fail_modifiers.carbon | 8 +++ .../interface/fail_redeclare_member.carbon | 2 + .../fail_todo_assoc_const_default.carbon | 2 + .../fail_todo_define_default_fn_inline.carbon | 2 + ..._todo_define_default_fn_out_of_line.carbon | 4 ++ .../interface/fail_todo_modifiers.carbon | 2 + .../check/testdata/interface/generic.carbon | 8 +++ .../generic_binding_after_assoc_const.carbon | 2 + .../testdata/interface/generic_import.carbon | 4 ++ .../testdata/interface/generic_method.carbon | 4 ++ .../interface/generic_vs_params.carbon | 18 +++++ .../check/testdata/interface/import.carbon | 12 ++++ .../testdata/interface/import_access.carbon | 12 ++++ .../interface/import_interface_decl.carbon | 2 + .../testdata/interface/incomplete.carbon | 9 +++ .../check/testdata/interface/local.carbon | 2 + .../testdata/interface/member_lookup.carbon | 4 ++ .../check/testdata/interface/require.carbon | 24 +++++++ .../check/testdata/interface/self.carbon | 2 + .../testdata/interface/syntactic_merge.carbon | 24 +++++++ .../interface/todo_define_not_default.carbon | 2 + .../interop/cpp/function/overloads.carbon | 2 + .../testdata/let/compile_time_bindings.carbon | 4 ++ .../testdata/named_constraint/basic.carbon | 4 ++ .../named_constraint/empty_generic.carbon | 2 + .../testdata/named_constraint/generic.carbon | 8 +++ .../import_constraint_decl.carbon | 2 + .../testdata/named_constraint/require.carbon | 26 +++++++ .../namespace/fail_not_top_level.carbon | 2 + .../operators/overloaded/index.carbon | 4 ++ toolchain/sem_ir/file.cpp | 2 + toolchain/sem_ir/file.h | 9 +++ toolchain/sem_ir/formatter.cpp | 17 ++++- toolchain/sem_ir/formatter.h | 4 ++ toolchain/sem_ir/ids.h | 14 ++++ toolchain/sem_ir/inst_fingerprinter.cpp | 5 +- toolchain/sem_ir/interface.h | 3 + toolchain/sem_ir/named_constraint.h | 2 + toolchain/sem_ir/require_impls.h | 4 ++ 141 files changed, 954 insertions(+), 17 deletions(-) diff --git a/toolchain/check/context.h b/toolchain/check/context.h index 8e12a79c1c01..31122c20c7c0 100644 --- a/toolchain/check/context.h +++ b/toolchain/check/context.h @@ -115,6 +115,10 @@ class Context { return field_decls_stack_; } + auto require_impls_stack() -> ArrayStack& { + return require_impls_stack_; + } + auto decl_name_stack() -> DeclNameStack& { return decl_name_stack_; } auto decl_introducer_state_stack() -> DeclIntroducerStateStack& { @@ -271,6 +275,9 @@ class Context { auto require_impls() -> SemIR::RequireImplsStore& { return sem_ir().require_impls(); } + auto require_impls_blocks() -> SemIR::RequireImplsBlockStore& { + return sem_ir().require_impls_blocks(); + } auto associated_constants() -> SemIR::AssociatedConstantStore& { return sem_ir().associated_constants(); } @@ -354,9 +361,10 @@ class Context { // The stack of instruction blocks being used for type information while // processing arguments. This is used in parallel with - // param_and_arg_refs_stack_. It's currently only used for struct literals, - // where we need to track names for a type separate from the literal - // arguments. + // param_and_arg_refs_stack_. It's used for: + // - Struct literals, where we need to track names for a type separate from + // the literal arguments. + // - The associated entries witness table, while parsing an interface. InstBlockStack args_type_info_stack_; // The stack of StructTypeFields for in-progress StructTypeLiterals. @@ -365,6 +373,10 @@ class Context { // The stack of FieldDecls for in-progress Class definitions. ArrayStack field_decls_stack_; + // The stack of RequireImpls for in-progress Interface and Constraint + // definitions. + ArrayStack require_impls_stack_; + // The stack used for qualified declaration name construction. DeclNameStack decl_name_stack_; diff --git a/toolchain/check/handle_interface.cpp b/toolchain/check/handle_interface.cpp index 7c87e97a074b..62e2e891b1e3 100644 --- a/toolchain/check/handle_interface.cpp +++ b/toolchain/check/handle_interface.cpp @@ -129,7 +129,7 @@ auto HandleParseNode(Context& context, StartGenericDefinition(context, interface_info.generic_id); context.inst_block_stack().Push(); - + context.require_impls_stack().PushArray(); // We use the arg stack to build the witness table type. context.args_type_info_stack().Push(); @@ -168,9 +168,14 @@ auto HandleParseNode(Context& context, Parse::InterfaceDefinitionId /*node_id*/) context.inst_block_stack().Pop(); auto associated_entities_id = context.args_type_info_stack().Pop(); - // The interface type is now fully defined. + auto require_impls_block_id = context.require_impls_blocks().Add( + context.require_impls_stack().PeekArray()); + context.require_impls_stack().PopArray(); + auto& interface_info = context.interfaces().Get(interface_id); if (!interface_info.associated_entities_id.has_value()) { + interface_info.require_impls_block_id = require_impls_block_id; + // This marks the interface type as fully defined. interface_info.associated_entities_id = associated_entities_id; } diff --git a/toolchain/check/handle_named_constraint.cpp b/toolchain/check/handle_named_constraint.cpp index 44fcb7967bf3..2e843fc355c0 100644 --- a/toolchain/check/handle_named_constraint.cpp +++ b/toolchain/check/handle_named_constraint.cpp @@ -130,6 +130,7 @@ auto HandleParseNode(Context& context, StartGenericDefinition(context, constraint_info.generic_id); context.inst_block_stack().Push(); + context.require_impls_stack().PushArray(); // Declare and introduce `Self`. We model `Self` as a symbolic binding whose // type is the named constraint, excluding any other interfaces mentioned by @@ -156,14 +157,20 @@ auto HandleParseNode(Context& context, .Pop(); context.inst_block_stack().Pop(); + auto require_impls_block_id = context.require_impls_blocks().Add( + context.require_impls_stack().PeekArray()); + context.require_impls_stack().PopArray(); + auto& constraint_info = context.named_constraints().Get(named_constraint_id); - constraint_info.complete = true; + if (!constraint_info.complete) { + constraint_info.require_impls_block_id = require_impls_block_id; + // TODO: Do something with `alias` statements in the body of the + // constraint. + constraint_info.complete = true; + } FinishGenericDefinition(context, constraint_info.generic_id); - // TODO: Do something with `require` and `alias` statements in the body of the - // constraint. - // The decl_name_stack and scopes are popped by `ProcessNodeIds`. return true; } diff --git a/toolchain/check/handle_require.cpp b/toolchain/check/handle_require.cpp index d3d583542bf1..529832493fb4 100644 --- a/toolchain/check/handle_require.cpp +++ b/toolchain/check/handle_require.cpp @@ -259,6 +259,8 @@ auto HandleParseNode(Context& context, Parse::RequireDeclId node_id) -> bool { require_impls_decl.require_impls_id = require_impls_id; ReplaceInstBeforeConstantUse(context, decl_id, require_impls_decl); + context.require_impls_stack().AppendToTop(require_impls_id); + return true; } diff --git a/toolchain/check/import_ref.cpp b/toolchain/check/import_ref.cpp index 8458a2fb8a65..858a089799d1 100644 --- a/toolchain/check/import_ref.cpp +++ b/toolchain/check/import_ref.cpp @@ -2593,6 +2593,7 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver, implicit_param_patterns); new_interface.param_patterns_id = GetLocalCanonicalInstBlockId( resolver, import_interface.param_patterns_id, param_patterns); + // TODO: Import require_impls_block_id. SetGenericData(resolver, import_interface.generic_id, new_interface.generic_id, generic_data); @@ -2749,6 +2750,7 @@ static auto TryResolveTypedInst(ImportRefResolver& resolver, implicit_param_patterns); new_named_constraint.param_patterns_id = GetLocalCanonicalInstBlockId( resolver, import_named_constraint.param_patterns_id, param_patterns); + // TODO: Import require_impls_block_id. SetGenericData(resolver, import_named_constraint.generic_id, import_named_constraint.generic_id, generic_data); diff --git a/toolchain/check/inst_block_stack.h b/toolchain/check/inst_block_stack.h index ffc3cd250fe0..b2994ee662e4 100644 --- a/toolchain/check/inst_block_stack.h +++ b/toolchain/check/inst_block_stack.h @@ -38,9 +38,9 @@ class InstBlockStack { auto PushUnreachable() -> void { Push(SemIR::InstBlockId::Unreachable); } // Returns the ID of the top instruction block, allocating one if necessary. - // If `depth` is specified, returns the instruction at `depth` levels from the - // top of the stack instead of the top block, where the top block is at depth - // 0. + // If `depth` is specified, returns the instruction block at `depth` levels + // from the top of the stack instead of the top block, where the top block is + // at depth 0. auto PeekOrAdd(int depth = 0) -> SemIR::InstBlockId; // Pops the top instruction block. This will never return `None`; `Empty` is diff --git a/toolchain/check/testdata/basics/include_in_dumps.carbon b/toolchain/check/testdata/basics/include_in_dumps.carbon index 4c657d5fd534..80a321777baf 100644 --- a/toolchain/check/testdata/basics/include_in_dumps.carbon +++ b/toolchain/check/testdata/basics/include_in_dumps.carbon @@ -108,6 +108,8 @@ fn F(c: C) { c.(I.Op)(); } // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- exclude/included_with_range.carbon @@ -154,6 +156,8 @@ fn F(c: C) { c.(I.Op)(); } // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .Op = %assoc0 // CHECK:STDOUT: witness = (%I.Op.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @I.Op(@I.%Self: %I.type) { @@ -246,6 +250,8 @@ fn F(c: C) { c.(I.Op)(); } // CHECK:STDOUT: .Self = imports.%Main.import_ref.8df // CHECK:STDOUT: .Op = imports.%Main.import_ref.9cd // CHECK:STDOUT: witness = (imports.%Main.Op) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.I.impl: imports.%Main.import_ref.29a as imports.%Main.import_ref.301 [from "exclude/included_with_range.carbon"] { diff --git a/toolchain/check/testdata/class/adapter/adapt.carbon b/toolchain/check/testdata/class/adapter/adapt.carbon index 26504383d7e5..3a8f4c3bfa97 100644 --- a/toolchain/check/testdata/class/adapter/adapt.carbon +++ b/toolchain/check/testdata/class/adapter/adapt.carbon @@ -259,6 +259,8 @@ interface I { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F() { diff --git a/toolchain/check/testdata/class/generic/member_type.carbon b/toolchain/check/testdata/class/generic/member_type.carbon index f024841ae51d..8917335074c5 100644 --- a/toolchain/check/testdata/class/generic/member_type.carbon +++ b/toolchain/check/testdata/class/generic/member_type.carbon @@ -562,6 +562,8 @@ fn Test() -> i32 { // CHECK:STDOUT: .T = // CHECK:STDOUT: .F = %assoc0.loc6_28.1 // CHECK:STDOUT: witness = (%Inner.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/facet/call_combined_impl_witness.carbon b/toolchain/check/testdata/facet/call_combined_impl_witness.carbon index 9d8d1dcd52d5..2d4fbb8e4af0 100644 --- a/toolchain/check/testdata/facet/call_combined_impl_witness.carbon +++ b/toolchain/check/testdata/facet/call_combined_impl_witness.carbon @@ -211,6 +211,8 @@ fn F() { // CHECK:STDOUT: .AA = // CHECK:STDOUT: .BB = // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @A { @@ -223,6 +225,8 @@ fn F() { // CHECK:STDOUT: .AA = %assoc0 // CHECK:STDOUT: .BB = // CHECK:STDOUT: witness = (%A.AA.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @B { @@ -235,6 +239,8 @@ fn F() { // CHECK:STDOUT: .BB = %assoc0 // CHECK:STDOUT: .AA = // CHECK:STDOUT: witness = (%B.BB.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.Empty.impl: %C.ref as %Empty.ref { diff --git a/toolchain/check/testdata/facet/convert_class_type_to_facet_type.carbon b/toolchain/check/testdata/facet/convert_class_type_to_facet_type.carbon index 4070af880726..f004752fc447 100644 --- a/toolchain/check/testdata/facet/convert_class_type_to_facet_type.carbon +++ b/toolchain/check/testdata/facet/convert_class_type_to_facet_type.carbon @@ -87,6 +87,8 @@ fn F() { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @Goat.as.Animal.impl: %Goat.ref as %Animal.ref { diff --git a/toolchain/check/testdata/facet/convert_class_type_to_generic_facet_value.carbon b/toolchain/check/testdata/facet/convert_class_type_to_generic_facet_value.carbon index 5237bf188c66..89b027396709 100644 --- a/toolchain/check/testdata/facet/convert_class_type_to_generic_facet_value.carbon +++ b/toolchain/check/testdata/facet/convert_class_type_to_generic_facet_value.carbon @@ -202,6 +202,8 @@ fn G() { // CHECK:STDOUT: .Self = %Self.loc4_34.1 // CHECK:STDOUT: .F = %assoc0.loc5_9.1 // CHECK:STDOUT: witness = (%Generic.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -493,6 +495,8 @@ fn G() { // CHECK:STDOUT: .Self = %Self.loc4_34.1 // CHECK:STDOUT: .F = %assoc0.loc5_9.1 // CHECK:STDOUT: witness = (%Generic.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/facet/convert_class_value_to_facet_value_value.carbon b/toolchain/check/testdata/facet/convert_class_value_to_facet_value_value.carbon index fd1ee090b6bf..1f0d22aef6cb 100644 --- a/toolchain/check/testdata/facet/convert_class_value_to_facet_value_value.carbon +++ b/toolchain/check/testdata/facet/convert_class_value_to_facet_value_value.carbon @@ -110,6 +110,8 @@ fn F() { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @Goat.as.Animal.impl: %Goat.ref as %Animal.ref { diff --git a/toolchain/check/testdata/facet/convert_class_value_to_generic_facet_value_value.carbon b/toolchain/check/testdata/facet/convert_class_value_to_generic_facet_value_value.carbon index 7de195b31f4b..8c6dc9f33da5 100644 --- a/toolchain/check/testdata/facet/convert_class_value_to_generic_facet_value_value.carbon +++ b/toolchain/check/testdata/facet/convert_class_value_to_generic_facet_value_value.carbon @@ -255,6 +255,8 @@ fn B() { // CHECK:STDOUT: .Self = %Self.loc4_34.1 // CHECK:STDOUT: .F = %assoc0.loc5_9.1 // CHECK:STDOUT: witness = (%Generic.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -555,6 +557,8 @@ fn B() { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc3_33.1 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -796,6 +800,8 @@ fn B() { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc3_33.1 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -996,6 +1002,8 @@ fn B() { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl(%T.loc7_14.1: type) { diff --git a/toolchain/check/testdata/facet/convert_facet_value_to_itself.carbon b/toolchain/check/testdata/facet/convert_facet_value_to_itself.carbon index 9ec79645c601..fa2fdeeedda2 100644 --- a/toolchain/check/testdata/facet/convert_facet_value_to_itself.carbon +++ b/toolchain/check/testdata/facet/convert_facet_value_to_itself.carbon @@ -103,6 +103,8 @@ fn F() { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @Goat.as.Animal.impl: %Goat.ref as %Animal.ref { diff --git a/toolchain/check/testdata/facet/convert_facet_value_to_narrowed_facet_type.carbon b/toolchain/check/testdata/facet/convert_facet_value_to_narrowed_facet_type.carbon index f0d2adf8dbb1..4c95f8d25d57 100644 --- a/toolchain/check/testdata/facet/convert_facet_value_to_narrowed_facet_type.carbon +++ b/toolchain/check/testdata/facet/convert_facet_value_to_narrowed_facet_type.carbon @@ -201,6 +201,8 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Animal { @@ -209,6 +211,8 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Feed(%T.loc6_9.2: %Eats.type) { @@ -404,6 +408,8 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Animal { @@ -412,6 +418,8 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Tame { @@ -420,6 +428,8 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @FeedTame(%V.loc7_13.2: %facet_type.807) { @@ -630,6 +640,8 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Animal { @@ -638,6 +650,8 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Tame { @@ -646,6 +660,8 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @A.binding.as_type.as.Eats.impl(%A.loc7_14.1: %Animal.type) { @@ -830,6 +846,8 @@ fn CallsWithTypeExplicit(U:! type) { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @TakesA(%T.loc7_11.2: %A.type) { diff --git a/toolchain/check/testdata/facet/convert_facet_value_value_to_blanket_impl.carbon b/toolchain/check/testdata/facet/convert_facet_value_value_to_blanket_impl.carbon index 2cc1d285033e..dc496b87575e 100644 --- a/toolchain/check/testdata/facet/convert_facet_value_value_to_blanket_impl.carbon +++ b/toolchain/check/testdata/facet/convert_facet_value_value_to_blanket_impl.carbon @@ -131,6 +131,8 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Animal { @@ -139,6 +141,8 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @A.binding.as_type.as.Eats.impl(%A.loc18_14.1: %Animal.type) { diff --git a/toolchain/check/testdata/facet/convert_facet_value_value_to_generic_facet_value_value.carbon b/toolchain/check/testdata/facet/convert_facet_value_value_to_generic_facet_value_value.carbon index e001cf88b66f..a373cab29964 100644 --- a/toolchain/check/testdata/facet/convert_facet_value_value_to_generic_facet_value_value.carbon +++ b/toolchain/check/testdata/facet/convert_facet_value_value_to_generic_facet_value_value.carbon @@ -275,6 +275,8 @@ fn F() { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Animal { @@ -283,6 +285,8 @@ fn F() { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Eats(%Food.loc21_16.2: type) { @@ -298,6 +302,8 @@ fn F() { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc21_29.1 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/facet/convert_facet_value_value_to_itself.carbon b/toolchain/check/testdata/facet/convert_facet_value_value_to_itself.carbon index 72a97e015a6d..c69b9b6c15bc 100644 --- a/toolchain/check/testdata/facet/convert_facet_value_value_to_itself.carbon +++ b/toolchain/check/testdata/facet/convert_facet_value_value_to_itself.carbon @@ -135,6 +135,8 @@ fn F() { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @Goat.as.Animal.impl: %Goat.ref as %Animal.ref { diff --git a/toolchain/check/testdata/facet/convert_interface.carbon b/toolchain/check/testdata/facet/convert_interface.carbon index f03f1887fcf4..e70040d01d76 100644 --- a/toolchain/check/testdata/facet/convert_interface.carbon +++ b/toolchain/check/testdata/facet/convert_interface.carbon @@ -80,6 +80,8 @@ fn G() { F(Animal); } // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Animal { @@ -88,6 +90,8 @@ fn G() { F(Animal); } // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @Animal.type.as.Eats.impl: %Animal.ref as %Eats.ref { diff --git a/toolchain/check/testdata/facet/fail_convert_class_type_to_generic_facet_value.carbon b/toolchain/check/testdata/facet/fail_convert_class_type_to_generic_facet_value.carbon index 9dce5b265c52..6bd7019844cf 100644 --- a/toolchain/check/testdata/facet/fail_convert_class_type_to_generic_facet_value.carbon +++ b/toolchain/check/testdata/facet/fail_convert_class_type_to_generic_facet_value.carbon @@ -149,6 +149,8 @@ fn G() { // CHECK:STDOUT: .Self = %Self.loc15_34.1 // CHECK:STDOUT: .F = %assoc0.loc16_9.1 // CHECK:STDOUT: witness = (%Generic.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/facet/fail_convert_facet_value_to_missing_impl.carbon b/toolchain/check/testdata/facet/fail_convert_facet_value_to_missing_impl.carbon index 428a2fe1d830..82c49ec23248 100644 --- a/toolchain/check/testdata/facet/fail_convert_facet_value_to_missing_impl.carbon +++ b/toolchain/check/testdata/facet/fail_convert_facet_value_to_missing_impl.carbon @@ -113,6 +113,8 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Animal { @@ -121,6 +123,8 @@ fn HandleAnimal[T:! Animal](a: T) { Feed(a); } // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Feed(%T.loc18_9.2: %Eats.type) { diff --git a/toolchain/check/testdata/facet/fail_convert_type_erased_type_to_facet.carbon b/toolchain/check/testdata/facet/fail_convert_type_erased_type_to_facet.carbon index cf3f6a5703e6..e04e65b017ad 100644 --- a/toolchain/check/testdata/facet/fail_convert_type_erased_type_to_facet.carbon +++ b/toolchain/check/testdata/facet/fail_convert_type_erased_type_to_facet.carbon @@ -94,6 +94,8 @@ fn F() { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @Goat.as.Animal.impl: %Goat.ref as %Animal.ref { diff --git a/toolchain/check/testdata/facet/period_self.carbon b/toolchain/check/testdata/facet/period_self.carbon index d477188d114d..7c0c3f2a1b4c 100644 --- a/toolchain/check/testdata/facet/period_self.carbon +++ b/toolchain/check/testdata/facet/period_self.carbon @@ -489,6 +489,8 @@ fn F[U:! Core.Destroy where .Self impls I(.Self)](u: U) { // CHECK:STDOUT: .Self = %Self.loc4_23.1 // CHECK:STDOUT: .I1 = @I1.%assoc0 // CHECK:STDOUT: witness = (%I1) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/facet/require_import.carbon b/toolchain/check/testdata/facet/require_import.carbon index 7a2c20c041b2..5e0d6789a759 100644 --- a/toolchain/check/testdata/facet/require_import.carbon +++ b/toolchain/check/testdata/facet/require_import.carbon @@ -82,11 +82,15 @@ fn F(A:! X, B:! Y) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%Main.import_ref.581 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: constraint @X [from "a.carbon"] { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%Main.import_ref.cae +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%A.loc4_6.2: %X.type, %B.loc4_13.2: %Y.type) { diff --git a/toolchain/check/testdata/function/builtin/call_from_operator.carbon b/toolchain/check/testdata/function/builtin/call_from_operator.carbon index 3e31166d3d5b..4638ab46dc7a 100644 --- a/toolchain/check/testdata/function/builtin/call_from_operator.carbon +++ b/toolchain/check/testdata/function/builtin/call_from_operator.carbon @@ -299,6 +299,8 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: .Self = %Self.loc7_29.1 // CHECK:STDOUT: .Op = %assoc0.loc8_41.1 // CHECK:STDOUT: witness = (%AddWith.Op.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -340,6 +342,8 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: .T = // CHECK:STDOUT: .Convert = %assoc0.loc12_32.1 // CHECK:STDOUT: witness = (%As.Convert.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -381,6 +385,8 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: .T = // CHECK:STDOUT: .Convert = %assoc0.loc16_32.1 // CHECK:STDOUT: witness = (%ImplicitAs.Convert.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -881,6 +887,8 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: .Self = imports.%Core.import_ref.375 // CHECK:STDOUT: .Convert = imports.%Core.import_ref.471 // CHECK:STDOUT: witness = (imports.%Core.Convert.924) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -900,6 +908,8 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: .Self = imports.%Core.import_ref.833 // CHECK:STDOUT: .Op = imports.%Core.import_ref.d7c // CHECK:STDOUT: witness = (imports.%Core.Op) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -919,6 +929,8 @@ var arr: array(i32, (1 as i32) + (2 as i32)) = (3, 4, (3 as i32) + (4 as i32)); // CHECK:STDOUT: .Self = imports.%Core.import_ref.d6f // CHECK:STDOUT: .Convert = imports.%Core.import_ref.b9c // CHECK:STDOUT: witness = (imports.%Core.Convert.acf) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/function/builtin/method.carbon b/toolchain/check/testdata/function/builtin/method.carbon index fb0b45a34eaa..15d8bfcad600 100644 --- a/toolchain/check/testdata/function/builtin/method.carbon +++ b/toolchain/check/testdata/function/builtin/method.carbon @@ -211,6 +211,8 @@ var arr: array(i32, (1 as i32).(I.F)(2)); // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%I.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @i32.as.I.impl: %i32 as %I.ref { diff --git a/toolchain/check/testdata/function/generic/call_method_on_generic_facet.carbon b/toolchain/check/testdata/function/generic/call_method_on_generic_facet.carbon index 14927d837ad4..a89db45c76e7 100644 --- a/toolchain/check/testdata/function/generic/call_method_on_generic_facet.carbon +++ b/toolchain/check/testdata/function/generic/call_method_on_generic_facet.carbon @@ -181,6 +181,8 @@ fn G() { // CHECK:STDOUT: .Self = %Self.loc15_34.1 // CHECK:STDOUT: .F = %assoc0.loc16_9.1 // CHECK:STDOUT: witness = (%Generic.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -193,6 +195,8 @@ fn G() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .G = %assoc0 // CHECK:STDOUT: witness = (%Other.G.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @ImplsGeneric.as.Generic.impl: %ImplsGeneric.ref as %Generic.type { diff --git a/toolchain/check/testdata/function/generic/deduce.carbon b/toolchain/check/testdata/function/generic/deduce.carbon index 2ca3f952b5fe..3e9cca6b1a88 100644 --- a/toolchain/check/testdata/function/generic/deduce.carbon +++ b/toolchain/check/testdata/function/generic/deduce.carbon @@ -1682,6 +1682,8 @@ fn F() { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @EE.as.Z.impl: %EE.ref as %Z.ref { diff --git a/toolchain/check/testdata/function/generic/deduce_nested_facet_value.carbon b/toolchain/check/testdata/function/generic/deduce_nested_facet_value.carbon index c8ecc16d6f78..1b43b93a4cfe 100644 --- a/toolchain/check/testdata/function/generic/deduce_nested_facet_value.carbon +++ b/toolchain/check/testdata/function/generic/deduce_nested_facet_value.carbon @@ -165,6 +165,8 @@ fn F() { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @W { @@ -173,6 +175,8 @@ fn F() { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Z { @@ -181,6 +185,8 @@ fn F() { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @DD.as.Y.impl: %DD.ref as %Y.ref { diff --git a/toolchain/check/testdata/function/generic/fail_deduce_imported_function.carbon b/toolchain/check/testdata/function/generic/fail_deduce_imported_function.carbon index 547698b0628f..76fb508b383c 100644 --- a/toolchain/check/testdata/function/generic/fail_deduce_imported_function.carbon +++ b/toolchain/check/testdata/function/generic/fail_deduce_imported_function.carbon @@ -95,6 +95,8 @@ fn B() { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @A(%T.loc4_6.2: %Z.type) { @@ -187,6 +189,8 @@ fn B() { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%Lib.import_ref.462 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @A.loc4(%T.loc4_6.2: %Z.type) { diff --git a/toolchain/check/testdata/impl/assoc_const_self.carbon b/toolchain/check/testdata/impl/assoc_const_self.carbon index 2ff957b15dec..6d6d9e90d125 100644 --- a/toolchain/check/testdata/impl/assoc_const_self.carbon +++ b/toolchain/check/testdata/impl/assoc_const_self.carbon @@ -227,6 +227,8 @@ fn CallF() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .V = @V.%assoc0 // CHECK:STDOUT: witness = (%V) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @V(@I.%Self: %I.type) { @@ -343,6 +345,8 @@ fn CallF() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .V = @V.%assoc0 // CHECK:STDOUT: witness = (%V) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @V(@I.%Self: %I.type) { @@ -480,6 +484,8 @@ fn CallF() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .V = @V.%assoc0 // CHECK:STDOUT: witness = (%V) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @V(@I.%Self: %I.type) { @@ -671,6 +677,8 @@ fn CallF() { // CHECK:STDOUT: .N = // CHECK:STDOUT: .V = @V.%assoc0 // CHECK:STDOUT: witness = (%V) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -814,6 +822,8 @@ fn CallF() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .V = @V.%assoc0 // CHECK:STDOUT: witness = (%V) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @V(@I.%Self: %I.type) { diff --git a/toolchain/check/testdata/impl/compound.carbon b/toolchain/check/testdata/impl/compound.carbon index d7df0c158790..79f9d94d611e 100644 --- a/toolchain/check/testdata/impl/compound.carbon +++ b/toolchain/check/testdata/impl/compound.carbon @@ -190,6 +190,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: .Dest = // CHECK:STDOUT: .Convert = %assoc0.loc4_35.1 // CHECK:STDOUT: witness = (%ImplicitAs.Convert.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -263,6 +265,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F1 = %assoc0 // CHECK:STDOUT: witness = (%NonInstance1.F1.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @struct_type.a.as.NonInstance1.impl: %struct_type.a as %NonInstance1.ref { @@ -394,6 +398,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F2 = %assoc0 // CHECK:STDOUT: witness = (%NonInstance2.F2.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(imports.%Core.import_ref.efcd44.1: type) [from "core.carbon"] { @@ -412,6 +418,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: .Self = imports.%Core.import_ref.d6f // CHECK:STDOUT: .Convert = imports.%Core.import_ref.b9c // CHECK:STDOUT: witness = (imports.%Core.Convert) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -577,6 +585,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F3 = %assoc0 // CHECK:STDOUT: witness = (%NonInstance3.F3.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @ImplicitAs(imports.%Core.import_ref.efcd44.1: type) [from "core.carbon"] { @@ -595,6 +605,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: .Self = imports.%Core.import_ref.d6f // CHECK:STDOUT: .Convert = imports.%Core.import_ref.b9c // CHECK:STDOUT: witness = (imports.%Core.Convert) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -756,6 +768,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .G1 = %assoc0 // CHECK:STDOUT: witness = (%Instance1.G1.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @struct_type.d.as.Instance1.impl: %struct_type.d as %Instance1.ref { @@ -885,6 +899,8 @@ fn InstanceCallFail() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .G2 = %assoc0 // CHECK:STDOUT: witness = (%Instance2.G2.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @struct_type.e.as.Instance2.impl: %struct_type.e as %Instance2.ref { diff --git a/toolchain/check/testdata/impl/declaration.carbon b/toolchain/check/testdata/impl/declaration.carbon index 1dfe438bd3de..b58e307102ae 100644 --- a/toolchain/check/testdata/impl/declaration.carbon +++ b/toolchain/check/testdata/impl/declaration.carbon @@ -66,6 +66,8 @@ impl i32 as I {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @i32.as.I.impl: %i32.loc17 as %I.ref.loc17 { diff --git a/toolchain/check/testdata/impl/empty.carbon b/toolchain/check/testdata/impl/empty.carbon index 0b0620b352dc..dfb6629033dc 100644 --- a/toolchain/check/testdata/impl/empty.carbon +++ b/toolchain/check/testdata/impl/empty.carbon @@ -61,6 +61,8 @@ impl i32 as Empty { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @i32.as.Empty.impl: %i32 as %Empty.ref { diff --git a/toolchain/check/testdata/impl/error_recovery.carbon b/toolchain/check/testdata/impl/error_recovery.carbon index df24c641c6c7..630e4dddbff9 100644 --- a/toolchain/check/testdata/impl/error_recovery.carbon +++ b/toolchain/check/testdata/impl/error_recovery.carbon @@ -55,6 +55,8 @@ impl forall [T: type] C as I { } // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.I.impl: %C.ref as %I.ref { diff --git a/toolchain/check/testdata/impl/extend_impl_generic.carbon b/toolchain/check/testdata/impl/extend_impl_generic.carbon index 1b8b292611b0..c39c199f118e 100644 --- a/toolchain/check/testdata/impl/extend_impl_generic.carbon +++ b/toolchain/check/testdata/impl/extend_impl_generic.carbon @@ -214,6 +214,8 @@ class X(U:! type) { // CHECK:STDOUT: .F = %assoc0.loc5_14.1 // CHECK:STDOUT: .Param = // CHECK:STDOUT: witness = (%HasF.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -487,6 +489,8 @@ class X(U:! type) { // CHECK:STDOUT: .F = %assoc0.loc5_25.1 // CHECK:STDOUT: .U = // CHECK:STDOUT: witness = (%I.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/fail_alias.carbon b/toolchain/check/testdata/impl/fail_alias.carbon index 704996804bd2..72bffe66cf56 100644 --- a/toolchain/check/testdata/impl/fail_alias.carbon +++ b/toolchain/check/testdata/impl/fail_alias.carbon @@ -71,6 +71,8 @@ impl AC as AI {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.I.impl.7de31e.1: %AC.ref as %AI.ref { diff --git a/toolchain/check/testdata/impl/fail_call_invalid.carbon b/toolchain/check/testdata/impl/fail_call_invalid.carbon index 0be89eff0a07..3db4d6b61a91 100644 --- a/toolchain/check/testdata/impl/fail_call_invalid.carbon +++ b/toolchain/check/testdata/impl/fail_call_invalid.carbon @@ -114,6 +114,8 @@ fn InstanceCall(n: i32) { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .G = %assoc0 // CHECK:STDOUT: witness = (%Simple.G.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @i32.as.Simple.impl: %i32 as %Simple.ref { diff --git a/toolchain/check/testdata/impl/fail_extend_impl_forall.carbon b/toolchain/check/testdata/impl/fail_extend_impl_forall.carbon index 334446ebe348..a6a362312603 100644 --- a/toolchain/check/testdata/impl/fail_extend_impl_forall.carbon +++ b/toolchain/check/testdata/impl/fail_extend_impl_forall.carbon @@ -94,6 +94,8 @@ class C { // CHECK:STDOUT: .T = // CHECK:STDOUT: .F = %assoc0.loc16_13.1 // CHECK:STDOUT: witness = (%GenericInterface.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/fail_extend_impl_scope.carbon b/toolchain/check/testdata/impl/fail_extend_impl_scope.carbon index 53fa4ec71a95..cf6b28aac75e 100644 --- a/toolchain/check/testdata/impl/fail_extend_impl_scope.carbon +++ b/toolchain/check/testdata/impl/fail_extend_impl_scope.carbon @@ -102,6 +102,8 @@ fn F() { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @empty_tuple.type.as.I.impl: %.loc9_14.2 as %I.ref { @@ -144,6 +146,8 @@ fn F() { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @empty_struct_type.as.J.impl: %.loc10_16.2 as %J.ref { @@ -230,6 +234,8 @@ fn F() { // CHECK:STDOUT: .Zero = %assoc0 // CHECK:STDOUT: .Z = // CHECK:STDOUT: witness = (%Z.Zero.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @.as.Z.impl(@Z.%Self: %Z.type) { diff --git a/toolchain/check/testdata/impl/fail_extend_impl_type_as.carbon b/toolchain/check/testdata/impl/fail_extend_impl_type_as.carbon index 670f8bedaf31..4528c12185de 100644 --- a/toolchain/check/testdata/impl/fail_extend_impl_type_as.carbon +++ b/toolchain/check/testdata/impl/fail_extend_impl_type_as.carbon @@ -97,6 +97,8 @@ class E { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @i32.as.I.impl: %i32 as %I.ref { diff --git a/toolchain/check/testdata/impl/fail_extend_partially_defined_interface.carbon b/toolchain/check/testdata/impl/fail_extend_partially_defined_interface.carbon index f508a8ff0d96..1d633b9cf7a9 100644 --- a/toolchain/check/testdata/impl/fail_extend_partially_defined_interface.carbon +++ b/toolchain/check/testdata/impl/fail_extend_partially_defined_interface.carbon @@ -52,6 +52,8 @@ interface I { // CHECK:STDOUT: .C = %C.decl // CHECK:STDOUT: .I = // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl(@I.%Self: %I.type) { diff --git a/toolchain/check/testdata/impl/fail_impl_as_scope.carbon b/toolchain/check/testdata/impl/fail_impl_as_scope.carbon index a1e01ec23e01..5a5e4d801dc1 100644 --- a/toolchain/check/testdata/impl/fail_impl_as_scope.carbon +++ b/toolchain/check/testdata/impl/fail_impl_as_scope.carbon @@ -140,6 +140,8 @@ class X { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @.as.I.impl: as %I.ref { @@ -197,6 +199,8 @@ class X { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @.as.J.impl: as %J.ref { @@ -312,6 +316,8 @@ class X { // CHECK:STDOUT: .Method = %assoc1 // CHECK:STDOUT: .Z = // CHECK:STDOUT: witness = (%Z.Zero.decl, %Z.Method.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @.as.Z.impl(@Z.%Self: %Z.type) { @@ -537,6 +543,8 @@ class X { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .B = %assoc0 // CHECK:STDOUT: witness = (%A.B.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @C { @@ -545,6 +553,8 @@ class X { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @X.as.A.impl: %Self.ref as %A.ref { diff --git a/toolchain/check/testdata/impl/fail_impl_bad_assoc_const.carbon b/toolchain/check/testdata/impl/fail_impl_bad_assoc_const.carbon index 3ad8d1bdd312..b3038efad6d6 100644 --- a/toolchain/check/testdata/impl/fail_impl_bad_assoc_const.carbon +++ b/toolchain/check/testdata/impl/fail_impl_bad_assoc_const.carbon @@ -58,6 +58,8 @@ impl () as I {} // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .T = @T.%assoc0 // CHECK:STDOUT: witness = (%T) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @T(@I.%Self: %I.type) { diff --git a/toolchain/check/testdata/impl/fail_impl_bad_assoc_fn.carbon b/toolchain/check/testdata/impl/fail_impl_bad_assoc_fn.carbon index 626f44570443..4f990d735bcb 100644 --- a/toolchain/check/testdata/impl/fail_impl_bad_assoc_fn.carbon +++ b/toolchain/check/testdata/impl/fail_impl_bad_assoc_fn.carbon @@ -452,6 +452,8 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%I.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @J { @@ -490,6 +492,8 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%J.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @SelfNested { @@ -530,6 +534,8 @@ class SelfNestedBadReturnType { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%SelfNested.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @NoF.as.I.impl: %Self.ref as %I.ref { diff --git a/toolchain/check/testdata/impl/fail_impl_bad_interface.carbon b/toolchain/check/testdata/impl/fail_impl_bad_interface.carbon index 786add1f7708..98def892bb8a 100644 --- a/toolchain/check/testdata/impl/fail_impl_bad_interface.carbon +++ b/toolchain/check/testdata/impl/fail_impl_bad_interface.carbon @@ -222,6 +222,8 @@ impl {.a: bool} as type where .Self impls I {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @struct_type.a.as..impl: %struct_type.a as %.loc10_25 { diff --git a/toolchain/check/testdata/impl/fail_impl_bad_type.carbon b/toolchain/check/testdata/impl/fail_impl_bad_type.carbon index 897ab03fde61..4361067a62b4 100644 --- a/toolchain/check/testdata/impl/fail_impl_bad_type.carbon +++ b/toolchain/check/testdata/impl/fail_impl_bad_type.carbon @@ -62,6 +62,8 @@ impl true as I {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @.as.I.impl: as %I.ref { diff --git a/toolchain/check/testdata/impl/fail_redefinition.carbon b/toolchain/check/testdata/impl/fail_redefinition.carbon index 736ccf1acece..6262e8a6573c 100644 --- a/toolchain/check/testdata/impl/fail_redefinition.carbon +++ b/toolchain/check/testdata/impl/fail_redefinition.carbon @@ -73,6 +73,8 @@ impl i32 as I {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @i32.as.I.impl.36ba5e.1: %i32 as %I.ref { diff --git a/toolchain/check/testdata/impl/fail_self_type_mismatch.carbon b/toolchain/check/testdata/impl/fail_self_type_mismatch.carbon index 2859ff3e03b9..cb2819670d6d 100644 --- a/toolchain/check/testdata/impl/fail_self_type_mismatch.carbon +++ b/toolchain/check/testdata/impl/fail_self_type_mismatch.carbon @@ -164,6 +164,8 @@ impl i32 as I { // CHECK:STDOUT: .C = // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%I.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @bool.as.I.impl: %.loc28_6.2 as %I.ref { diff --git a/toolchain/check/testdata/impl/fail_undefined_interface.carbon b/toolchain/check/testdata/impl/fail_undefined_interface.carbon index 156eb0bbc576..3779f0bc8bce 100644 --- a/toolchain/check/testdata/impl/fail_undefined_interface.carbon +++ b/toolchain/check/testdata/impl/fail_undefined_interface.carbon @@ -182,6 +182,8 @@ impl C as J where .Self impls Incomplete and .T = (); // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Incomplete; @@ -260,6 +262,8 @@ impl C as J where .Self impls Incomplete and .T = (); // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .T = @T.%assoc0 // CHECK:STDOUT: witness = (%T) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Incomplete; diff --git a/toolchain/check/testdata/impl/forward_decls.carbon b/toolchain/check/testdata/impl/forward_decls.carbon index ca32f0a5aeaa..d628dbc6dbd7 100644 --- a/toolchain/check/testdata/impl/forward_decls.carbon +++ b/toolchain/check/testdata/impl/forward_decls.carbon @@ -323,6 +323,8 @@ interface I { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @empty_struct_type.as.I.impl: %.loc4_7.2 as %I.ref.loc4 { @@ -384,6 +386,8 @@ interface I { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .G = %assoc0 // CHECK:STDOUT: witness = (%I.G.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @empty_struct_type.as.I.impl: %.loc4_7.2 as %I.ref.loc4 { @@ -477,6 +481,8 @@ interface I { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @empty_struct_type.as.I.impl: %.loc4_7.2 as file.%.loc4_14.2 { @@ -564,6 +570,8 @@ interface I { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .T = @T.%assoc0 // CHECK:STDOUT: witness = (%T) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @T(@I.%Self: %I.type) { @@ -679,6 +687,8 @@ interface I { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .T = @T.%assoc0 // CHECK:STDOUT: witness = (%T) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @T(@I.%Self: %I.type) { @@ -812,6 +822,8 @@ interface I { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .T = @T.%assoc0 // CHECK:STDOUT: witness = (%T) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @T(@I.%Self: %I.type) { @@ -911,6 +923,8 @@ interface I { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .T = @T.%assoc0 // CHECK:STDOUT: witness = (%T) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @T(@I.%Self: %I.type) { @@ -1004,6 +1018,8 @@ interface I { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .T = // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @D.as..impl: %D.ref.loc13 as %.loc13 { @@ -1140,6 +1156,8 @@ interface I { // CHECK:STDOUT: .Self = %Self.loc3_23.1 // CHECK:STDOUT: .T = @T.%assoc0 // CHECK:STDOUT: witness = (%T) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1292,6 +1310,8 @@ interface I { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @D.as.I.impl: %D.ref.loc5 as %I.ref.loc5 { @@ -1398,6 +1418,8 @@ interface I { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @J { @@ -1406,6 +1428,8 @@ interface I { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @empty_struct_type.as..impl: %.loc10_7.2 as file.%.loc10_14.2; @@ -1497,6 +1521,8 @@ interface I { // CHECK:STDOUT: .T = @T.%assoc0 // CHECK:STDOUT: .U = @U.%assoc1 // CHECK:STDOUT: witness = (%T, %U) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @T(@I.%Self: %I.type) { @@ -1672,6 +1698,8 @@ interface I { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Y { @@ -1680,6 +1708,8 @@ interface I { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.X.impl: %C.ref.loc12 as %X.ref.loc12 { @@ -1810,6 +1840,8 @@ interface I { // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: .I = // CHECK:STDOUT: witness = (%I.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl(@I.%Self: %I.type) { @@ -1922,6 +1954,8 @@ interface I { // CHECK:STDOUT: .F = %assoc1 // CHECK:STDOUT: .I = // CHECK:STDOUT: witness = (%U, %I.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @U(@I.%Self: %I.type) { diff --git a/toolchain/check/testdata/impl/generic_redeclaration.carbon b/toolchain/check/testdata/impl/generic_redeclaration.carbon index 7d85fe435f11..5e67e730ad02 100644 --- a/toolchain/check/testdata/impl/generic_redeclaration.carbon +++ b/toolchain/check/testdata/impl/generic_redeclaration.carbon @@ -293,6 +293,8 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @I { @@ -301,6 +303,8 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @J { @@ -309,6 +313,8 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @K { @@ -317,6 +323,8 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @L { @@ -325,6 +333,8 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.binding.as_type.as.Interface.impl.de7(%T.loc12_14.1: %I.type) { @@ -470,6 +480,8 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @J { @@ -478,6 +490,8 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.binding.as_type.as.J.impl.8399b6.1(%T.loc7_14.1: %I.type) { @@ -571,6 +585,8 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.I.impl.7de31e.1: %C.ref as %I.ref { @@ -649,6 +665,8 @@ impl forall [T:! type] T as I { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.as.I.impl.381c92.1(%T.loc4_14.2: type) { diff --git a/toolchain/check/testdata/impl/impl_as.carbon b/toolchain/check/testdata/impl/impl_as.carbon index 12fe3db99bb1..6fc8a2d408b0 100644 --- a/toolchain/check/testdata/impl/impl_as.carbon +++ b/toolchain/check/testdata/impl/impl_as.carbon @@ -82,6 +82,8 @@ class C { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%Simple.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.Simple.impl: %Self.ref as %Simple.ref { diff --git a/toolchain/check/testdata/impl/impl_assoc_const_with_prelude.carbon b/toolchain/check/testdata/impl/impl_assoc_const_with_prelude.carbon index 8f2a88d34281..a72d291b86a2 100644 --- a/toolchain/check/testdata/impl/impl_assoc_const_with_prelude.carbon +++ b/toolchain/check/testdata/impl/impl_assoc_const_with_prelude.carbon @@ -233,6 +233,8 @@ impl () as I where .X = {.a = true, .b = (1, 2)} and .X = {.a = false, .b = (3, // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .X = @X.%assoc0 // CHECK:STDOUT: witness = (%X) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @X(@I.%Self: %I.type) { @@ -409,6 +411,8 @@ impl () as I where .X = {.a = true, .b = (1, 2)} and .X = {.a = false, .b = (3, // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .X = @X.%assoc0 // CHECK:STDOUT: witness = (%X) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @X(@I.%Self: %I.type) { diff --git a/toolchain/check/testdata/impl/impl_forall.carbon b/toolchain/check/testdata/impl/impl_forall.carbon index 95b651161152..2d42d81c9899 100644 --- a/toolchain/check/testdata/impl/impl_forall.carbon +++ b/toolchain/check/testdata/impl/impl_forall.carbon @@ -65,6 +65,8 @@ impl forall [T:! type] T as Simple { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%Simple.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.as.Simple.impl(%T.loc19_14.2: type) { diff --git a/toolchain/check/testdata/impl/import_builtin_call.carbon b/toolchain/check/testdata/impl/import_builtin_call.carbon index a453451a44f8..43c52247d64c 100644 --- a/toolchain/check/testdata/impl/import_builtin_call.carbon +++ b/toolchain/check/testdata/impl/import_builtin_call.carbon @@ -250,6 +250,8 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .Op = %assoc0 // CHECK:STDOUT: witness = (%Add.Op.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @MyInt.as.Add.impl(%N.loc15_14.2: Core.IntLiteral) { @@ -545,6 +547,8 @@ var n: Int(64) = MakeFromClass(FromLiteral(64) as OtherInt); // CHECK:STDOUT: .Self = imports.%Main.import_ref.c52 // CHECK:STDOUT: .Op = imports.%Main.import_ref.f99 // CHECK:STDOUT: witness = (imports.%Main.Op) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @MyInt.as.Add.impl(imports.%Main.import_ref.40af26.2: Core.IntLiteral) [from "generic_impl.carbon"] { diff --git a/toolchain/check/testdata/impl/import_compound.carbon b/toolchain/check/testdata/impl/import_compound.carbon index 1cb04b7b49ba..06afaf6eb01a 100644 --- a/toolchain/check/testdata/impl/import_compound.carbon +++ b/toolchain/check/testdata/impl/import_compound.carbon @@ -171,6 +171,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%NonInstance.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Instance { @@ -193,6 +195,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .G = %assoc0 // CHECK:STDOUT: witness = (%Instance.G.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @struct_type.i.as.NonInstance.impl: %struct_type.i as %NonInstance.ref { @@ -312,6 +316,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: .Self = imports.%Main.import_ref.700 // CHECK:STDOUT: .F = imports.%Main.import_ref.e3c // CHECK:STDOUT: witness = (imports.%Main.F) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @struct_type.i.as.NonInstance.impl: imports.%Main.import_ref.c9a as imports.%Main.import_ref.ef5 [from "lib.carbon"] { @@ -403,6 +409,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: .Self = imports.%Main.import_ref.700 // CHECK:STDOUT: .F = imports.%Main.import_ref.e3c // CHECK:STDOUT: witness = (imports.%Main.F) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @NonInstanceCallImportFail(%n.param: %struct_type.i) { @@ -484,6 +492,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: .Self = imports.%Main.import_ref.700 // CHECK:STDOUT: .F = imports.%Main.import_ref.e3c // CHECK:STDOUT: witness = (imports.%Main.F) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @NonInstanceCallIndirectImport(%p.param: %ptr) { @@ -592,6 +602,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: .Self = imports.%Main.import_ref.34d // CHECK:STDOUT: .G = imports.%Main.import_ref.124 // CHECK:STDOUT: witness = (imports.%Main.G) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @struct_type.i.as.Instance.impl: imports.%Main.import_ref.c9a as imports.%Main.import_ref.b49 [from "lib.carbon"] { @@ -694,6 +706,8 @@ fn InstanceCallImportFail() { // CHECK:STDOUT: .Self = imports.%Main.import_ref.34d // CHECK:STDOUT: .G = imports.%Main.import_ref.124 // CHECK:STDOUT: witness = (imports.%Main.G) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @struct_type.i.as.Instance.impl: imports.%Main.import_ref.c9a as imports.%Main.import_ref.b49 [from "lib.carbon"] { diff --git a/toolchain/check/testdata/impl/import_extend_impl.carbon b/toolchain/check/testdata/impl/import_extend_impl.carbon index 42550ce1a0e2..377053f3d316 100644 --- a/toolchain/check/testdata/impl/import_extend_impl.carbon +++ b/toolchain/check/testdata/impl/import_extend_impl.carbon @@ -73,6 +73,8 @@ fn G(c: C) { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%I.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.I.impl: %Self.ref as %I.ref { @@ -175,6 +177,8 @@ fn G(c: C) { // CHECK:STDOUT: .Self = imports.%Main.import_ref.8df // CHECK:STDOUT: .F = imports.%Main.import_ref.c44 // CHECK:STDOUT: witness = (imports.%Main.F) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.I.impl: imports.%Main.import_ref.0ed as imports.%Main.import_ref.3019d1.2 [from "extend_impl_library.carbon"] { diff --git a/toolchain/check/testdata/impl/import_generic.carbon b/toolchain/check/testdata/impl/import_generic.carbon index 3312feec3484..bafa980ecbaa 100644 --- a/toolchain/check/testdata/impl/import_generic.carbon +++ b/toolchain/check/testdata/impl/import_generic.carbon @@ -186,6 +186,8 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc5_23.1 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -360,6 +362,8 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%Main.import_ref.769 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -563,6 +567,8 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc5_23.1 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -711,6 +717,8 @@ impl forall [T:! type] D as J(T*) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%Main.import_ref.b3b // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/import_interface_assoc_const.carbon b/toolchain/check/testdata/impl/import_interface_assoc_const.carbon index 1564cabc62e5..4d6d40bc2195 100644 --- a/toolchain/check/testdata/impl/import_interface_assoc_const.carbon +++ b/toolchain/check/testdata/impl/import_interface_assoc_const.carbon @@ -244,6 +244,8 @@ impl CD as IF where .F = 0 { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .T = @T.%assoc0 // CHECK:STDOUT: witness = (%T) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @I3 { @@ -264,6 +266,8 @@ impl CD as IF where .F = 0 { // CHECK:STDOUT: .T2 = @T2.%assoc1 // CHECK:STDOUT: .T3 = @T3.%assoc2 // CHECK:STDOUT: witness = (%T1, %T2, %T3) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @NonType { @@ -276,6 +280,8 @@ impl CD as IF where .F = 0 { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .Y = @Y.%assoc0 // CHECK:STDOUT: witness = (%Y) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @T(@I.%Self: %I.type) { @@ -373,6 +379,8 @@ impl CD as IF where .F = 0 { // CHECK:STDOUT: .Self = imports.%Main.import_ref.8df // CHECK:STDOUT: .T = imports.%Main.import_ref.4fb // CHECK:STDOUT: witness = (imports.%Main.T) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @T(imports.%Main.import_ref.e33: %I.type) [from "interface.carbon"] { @@ -477,6 +485,8 @@ impl CD as IF where .F = 0 { // CHECK:STDOUT: .Self = imports.%Main.import_ref.8df // CHECK:STDOUT: .T = imports.%Main.import_ref.4fb // CHECK:STDOUT: witness = (imports.%Main.T) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @T(imports.%Main.import_ref.e33: %I.type) [from "interface.carbon"] { @@ -572,6 +582,8 @@ impl CD as IF where .F = 0 { // CHECK:STDOUT: .Self = imports.%Main.import_ref.8df // CHECK:STDOUT: .T = imports.%Main.import_ref.4fb // CHECK:STDOUT: witness = (imports.%Main.T) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @T(imports.%Main.import_ref.e33: %I.type) [from "interface.carbon"] { @@ -684,6 +696,8 @@ impl CD as IF where .F = 0 { // CHECK:STDOUT: .Self = imports.%Main.import_ref.8df // CHECK:STDOUT: .T = imports.%Main.import_ref.4fb // CHECK:STDOUT: witness = (imports.%Main.T) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @T(imports.%Main.import_ref.e33: %I.type) [from "interface.carbon"] { @@ -837,6 +851,8 @@ impl CD as IF where .F = 0 { // CHECK:STDOUT: .T2 = imports.%Main.import_ref.680 // CHECK:STDOUT: .T3 = imports.%Main.import_ref.181 // CHECK:STDOUT: witness = (imports.%Main.T1, imports.%Main.T2, imports.%Main.T3) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @T1(imports.%Main.import_ref.fbb73e.1: %I3.type) [from "interface.carbon"] { @@ -950,6 +966,8 @@ impl CD as IF where .F = 0 { // CHECK:STDOUT: .Self = imports.%Main.import_ref.8df // CHECK:STDOUT: .T = imports.%Main.import_ref.4fb // CHECK:STDOUT: witness = (imports.%Main.T) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @T(imports.%Main.import_ref.e33: %I.type) [from "interface.carbon"] { @@ -1045,6 +1063,8 @@ impl CD as IF where .F = 0 { // CHECK:STDOUT: .Self = imports.%Main.import_ref.8df // CHECK:STDOUT: .T = imports.%Main.import_ref.4fb // CHECK:STDOUT: witness = (imports.%Main.T) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @T(imports.%Main.import_ref.e33: %I.type) [from "interface.carbon"] { @@ -1138,6 +1158,8 @@ impl CD as IF where .F = 0 { // CHECK:STDOUT: .Self = imports.%Main.import_ref.8df // CHECK:STDOUT: .T = imports.%Main.import_ref.4fb // CHECK:STDOUT: witness = (imports.%Main.T) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @T(imports.%Main.import_ref.e33: %I.type) [from "interface.carbon"] { @@ -1230,6 +1252,8 @@ impl CD as IF where .F = 0 { // CHECK:STDOUT: .Self = imports.%Main.import_ref.8df // CHECK:STDOUT: .T = imports.%Main.import_ref.4fb // CHECK:STDOUT: witness = (imports.%Main.T) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @T(imports.%Main.import_ref.e33: %I.type) [from "interface.carbon"] { @@ -1322,6 +1346,8 @@ impl CD as IF where .F = 0 { // CHECK:STDOUT: .Self = imports.%Main.import_ref.8df // CHECK:STDOUT: .T = imports.%Main.import_ref.4fb // CHECK:STDOUT: witness = (imports.%Main.T) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @T(imports.%Main.import_ref.e33: %I.type) [from "interface.carbon"] { @@ -1419,6 +1445,8 @@ impl CD as IF where .F = 0 { // CHECK:STDOUT: .Self = imports.%Main.import_ref.8df // CHECK:STDOUT: .T = imports.%Main.import_ref.4fb // CHECK:STDOUT: witness = (imports.%Main.T) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @T(imports.%Main.import_ref.e33: %I.type) [from "interface.carbon"] { @@ -1514,6 +1542,8 @@ impl CD as IF where .F = 0 { // CHECK:STDOUT: .Self = imports.%Main.import_ref.b1e // CHECK:STDOUT: .Y = imports.%Main.import_ref.9fa // CHECK:STDOUT: witness = (imports.%Main.Y) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @Y(imports.%Main.import_ref.046: %NonType.type) [from "interface.carbon"] { @@ -1564,6 +1594,8 @@ impl CD as IF where .F = 0 { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%IF.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @IF.F(@IF.%Self: %IF.type) { @@ -1637,6 +1669,8 @@ impl CD as IF where .F = 0 { // CHECK:STDOUT: .Self = imports.%Main.import_ref.14d // CHECK:STDOUT: .F = imports.%Main.import_ref.f22 // CHECK:STDOUT: witness = (imports.%Main.F) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @CD.as.IF.impl: %CD.ref as %.loc10_15 { diff --git a/toolchain/check/testdata/impl/import_self.carbon b/toolchain/check/testdata/impl/import_self.carbon index 606b2de9c71c..606f3994001a 100644 --- a/toolchain/check/testdata/impl/import_self.carbon +++ b/toolchain/check/testdata/impl/import_self.carbon @@ -99,6 +99,8 @@ fn F(x: (), y: ()) -> () { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .Op = %assoc0 // CHECK:STDOUT: witness = (%Add.Op.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Add.Op(@Add.%Self: %Add.type) { @@ -198,6 +200,8 @@ fn F(x: (), y: ()) -> () { // CHECK:STDOUT: .Self = imports.%Main.import_ref.c52 // CHECK:STDOUT: .Op = imports.%Main.import_ref.f99 // CHECK:STDOUT: witness = (imports.%Main.Op) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @empty_tuple.type.as.Add.impl: %.loc6_7.2 as %Add.ref { diff --git a/toolchain/check/testdata/impl/import_self_specific.carbon b/toolchain/check/testdata/impl/import_self_specific.carbon index 918df322463e..b51a9c2ec45c 100644 --- a/toolchain/check/testdata/impl/import_self_specific.carbon +++ b/toolchain/check/testdata/impl/import_self_specific.carbon @@ -147,6 +147,8 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Z { @@ -155,6 +157,8 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @I { @@ -187,6 +191,8 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: .C = // CHECK:STDOUT: .F = %assoc1 // CHECK:STDOUT: witness = (%Assoc, %I.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @Assoc(@I.%Self: %I.type) { @@ -428,18 +434,24 @@ impl forall [N:! E] D(N) as I where .Assoc = () { // CHECK:STDOUT: .Assoc = imports.%Main.import_ref.9ff // CHECK:STDOUT: .F = imports.%Main.import_ref.abf // CHECK:STDOUT: witness = (imports.%Main.Assoc, imports.%Main.F) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Y [from "impl_def.carbon"] { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%Main.import_ref.581 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Z [from "impl_def.carbon"] { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%Main.import_ref.462 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @Assoc(imports.%Main.import_ref.e339be.1: %I.type) [from "impl_def.carbon"] { diff --git a/toolchain/check/testdata/impl/import_thunk.carbon b/toolchain/check/testdata/impl/import_thunk.carbon index 07f40d056bb1..34ca73825ccc 100644 --- a/toolchain/check/testdata/impl/import_thunk.carbon +++ b/toolchain/check/testdata/impl/import_thunk.carbon @@ -89,6 +89,8 @@ fn G() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%I.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @I.F(@I.%Self: %I.type) { @@ -206,6 +208,8 @@ fn G() { // CHECK:STDOUT: .Self = imports.%Main.import_ref.8df // CHECK:STDOUT: .F = imports.%Main.import_ref.507 // CHECK:STDOUT: witness = (imports.%Main.F) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl(%Y.loc7_14.2: %empty_tuple.type) { @@ -474,6 +478,8 @@ fn G() { // CHECK:STDOUT: .Self = imports.%Main.import_ref.8df // CHECK:STDOUT: .F = imports.%Main.import_ref.c44 // CHECK:STDOUT: witness = (imports.%Main.F.8b9) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl(imports.%Main.import_ref.7a8327.2: %empty_tuple.type) [from "b.carbon"] { diff --git a/toolchain/check/testdata/impl/import_use_generic.carbon b/toolchain/check/testdata/impl/import_use_generic.carbon index 806189fd30bc..8a40e93ff875 100644 --- a/toolchain/check/testdata/impl/import_use_generic.carbon +++ b/toolchain/check/testdata/impl/import_use_generic.carbon @@ -112,6 +112,8 @@ fn H() -> C({}).(I.F)() {} // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%I.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl(%T.loc10_14.2: type) { @@ -291,6 +293,8 @@ fn H() -> C({}).(I.F)() {} // CHECK:STDOUT: .Self = imports.%Main.import_ref.8df // CHECK:STDOUT: .F = imports.%Main.import_ref.c44 // CHECK:STDOUT: witness = (imports.%Main.F) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.I.impl(imports.%Main.import_ref.efcd44.2: type) [from "import_generic.carbon"] { diff --git a/toolchain/check/testdata/impl/interface_args.carbon b/toolchain/check/testdata/impl/interface_args.carbon index 40e6cebfead8..6b5d776a1fff 100644 --- a/toolchain/check/testdata/impl/interface_args.carbon +++ b/toolchain/check/testdata/impl/interface_args.carbon @@ -177,6 +177,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: .Dest = // CHECK:STDOUT: .Convert = %assoc0.loc4_35.1 // CHECK:STDOUT: witness = (%ImplicitAs.Convert.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -319,6 +321,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: .Self = %Self.loc4_28.1 // CHECK:STDOUT: .Op = %assoc0.loc5_22.1 // CHECK:STDOUT: witness = (%Action.Op.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -528,6 +532,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: .Self = imports.%Main.import_ref.0fd // CHECK:STDOUT: .Op = imports.%Main.import_ref.2c8 // CHECK:STDOUT: witness = (imports.%Main.Op) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -708,6 +714,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: .Self = imports.%Main.import_ref.0fd // CHECK:STDOUT: .Op = imports.%Main.import_ref.2c8 // CHECK:STDOUT: witness = (imports.%Main.Op) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -923,6 +931,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: .Make = %assoc0.loc6_17.1 // CHECK:STDOUT: .Method = %assoc1.loc8_31.1 // CHECK:STDOUT: witness = (%Factory.Make.decl, %Factory.Method.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1183,6 +1193,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: .Make = imports.%Main.import_ref.2a0 // CHECK:STDOUT: .Method = imports.%Main.import_ref.da9 // CHECK:STDOUT: witness = (imports.%Main.Make, imports.%Main.Method) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1437,6 +1449,8 @@ fn InstanceC(a: A) -> C { // CHECK:STDOUT: .Make = imports.%Main.import_ref.2a0 // CHECK:STDOUT: .Method = imports.%Main.import_ref.da9 // CHECK:STDOUT: witness = (imports.%Main.Make, imports.%Main.Method) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/lookup/alias.carbon b/toolchain/check/testdata/impl/lookup/alias.carbon index 64e5a2055e26..6cf8af3cbc00 100644 --- a/toolchain/check/testdata/impl/lookup/alias.carbon +++ b/toolchain/check/testdata/impl/lookup/alias.carbon @@ -85,6 +85,8 @@ fn G(c: C) { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%HasF.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.HasF.impl: %C.ref as %HasF.ref { diff --git a/toolchain/check/testdata/impl/lookup/canonical_query_self.carbon b/toolchain/check/testdata/impl/lookup/canonical_query_self.carbon index fe8b361d17fb..c25972e76e19 100644 --- a/toolchain/check/testdata/impl/lookup/canonical_query_self.carbon +++ b/toolchain/check/testdata/impl/lookup/canonical_query_self.carbon @@ -193,6 +193,8 @@ fn G() { // CHECK:STDOUT: .JJ = // CHECK:STDOUT: .J = // CHECK:STDOUT: witness = (%I.II.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @J { @@ -215,6 +217,8 @@ fn G() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .JJ = %assoc0 // CHECK:STDOUT: witness = (%J.JJ.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.I.impl: %Self.ref as %I.ref { diff --git a/toolchain/check/testdata/impl/lookup/fail_alias_impl_not_found.carbon b/toolchain/check/testdata/impl/lookup/fail_alias_impl_not_found.carbon index 343221a4f710..75afd72c4286 100644 --- a/toolchain/check/testdata/impl/lookup/fail_alias_impl_not_found.carbon +++ b/toolchain/check/testdata/impl/lookup/fail_alias_impl_not_found.carbon @@ -77,6 +77,8 @@ fn F(c: C) { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%I.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { diff --git a/toolchain/check/testdata/impl/lookup/fail_todo_undefined_impl.carbon b/toolchain/check/testdata/impl/lookup/fail_todo_undefined_impl.carbon index 426173b748aa..a17bc0a82eca 100644 --- a/toolchain/check/testdata/impl/lookup/fail_todo_undefined_impl.carbon +++ b/toolchain/check/testdata/impl/lookup/fail_todo_undefined_impl.carbon @@ -101,6 +101,8 @@ fn G() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%I.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.I.impl.bd0: %Self.ref as %I.ref; diff --git a/toolchain/check/testdata/impl/lookup/generic.carbon b/toolchain/check/testdata/impl/lookup/generic.carbon index 478f5bcd1899..9ce22a9e1ebc 100644 --- a/toolchain/check/testdata/impl/lookup/generic.carbon +++ b/toolchain/check/testdata/impl/lookup/generic.carbon @@ -220,6 +220,8 @@ fn G(x: A) { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%HasF.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.as.HasF.impl(%T.loc8_14.2: type) { @@ -452,6 +454,8 @@ fn G(x: A) { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%HasF.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @ptr.as.HasF.impl(%T.loc8_14.2: type) { @@ -692,6 +696,8 @@ fn G(x: A) { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%HasF.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @C.as.HasF.impl(%T.loc10_14.2: type) { @@ -947,6 +953,8 @@ fn G(x: A) { // CHECK:STDOUT: .Self = %Self.loc4_26.1 // CHECK:STDOUT: .F = %assoc0.loc5_21.1 // CHECK:STDOUT: witness = (%HasF.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1168,6 +1176,8 @@ fn G(x: A) { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%HasF.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic impl @T.as.HasF.impl(%T.loc12_14.2: type, %U.loc12_24.2: type) { @@ -1362,6 +1372,8 @@ fn G(x: A) { // CHECK:STDOUT: .Self = %Self.loc4_26.1 // CHECK:STDOUT: .F = %assoc0.loc5_21.1 // CHECK:STDOUT: witness = (%HasF.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/lookup/import.carbon b/toolchain/check/testdata/impl/lookup/import.carbon index 0ce62522d908..5449a83db057 100644 --- a/toolchain/check/testdata/impl/lookup/import.carbon +++ b/toolchain/check/testdata/impl/lookup/import.carbon @@ -288,6 +288,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%HasF.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.HasF.impl: %C.ref as %HasF.ref { @@ -448,6 +450,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .G = %assoc0 // CHECK:STDOUT: witness = (%HasG.G.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @HasF [from "package_a.carbon"] { @@ -455,6 +459,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: .Self = imports.%PackageA.import_ref.2fb // CHECK:STDOUT: .F = imports.%PackageA.import_ref.c63 // CHECK:STDOUT: witness = (imports.%PackageA.F) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.HasG.impl: %C.ref as %HasG.ref { @@ -655,6 +661,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: .Self = imports.%PackageA.import_ref.2fb // CHECK:STDOUT: .F = imports.%PackageA.import_ref.b36 // CHECK:STDOUT: witness = (imports.%PackageA.F) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.HasF.impl: imports.%PackageA.import_ref.29a as imports.%PackageA.import_ref.e8c [from "package_a.carbon"] { @@ -785,6 +793,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: .Self = imports.%PackageA.import_ref.2fb // CHECK:STDOUT: .F = imports.%PackageA.import_ref.b36 // CHECK:STDOUT: witness = (imports.%PackageA.F) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.HasF.impl: imports.%PackageA.import_ref.29a as imports.%PackageA.import_ref.e8c [from "package_a.carbon"] { @@ -927,6 +937,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: .Self = imports.%PackageB.import_ref.103 // CHECK:STDOUT: .G = imports.%PackageB.import_ref.6c2 // CHECK:STDOUT: witness = (imports.%PackageB.G) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.HasG.impl: imports.%PackageB.import_ref.dfb as imports.%PackageB.import_ref.cee586.1 [from "package_b.carbon"] { @@ -1064,6 +1076,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: .Self = imports.%PackageB.import_ref.103 // CHECK:STDOUT: .G = imports.%PackageB.import_ref.6c2 // CHECK:STDOUT: witness = (imports.%PackageB.G) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.HasG.impl: imports.%PackageB.import_ref.dfb as imports.%PackageB.import_ref.cee586.1 [from "package_b.carbon"] { @@ -1180,6 +1194,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .H = %assoc0 // CHECK:STDOUT: witness = (%Z.H.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @empty_tuple.type.as.Z.impl: %.loc8_7.2 as %Z.ref { @@ -1282,6 +1298,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: .Self = imports.%PackageAssociatedInterface.import_ref.462 // CHECK:STDOUT: .H = imports.%PackageAssociatedInterface.import_ref.609 // CHECK:STDOUT: witness = (imports.%PackageAssociatedInterface.H) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @empty_tuple.type.as.Z.impl: imports.%PackageAssociatedInterface.import_ref.e5c as imports.%PackageAssociatedInterface.import_ref.df1 [from "associated_interface.carbon"] { @@ -1393,6 +1411,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .K = %assoc0 // CHECK:STDOUT: witness = (%Y.K.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @AnyParam(%T.loc4_16.2: type, %X.loc4_26.2: @AnyParam.%T.loc4_16.1 (%T)) { @@ -1551,6 +1571,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc6_38.1 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1559,6 +1581,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: .Self = imports.%PackageHasParam.import_ref.581 // CHECK:STDOUT: .K = imports.%PackageHasParam.import_ref.f69 // CHECK:STDOUT: witness = (imports.%PackageHasParam.K) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @AnyParam.as.Y.impl: %AnyParam as %Y.ref { @@ -1777,6 +1801,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%PackageGenericInterface.import_ref.4d7 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1785,6 +1811,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: .Self = imports.%PackageHasParam.import_ref.581 // CHECK:STDOUT: .K = imports.%PackageHasParam.import_ref.f69 // CHECK:STDOUT: witness = (imports.%PackageHasParam.K) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @AnyParam.as.Y.impl: imports.%PackageGenericInterface.import_ref.321 as imports.%PackageGenericInterface.import_ref.ca6 [from "has_generic_interface.carbon"] { @@ -1984,6 +2012,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: .Self = imports.%PackageHasParam.import_ref.581 // CHECK:STDOUT: .K = imports.%PackageHasParam.import_ref.f69 // CHECK:STDOUT: witness = (imports.%PackageHasParam.K) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @AnyParam.as.Y.impl: %AnyParam as %Y.ref { @@ -2209,6 +2239,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: .Self = imports.%PackageHasParam.import_ref.581 // CHECK:STDOUT: .K = imports.%PackageHasParam.import_ref.f69 // CHECK:STDOUT: witness = (imports.%PackageHasParam.K) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @AnyParam.as.Y.impl: imports.%PackageGenericClass.import_ref.a0e as imports.%PackageGenericClass.import_ref.ca6 [from "has_generic_class.carbon"] { @@ -2424,6 +2456,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Extra2 { @@ -2432,6 +2466,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Extra3 { @@ -2440,6 +2476,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Extra4 { @@ -2448,6 +2486,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Extra5 { @@ -2456,6 +2496,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Extra6 { @@ -2464,6 +2506,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Extra7 { @@ -2472,6 +2516,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Extra8 { @@ -2480,6 +2526,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @I { @@ -2502,6 +2550,8 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%I.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.I.impl: %C as %I.ref { @@ -2660,54 +2710,72 @@ fn Test(c: HasExtraInterfaces.C(type)) { // CHECK:STDOUT: .Self = imports.%HasExtraInterfaces.import_ref.8df // CHECK:STDOUT: .F = imports.%HasExtraInterfaces.import_ref.be9 // CHECK:STDOUT: witness = (imports.%HasExtraInterfaces.F) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Extra8 [from "has_extra_interfaces.carbon"] { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%HasExtraInterfaces.import_ref.c8c // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Extra7 [from "has_extra_interfaces.carbon"] { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%HasExtraInterfaces.import_ref.591 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Extra6 [from "has_extra_interfaces.carbon"] { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%HasExtraInterfaces.import_ref.16e // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Extra5 [from "has_extra_interfaces.carbon"] { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%HasExtraInterfaces.import_ref.e5e // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Extra4 [from "has_extra_interfaces.carbon"] { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%HasExtraInterfaces.import_ref.178 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Extra3 [from "has_extra_interfaces.carbon"] { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%HasExtraInterfaces.import_ref.e5d // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Extra2 [from "has_extra_interfaces.carbon"] { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%HasExtraInterfaces.import_ref.7fd // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Extra1 [from "has_extra_interfaces.carbon"] { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%HasExtraInterfaces.import_ref.642 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.I.impl: imports.%HasExtraInterfaces.import_ref.ef7 as imports.%HasExtraInterfaces.import_ref.301 [from "has_extra_interfaces.carbon"] { diff --git a/toolchain/check/testdata/impl/lookup/instance_method.carbon b/toolchain/check/testdata/impl/lookup/instance_method.carbon index 0dc69790f46d..daffbed21c98 100644 --- a/toolchain/check/testdata/impl/lookup/instance_method.carbon +++ b/toolchain/check/testdata/impl/lookup/instance_method.carbon @@ -119,6 +119,8 @@ fn F(c: C) -> i32 { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%I.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.I.impl: %Self.ref as %I.ref { diff --git a/toolchain/check/testdata/impl/lookup/lookup_interface_with_enclosing_generic_inside_rewrite_constraint.carbon b/toolchain/check/testdata/impl/lookup/lookup_interface_with_enclosing_generic_inside_rewrite_constraint.carbon index 50da836135db..dc5bed2be51d 100644 --- a/toolchain/check/testdata/impl/lookup/lookup_interface_with_enclosing_generic_inside_rewrite_constraint.carbon +++ b/toolchain/check/testdata/impl/lookup/lookup_interface_with_enclosing_generic_inside_rewrite_constraint.carbon @@ -217,6 +217,8 @@ fn F() { // CHECK:STDOUT: .Self = %Self.loc50_15.1 // CHECK:STDOUT: .T = @T.%assoc0 // CHECK:STDOUT: witness = (%T) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -512,6 +514,8 @@ fn F() { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Z2 { @@ -520,6 +524,8 @@ fn F() { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Y(@Outer.%OuterParam.loc6_13.2: %Z1.type) { @@ -540,6 +546,8 @@ fn F() { // CHECK:STDOUT: .Self = %Self.loc7_15.1 // CHECK:STDOUT: .T = @T.%assoc0 // CHECK:STDOUT: witness = (%T) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/lookup/specialization_with_symbolic_rewrite.carbon b/toolchain/check/testdata/impl/lookup/specialization_with_symbolic_rewrite.carbon index 0387928eb9bc..fb17abfb65e3 100644 --- a/toolchain/check/testdata/impl/lookup/specialization_with_symbolic_rewrite.carbon +++ b/toolchain/check/testdata/impl/lookup/specialization_with_symbolic_rewrite.carbon @@ -264,6 +264,8 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: .Self = %Self.loc3_23.1 // CHECK:STDOUT: .X = @X.%assoc0 // CHECK:STDOUT: witness = (%X) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -605,6 +607,8 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: .Self = %Self.loc3_23.1 // CHECK:STDOUT: .X = @X.%assoc0 // CHECK:STDOUT: witness = (%X) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -614,6 +618,8 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @X(@Z.%T.loc3_13.2: type, @Z.%Self.loc3_23.1: @Z.%Z.type (%Z.type.4d7)) { @@ -879,6 +885,8 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .Type = @Type.%assoc0 // CHECK:STDOUT: witness = (%Type) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @Type(@Ptr.%Self: %Ptr.type) { @@ -1084,6 +1092,8 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .Type = @Type.%assoc0 // CHECK:STDOUT: witness = (%Type) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @Type(@Ptr.%Self: %Ptr.type) { @@ -1288,6 +1298,8 @@ fn F[T:! Ptr](var t: T) -> T.(Ptr.Type) { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .Type = @Type.%assoc0 // CHECK:STDOUT: witness = (%Type) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @Type(@Ptr.%Self: %Ptr.type) { diff --git a/toolchain/check/testdata/impl/lookup/specific_args.carbon b/toolchain/check/testdata/impl/lookup/specific_args.carbon index b32cf8779bfd..e1ceae8ef5f3 100644 --- a/toolchain/check/testdata/impl/lookup/specific_args.carbon +++ b/toolchain/check/testdata/impl/lookup/specific_args.carbon @@ -133,6 +133,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: .Self = %Self.loc4_23.1 // CHECK:STDOUT: .F = %assoc0.loc4_43.1 // CHECK:STDOUT: witness = (%I.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -265,6 +267,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: .Self = imports.%Main.import_ref.769 // CHECK:STDOUT: .F = imports.%Main.import_ref.2de // CHECK:STDOUT: witness = (imports.%Main.F) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -440,6 +444,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: .Self = imports.%Main.import_ref.769 // CHECK:STDOUT: .F = imports.%Main.import_ref.715 // CHECK:STDOUT: witness = (imports.%Main.F) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -601,6 +607,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: .Self = imports.%Main.import_ref.769 // CHECK:STDOUT: .F = imports.%Main.import_ref.2de // CHECK:STDOUT: witness = (imports.%Main.F) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -809,6 +817,8 @@ fn H(c: C(InClassArgs)) { c.(I(X).F)(); } // CHECK:STDOUT: .Self = imports.%Main.import_ref.769 // CHECK:STDOUT: .F = imports.%Main.import_ref.715 // CHECK:STDOUT: witness = (imports.%Main.F) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/impl/lookup/transitive.carbon b/toolchain/check/testdata/impl/lookup/transitive.carbon index 14545385e6a1..e02280b9b438 100644 --- a/toolchain/check/testdata/impl/lookup/transitive.carbon +++ b/toolchain/check/testdata/impl/lookup/transitive.carbon @@ -96,6 +96,8 @@ fn Call() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%I.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @I.F(@I.%Self: %I.type) { @@ -165,6 +167,8 @@ fn Call() { // CHECK:STDOUT: .Self = imports.%Main.import_ref.8df // CHECK:STDOUT: .F = imports.%Main.import_ref.507 // CHECK:STDOUT: witness = (imports.%Main.F) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.I.impl: %C.ref as %I.ref { @@ -336,6 +340,8 @@ fn Call() { // CHECK:STDOUT: .Self = imports.%Main.import_ref.8df // CHECK:STDOUT: .F = imports.%Main.import_ref.c44 // CHECK:STDOUT: witness = (imports.%Main.F) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.I.impl: imports.%Main.import_ref.29a as imports.%Main.import_ref.f50 [from "c.carbon"] { diff --git a/toolchain/check/testdata/impl/multiple_extend.carbon b/toolchain/check/testdata/impl/multiple_extend.carbon index adb4d643e7e5..f4d108ce9ac8 100644 --- a/toolchain/check/testdata/impl/multiple_extend.carbon +++ b/toolchain/check/testdata/impl/multiple_extend.carbon @@ -229,6 +229,8 @@ fn P(o: O) { // CHECK:STDOUT: .HasG = // CHECK:STDOUT: .G = // CHECK:STDOUT: witness = (%HasF.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @HasG { @@ -241,6 +243,8 @@ fn P(o: O) { // CHECK:STDOUT: .G = %assoc0 // CHECK:STDOUT: .F = // CHECK:STDOUT: witness = (%HasG.G.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.HasF.impl: %Self.ref as %HasF.ref { @@ -393,6 +397,8 @@ fn P(o: O) { // CHECK:STDOUT: .A = %assoc0 // CHECK:STDOUT: .HasA2 = // CHECK:STDOUT: witness = (%HasA1.A.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @HasA2 { @@ -404,6 +410,8 @@ fn P(o: O) { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .A = %assoc0 // CHECK:STDOUT: witness = (%HasA2.A.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @D.as.HasA1.impl: %Self.ref as %HasA1.ref { @@ -541,6 +549,8 @@ fn P(o: O) { // CHECK:STDOUT: .I = %assoc0 // CHECK:STDOUT: .J = // CHECK:STDOUT: witness = (%HasI.I.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @E.as.HasI.impl: %Self.ref as %HasI.ref { @@ -679,6 +689,8 @@ fn P(o: O) { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .K = %assoc0 // CHECK:STDOUT: witness = (%HasK.K.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @L.as.HasK.impl: %Self.ref as %HasK.ref { @@ -821,6 +833,8 @@ fn P(o: O) { // CHECK:STDOUT: .N = %assoc0 // CHECK:STDOUT: .HasN2 = // CHECK:STDOUT: witness = (%HasN1.N.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @HasN2 { @@ -832,6 +846,8 @@ fn P(o: O) { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .N = %assoc0 // CHECK:STDOUT: witness = (%HasN2.N.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @O.as.HasN1.impl: %Self.ref as %HasN1.ref { diff --git a/toolchain/check/testdata/impl/no_definition_in_impl_file.carbon b/toolchain/check/testdata/impl/no_definition_in_impl_file.carbon index a1c6ed846a0d..c5669e5be370 100644 --- a/toolchain/check/testdata/impl/no_definition_in_impl_file.carbon +++ b/toolchain/check/testdata/impl/no_definition_in_impl_file.carbon @@ -133,6 +133,8 @@ impl () as D; // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @empty_tuple.type.as.A.impl: %.loc10_7.2 as %A.ref; @@ -173,6 +175,8 @@ impl () as D; // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%Main.import_ref.3b8 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @empty_tuple.type.as.A.impl.766c6e.1: imports.%Main.import_ref.e5c as imports.%Main.import_ref.831 [from "fail_decl_in_api_definition_in_impl.carbon"]; @@ -233,6 +237,8 @@ impl () as D; // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @empty_tuple.type.as.B.impl: %.loc10_7.2 as %B.ref; @@ -263,6 +269,8 @@ impl () as D; // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%Main.import_ref.5c0 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @empty_tuple.type.as.B.impl: imports.%Main.import_ref.e5c as imports.%Main.import_ref.171 [from "fail_decl_only_in_api.carbon"]; @@ -296,6 +304,8 @@ impl () as D; // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @empty_tuple.type.as.C.impl: %.loc10_7.2 as %C.ref; @@ -331,6 +341,8 @@ impl () as D; // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%Main.import_ref.a1a // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @empty_tuple.type.as.C.impl.130841.1: imports.%Main.import_ref.e5c as imports.%Main.import_ref.653 [from "fail_decl_in_api_decl_in_impl.carbon"]; @@ -374,6 +386,8 @@ impl () as D; // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @empty_tuple.type.as.D.impl: %.loc10_7.2 as %D.ref; diff --git a/toolchain/check/testdata/impl/redeclaration.carbon b/toolchain/check/testdata/impl/redeclaration.carbon index 4a9eac7bb43f..35eaa85aec66 100644 --- a/toolchain/check/testdata/impl/redeclaration.carbon +++ b/toolchain/check/testdata/impl/redeclaration.carbon @@ -75,6 +75,8 @@ impl i32 as I {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @i32.as.I.impl: %i32.loc17 as %I.ref.loc17 { diff --git a/toolchain/check/testdata/impl/self_in_class.carbon b/toolchain/check/testdata/impl/self_in_class.carbon index be01e4945c4a..7ff193a36d00 100644 --- a/toolchain/check/testdata/impl/self_in_class.carbon +++ b/toolchain/check/testdata/impl/self_in_class.carbon @@ -78,6 +78,8 @@ class A { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .Make = %assoc0 // CHECK:STDOUT: witness = (%DefaultConstructible.Make.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.DefaultConstructible.impl: %C.ref as %DefaultConstructible.ref { diff --git a/toolchain/check/testdata/impl/self_in_signature.carbon b/toolchain/check/testdata/impl/self_in_signature.carbon index 2b76fd3579b9..8016fbf70c8d 100644 --- a/toolchain/check/testdata/impl/self_in_signature.carbon +++ b/toolchain/check/testdata/impl/self_in_signature.carbon @@ -171,6 +171,8 @@ impl D as SelfNested { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%UseSelf.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @SelfNested { @@ -202,6 +204,8 @@ impl D as SelfNested { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%SelfNested.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.UseSelf.impl: %C.ref as %UseSelf.ref { diff --git a/toolchain/check/testdata/impl/todo_impl_with_unrelated_fn.carbon b/toolchain/check/testdata/impl/todo_impl_with_unrelated_fn.carbon index 071ef50af24d..8c0cd051d571 100644 --- a/toolchain/check/testdata/impl/todo_impl_with_unrelated_fn.carbon +++ b/toolchain/check/testdata/impl/todo_impl_with_unrelated_fn.carbon @@ -63,6 +63,8 @@ class X { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .B = %assoc0 // CHECK:STDOUT: witness = (%A.B.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @X.as.A.impl: %Self.ref as %A.ref { diff --git a/toolchain/check/testdata/impl/use_assoc_const.carbon b/toolchain/check/testdata/impl/use_assoc_const.carbon index 3874fc10fae7..04dea33e10e8 100644 --- a/toolchain/check/testdata/impl/use_assoc_const.carbon +++ b/toolchain/check/testdata/impl/use_assoc_const.carbon @@ -486,6 +486,8 @@ fn F() { // CHECK:STDOUT: .U = @U.%assoc0 // CHECK:STDOUT: .F = %assoc1 // CHECK:STDOUT: witness = (%U, %J.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @U(@J.%Self: %J.type) { @@ -791,6 +793,8 @@ fn F() { // CHECK:STDOUT: .U = @U.%assoc0 // CHECK:STDOUT: .F = %assoc1 // CHECK:STDOUT: witness = (%U, %J.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @U(@J.%Self: %J.type) { @@ -1145,6 +1149,8 @@ fn F() { // CHECK:STDOUT: .F = %assoc1 // CHECK:STDOUT: .G = %assoc2 // CHECK:STDOUT: witness = (%U, %J.F.decl, %J.G.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @U(@J.%Self: %J.type) { @@ -1670,6 +1676,8 @@ fn F() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .Op = %assoc0 // CHECK:STDOUT: witness = (%I.Op.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @J { @@ -1706,6 +1714,8 @@ fn F() { // CHECK:STDOUT: .U = @U.%assoc0 // CHECK:STDOUT: .F = %assoc1 // CHECK:STDOUT: witness = (%U, %J.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @U(@J.%Self: %J.type) { @@ -1980,6 +1990,8 @@ fn F() { // CHECK:STDOUT: .U = @U.%assoc0 // CHECK:STDOUT: .G = %assoc1 // CHECK:STDOUT: witness = (%U, %J.G.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @U(@J.%Self: %J.type) { @@ -2203,6 +2215,8 @@ fn F() { // CHECK:STDOUT: .U = @U.%assoc0 // CHECK:STDOUT: .F = %assoc1 // CHECK:STDOUT: witness = (%U, %J.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @U(@J.%Self: %J.type) { @@ -2361,6 +2375,8 @@ fn F() { // CHECK:STDOUT: .U = @U.%assoc0 // CHECK:STDOUT: .F = %assoc1 // CHECK:STDOUT: witness = (%U, %J.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @U(@J.%Self: %J.type) { @@ -2606,6 +2622,8 @@ fn F() { // CHECK:STDOUT: .U2 = @U2.%assoc0 // CHECK:STDOUT: .F = %assoc1 // CHECK:STDOUT: witness = (%U2, %J2.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @U2(@J2.%Self: %J2.type) { @@ -2895,6 +2913,8 @@ fn F() { // CHECK:STDOUT: .V = @V.%assoc0 // CHECK:STDOUT: .F = %assoc1 // CHECK:STDOUT: witness = (%V, %K.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @V(@K.%Self: %K.type) { @@ -3098,6 +3118,8 @@ fn F() { // CHECK:STDOUT: .Z = @Z.%assoc0 // CHECK:STDOUT: .G = %assoc1 // CHECK:STDOUT: witness = (%Z, %M.G.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @Z(@M.%Self: %M.type) { @@ -3299,6 +3321,8 @@ fn F() { // CHECK:STDOUT: .Z = @Z.%assoc0 // CHECK:STDOUT: .G = %assoc1 // CHECK:STDOUT: witness = (%Z, %M.G.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @Z(@M.%Self: %M.type) { @@ -3595,6 +3619,8 @@ fn F() { // CHECK:STDOUT: .N = @N.%assoc0 // CHECK:STDOUT: .F = %assoc1 // CHECK:STDOUT: witness = (%N, %I.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @N(@I.%Self: %I.type) { @@ -3798,6 +3824,8 @@ fn F() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .X = @X.%assoc0 // CHECK:STDOUT: witness = (%X) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @X(@Z.%Self: %Z.type) { diff --git a/toolchain/check/testdata/interface/as_type.carbon b/toolchain/check/testdata/interface/as_type.carbon index 96281ebc385e..e4ffe794824d 100644 --- a/toolchain/check/testdata/interface/as_type.carbon +++ b/toolchain/check/testdata/interface/as_type.carbon @@ -48,6 +48,8 @@ fn F(e: Empty) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F(%e.param: %Empty.type) { diff --git a/toolchain/check/testdata/interface/as_type_of_type.carbon b/toolchain/check/testdata/interface/as_type_of_type.carbon index 8cc39b371444..b4d7ae3c942e 100644 --- a/toolchain/check/testdata/interface/as_type_of_type.carbon +++ b/toolchain/check/testdata/interface/as_type_of_type.carbon @@ -103,6 +103,8 @@ fn F(T:! Empty) { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.Empty.impl: %C.ref as %Empty.ref { diff --git a/toolchain/check/testdata/interface/assoc_const.carbon b/toolchain/check/testdata/interface/assoc_const.carbon index c30ff56e7079..674ba38a8604 100644 --- a/toolchain/check/testdata/interface/assoc_const.carbon +++ b/toolchain/check/testdata/interface/assoc_const.carbon @@ -63,6 +63,8 @@ interface I { // CHECK:STDOUT: .T = @T.%assoc0 // CHECK:STDOUT: .N = @N.%assoc1 // CHECK:STDOUT: witness = (%T, %N) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @T(@I.%Self: %I.type) { diff --git a/toolchain/check/testdata/interface/assoc_const_in_generic.carbon b/toolchain/check/testdata/interface/assoc_const_in_generic.carbon index ddee07dc52ad..94684ce9e744 100644 --- a/toolchain/check/testdata/interface/assoc_const_in_generic.carbon +++ b/toolchain/check/testdata/interface/assoc_const_in_generic.carbon @@ -114,6 +114,8 @@ fn H() { // CHECK:STDOUT: .Self = %Self.loc15_23.1 // CHECK:STDOUT: .F = %assoc0.loc16_22.1 // CHECK:STDOUT: witness = (%I.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/basic.carbon b/toolchain/check/testdata/interface/basic.carbon index 25e11cd19cba..d1f467bf208f 100644 --- a/toolchain/check/testdata/interface/basic.carbon +++ b/toolchain/check/testdata/interface/basic.carbon @@ -50,6 +50,8 @@ interface ForwardDeclared { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @ForwardDeclared { @@ -61,6 +63,8 @@ interface ForwardDeclared { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%ForwardDeclared.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @ForwardDeclared.F(@ForwardDeclared.%Self: %ForwardDeclared.type) { diff --git a/toolchain/check/testdata/interface/compound_member_access.carbon b/toolchain/check/testdata/interface/compound_member_access.carbon index 3c3aab0ca1fa..edd46a4c9c9a 100644 --- a/toolchain/check/testdata/interface/compound_member_access.carbon +++ b/toolchain/check/testdata/interface/compound_member_access.carbon @@ -344,6 +344,8 @@ fn Works() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .U = @U.%assoc0 // CHECK:STDOUT: witness = (%U) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @U(@J.%Self: %J.type) { @@ -479,6 +481,8 @@ fn Works() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .Q1 = %assoc0 // CHECK:STDOUT: witness = (%K1.Q1.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @K1.Q1(@K1.%Self: %K1.type) { @@ -641,6 +645,8 @@ fn Works() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .Q2 = %assoc0 // CHECK:STDOUT: witness = (%K2.Q2.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @K2.Q2(@K2.%Self: %K2.type) { @@ -864,6 +870,8 @@ fn Works() { // CHECK:STDOUT: .R1 = %assoc0 // CHECK:STDOUT: .S1 = %assoc1 // CHECK:STDOUT: witness = (%L1.R1.decl, %L1.S1.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @L1.R1(@L1.%Self: %L1.type) { @@ -1179,6 +1187,8 @@ fn Works() { // CHECK:STDOUT: .R1 = %assoc0 // CHECK:STDOUT: .S1 = %assoc1 // CHECK:STDOUT: witness = (%L1.R1.decl, %L1.S1.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @L1.R1(@L1.%Self: %L1.type) { @@ -1440,6 +1450,8 @@ fn Works() { // CHECK:STDOUT: .R2 = %assoc0 // CHECK:STDOUT: .S2 = %assoc1 // CHECK:STDOUT: witness = (%L2.R2.decl, %L2.S2.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @L2.R2(@L2.%Self: %L2.type) { @@ -1652,6 +1664,8 @@ fn Works() { // CHECK:STDOUT: .R2 = %assoc0 // CHECK:STDOUT: .S2 = %assoc1 // CHECK:STDOUT: witness = (%L2.R2.decl, %L2.S2.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @L2.R2(@L2.%Self: %L2.type) { @@ -1840,6 +1854,8 @@ fn Works() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .G = %assoc0 // CHECK:STDOUT: witness = (%A.G.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.A.impl: %C.ref as %A.ref { @@ -2021,6 +2037,8 @@ fn Works() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .G = %assoc0 // CHECK:STDOUT: witness = (%A.G.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.A.impl: %C.ref as %A.ref { diff --git a/toolchain/check/testdata/interface/compound_member_access_addr.carbon b/toolchain/check/testdata/interface/compound_member_access_addr.carbon index 336b19470e4a..4720457071f2 100644 --- a/toolchain/check/testdata/interface/compound_member_access_addr.carbon +++ b/toolchain/check/testdata/interface/compound_member_access_addr.carbon @@ -281,6 +281,8 @@ fn Works() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .U = @U.%assoc0 // CHECK:STDOUT: witness = (%U) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @U(@J.%Self: %J.type) { @@ -416,6 +418,8 @@ fn Works() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .Q1 = %assoc0 // CHECK:STDOUT: witness = (%K1.Q1.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @K1.Q1(@K1.%Self: %K1.type) { @@ -578,6 +582,8 @@ fn Works() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .Q2 = %assoc0 // CHECK:STDOUT: witness = (%K2.Q2.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @K2.Q2(@K2.%Self: %K2.type) { @@ -801,6 +807,8 @@ fn Works() { // CHECK:STDOUT: .R1 = %assoc0 // CHECK:STDOUT: .S1 = %assoc1 // CHECK:STDOUT: witness = (%L1.R1.decl, %L1.S1.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @L1.R1(@L1.%Self: %L1.type) { @@ -1056,6 +1064,8 @@ fn Works() { // CHECK:STDOUT: .R2 = %assoc0 // CHECK:STDOUT: .S2 = %assoc1 // CHECK:STDOUT: witness = (%L2.R2.decl, %L2.S2.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @L2.R2(@L2.%Self: %L2.type) { @@ -1240,6 +1250,8 @@ fn Works() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .G = %assoc0 // CHECK:STDOUT: witness = (%A.G.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.A.impl: %C.ref as %A.ref { @@ -1421,6 +1433,8 @@ fn Works() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .G = %assoc0 // CHECK:STDOUT: witness = (%A.G.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.A.impl: %C.ref as %A.ref { diff --git a/toolchain/check/testdata/interface/default_fn.carbon b/toolchain/check/testdata/interface/default_fn.carbon index 9ee6984d1efd..c669055c13c2 100644 --- a/toolchain/check/testdata/interface/default_fn.carbon +++ b/toolchain/check/testdata/interface/default_fn.carbon @@ -99,6 +99,8 @@ class C { // CHECK:STDOUT: .C = // CHECK:STDOUT: .I = // CHECK:STDOUT: witness = (%I.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @C.as.I.impl: %C.ref as %I.ref { diff --git a/toolchain/check/testdata/interface/export_name.carbon b/toolchain/check/testdata/interface/export_name.carbon index 5a12562f4930..5558a538f7b7 100644 --- a/toolchain/check/testdata/interface/export_name.carbon +++ b/toolchain/check/testdata/interface/export_name.carbon @@ -62,6 +62,8 @@ fn UseEmpty(i: I) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- export.carbon @@ -87,6 +89,8 @@ fn UseEmpty(i: I) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%Main.import_ref // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- use_export.carbon @@ -123,6 +127,8 @@ fn UseEmpty(i: I) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%Main.import_ref // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @UseEmpty(%i.param: %I.type) { diff --git a/toolchain/check/testdata/interface/fail_add_member_outside_definition.carbon b/toolchain/check/testdata/interface/fail_add_member_outside_definition.carbon index 20df5004b30d..f3e7f6825099 100644 --- a/toolchain/check/testdata/interface/fail_add_member_outside_definition.carbon +++ b/toolchain/check/testdata/interface/fail_add_member_outside_definition.carbon @@ -70,6 +70,8 @@ interface Outer { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = file.%Interface.F.decl // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Outer { @@ -81,6 +83,8 @@ interface Outer { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .Inner = %Inner.decl // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @Inner(@Outer.%Self: %Outer.type) { @@ -99,6 +103,8 @@ interface Outer { // CHECK:STDOUT: .Self = %Self.loc25_19.1 // CHECK:STDOUT: .F = @Outer.%Inner.F.decl // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/fail_assoc_const_alias.carbon b/toolchain/check/testdata/interface/fail_assoc_const_alias.carbon index 69ab32693b13..f57e994e20cb 100644 --- a/toolchain/check/testdata/interface/fail_assoc_const_alias.carbon +++ b/toolchain/check/testdata/interface/fail_assoc_const_alias.carbon @@ -156,6 +156,8 @@ interface C { // CHECK:STDOUT: .Dest = // CHECK:STDOUT: .Convert = %assoc0.loc4_35.1 // CHECK:STDOUT: witness = (%ImplicitAs.Convert.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -226,6 +228,8 @@ interface C { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .T = @T.%assoc0 // CHECK:STDOUT: witness = (%T) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @J { @@ -250,6 +254,8 @@ interface C { // CHECK:STDOUT: .U = %U // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%J.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @T(@I.%Self: %I.type) { @@ -359,6 +365,8 @@ interface C { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .T2 = @T2.%assoc0 // CHECK:STDOUT: witness = (%T2) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @J2 { @@ -386,6 +394,8 @@ interface C { // CHECK:STDOUT: .U2 = %U2 // CHECK:STDOUT: .F2 = %assoc0 // CHECK:STDOUT: witness = (%J2.F2.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @T2(@I2.%Self: %I2.type) { @@ -507,6 +517,8 @@ interface C { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%A.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @B { @@ -531,6 +543,8 @@ interface C { // CHECK:STDOUT: .F = %F // CHECK:STDOUT: .G = %assoc0 // CHECK:STDOUT: witness = (%B.G.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @A.F(@A.%Self: %A.type) { @@ -630,6 +644,8 @@ interface C { // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: .G = %assoc1 // CHECK:STDOUT: witness = (%C.F.decl, %C.G.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @C.F(@C.%Self: %C.type) { diff --git a/toolchain/check/testdata/interface/fail_assoc_const_bad_default.carbon b/toolchain/check/testdata/interface/fail_assoc_const_bad_default.carbon index 389f42147c8a..3ad130bbfb72 100644 --- a/toolchain/check/testdata/interface/fail_assoc_const_bad_default.carbon +++ b/toolchain/check/testdata/interface/fail_assoc_const_bad_default.carbon @@ -65,6 +65,8 @@ interface I { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .T = @T.%assoc0 // CHECK:STDOUT: witness = (%T) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @T(@I.%Self: %I.type) { diff --git a/toolchain/check/testdata/interface/fail_assoc_fn_invalid_use.carbon b/toolchain/check/testdata/interface/fail_assoc_fn_invalid_use.carbon index 2f680261654e..5b234541892d 100644 --- a/toolchain/check/testdata/interface/fail_assoc_fn_invalid_use.carbon +++ b/toolchain/check/testdata/interface/fail_assoc_fn_invalid_use.carbon @@ -89,6 +89,8 @@ fn Use(T:! I) { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%I.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @I.F(@I.%Self: %I.type) { diff --git a/toolchain/check/testdata/interface/fail_definition_imported.carbon b/toolchain/check/testdata/interface/fail_definition_imported.carbon index 814bad89ef6b..855cf9f3103c 100644 --- a/toolchain/check/testdata/interface/fail_definition_imported.carbon +++ b/toolchain/check/testdata/interface/fail_definition_imported.carbon @@ -76,5 +76,7 @@ interface I {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/fail_duplicate.carbon b/toolchain/check/testdata/interface/fail_duplicate.carbon index 072aefc5f0ae..db79770a366b 100644 --- a/toolchain/check/testdata/interface/fail_duplicate.carbon +++ b/toolchain/check/testdata/interface/fail_duplicate.carbon @@ -101,6 +101,8 @@ interface Class { } // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Interface.loc13 { @@ -112,6 +114,8 @@ interface Class { } // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%Interface.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Interface.F(@Interface.loc13.%Self: %Interface.type.ba0a47.2) { @@ -149,6 +153,8 @@ interface Class { } // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Interface.loc13 { @@ -171,6 +177,8 @@ interface Class { } // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%Interface.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Interface.F(@Interface.loc13.%Self: %Interface.type.ba0a47.2) { @@ -229,6 +237,8 @@ interface Class { } // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @Class.loc2; diff --git a/toolchain/check/testdata/interface/fail_generic_redeclaration.carbon b/toolchain/check/testdata/interface/fail_generic_redeclaration.carbon index 707696f49e1c..c50ac0ce63eb 100644 --- a/toolchain/check/testdata/interface/fail_generic_redeclaration.carbon +++ b/toolchain/check/testdata/interface/fail_generic_redeclaration.carbon @@ -122,6 +122,8 @@ interface DifferentParams(T:! ()) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc23_32.1 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -137,6 +139,8 @@ interface DifferentParams(T:! ()) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @DifferentParams.loc35(%T.loc35_27.2: type) { @@ -158,6 +162,8 @@ interface DifferentParams(T:! ()) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc43_35.1 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/fail_lookup_undefined.carbon b/toolchain/check/testdata/interface/fail_lookup_undefined.carbon index 0da0c9787702..9d500ad55b18 100644 --- a/toolchain/check/testdata/interface/fail_lookup_undefined.carbon +++ b/toolchain/check/testdata/interface/fail_lookup_undefined.carbon @@ -101,6 +101,8 @@ interface BeingDefined { // CHECK:STDOUT: .BeingDefined = // CHECK:STDOUT: .H = %assoc0 // CHECK:STDOUT: witness = (%BeingDefined.H.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F(); diff --git a/toolchain/check/testdata/interface/fail_member_lookup.carbon b/toolchain/check/testdata/interface/fail_member_lookup.carbon index 06d5bda1ad93..f3a3d6046b85 100644 --- a/toolchain/check/testdata/interface/fail_member_lookup.carbon +++ b/toolchain/check/testdata/interface/fail_member_lookup.carbon @@ -127,6 +127,8 @@ fn G(U:! Different) -> U.(Interface.T); // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: .T = @T.%assoc1 // CHECK:STDOUT: witness = (%Interface.F.decl, %T) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Different { @@ -135,6 +137,8 @@ fn G(U:! Different) -> U.(Interface.T); // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @T(@Interface.%Self: %Interface.type) { diff --git a/toolchain/check/testdata/interface/fail_modifiers.carbon b/toolchain/check/testdata/interface/fail_modifiers.carbon index 6ee4f7d5e788..a58fb978d796 100644 --- a/toolchain/check/testdata/interface/fail_modifiers.carbon +++ b/toolchain/check/testdata/interface/fail_modifiers.carbon @@ -98,6 +98,8 @@ interface I { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_default.carbon @@ -135,6 +137,8 @@ interface I { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_protected.carbon @@ -192,6 +196,8 @@ interface I { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%I.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @I.F(@I.%Self: %I.type) { @@ -248,6 +254,8 @@ interface I { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%I.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @I.F(@I.%Self: %I.type) { diff --git a/toolchain/check/testdata/interface/fail_redeclare_member.carbon b/toolchain/check/testdata/interface/fail_redeclare_member.carbon index 8132c59c47bd..071b74ea88a7 100644 --- a/toolchain/check/testdata/interface/fail_redeclare_member.carbon +++ b/toolchain/check/testdata/interface/fail_redeclare_member.carbon @@ -54,6 +54,8 @@ interface Interface { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%Interface.F.decl.loc16) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Interface.F.loc16(@Interface.%Self: %Interface.type) { diff --git a/toolchain/check/testdata/interface/fail_todo_assoc_const_default.carbon b/toolchain/check/testdata/interface/fail_todo_assoc_const_default.carbon index eb138b0f8707..bdcd36697831 100644 --- a/toolchain/check/testdata/interface/fail_todo_assoc_const_default.carbon +++ b/toolchain/check/testdata/interface/fail_todo_assoc_const_default.carbon @@ -108,6 +108,8 @@ interface I { // CHECK:STDOUT: .T = @T.%assoc0 // CHECK:STDOUT: .N = @N.%assoc1 // CHECK:STDOUT: witness = (%T, %N) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @T(@I.%Self: %I.type) { diff --git a/toolchain/check/testdata/interface/fail_todo_define_default_fn_inline.carbon b/toolchain/check/testdata/interface/fail_todo_define_default_fn_inline.carbon index 8c82fc344b0d..210acf0cd7c4 100644 --- a/toolchain/check/testdata/interface/fail_todo_define_default_fn_inline.carbon +++ b/toolchain/check/testdata/interface/fail_todo_define_default_fn_inline.carbon @@ -99,6 +99,8 @@ interface Interface { // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: .G = %assoc1 // CHECK:STDOUT: witness = (%Interface.F.decl, %Interface.G.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Interface.F(@Interface.%Self: %Interface.type) { diff --git a/toolchain/check/testdata/interface/fail_todo_define_default_fn_out_of_line.carbon b/toolchain/check/testdata/interface/fail_todo_define_default_fn_out_of_line.carbon index 60cd4b65d5b6..5dff11fa0ff4 100644 --- a/toolchain/check/testdata/interface/fail_todo_define_default_fn_out_of_line.carbon +++ b/toolchain/check/testdata/interface/fail_todo_define_default_fn_out_of_line.carbon @@ -171,6 +171,8 @@ fn Interface.C.F[self: Self](U:! type, u: U*) -> U* { return u; } // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: .G = %assoc1 // CHECK:STDOUT: witness = (%Interface.F.decl, %Interface.G.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Interface.F.loc7(@Interface.%Self: %Interface.type) { @@ -286,6 +288,8 @@ fn Interface.C.F[self: Self](U:! type, u: U*) -> U* { return u; } // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .C = %C.decl // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic class @C(@Interface.%Self: %Interface.type) { diff --git a/toolchain/check/testdata/interface/fail_todo_modifiers.carbon b/toolchain/check/testdata/interface/fail_todo_modifiers.carbon index 26a9a76dad24..d246fdc8434c 100644 --- a/toolchain/check/testdata/interface/fail_todo_modifiers.carbon +++ b/toolchain/check/testdata/interface/fail_todo_modifiers.carbon @@ -58,6 +58,8 @@ interface Modifiers { // CHECK:STDOUT: .Final = %assoc0 // CHECK:STDOUT: .Default = %assoc1 // CHECK:STDOUT: witness = (%Modifiers.Final.decl, %Modifiers.Default.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @Modifiers.Final(@Modifiers.%Self: %Modifiers.type) { diff --git a/toolchain/check/testdata/interface/generic.carbon b/toolchain/check/testdata/interface/generic.carbon index 7fd91cf9fca9..42f372abd79a 100644 --- a/toolchain/check/testdata/interface/generic.carbon +++ b/toolchain/check/testdata/interface/generic.carbon @@ -201,6 +201,8 @@ fn F(T:! Generic((), ())) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc4_28.1 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -232,6 +234,8 @@ fn F(T:! Generic((), ())) {} // CHECK:STDOUT: .X = // CHECK:STDOUT: .F = %assoc0.loc10_14.1 // CHECK:STDOUT: witness = (%WithAssocFn.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -469,6 +473,8 @@ fn F(T:! Generic((), ())) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc4_29.1 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -586,6 +592,8 @@ fn F(T:! Generic((), ())) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc3_29.1 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/generic_binding_after_assoc_const.carbon b/toolchain/check/testdata/interface/generic_binding_after_assoc_const.carbon index 6cafa31ceb27..c957034af818 100644 --- a/toolchain/check/testdata/interface/generic_binding_after_assoc_const.carbon +++ b/toolchain/check/testdata/interface/generic_binding_after_assoc_const.carbon @@ -72,6 +72,8 @@ interface I { // CHECK:STDOUT: .U = @U.%assoc1 // CHECK:STDOUT: .G = %assoc2 // CHECK:STDOUT: witness = (%I.F.decl, %U, %I.G.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @U(@I.%Self: %I.type) { diff --git a/toolchain/check/testdata/interface/generic_import.carbon b/toolchain/check/testdata/interface/generic_import.carbon index 7452f9036702..07bf3f8c8b61 100644 --- a/toolchain/check/testdata/interface/generic_import.carbon +++ b/toolchain/check/testdata/interface/generic_import.carbon @@ -80,6 +80,8 @@ impl C as AddWith(C) { // CHECK:STDOUT: .Self = %Self.loc4_29.1 // CHECK:STDOUT: .F = %assoc0.loc5_9.1 // CHECK:STDOUT: witness = (%AddWith.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -164,6 +166,8 @@ impl C as AddWith(C) { // CHECK:STDOUT: .Self = imports.%Main.import_ref.833 // CHECK:STDOUT: .F = imports.%Main.import_ref.073 // CHECK:STDOUT: witness = (imports.%Main.F) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/generic_method.carbon b/toolchain/check/testdata/interface/generic_method.carbon index d6e1e11f9355..db84b7a2cecb 100644 --- a/toolchain/check/testdata/interface/generic_method.carbon +++ b/toolchain/check/testdata/interface/generic_method.carbon @@ -311,6 +311,8 @@ fn CallIndirect() { // CHECK:STDOUT: .T = // CHECK:STDOUT: .F = %assoc0.loc6_41.1 // CHECK:STDOUT: witness = (%A.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -891,6 +893,8 @@ fn CallIndirect() { // CHECK:STDOUT: .T = // CHECK:STDOUT: .F = %assoc0.loc6_39.1 // CHECK:STDOUT: witness = (%A.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/generic_vs_params.carbon b/toolchain/check/testdata/interface/generic_vs_params.carbon index 992dae01487e..dd82318d0f12 100644 --- a/toolchain/check/testdata/interface/generic_vs_params.carbon +++ b/toolchain/check/testdata/interface/generic_vs_params.carbon @@ -192,6 +192,8 @@ interface Bar[T:! type] {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @NotGenericButParams { @@ -200,6 +202,8 @@ interface Bar[T:! type] {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic interface @GenericAndParams.loc6(%T.loc6_28.2: type) { @@ -215,6 +219,8 @@ interface Bar[T:! type] {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc6_38.1 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -230,6 +236,8 @@ interface Bar[T:! type] {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc9_29.1 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -247,6 +255,8 @@ interface Bar[T:! type] {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc10_40.1 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -378,6 +388,8 @@ interface Bar[T:! type] {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_non_generic_params.carbon @@ -402,6 +414,8 @@ interface Bar[T:! type] {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_implicit_params_only_empty.carbon @@ -426,6 +440,8 @@ interface Bar[T:! type] {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_implicit_params_only.carbon @@ -466,6 +482,8 @@ interface Bar[T:! type] {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc8_25.1 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/import.carbon b/toolchain/check/testdata/interface/import.carbon index 5b007ec58d4f..56e8768fc6f2 100644 --- a/toolchain/check/testdata/interface/import.carbon +++ b/toolchain/check/testdata/interface/import.carbon @@ -112,6 +112,8 @@ var f: ForwardDeclared* = &f_ref.f; // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Basic { @@ -127,6 +129,8 @@ var f: ForwardDeclared* = &f_ref.f; // CHECK:STDOUT: .T = @T.loc8.%assoc0 // CHECK:STDOUT: .F = %assoc1 // CHECK:STDOUT: witness = (%T, %Basic.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @ForwardDeclared { @@ -142,6 +146,8 @@ var f: ForwardDeclared* = &f_ref.f; // CHECK:STDOUT: .T = @T.loc16.%assoc0 // CHECK:STDOUT: .F = %assoc1 // CHECK:STDOUT: witness = (%T, %ForwardDeclared.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @T.loc8(@Basic.%Self: %Basic.type) { @@ -313,6 +319,8 @@ var f: ForwardDeclared* = &f_ref.f; // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%Main.import_ref.257 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @Basic [from "a.carbon"] { @@ -321,6 +329,8 @@ var f: ForwardDeclared* = &f_ref.f; // CHECK:STDOUT: .T = imports.%Main.import_ref.3d5 // CHECK:STDOUT: .F = imports.%Main.import_ref.760 // CHECK:STDOUT: witness = (imports.%Main.T.44f, imports.%Main.F.eea) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: interface @ForwardDeclared [from "a.carbon"] { @@ -329,6 +339,8 @@ var f: ForwardDeclared* = &f_ref.f; // CHECK:STDOUT: .T = imports.%Main.import_ref.ad1 // CHECK:STDOUT: .F = imports.%Main.import_ref.339 // CHECK:STDOUT: witness = (imports.%Main.T.6ee, imports.%Main.F.5d0) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @UseEmpty(%e.param: %Empty.type) { diff --git a/toolchain/check/testdata/interface/import_access.carbon b/toolchain/check/testdata/interface/import_access.carbon index 1abdefc192c6..a251fc408b90 100644 --- a/toolchain/check/testdata/interface/import_access.carbon +++ b/toolchain/check/testdata/interface/import_access.carbon @@ -172,6 +172,8 @@ private interface Redecl {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- forward_with_def.carbon @@ -195,6 +197,8 @@ private interface Redecl {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- forward.carbon @@ -238,6 +242,8 @@ private interface Redecl {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%Test.import_ref // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F(%i.param: %Def.type) { @@ -346,6 +352,8 @@ private interface Redecl {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%Test.import_ref // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F(%i.param: %ForwardWithDef.type) { @@ -455,6 +463,8 @@ private interface Redecl {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: fn @F(%i.param: ) { @@ -552,5 +562,7 @@ private interface Redecl {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/import_interface_decl.carbon b/toolchain/check/testdata/interface/import_interface_decl.carbon index d78d1c00ab6f..4cb832fc1205 100644 --- a/toolchain/check/testdata/interface/import_interface_decl.carbon +++ b/toolchain/check/testdata/interface/import_interface_decl.carbon @@ -71,6 +71,8 @@ impl library "[[@TEST_NAME]]"; // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%Main.import_ref.5c0 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @empty_tuple.type.as.B.impl: imports.%Main.import_ref.e5c as imports.%Main.import_ref.171 [from "fail_b.carbon"]; diff --git a/toolchain/check/testdata/interface/incomplete.carbon b/toolchain/check/testdata/interface/incomplete.carbon index f2f573e9b857..7dbed73d91a9 100644 --- a/toolchain/check/testdata/interface/incomplete.carbon +++ b/toolchain/check/testdata/interface/incomplete.carbon @@ -99,6 +99,8 @@ interface B { // CHECK:STDOUT: .C = // CHECK:STDOUT: .T = @T.%assoc0 // CHECK:STDOUT: witness = (%T) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @T(@I.%Self: %I.type) { @@ -133,6 +135,8 @@ interface B { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .A = // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: constraint @A; @@ -170,6 +174,9 @@ interface B { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .A = // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: +// CHECK:STDOUT: @B.require0 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic require @B.require0(@B.%Self: %B.type) { @@ -208,5 +215,7 @@ interface B { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .A = // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/local.carbon b/toolchain/check/testdata/interface/local.carbon index 5d70c95252d5..fe469672f350 100644 --- a/toolchain/check/testdata/interface/local.carbon +++ b/toolchain/check/testdata/interface/local.carbon @@ -72,6 +72,8 @@ fn F() { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .G = %assoc0 // CHECK:STDOUT: witness = (%I.G.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @empty_tuple.type.as.I.impl: %.loc19_9.2 as %I.ref { diff --git a/toolchain/check/testdata/interface/member_lookup.carbon b/toolchain/check/testdata/interface/member_lookup.carbon index 772e941abb7b..e227a1ce4466 100644 --- a/toolchain/check/testdata/interface/member_lookup.carbon +++ b/toolchain/check/testdata/interface/member_lookup.carbon @@ -203,6 +203,8 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: .T = // CHECK:STDOUT: .X = @X.%assoc0 // CHECK:STDOUT: witness = (%X) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -453,6 +455,8 @@ fn AccessMissingConcrete(I:! Interface(i32)) -> i32 { // CHECK:STDOUT: .X = @X.%assoc0 // CHECK:STDOUT: .nonesuch = // CHECK:STDOUT: witness = (%X) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/require.carbon b/toolchain/check/testdata/interface/require.carbon index 899623717a3f..9af35ed7bd26 100644 --- a/toolchain/check/testdata/interface/require.carbon +++ b/toolchain/check/testdata/interface/require.carbon @@ -299,6 +299,9 @@ interface Z(T:! type) { // CHECK:STDOUT: .Y = // CHECK:STDOUT: .YY = // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: +// CHECK:STDOUT: @Z.require0 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic require @Z.require0(@Z.%Self: %Z.type) { @@ -340,6 +343,9 @@ interface Z(T:! type) { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .Y = // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: +// CHECK:STDOUT: @Z.require0 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic require @Z.require0(@Z.%Self: %Z.type) { @@ -383,6 +389,9 @@ interface Z(T:! type) { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .Y = // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: +// CHECK:STDOUT: @Z.require0 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic require @Z.require0(@Z.%Self: %Z.type) { @@ -432,6 +441,9 @@ interface Z(T:! type) { // CHECK:STDOUT: .C = // CHECK:STDOUT: .Y = // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: +// CHECK:STDOUT: @Z.require0 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic require @Z.require0(@Z.%Self: %Z.type) { @@ -495,6 +507,9 @@ interface Z(T:! type) { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .Y = // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: +// CHECK:STDOUT: @Z.require0 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic require @Z.require0(@Z.%Self: %Z.type) { @@ -558,6 +573,9 @@ interface Z(T:! type) { // CHECK:STDOUT: .T = // CHECK:STDOUT: .Z = // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: +// CHECK:STDOUT: @Z.require0 // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -634,6 +652,9 @@ interface Z(T:! type) { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .Y = // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: +// CHECK:STDOUT: @Z.require0 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic require @Z.require0(@Z.%Self: %Z.type) { @@ -695,6 +716,9 @@ interface Z(T:! type) { // CHECK:STDOUT: .Z = // CHECK:STDOUT: .T = // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: +// CHECK:STDOUT: @Z.require1 // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/self.carbon b/toolchain/check/testdata/interface/self.carbon index 9c1e9ab8fb3d..83eb9ab146bc 100644 --- a/toolchain/check/testdata/interface/self.carbon +++ b/toolchain/check/testdata/interface/self.carbon @@ -63,6 +63,8 @@ interface UseSelf { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .F = %assoc0 // CHECK:STDOUT: witness = (%UseSelf.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @UseSelf.F(@UseSelf.%Self: %UseSelf.type) { diff --git a/toolchain/check/testdata/interface/syntactic_merge.carbon b/toolchain/check/testdata/interface/syntactic_merge.carbon index 5f26356995bb..31ed0db84535 100644 --- a/toolchain/check/testdata/interface/syntactic_merge.carbon +++ b/toolchain/check/testdata/interface/syntactic_merge.carbon @@ -271,6 +271,8 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc8_22.1 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -287,6 +289,8 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc11_22.1 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -361,6 +365,8 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc7_24.1 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -439,6 +445,8 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc14_24.1 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -513,6 +521,8 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc7_24.1 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -685,6 +695,8 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc12_22.1 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -707,6 +719,8 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc21_22.1 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -800,6 +814,8 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc15_22.1 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -885,6 +901,8 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc15_22.1 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -970,6 +988,8 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc15_24.1 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1104,6 +1124,8 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc17_22.1 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -1189,6 +1211,8 @@ interface Foo(a:! const (const C)) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc18_36.1 // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/interface/todo_define_not_default.carbon b/toolchain/check/testdata/interface/todo_define_not_default.carbon index 0814f352b6c1..7abfca1aa6e5 100644 --- a/toolchain/check/testdata/interface/todo_define_not_default.carbon +++ b/toolchain/check/testdata/interface/todo_define_not_default.carbon @@ -143,6 +143,8 @@ interface I { // CHECK:STDOUT: .T = @T.%assoc2 // CHECK:STDOUT: .N = @N.%assoc3 // CHECK:STDOUT: witness = (%I.F.decl, %I.G.decl, %T, %N) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @T(@I.%Self: %I.type) { diff --git a/toolchain/check/testdata/interop/cpp/function/overloads.carbon b/toolchain/check/testdata/interop/cpp/function/overloads.carbon index ff3788d67f3d..c1372389da7a 100644 --- a/toolchain/check/testdata/interop/cpp/function/overloads.carbon +++ b/toolchain/check/testdata/interop/cpp/function/overloads.carbon @@ -2548,6 +2548,8 @@ fn F() { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @EchoValue(%ValueT.loc10_14.2: %I.type, %value.loc10_26.2: @EchoValue.%ValueT.binding.as_type (%ValueT.binding.as_type)) { diff --git a/toolchain/check/testdata/let/compile_time_bindings.carbon b/toolchain/check/testdata/let/compile_time_bindings.carbon index abca165e5fa3..a20a204bd4ef 100644 --- a/toolchain/check/testdata/let/compile_time_bindings.carbon +++ b/toolchain/check/testdata/let/compile_time_bindings.carbon @@ -936,6 +936,8 @@ impl i32 as Empty { // CHECK:STDOUT: .T = @T.%assoc0 // CHECK:STDOUT: .F = %assoc1 // CHECK:STDOUT: witness = (%T, %I.F.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic assoc_const @T(@I.%Self: %I.type) { @@ -1145,6 +1147,8 @@ impl i32 as Empty { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: impl @i32.as.Empty.impl: %i32.loc6 as %Empty.ref { diff --git a/toolchain/check/testdata/named_constraint/basic.carbon b/toolchain/check/testdata/named_constraint/basic.carbon index b369b1d39f46..d57cbc7957c8 100644 --- a/toolchain/check/testdata/named_constraint/basic.carbon +++ b/toolchain/check/testdata/named_constraint/basic.carbon @@ -71,6 +71,8 @@ constraint Declared {} // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- forward_declaration.carbon @@ -93,5 +95,7 @@ constraint Declared {} // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/named_constraint/empty_generic.carbon b/toolchain/check/testdata/named_constraint/empty_generic.carbon index bc1f991cfb16..c71543e29586 100644 --- a/toolchain/check/testdata/named_constraint/empty_generic.carbon +++ b/toolchain/check/testdata/named_constraint/empty_generic.carbon @@ -123,6 +123,8 @@ fn G(T:! Z, U:! Empty(T), V:! type) { // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc16_28.1 +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/named_constraint/generic.carbon b/toolchain/check/testdata/named_constraint/generic.carbon index 564286c67d19..500bbcb69b68 100644 --- a/toolchain/check/testdata/named_constraint/generic.carbon +++ b/toolchain/check/testdata/named_constraint/generic.carbon @@ -143,6 +143,8 @@ fn F(T:! Generic((), ())) {} // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic constraint @GenericType(%T.loc4_24.2: type) { @@ -157,6 +159,8 @@ fn F(T:! Generic((), ())) {} // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc4_34.1 +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -172,6 +176,8 @@ fn F(T:! Generic((), ())) {} // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc7_28.1 +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -187,6 +193,8 @@ fn F(T:! Generic((), ())) {} // CHECK:STDOUT: // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self.loc10_45.1 +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/check/testdata/named_constraint/import_constraint_decl.carbon b/toolchain/check/testdata/named_constraint/import_constraint_decl.carbon index 2daf82be8087..8ebcf191b92e 100644 --- a/toolchain/check/testdata/named_constraint/import_constraint_decl.carbon +++ b/toolchain/check/testdata/named_constraint/import_constraint_decl.carbon @@ -126,6 +126,8 @@ impl C as B {} // CHECK:STDOUT: constraint @B [from "b.carbon"] { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = imports.%Main.import_ref +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic fn @F(%T.loc4_6.2: %B.type) { diff --git a/toolchain/check/testdata/named_constraint/require.carbon b/toolchain/check/testdata/named_constraint/require.carbon index 53685dd397ea..d45af125adb6 100644 --- a/toolchain/check/testdata/named_constraint/require.carbon +++ b/toolchain/check/testdata/named_constraint/require.carbon @@ -325,6 +325,9 @@ constraint Z { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .Y = +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: +// CHECK:STDOUT: @Z.require0 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic require @Z.require0(@Z.%Self: %Z.type) { @@ -365,6 +368,9 @@ constraint Z { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .Y = +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: +// CHECK:STDOUT: @Z.require0 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic require @Z.require0(@Z.%Self: %Z.type) { @@ -407,6 +413,9 @@ constraint Z { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .Y = +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: +// CHECK:STDOUT: @Z.require0 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic require @Z.require0(@Z.%Self: %Z.type) { @@ -455,6 +464,9 @@ constraint Z { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .C = // CHECK:STDOUT: .Y = +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: +// CHECK:STDOUT: @Z.require0 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic require @Z.require0(@Z.%Self: %Z.type) { @@ -517,6 +529,9 @@ constraint Z { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .Y = +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: +// CHECK:STDOUT: @Z.require0 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic require @Z.require0(@Z.%Self: %Z.type) { @@ -549,6 +564,8 @@ constraint Z { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .Y = +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_require_impls_incomplete_self.carbon @@ -571,6 +588,8 @@ constraint Z { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .Z = +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: --- fail_require_impls_incomplete_self_specific.carbon @@ -611,6 +630,8 @@ constraint Z { // CHECK:STDOUT: .Self = %Self.loc4_24.1 // CHECK:STDOUT: .T = // CHECK:STDOUT: .Z = +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -659,6 +680,8 @@ constraint Z { // CHECK:STDOUT: .Self = %Self.loc8_24.1 // CHECK:STDOUT: .T = // CHECK:STDOUT: .Y = +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -714,6 +737,9 @@ constraint Z { // CHECK:STDOUT: !members: // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .Y = +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: +// CHECK:STDOUT: @Z.require0 // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: generic require @Z.require0(@Z.%Self: %Z.type) { diff --git a/toolchain/check/testdata/namespace/fail_not_top_level.carbon b/toolchain/check/testdata/namespace/fail_not_top_level.carbon index b303b08198cc..22ad4b000bca 100644 --- a/toolchain/check/testdata/namespace/fail_not_top_level.carbon +++ b/toolchain/check/testdata/namespace/fail_not_top_level.carbon @@ -88,6 +88,8 @@ interface I { // CHECK:STDOUT: .Self = %Self // CHECK:STDOUT: .N = %N // CHECK:STDOUT: witness = () +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: // CHECK:STDOUT: class @C { diff --git a/toolchain/check/testdata/operators/overloaded/index.carbon b/toolchain/check/testdata/operators/overloaded/index.carbon index 49fcd10d186c..0e137bcca3a8 100644 --- a/toolchain/check/testdata/operators/overloaded/index.carbon +++ b/toolchain/check/testdata/operators/overloaded/index.carbon @@ -244,6 +244,8 @@ fn F() { ()[()]; } // CHECK:STDOUT: .ElementType = // CHECK:STDOUT: .At = %assoc0.loc5_61.1 // CHECK:STDOUT: witness = (%IndexWith.At.decl) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: @@ -366,6 +368,8 @@ fn F() { ()[()]; } // CHECK:STDOUT: .Self = imports.%Core.import_ref.05e // CHECK:STDOUT: .At = imports.%Core.import_ref.1bb // CHECK:STDOUT: witness = (imports.%Core.At) +// CHECK:STDOUT: +// CHECK:STDOUT: !requires: // CHECK:STDOUT: } // CHECK:STDOUT: } // CHECK:STDOUT: diff --git a/toolchain/sem_ir/file.cpp b/toolchain/sem_ir/file.cpp index 92852ac9cb66..b7a74b29938e 100644 --- a/toolchain/sem_ir/file.cpp +++ b/toolchain/sem_ir/file.cpp @@ -42,6 +42,8 @@ File::File(const Parse::Tree* parse_tree, CheckIRId check_ir_id, classes_(check_ir_id), interfaces_(check_ir_id), named_constraints_(check_ir_id), + // 1 reserved id for `RequireImplsBlockId::Empty`. + require_impls_blocks_(allocator_, IdTag(check_ir_id.index, 1)), associated_constants_(check_ir_id), facet_types_(check_ir_id), identified_facet_types_(&facet_types_), diff --git a/toolchain/sem_ir/file.h b/toolchain/sem_ir/file.h index e66a97cd9f14..fc61de5aa9c0 100644 --- a/toolchain/sem_ir/file.h +++ b/toolchain/sem_ir/file.h @@ -183,6 +183,12 @@ class File : public Printable { auto require_impls() const -> const RequireImplsStore& { return require_impls_; } + auto require_impls_blocks() -> RequireImplsBlockStore& { + return require_impls_blocks_; + } + auto require_impls_blocks() const -> const RequireImplsBlockStore& { + return require_impls_blocks_; + } auto associated_constants() -> AssociatedConstantStore& { return associated_constants_; } @@ -337,6 +343,9 @@ class File : public Printable { // Storage for interface requirements. RequireImplsStore require_impls_; + // Storage for blocks of RequireImpls. + RequireImplsBlockStore require_impls_blocks_; + // Storage for associated constants. AssociatedConstantStore associated_constants_; diff --git a/toolchain/sem_ir/formatter.cpp b/toolchain/sem_ir/formatter.cpp index f8cf1c134ed3..bf4df97072c7 100644 --- a/toolchain/sem_ir/formatter.cpp +++ b/toolchain/sem_ir/formatter.cpp @@ -419,6 +419,8 @@ auto Formatter::FormatInterface(InterfaceId id, const Interface& interface_info) FormatArg(interface_info.associated_entities_id); out_ << "\n"; + FormatRequireImplsBlock(interface_info.require_impls_block_id); + CloseBrace(); } else { Semicolon(); @@ -451,7 +453,7 @@ auto Formatter::FormatNamedConstraint(NamedConstraintId id, out_ << "!members:\n"; FormatNameScope(constraint_info.scope_id); - // TODO: Print `require` statements. + FormatRequireImplsBlock(constraint_info.require_impls_block_id); CloseBrace(); } else { @@ -1378,6 +1380,19 @@ auto Formatter::FormatImportRefRhs(AnyImportRef inst) -> void { << (inst.kind == InstKind::ImportRefLoaded ? "loaded" : "unloaded"); } +auto Formatter::FormatRequireImplsBlock(RequireImplsBlockId block_id) -> void { + IndentLabel(); + out_ << "!requires:\n"; + if (!block_id.has_value()) { + return; + } + for (auto require_impls_id : sem_ir_->require_impls_blocks().Get(block_id)) { + Indent(); + FormatArg(require_impls_id); + out_ << "\n"; + } +} + auto Formatter::FormatArg(EntityNameId id) -> void { if (!id.has_value()) { out_ << "_"; diff --git a/toolchain/sem_ir/formatter.h b/toolchain/sem_ir/formatter.h index 6334e1debfac..918bcea2a3e0 100644 --- a/toolchain/sem_ir/formatter.h +++ b/toolchain/sem_ir/formatter.h @@ -275,6 +275,10 @@ class Formatter { // may fall back to printing location information from the import source. auto FormatImportRefRhs(AnyImportRef inst) -> void; + // Format a block of `require` declarations from their `RequireImplsDecl` + // instructions. Starts with a `!requires:` label. + auto FormatRequireImplsBlock(RequireImplsBlockId block_id) -> void; + template auto FormatArgs(Args... args) -> void { out_ << ' '; diff --git a/toolchain/sem_ir/ids.h b/toolchain/sem_ir/ids.h index eb47df180640..2758b1064238 100644 --- a/toolchain/sem_ir/ids.h +++ b/toolchain/sem_ir/ids.h @@ -929,6 +929,20 @@ struct RequireImplsId : public IdBase { using IdBase::IdBase; }; +// The ID of a `RequireImplsId` block. +struct RequireImplsBlockId : public IdBase { + static constexpr llvm::StringLiteral Label = "require_impls_block"; + + // The canonical empty block, reused to avoid allocating empty vectors. Always + // the 0-index block. + static const RequireImplsBlockId Empty; + + using IdBase::IdBase; +}; + +constexpr RequireImplsBlockId RequireImplsBlockId::Empty = + RequireImplsBlockId(0); + // A SemIR location used as the location of instructions. This contains either a // InstId, NodeId, ImportIRInstId, or None. The intent is that any of these can // indicate the source of an instruction, and also be used to associate a line diff --git a/toolchain/sem_ir/inst_fingerprinter.cpp b/toolchain/sem_ir/inst_fingerprinter.cpp index 3bcff67e3364..baf2ae32230c 100644 --- a/toolchain/sem_ir/inst_fingerprinter.cpp +++ b/toolchain/sem_ir/inst_fingerprinter.cpp @@ -244,10 +244,7 @@ struct Worklist { } auto Add(RequireImplsId require_id) -> void { - if (!require_id.has_value()) { - AddInvalid(); - return; - } + CARBON_CHECK(require_id.has_value()); const auto& require = sem_ir->require_impls().Get(require_id); Add(require.self_id); Add(require.facet_type_id); diff --git a/toolchain/sem_ir/interface.h b/toolchain/sem_ir/interface.h index 371b1c8f6dff..a635cb19d896 100644 --- a/toolchain/sem_ir/interface.h +++ b/toolchain/sem_ir/interface.h @@ -24,6 +24,8 @@ struct InterfaceFields { InstId self_param_id = InstId::None; // The following members are set at the `}` of the interface definition. + + RequireImplsBlockId require_impls_block_id = RequireImplsBlockId::None; InstBlockId associated_entities_id = InstBlockId::None; }; @@ -34,6 +36,7 @@ struct Interface : public EntityWithParamsBase, auto Print(llvm::raw_ostream& out) const -> void { out << "{"; PrintBaseFields(out); + out << ", require_impls_block_id: " << require_impls_block_id; out << "}"; } diff --git a/toolchain/sem_ir/named_constraint.h b/toolchain/sem_ir/named_constraint.h index 1ead669376b9..23f9e3f466b1 100644 --- a/toolchain/sem_ir/named_constraint.h +++ b/toolchain/sem_ir/named_constraint.h @@ -24,6 +24,7 @@ struct NamedConstraintFields { // The following members are set at the `}` of the constraint definition. + RequireImplsBlockId require_impls_block_id = RequireImplsBlockId::None; bool complete = false; }; @@ -34,6 +35,7 @@ struct NamedConstraint : public EntityWithParamsBase, auto Print(llvm::raw_ostream& out) const -> void { out << "{"; PrintBaseFields(out); + out << ", require_impls_block_id: " << require_impls_block_id; out << "}"; } diff --git a/toolchain/sem_ir/require_impls.h b/toolchain/sem_ir/require_impls.h index 9fbade34d814..cfffe312e4b3 100644 --- a/toolchain/sem_ir/require_impls.h +++ b/toolchain/sem_ir/require_impls.h @@ -5,6 +5,7 @@ #ifndef CARBON_TOOLCHAIN_SEM_IR_REQUIRE_IMPLS_H_ #define CARBON_TOOLCHAIN_SEM_IR_REQUIRE_IMPLS_H_ +#include "toolchain/base/block_value_store.h" #include "toolchain/base/canonical_value_store.h" #include "toolchain/sem_ir/ids.h" @@ -46,6 +47,9 @@ struct RequireImpls : Printable { using RequireImplsStore = ValueStore; +using RequireImplsBlockStore = + BlockValueStore; + } // namespace Carbon::SemIR #endif // CARBON_TOOLCHAIN_SEM_IR_REQUIRE_IMPLS_H_