Просмотр исходного кода

Require file tests to specify a min-prelude (#5818)

Use `full.carbon` min-prelude for any tests using the full prelude. A
few tests were using it unnecessarily and are changed to a more minimal
one in the process.

Any test which does not include some min-prelude will now fail with an
error.
Dana Jansens 9 месяцев назад
Родитель
Сommit
bcba76aca7
69 измененных файлов с 1414 добавлено и 1383 удалено
  1. 2 0
      toolchain/check/testdata/alias/builtins.carbon
  2. 2 0
      toolchain/check/testdata/array/bound_values.carbon
  3. 2 0
      toolchain/check/testdata/builtins/bool/eq.carbon
  4. 2 0
      toolchain/check/testdata/builtins/bool/neq.carbon
  5. 21 19
      toolchain/check/testdata/builtins/print/char.carbon
  6. 21 19
      toolchain/check/testdata/builtins/print/int.carbon
  7. 2 0
      toolchain/check/testdata/builtins/read/char.carbon
  8. 83 82
      toolchain/check/testdata/class/generic/self.carbon
  9. 2 0
      toolchain/check/testdata/facet/aggregate_through_access.carbon
  10. 1 0
      toolchain/check/testdata/for/actual.carbon
  11. 2 1
      toolchain/check/testdata/function/call/fail_not_callable.carbon
  12. 1 0
      toolchain/check/testdata/generic/template/unimplemented.carbon
  13. 1 0
      toolchain/check/testdata/impl/impl_assoc_const_with_prelude.carbon
  14. 2 1
      toolchain/check/testdata/impl/lookup/transitive.carbon
  15. 26 24
      toolchain/check/testdata/index/fail_invalid_base.carbon
  16. 1 0
      toolchain/check/testdata/index/fail_non_tuple_access.carbon
  17. 1 0
      toolchain/check/testdata/interop/cpp/fail_fuzzing.carbon
  18. 2 0
      toolchain/check/testdata/operators/builtin/bit_and.carbon
  19. 9 8
      toolchain/check/testdata/operators/builtin/fail_type_mismatch.carbon
  20. 2 1
      toolchain/check/testdata/operators/builtin/fail_type_mismatch_once.carbon
  21. 2 1
      toolchain/check/testdata/operators/builtin/fail_unimplemented_op.carbon
  22. 143 142
      toolchain/check/testdata/operators/builtin/or.carbon
  23. 76 75
      toolchain/check/testdata/operators/builtin/unary_op.carbon
  24. 8 7
      toolchain/check/testdata/operators/overloaded/add.carbon
  25. 8 7
      toolchain/check/testdata/operators/overloaded/bit_and.carbon
  26. 4 3
      toolchain/check/testdata/operators/overloaded/bit_complement.carbon
  27. 8 7
      toolchain/check/testdata/operators/overloaded/bit_or.carbon
  28. 8 7
      toolchain/check/testdata/operators/overloaded/bit_xor.carbon
  29. 5 4
      toolchain/check/testdata/operators/overloaded/dec.carbon
  30. 8 7
      toolchain/check/testdata/operators/overloaded/div.carbon
  31. 1 0
      toolchain/check/testdata/operators/overloaded/eq.carbon
  32. 35 34
      toolchain/check/testdata/operators/overloaded/fail_assign_non_ref.carbon
  33. 2 1
      toolchain/check/testdata/operators/overloaded/fail_error_recovery.carbon
  34. 14 13
      toolchain/check/testdata/operators/overloaded/fail_no_impl.carbon
  35. 2 0
      toolchain/check/testdata/operators/overloaded/fail_no_impl_for_arg.carbon
  36. 5 4
      toolchain/check/testdata/operators/overloaded/inc.carbon
  37. 1 0
      toolchain/check/testdata/operators/overloaded/index_with_prelude.carbon
  38. 8 7
      toolchain/check/testdata/operators/overloaded/left_shift.carbon
  39. 8 7
      toolchain/check/testdata/operators/overloaded/mod.carbon
  40. 8 7
      toolchain/check/testdata/operators/overloaded/mul.carbon
  41. 1 0
      toolchain/check/testdata/operators/overloaded/ordered.carbon
  42. 8 7
      toolchain/check/testdata/operators/overloaded/right_shift.carbon
  43. 8 7
      toolchain/check/testdata/operators/overloaded/sub.carbon
  44. 2 1
      toolchain/check/testdata/packages/fail_import_type_error.carbon
  45. 1 9
      toolchain/check/testdata/packages/fail_name_with_import_failure.carbon
  46. 1 30
      toolchain/check/testdata/packages/loaded_global.carbon
  47. 1 15
      toolchain/check/testdata/packages/unused_lazy_import.carbon
  48. 3 11
      toolchain/check/testdata/return/fail_missing_return_empty_tuple.carbon
  49. 2 1
      toolchain/check/testdata/return/fail_return_var_no_returned_var.carbon
  50. 5 4
      toolchain/check/testdata/struct/fail_type_assign.carbon
  51. 11 10
      toolchain/check/testdata/var/fail_not_copyable.carbon
  52. 10 8
      toolchain/lower/testdata/builtins/int_literal.carbon
  53. 8 6
      toolchain/lower/testdata/builtins/overloaded_operator.carbon
  54. 18 16
      toolchain/lower/testdata/builtins/print_read.carbon
  55. 29 27
      toolchain/lower/testdata/for/bindings.carbon
  56. 31 29
      toolchain/lower/testdata/for/break_continue.carbon
  57. 19 17
      toolchain/lower/testdata/for/for.carbon
  58. 18 16
      toolchain/lower/testdata/function/generic/call_different_impls.carbon
  59. 20 18
      toolchain/lower/testdata/function/generic/call_different_impls_with_const.carbon
  60. 40 38
      toolchain/lower/testdata/function/generic/call_different_specific.carbon
  61. 45 43
      toolchain/lower/testdata/function/generic/call_recursive_basic.carbon
  62. 108 106
      toolchain/lower/testdata/function/generic/call_recursive_diamond.carbon
  63. 30 28
      toolchain/lower/testdata/function/generic/call_recursive_impl.carbon
  64. 66 64
      toolchain/lower/testdata/function/generic/call_recursive_mutual.carbon
  65. 26 24
      toolchain/lower/testdata/function/generic/call_recursive_reorder.carbon
  66. 158 156
      toolchain/lower/testdata/function/generic/call_recursive_reorder_more.carbon
  67. 147 145
      toolchain/lower/testdata/function/generic/call_recursive_sccs_deep.carbon
  68. 56 54
      toolchain/lower/testdata/operators/overloaded.carbon
  69. 3 5
      toolchain/testing/file_test.cpp

+ 2 - 0
toolchain/check/testdata/alias/builtins.carbon

@@ -2,6 +2,8 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/primitives.carbon
+//
 // AUTOUPDATE
 // TIP: To test this file alone, run:
 // TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/alias/builtins.carbon

+ 2 - 0
toolchain/check/testdata/array/bound_values.carbon

@@ -2,6 +2,8 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
+//
 // AUTOUPDATE
 // TIP: To test this file alone, run:
 // TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/array/bound_values.carbon

+ 2 - 0
toolchain/check/testdata/builtins/bool/eq.carbon

@@ -2,6 +2,8 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
+//
 // AUTOUPDATE
 // TIP: To test this file alone, run:
 // TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/builtins/bool/eq.carbon

+ 2 - 0
toolchain/check/testdata/builtins/bool/neq.carbon

@@ -2,6 +2,8 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
+//
 // AUTOUPDATE
 // TIP: To test this file alone, run:
 // TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/builtins/bool/neq.carbon

+ 21 - 19
toolchain/check/testdata/builtins/print/char.carbon

@@ -2,6 +2,8 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
+//
 // AUTOUPDATE
 // TIP: To test this file alone, run:
 // TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/builtins/print/char.carbon
@@ -26,7 +28,7 @@ fn Main() {
 // CHECK:STDOUT:   %Int.type: type = generic_class_type @Int [concrete]
 // CHECK:STDOUT:   %Int.generic: %Int.type = struct_value () [concrete]
 // CHECK:STDOUT:   %i32: type = class_type @Int, @Int(%int_32) [concrete]
-// CHECK:STDOUT:   %PrintChar.type.c95: type = fn_type @PrintChar.loc13 [concrete]
+// CHECK:STDOUT:   %PrintChar.type.c95: type = fn_type @PrintChar.loc15 [concrete]
 // CHECK:STDOUT:   %PrintChar.843: %PrintChar.type.c95 = struct_value () [concrete]
 // CHECK:STDOUT:   %int_1.5b8: Core.IntLiteral = int_value 1 [concrete]
 // CHECK:STDOUT:   %ImplicitAs.type.cc7: type = generic_interface_type @ImplicitAs [concrete]
@@ -71,27 +73,27 @@ fn Main() {
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @Main() {
 // CHECK:STDOUT: !entry:
-// CHECK:STDOUT:   %PrintChar.ref.loc17: %PrintChar.type.c95 = name_ref PrintChar, file.%PrintChar.decl [concrete = constants.%PrintChar.843]
+// CHECK:STDOUT:   %PrintChar.ref.loc19: %PrintChar.type.c95 = name_ref PrintChar, file.%PrintChar.decl [concrete = constants.%PrintChar.843]
 // CHECK:STDOUT:   %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
-// CHECK:STDOUT:   %impl.elem0.loc17: %.9c3 = impl_witness_access constants.%ImplicitAs.impl_witness.c75, element0 [concrete = constants.%Convert.956]
-// CHECK:STDOUT:   %bound_method.loc17_13.1: <bound method> = bound_method %int_1, %impl.elem0.loc17 [concrete = constants.%Convert.bound.ab5]
-// CHECK:STDOUT:   %specific_fn.loc17: <specific function> = specific_function %impl.elem0.loc17, @Convert.3(constants.%int_32) [concrete = constants.%Convert.specific_fn]
-// CHECK:STDOUT:   %bound_method.loc17_13.2: <bound method> = bound_method %int_1, %specific_fn.loc17 [concrete = constants.%bound_method.9a1]
-// CHECK:STDOUT:   %int.convert_checked.loc17: init %i32 = call %bound_method.loc17_13.2(%int_1) [concrete = constants.%int_1.5d2]
-// CHECK:STDOUT:   %.loc17_13.1: %i32 = value_of_initializer %int.convert_checked.loc17 [concrete = constants.%int_1.5d2]
-// CHECK:STDOUT:   %.loc17_13.2: %i32 = converted %int_1, %.loc17_13.1 [concrete = constants.%int_1.5d2]
-// CHECK:STDOUT:   %print.char.loc17: init %i32 = call %PrintChar.ref.loc17(%.loc17_13.2)
+// CHECK:STDOUT:   %impl.elem0.loc19: %.9c3 = impl_witness_access constants.%ImplicitAs.impl_witness.c75, element0 [concrete = constants.%Convert.956]
+// CHECK:STDOUT:   %bound_method.loc19_13.1: <bound method> = bound_method %int_1, %impl.elem0.loc19 [concrete = constants.%Convert.bound.ab5]
+// CHECK:STDOUT:   %specific_fn.loc19: <specific function> = specific_function %impl.elem0.loc19, @Convert.3(constants.%int_32) [concrete = constants.%Convert.specific_fn]
+// CHECK:STDOUT:   %bound_method.loc19_13.2: <bound method> = bound_method %int_1, %specific_fn.loc19 [concrete = constants.%bound_method.9a1]
+// CHECK:STDOUT:   %int.convert_checked.loc19: init %i32 = call %bound_method.loc19_13.2(%int_1) [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %.loc19_13.1: %i32 = value_of_initializer %int.convert_checked.loc19 [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %.loc19_13.2: %i32 = converted %int_1, %.loc19_13.1 [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %print.char.loc19: init %i32 = call %PrintChar.ref.loc19(%.loc19_13.2)
 // CHECK:STDOUT:   %Core.ref: <namespace> = name_ref Core, imports.%Core [concrete = imports.%Core]
-// CHECK:STDOUT:   %PrintChar.ref.loc18: %PrintChar.type.089 = name_ref PrintChar, imports.%Core.PrintChar [concrete = constants.%PrintChar.d75]
+// CHECK:STDOUT:   %PrintChar.ref.loc20: %PrintChar.type.089 = name_ref PrintChar, imports.%Core.PrintChar [concrete = constants.%PrintChar.d75]
 // CHECK:STDOUT:   %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc]
-// CHECK:STDOUT:   %impl.elem0.loc18: %.9c3 = impl_witness_access constants.%ImplicitAs.impl_witness.c75, element0 [concrete = constants.%Convert.956]
-// CHECK:STDOUT:   %bound_method.loc18_18.1: <bound method> = bound_method %int_2, %impl.elem0.loc18 [concrete = constants.%Convert.bound.ef9]
-// CHECK:STDOUT:   %specific_fn.loc18: <specific function> = specific_function %impl.elem0.loc18, @Convert.3(constants.%int_32) [concrete = constants.%Convert.specific_fn]
-// CHECK:STDOUT:   %bound_method.loc18_18.2: <bound method> = bound_method %int_2, %specific_fn.loc18 [concrete = constants.%bound_method.b92]
-// CHECK:STDOUT:   %int.convert_checked.loc18: init %i32 = call %bound_method.loc18_18.2(%int_2) [concrete = constants.%int_2.ef8]
-// CHECK:STDOUT:   %.loc18_18.1: %i32 = value_of_initializer %int.convert_checked.loc18 [concrete = constants.%int_2.ef8]
-// CHECK:STDOUT:   %.loc18_18.2: %i32 = converted %int_2, %.loc18_18.1 [concrete = constants.%int_2.ef8]
-// CHECK:STDOUT:   %print.char.loc18: init %i32 = call %PrintChar.ref.loc18(%.loc18_18.2)
+// CHECK:STDOUT:   %impl.elem0.loc20: %.9c3 = impl_witness_access constants.%ImplicitAs.impl_witness.c75, element0 [concrete = constants.%Convert.956]
+// CHECK:STDOUT:   %bound_method.loc20_18.1: <bound method> = bound_method %int_2, %impl.elem0.loc20 [concrete = constants.%Convert.bound.ef9]
+// CHECK:STDOUT:   %specific_fn.loc20: <specific function> = specific_function %impl.elem0.loc20, @Convert.3(constants.%int_32) [concrete = constants.%Convert.specific_fn]
+// CHECK:STDOUT:   %bound_method.loc20_18.2: <bound method> = bound_method %int_2, %specific_fn.loc20 [concrete = constants.%bound_method.b92]
+// CHECK:STDOUT:   %int.convert_checked.loc20: init %i32 = call %bound_method.loc20_18.2(%int_2) [concrete = constants.%int_2.ef8]
+// CHECK:STDOUT:   %.loc20_18.1: %i32 = value_of_initializer %int.convert_checked.loc20 [concrete = constants.%int_2.ef8]
+// CHECK:STDOUT:   %.loc20_18.2: %i32 = converted %int_2, %.loc20_18.1 [concrete = constants.%int_2.ef8]
+// CHECK:STDOUT:   %print.char.loc20: init %i32 = call %PrintChar.ref.loc20(%.loc20_18.2)
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 21 - 19
toolchain/check/testdata/builtins/print/int.carbon

@@ -2,6 +2,8 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
+//
 // AUTOUPDATE
 // TIP: To test this file alone, run:
 // TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/builtins/print/int.carbon
@@ -27,7 +29,7 @@ fn Main() {
 // CHECK:STDOUT:   %empty_tuple.type: type = tuple_type () [concrete]
 // CHECK:STDOUT:   %Int.generic: %Int.type = struct_value () [concrete]
 // CHECK:STDOUT:   %i32: type = class_type @Int, @Int(%int_32) [concrete]
-// CHECK:STDOUT:   %Print.type.980: type = fn_type @Print.loc13 [concrete]
+// CHECK:STDOUT:   %Print.type.980: type = fn_type @Print.loc15 [concrete]
 // CHECK:STDOUT:   %Print.b7c: %Print.type.980 = struct_value () [concrete]
 // CHECK:STDOUT:   %int_1.5b8: Core.IntLiteral = int_value 1 [concrete]
 // CHECK:STDOUT:   %ImplicitAs.type.cc7: type = generic_interface_type @ImplicitAs [concrete]
@@ -72,27 +74,27 @@ fn Main() {
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @Main() {
 // CHECK:STDOUT: !entry:
-// CHECK:STDOUT:   %Print.ref.loc17: %Print.type.980 = name_ref Print, file.%Print.decl [concrete = constants.%Print.b7c]
+// CHECK:STDOUT:   %Print.ref.loc19: %Print.type.980 = name_ref Print, file.%Print.decl [concrete = constants.%Print.b7c]
 // CHECK:STDOUT:   %int_1: Core.IntLiteral = int_value 1 [concrete = constants.%int_1.5b8]
-// CHECK:STDOUT:   %impl.elem0.loc17: %.9c3 = impl_witness_access constants.%ImplicitAs.impl_witness.c75, element0 [concrete = constants.%Convert.956]
-// CHECK:STDOUT:   %bound_method.loc17_9.1: <bound method> = bound_method %int_1, %impl.elem0.loc17 [concrete = constants.%Convert.bound.ab5]
-// CHECK:STDOUT:   %specific_fn.loc17: <specific function> = specific_function %impl.elem0.loc17, @Convert.3(constants.%int_32) [concrete = constants.%Convert.specific_fn]
-// CHECK:STDOUT:   %bound_method.loc17_9.2: <bound method> = bound_method %int_1, %specific_fn.loc17 [concrete = constants.%bound_method.9a1]
-// CHECK:STDOUT:   %int.convert_checked.loc17: init %i32 = call %bound_method.loc17_9.2(%int_1) [concrete = constants.%int_1.5d2]
-// CHECK:STDOUT:   %.loc17_9.1: %i32 = value_of_initializer %int.convert_checked.loc17 [concrete = constants.%int_1.5d2]
-// CHECK:STDOUT:   %.loc17_9.2: %i32 = converted %int_1, %.loc17_9.1 [concrete = constants.%int_1.5d2]
-// CHECK:STDOUT:   %print.int.loc17: init %empty_tuple.type = call %Print.ref.loc17(%.loc17_9.2)
+// CHECK:STDOUT:   %impl.elem0.loc19: %.9c3 = impl_witness_access constants.%ImplicitAs.impl_witness.c75, element0 [concrete = constants.%Convert.956]
+// CHECK:STDOUT:   %bound_method.loc19_9.1: <bound method> = bound_method %int_1, %impl.elem0.loc19 [concrete = constants.%Convert.bound.ab5]
+// CHECK:STDOUT:   %specific_fn.loc19: <specific function> = specific_function %impl.elem0.loc19, @Convert.3(constants.%int_32) [concrete = constants.%Convert.specific_fn]
+// CHECK:STDOUT:   %bound_method.loc19_9.2: <bound method> = bound_method %int_1, %specific_fn.loc19 [concrete = constants.%bound_method.9a1]
+// CHECK:STDOUT:   %int.convert_checked.loc19: init %i32 = call %bound_method.loc19_9.2(%int_1) [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %.loc19_9.1: %i32 = value_of_initializer %int.convert_checked.loc19 [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %.loc19_9.2: %i32 = converted %int_1, %.loc19_9.1 [concrete = constants.%int_1.5d2]
+// CHECK:STDOUT:   %print.int.loc19: init %empty_tuple.type = call %Print.ref.loc19(%.loc19_9.2)
 // CHECK:STDOUT:   %Core.ref: <namespace> = name_ref Core, imports.%Core [concrete = imports.%Core]
-// CHECK:STDOUT:   %Print.ref.loc18: %Print.type.6ed = name_ref Print, imports.%Core.Print [concrete = constants.%Print.723]
+// CHECK:STDOUT:   %Print.ref.loc20: %Print.type.6ed = name_ref Print, imports.%Core.Print [concrete = constants.%Print.723]
 // CHECK:STDOUT:   %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2.ecc]
-// CHECK:STDOUT:   %impl.elem0.loc18: %.9c3 = impl_witness_access constants.%ImplicitAs.impl_witness.c75, element0 [concrete = constants.%Convert.956]
-// CHECK:STDOUT:   %bound_method.loc18_14.1: <bound method> = bound_method %int_2, %impl.elem0.loc18 [concrete = constants.%Convert.bound.ef9]
-// CHECK:STDOUT:   %specific_fn.loc18: <specific function> = specific_function %impl.elem0.loc18, @Convert.3(constants.%int_32) [concrete = constants.%Convert.specific_fn]
-// CHECK:STDOUT:   %bound_method.loc18_14.2: <bound method> = bound_method %int_2, %specific_fn.loc18 [concrete = constants.%bound_method.b92]
-// CHECK:STDOUT:   %int.convert_checked.loc18: init %i32 = call %bound_method.loc18_14.2(%int_2) [concrete = constants.%int_2.ef8]
-// CHECK:STDOUT:   %.loc18_14.1: %i32 = value_of_initializer %int.convert_checked.loc18 [concrete = constants.%int_2.ef8]
-// CHECK:STDOUT:   %.loc18_14.2: %i32 = converted %int_2, %.loc18_14.1 [concrete = constants.%int_2.ef8]
-// CHECK:STDOUT:   %print.int.loc18: init %empty_tuple.type = call %Print.ref.loc18(%.loc18_14.2)
+// CHECK:STDOUT:   %impl.elem0.loc20: %.9c3 = impl_witness_access constants.%ImplicitAs.impl_witness.c75, element0 [concrete = constants.%Convert.956]
+// CHECK:STDOUT:   %bound_method.loc20_14.1: <bound method> = bound_method %int_2, %impl.elem0.loc20 [concrete = constants.%Convert.bound.ef9]
+// CHECK:STDOUT:   %specific_fn.loc20: <specific function> = specific_function %impl.elem0.loc20, @Convert.3(constants.%int_32) [concrete = constants.%Convert.specific_fn]
+// CHECK:STDOUT:   %bound_method.loc20_14.2: <bound method> = bound_method %int_2, %specific_fn.loc20 [concrete = constants.%bound_method.b92]
+// CHECK:STDOUT:   %int.convert_checked.loc20: init %i32 = call %bound_method.loc20_14.2(%int_2) [concrete = constants.%int_2.ef8]
+// CHECK:STDOUT:   %.loc20_14.1: %i32 = value_of_initializer %int.convert_checked.loc20 [concrete = constants.%int_2.ef8]
+// CHECK:STDOUT:   %.loc20_14.2: %i32 = converted %int_2, %.loc20_14.1 [concrete = constants.%int_2.ef8]
+// CHECK:STDOUT:   %print.int.loc20: init %empty_tuple.type = call %Print.ref.loc20(%.loc20_14.2)
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 2 - 0
toolchain/check/testdata/builtins/read/char.carbon

@@ -2,6 +2,8 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
+//
 // AUTOUPDATE
 // TIP: To test this file alone, run:
 // TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/builtins/read/char.carbon

+ 83 - 82
toolchain/check/testdata/class/generic/self.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/destroy.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -61,7 +62,7 @@ class Class(T:! type) {
 // CHECK:STDOUT:     import Core//prelude
 // CHECK:STDOUT:     import Core//prelude/...
 // CHECK:STDOUT:   }
-// CHECK:STDOUT:   %Core.Destroy: type = import_ref Core//prelude/destroy, Destroy, loaded [concrete = constants.%Destroy.type]
+// CHECK:STDOUT:   %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
@@ -73,19 +74,19 @@ class Class(T:! type) {
 // CHECK:STDOUT:   %Class.decl: %Class.type = class_decl @Class [concrete = constants.%Class.generic] {
 // CHECK:STDOUT:     %T.patt: %pattern_type.98f = symbolic_binding_pattern T, 0 [concrete]
 // CHECK:STDOUT:   } {
-// CHECK:STDOUT:     %T.loc14_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc14_13.2 (constants.%T)]
+// CHECK:STDOUT:     %T.loc15_13.1: type = bind_symbolic_name T, 0 [symbolic = %T.loc15_13.2 (constants.%T)]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: generic class @Class(%T.loc14_13.1: type) {
-// CHECK:STDOUT:   %T.loc14_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc14_13.2 (constants.%T)]
+// CHECK:STDOUT: generic class @Class(%T.loc15_13.1: type) {
+// CHECK:STDOUT:   %T.loc15_13.2: type = bind_symbolic_name T, 0 [symbolic = %T.loc15_13.2 (constants.%T)]
 // CHECK:STDOUT:
 // CHECK:STDOUT: !definition:
-// CHECK:STDOUT:   %MakeSelf.type: type = fn_type @MakeSelf, @Class(%T.loc14_13.2) [symbolic = %MakeSelf.type (constants.%MakeSelf.type)]
+// CHECK:STDOUT:   %MakeSelf.type: type = fn_type @MakeSelf, @Class(%T.loc15_13.2) [symbolic = %MakeSelf.type (constants.%MakeSelf.type)]
 // CHECK:STDOUT:   %MakeSelf: @Class.%MakeSelf.type (%MakeSelf.type) = struct_value () [symbolic = %MakeSelf (constants.%MakeSelf)]
-// CHECK:STDOUT:   %MakeClass.type: type = fn_type @MakeClass, @Class(%T.loc14_13.2) [symbolic = %MakeClass.type (constants.%MakeClass.type)]
+// CHECK:STDOUT:   %MakeClass.type: type = fn_type @MakeClass, @Class(%T.loc15_13.2) [symbolic = %MakeClass.type (constants.%MakeClass.type)]
 // CHECK:STDOUT:   %MakeClass: @Class.%MakeClass.type (%MakeClass.type) = struct_value () [symbolic = %MakeClass (constants.%MakeClass)]
-// CHECK:STDOUT:   %F.type: type = fn_type @F, @Class(%T.loc14_13.2) [symbolic = %F.type (constants.%F.type)]
+// CHECK:STDOUT:   %F.type: type = fn_type @F, @Class(%T.loc15_13.2) [symbolic = %F.type (constants.%F.type)]
 // CHECK:STDOUT:   %F: @Class.%F.type (%F.type) = struct_value () [symbolic = %F (constants.%F)]
 // CHECK:STDOUT:
 // CHECK:STDOUT:   class {
@@ -93,8 +94,8 @@ class Class(T:! type) {
 // CHECK:STDOUT:       %return.patt: @MakeSelf.%pattern_type (%pattern_type.3c1) = return_slot_pattern [concrete]
 // CHECK:STDOUT:       %return.param_patt: @MakeSelf.%pattern_type (%pattern_type.3c1) = out_param_pattern %return.patt, call_param0 [concrete]
 // CHECK:STDOUT:     } {
-// CHECK:STDOUT:       %.loc17_20: type = specific_constant constants.%Class, @Class(constants.%T) [symbolic = %Class (constants.%Class)]
-// CHECK:STDOUT:       %Self.ref: type = name_ref Self, %.loc17_20 [symbolic = %Class (constants.%Class)]
+// CHECK:STDOUT:       %.loc18_20: type = specific_constant constants.%Class, @Class(constants.%T) [symbolic = %Class (constants.%Class)]
+// CHECK:STDOUT:       %Self.ref: type = name_ref Self, %.loc18_20 [symbolic = %Class (constants.%Class)]
 // CHECK:STDOUT:       %return.param: ref @MakeSelf.%Class (%Class) = out_param call_param0
 // CHECK:STDOUT:       %return: ref @MakeSelf.%Class (%Class) = return_slot %return.param
 // CHECK:STDOUT:     }
@@ -103,10 +104,10 @@ class Class(T:! type) {
 // CHECK:STDOUT:       %return.param_patt: @MakeClass.%pattern_type (%pattern_type.3c1) = out_param_pattern %return.patt, call_param0 [concrete]
 // CHECK:STDOUT:     } {
 // CHECK:STDOUT:       %Class.ref: %Class.type = name_ref Class, file.%Class.decl [concrete = constants.%Class.generic]
-// CHECK:STDOUT:       %T.ref: type = name_ref T, @Class.%T.loc14_13.1 [symbolic = %T (constants.%T)]
-// CHECK:STDOUT:       %Class.loc18_28.2: type = class_type @Class, @Class(constants.%T) [symbolic = %Class.loc18_28.1 (constants.%Class)]
-// CHECK:STDOUT:       %return.param: ref @MakeClass.%Class.loc18_28.1 (%Class) = out_param call_param0
-// CHECK:STDOUT:       %return: ref @MakeClass.%Class.loc18_28.1 (%Class) = return_slot %return.param
+// CHECK:STDOUT:       %T.ref: type = name_ref T, @Class.%T.loc15_13.1 [symbolic = %T (constants.%T)]
+// CHECK:STDOUT:       %Class.loc19_28.2: type = class_type @Class, @Class(constants.%T) [symbolic = %Class.loc19_28.1 (constants.%Class)]
+// CHECK:STDOUT:       %return.param: ref @MakeClass.%Class.loc19_28.1 (%Class) = out_param call_param0
+// CHECK:STDOUT:       %return: ref @MakeClass.%Class.loc19_28.1 (%Class) = return_slot %return.param
 // CHECK:STDOUT:     }
 // CHECK:STDOUT:     %F.decl: @Class.%F.type (%F.type) = fn_decl @F [symbolic = @Class.%F (constants.%F)] {} {}
 // CHECK:STDOUT:     %empty_struct_type: type = struct_type {} [concrete = constants.%empty_struct_type]
@@ -123,7 +124,7 @@ class Class(T:! type) {
 // CHECK:STDOUT:   }
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: generic fn @MakeSelf(@Class.%T.loc14_13.1: type) {
+// CHECK:STDOUT: generic fn @MakeSelf(@Class.%T.loc15_13.1: type) {
 // CHECK:STDOUT:   %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)]
 // CHECK:STDOUT:   %Class: type = class_type @Class, @Class(%T) [symbolic = %Class (constants.%Class)]
 // CHECK:STDOUT:   %pattern_type: type = pattern_type %Class [symbolic = %pattern_type (constants.%pattern_type.3c1)]
@@ -134,50 +135,50 @@ class Class(T:! type) {
 // CHECK:STDOUT:
 // CHECK:STDOUT:   fn() -> %return.param: @MakeSelf.%Class (%Class) {
 // CHECK:STDOUT:   !entry:
-// CHECK:STDOUT:     %.loc17_35.1: %empty_struct_type = struct_literal ()
-// CHECK:STDOUT:     %.loc17_35.2: init @MakeSelf.%Class (%Class) = class_init (), %return [symbolic = %Class.val (constants.%Class.val)]
-// CHECK:STDOUT:     %.loc17_36: init @MakeSelf.%Class (%Class) = converted %.loc17_35.1, %.loc17_35.2 [symbolic = %Class.val (constants.%Class.val)]
-// CHECK:STDOUT:     return %.loc17_36 to %return
+// CHECK:STDOUT:     %.loc18_35.1: %empty_struct_type = struct_literal ()
+// CHECK:STDOUT:     %.loc18_35.2: init @MakeSelf.%Class (%Class) = class_init (), %return [symbolic = %Class.val (constants.%Class.val)]
+// CHECK:STDOUT:     %.loc18_36: init @MakeSelf.%Class (%Class) = converted %.loc18_35.1, %.loc18_35.2 [symbolic = %Class.val (constants.%Class.val)]
+// CHECK:STDOUT:     return %.loc18_36 to %return
 // CHECK:STDOUT:   }
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: generic fn @MakeClass(@Class.%T.loc14_13.1: type) {
+// CHECK:STDOUT: generic fn @MakeClass(@Class.%T.loc15_13.1: type) {
 // CHECK:STDOUT:   %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)]
-// CHECK:STDOUT:   %Class.loc18_28.1: type = class_type @Class, @Class(%T) [symbolic = %Class.loc18_28.1 (constants.%Class)]
-// CHECK:STDOUT:   %pattern_type: type = pattern_type %Class.loc18_28.1 [symbolic = %pattern_type (constants.%pattern_type.3c1)]
+// CHECK:STDOUT:   %Class.loc19_28.1: type = class_type @Class, @Class(%T) [symbolic = %Class.loc19_28.1 (constants.%Class)]
+// CHECK:STDOUT:   %pattern_type: type = pattern_type %Class.loc19_28.1 [symbolic = %pattern_type (constants.%pattern_type.3c1)]
 // CHECK:STDOUT:
 // CHECK:STDOUT: !definition:
-// CHECK:STDOUT:   %require_complete: <witness> = require_complete_type %Class.loc18_28.1 [symbolic = %require_complete (constants.%require_complete.4f8)]
-// CHECK:STDOUT:   %Class.val: @MakeClass.%Class.loc18_28.1 (%Class) = struct_value () [symbolic = %Class.val (constants.%Class.val)]
+// CHECK:STDOUT:   %require_complete: <witness> = require_complete_type %Class.loc19_28.1 [symbolic = %require_complete (constants.%require_complete.4f8)]
+// CHECK:STDOUT:   %Class.val: @MakeClass.%Class.loc19_28.1 (%Class) = struct_value () [symbolic = %Class.val (constants.%Class.val)]
 // CHECK:STDOUT:
-// CHECK:STDOUT:   fn() -> %return.param: @MakeClass.%Class.loc18_28.1 (%Class) {
+// CHECK:STDOUT:   fn() -> %return.param: @MakeClass.%Class.loc19_28.1 (%Class) {
 // CHECK:STDOUT:   !entry:
-// CHECK:STDOUT:     %.loc18_40.1: %empty_struct_type = struct_literal ()
-// CHECK:STDOUT:     %.loc18_40.2: init @MakeClass.%Class.loc18_28.1 (%Class) = class_init (), %return [symbolic = %Class.val (constants.%Class.val)]
-// CHECK:STDOUT:     %.loc18_41: init @MakeClass.%Class.loc18_28.1 (%Class) = converted %.loc18_40.1, %.loc18_40.2 [symbolic = %Class.val (constants.%Class.val)]
-// CHECK:STDOUT:     return %.loc18_41 to %return
+// CHECK:STDOUT:     %.loc19_40.1: %empty_struct_type = struct_literal ()
+// CHECK:STDOUT:     %.loc19_40.2: init @MakeClass.%Class.loc19_28.1 (%Class) = class_init (), %return [symbolic = %Class.val (constants.%Class.val)]
+// CHECK:STDOUT:     %.loc19_41: init @MakeClass.%Class.loc19_28.1 (%Class) = converted %.loc19_40.1, %.loc19_40.2 [symbolic = %Class.val (constants.%Class.val)]
+// CHECK:STDOUT:     return %.loc19_41 to %return
 // CHECK:STDOUT:   }
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: generic fn @F(@Class.%T.loc14_13.1: type) {
+// CHECK:STDOUT: generic fn @F(@Class.%T.loc15_13.1: type) {
 // CHECK:STDOUT: !definition:
 // CHECK:STDOUT:   %T: type = bind_symbolic_name T, 0 [symbolic = %T (constants.%T)]
-// CHECK:STDOUT:   %Class.loc20_19.2: type = class_type @Class, @Class(%T) [symbolic = %Class.loc20_19.2 (constants.%Class)]
-// CHECK:STDOUT:   %require_complete.loc20: <witness> = require_complete_type %Class.loc20_19.2 [symbolic = %require_complete.loc20 (constants.%require_complete.4f8)]
-// CHECK:STDOUT:   %pattern_type: type = pattern_type %Class.loc20_19.2 [symbolic = %pattern_type (constants.%pattern_type.3c1)]
+// CHECK:STDOUT:   %Class.loc21_19.2: type = class_type @Class, @Class(%T) [symbolic = %Class.loc21_19.2 (constants.%Class)]
+// CHECK:STDOUT:   %require_complete.loc21: <witness> = require_complete_type %Class.loc21_19.2 [symbolic = %require_complete.loc21 (constants.%require_complete.4f8)]
+// CHECK:STDOUT:   %pattern_type: type = pattern_type %Class.loc21_19.2 [symbolic = %pattern_type (constants.%pattern_type.3c1)]
 // CHECK:STDOUT:   %MakeSelf.type: type = fn_type @MakeSelf, @Class(%T) [symbolic = %MakeSelf.type (constants.%MakeSelf.type)]
 // CHECK:STDOUT:   %MakeSelf: @F.%MakeSelf.type (%MakeSelf.type) = struct_value () [symbolic = %MakeSelf (constants.%MakeSelf)]
-// CHECK:STDOUT:   %MakeSelf.specific_fn.loc20_23.2: <specific function> = specific_function %MakeSelf, @MakeSelf(%T) [symbolic = %MakeSelf.specific_fn.loc20_23.2 (constants.%MakeSelf.specific_fn)]
+// CHECK:STDOUT:   %MakeSelf.specific_fn.loc21_23.2: <specific function> = specific_function %MakeSelf, @MakeSelf(%T) [symbolic = %MakeSelf.specific_fn.loc21_23.2 (constants.%MakeSelf.specific_fn)]
 // CHECK:STDOUT:   %MakeClass.type: type = fn_type @MakeClass, @Class(%T) [symbolic = %MakeClass.type (constants.%MakeClass.type)]
 // CHECK:STDOUT:   %MakeClass: @F.%MakeClass.type (%MakeClass.type) = struct_value () [symbolic = %MakeClass (constants.%MakeClass)]
-// CHECK:STDOUT:   %MakeClass.specific_fn.loc21_19.2: <specific function> = specific_function %MakeClass, @MakeClass(%T) [symbolic = %MakeClass.specific_fn.loc21_19.2 (constants.%MakeClass.specific_fn)]
-// CHECK:STDOUT:   %Destroy.lookup_impl_witness: <witness> = lookup_impl_witness %Class.loc20_19.2, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness)]
-// CHECK:STDOUT:   %Destroy.facet: %Destroy.type = facet_value %Class.loc20_19.2, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet (constants.%Destroy.facet)]
-// CHECK:STDOUT:   %.loc21_5.4: type = fn_type_with_self_type constants.%Op.type.bae, %Destroy.facet [symbolic = %.loc21_5.4 (constants.%.d76)]
-// CHECK:STDOUT:   %impl.elem0.loc21_5.3: @F.%.loc21_5.4 (%.d76) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc21_5.3 (constants.%impl.elem0)]
-// CHECK:STDOUT:   %specific_impl_fn.loc21_5.3: <specific function> = specific_impl_function %impl.elem0.loc21_5.3, @Op.1(%Destroy.facet) [symbolic = %specific_impl_fn.loc21_5.3 (constants.%specific_impl_fn)]
-// CHECK:STDOUT:   %ptr: type = ptr_type %Class.loc20_19.2 [symbolic = %ptr (constants.%ptr.955)]
-// CHECK:STDOUT:   %require_complete.loc21: <witness> = require_complete_type %ptr [symbolic = %require_complete.loc21 (constants.%require_complete.2ae)]
+// CHECK:STDOUT:   %MakeClass.specific_fn.loc22_19.2: <specific function> = specific_function %MakeClass, @MakeClass(%T) [symbolic = %MakeClass.specific_fn.loc22_19.2 (constants.%MakeClass.specific_fn)]
+// CHECK:STDOUT:   %Destroy.lookup_impl_witness: <witness> = lookup_impl_witness %Class.loc21_19.2, @Destroy [symbolic = %Destroy.lookup_impl_witness (constants.%Destroy.lookup_impl_witness)]
+// CHECK:STDOUT:   %Destroy.facet: %Destroy.type = facet_value %Class.loc21_19.2, (%Destroy.lookup_impl_witness) [symbolic = %Destroy.facet (constants.%Destroy.facet)]
+// CHECK:STDOUT:   %.loc22_5.4: type = fn_type_with_self_type constants.%Op.type.bae, %Destroy.facet [symbolic = %.loc22_5.4 (constants.%.d76)]
+// CHECK:STDOUT:   %impl.elem0.loc22_5.3: @F.%.loc22_5.4 (%.d76) = impl_witness_access %Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc22_5.3 (constants.%impl.elem0)]
+// CHECK:STDOUT:   %specific_impl_fn.loc22_5.3: <specific function> = specific_impl_function %impl.elem0.loc22_5.3, @Op.1(%Destroy.facet) [symbolic = %specific_impl_fn.loc22_5.3 (constants.%specific_impl_fn)]
+// CHECK:STDOUT:   %ptr: type = ptr_type %Class.loc21_19.2 [symbolic = %ptr (constants.%ptr.955)]
+// CHECK:STDOUT:   %require_complete.loc22: <witness> = require_complete_type %ptr [symbolic = %require_complete.loc22 (constants.%require_complete.2ae)]
 // CHECK:STDOUT:
 // CHECK:STDOUT:   fn() {
 // CHECK:STDOUT:   !entry:
@@ -185,65 +186,65 @@ class Class(T:! type) {
 // CHECK:STDOUT:       %c.patt: @F.%pattern_type (%pattern_type.3c1) = binding_pattern c [concrete]
 // CHECK:STDOUT:       %c.var_patt: @F.%pattern_type (%pattern_type.3c1) = var_pattern %c.patt [concrete]
 // CHECK:STDOUT:     }
-// CHECK:STDOUT:     %c.var: ref @F.%Class.loc20_19.2 (%Class) = var %c.var_patt
-// CHECK:STDOUT:     %.loc20_23: @F.%MakeSelf.type (%MakeSelf.type) = specific_constant @Class.%MakeSelf.decl, @Class(constants.%T) [symbolic = %MakeSelf (constants.%MakeSelf)]
-// CHECK:STDOUT:     %MakeSelf.ref: @F.%MakeSelf.type (%MakeSelf.type) = name_ref MakeSelf, %.loc20_23 [symbolic = %MakeSelf (constants.%MakeSelf)]
-// CHECK:STDOUT:     %MakeSelf.specific_fn.loc20_23.1: <specific function> = specific_function %MakeSelf.ref, @MakeSelf(constants.%T) [symbolic = %MakeSelf.specific_fn.loc20_23.2 (constants.%MakeSelf.specific_fn)]
-// CHECK:STDOUT:     %.loc20_5.1: ref @F.%Class.loc20_19.2 (%Class) = splice_block %c.var {}
-// CHECK:STDOUT:     %MakeSelf.call: init @F.%Class.loc20_19.2 (%Class) = call %MakeSelf.specific_fn.loc20_23.1() to %.loc20_5.1
+// CHECK:STDOUT:     %c.var: ref @F.%Class.loc21_19.2 (%Class) = var %c.var_patt
+// CHECK:STDOUT:     %.loc21_23: @F.%MakeSelf.type (%MakeSelf.type) = specific_constant @Class.%MakeSelf.decl, @Class(constants.%T) [symbolic = %MakeSelf (constants.%MakeSelf)]
+// CHECK:STDOUT:     %MakeSelf.ref: @F.%MakeSelf.type (%MakeSelf.type) = name_ref MakeSelf, %.loc21_23 [symbolic = %MakeSelf (constants.%MakeSelf)]
+// CHECK:STDOUT:     %MakeSelf.specific_fn.loc21_23.1: <specific function> = specific_function %MakeSelf.ref, @MakeSelf(constants.%T) [symbolic = %MakeSelf.specific_fn.loc21_23.2 (constants.%MakeSelf.specific_fn)]
+// CHECK:STDOUT:     %.loc21_5.1: ref @F.%Class.loc21_19.2 (%Class) = splice_block %c.var {}
+// CHECK:STDOUT:     %MakeSelf.call: init @F.%Class.loc21_19.2 (%Class) = call %MakeSelf.specific_fn.loc21_23.1() to %.loc21_5.1
 // CHECK:STDOUT:     assign %c.var, %MakeSelf.call
-// CHECK:STDOUT:     %.loc20_19: type = splice_block %Class.loc20_19.1 [symbolic = %Class.loc20_19.2 (constants.%Class)] {
+// CHECK:STDOUT:     %.loc21_19: type = splice_block %Class.loc21_19.1 [symbolic = %Class.loc21_19.2 (constants.%Class)] {
 // CHECK:STDOUT:       %Class.ref: %Class.type = name_ref Class, file.%Class.decl [concrete = constants.%Class.generic]
-// CHECK:STDOUT:       %T.ref: type = name_ref T, @Class.%T.loc14_13.1 [symbolic = %T (constants.%T)]
-// CHECK:STDOUT:       %Class.loc20_19.1: type = class_type @Class, @Class(constants.%T) [symbolic = %Class.loc20_19.2 (constants.%Class)]
+// CHECK:STDOUT:       %T.ref: type = name_ref T, @Class.%T.loc15_13.1 [symbolic = %T (constants.%T)]
+// CHECK:STDOUT:       %Class.loc21_19.1: type = class_type @Class, @Class(constants.%T) [symbolic = %Class.loc21_19.2 (constants.%Class)]
 // CHECK:STDOUT:     }
-// CHECK:STDOUT:     %c: ref @F.%Class.loc20_19.2 (%Class) = bind_name c, %c.var
+// CHECK:STDOUT:     %c: ref @F.%Class.loc21_19.2 (%Class) = bind_name c, %c.var
 // CHECK:STDOUT:     name_binding_decl {
 // CHECK:STDOUT:       %s.patt: @F.%pattern_type (%pattern_type.3c1) = binding_pattern s [concrete]
 // CHECK:STDOUT:       %s.var_patt: @F.%pattern_type (%pattern_type.3c1) = var_pattern %s.patt [concrete]
 // CHECK:STDOUT:     }
-// CHECK:STDOUT:     %s.var: ref @F.%Class.loc20_19.2 (%Class) = var %s.var_patt
-// CHECK:STDOUT:     %.loc21_19: @F.%MakeClass.type (%MakeClass.type) = specific_constant @Class.%MakeClass.decl, @Class(constants.%T) [symbolic = %MakeClass (constants.%MakeClass)]
-// CHECK:STDOUT:     %MakeClass.ref: @F.%MakeClass.type (%MakeClass.type) = name_ref MakeClass, %.loc21_19 [symbolic = %MakeClass (constants.%MakeClass)]
-// CHECK:STDOUT:     %MakeClass.specific_fn.loc21_19.1: <specific function> = specific_function %MakeClass.ref, @MakeClass(constants.%T) [symbolic = %MakeClass.specific_fn.loc21_19.2 (constants.%MakeClass.specific_fn)]
-// CHECK:STDOUT:     %.loc21_5.1: ref @F.%Class.loc20_19.2 (%Class) = splice_block %s.var {}
-// CHECK:STDOUT:     %MakeClass.call: init @F.%Class.loc20_19.2 (%Class) = call %MakeClass.specific_fn.loc21_19.1() to %.loc21_5.1
+// CHECK:STDOUT:     %s.var: ref @F.%Class.loc21_19.2 (%Class) = var %s.var_patt
+// CHECK:STDOUT:     %.loc22_19: @F.%MakeClass.type (%MakeClass.type) = specific_constant @Class.%MakeClass.decl, @Class(constants.%T) [symbolic = %MakeClass (constants.%MakeClass)]
+// CHECK:STDOUT:     %MakeClass.ref: @F.%MakeClass.type (%MakeClass.type) = name_ref MakeClass, %.loc22_19 [symbolic = %MakeClass (constants.%MakeClass)]
+// CHECK:STDOUT:     %MakeClass.specific_fn.loc22_19.1: <specific function> = specific_function %MakeClass.ref, @MakeClass(constants.%T) [symbolic = %MakeClass.specific_fn.loc22_19.2 (constants.%MakeClass.specific_fn)]
+// CHECK:STDOUT:     %.loc22_5.1: ref @F.%Class.loc21_19.2 (%Class) = splice_block %s.var {}
+// CHECK:STDOUT:     %MakeClass.call: init @F.%Class.loc21_19.2 (%Class) = call %MakeClass.specific_fn.loc22_19.1() to %.loc22_5.1
 // CHECK:STDOUT:     assign %s.var, %MakeClass.call
-// CHECK:STDOUT:     %.loc21_12.1: type = splice_block %Self.ref [symbolic = %Class.loc20_19.2 (constants.%Class)] {
-// CHECK:STDOUT:       %.loc21_12.2: type = specific_constant constants.%Class, @Class(constants.%T) [symbolic = %Class.loc20_19.2 (constants.%Class)]
-// CHECK:STDOUT:       %Self.ref: type = name_ref Self, %.loc21_12.2 [symbolic = %Class.loc20_19.2 (constants.%Class)]
+// CHECK:STDOUT:     %.loc22_12.1: type = splice_block %Self.ref [symbolic = %Class.loc21_19.2 (constants.%Class)] {
+// CHECK:STDOUT:       %.loc22_12.2: type = specific_constant constants.%Class, @Class(constants.%T) [symbolic = %Class.loc21_19.2 (constants.%Class)]
+// CHECK:STDOUT:       %Self.ref: type = name_ref Self, %.loc22_12.2 [symbolic = %Class.loc21_19.2 (constants.%Class)]
 // CHECK:STDOUT:     }
-// CHECK:STDOUT:     %s: ref @F.%Class.loc20_19.2 (%Class) = bind_name s, %s.var
-// CHECK:STDOUT:     %impl.elem0.loc21_5.1: @F.%.loc21_5.4 (%.d76) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc21_5.3 (constants.%impl.elem0)]
+// CHECK:STDOUT:     %s: ref @F.%Class.loc21_19.2 (%Class) = bind_name s, %s.var
+// CHECK:STDOUT:     %impl.elem0.loc22_5.1: @F.%.loc22_5.4 (%.d76) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc22_5.3 (constants.%impl.elem0)]
+// CHECK:STDOUT:     %bound_method.loc22_5.1: <bound method> = bound_method %.loc22_5.1, %impl.elem0.loc22_5.1
+// CHECK:STDOUT:     %specific_impl_fn.loc22_5.1: <specific function> = specific_impl_function %impl.elem0.loc22_5.1, @Op.1(constants.%Destroy.facet) [symbolic = %specific_impl_fn.loc22_5.3 (constants.%specific_impl_fn)]
+// CHECK:STDOUT:     %bound_method.loc22_5.2: <bound method> = bound_method %.loc22_5.1, %specific_impl_fn.loc22_5.1
+// CHECK:STDOUT:     %addr.loc22_5.1: @F.%ptr (%ptr.955) = addr_of %.loc22_5.1
+// CHECK:STDOUT:     %.loc22_5.2: init %empty_tuple.type = call %bound_method.loc22_5.2(%addr.loc22_5.1)
+// CHECK:STDOUT:     %impl.elem0.loc22_5.2: @F.%.loc22_5.4 (%.d76) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc22_5.3 (constants.%impl.elem0)]
+// CHECK:STDOUT:     %bound_method.loc22_5.3: <bound method> = bound_method %s.var, %impl.elem0.loc22_5.2
+// CHECK:STDOUT:     %specific_impl_fn.loc22_5.2: <specific function> = specific_impl_function %impl.elem0.loc22_5.2, @Op.1(constants.%Destroy.facet) [symbolic = %specific_impl_fn.loc22_5.3 (constants.%specific_impl_fn)]
+// CHECK:STDOUT:     %bound_method.loc22_5.4: <bound method> = bound_method %s.var, %specific_impl_fn.loc22_5.2
+// CHECK:STDOUT:     %addr.loc22_5.2: @F.%ptr (%ptr.955) = addr_of %s.var
+// CHECK:STDOUT:     %.loc22_5.3: init %empty_tuple.type = call %bound_method.loc22_5.4(%addr.loc22_5.2)
+// CHECK:STDOUT:     %impl.elem0.loc21_5.1: @F.%.loc22_5.4 (%.d76) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc22_5.3 (constants.%impl.elem0)]
 // CHECK:STDOUT:     %bound_method.loc21_5.1: <bound method> = bound_method %.loc21_5.1, %impl.elem0.loc21_5.1
-// CHECK:STDOUT:     %specific_impl_fn.loc21_5.1: <specific function> = specific_impl_function %impl.elem0.loc21_5.1, @Op.1(constants.%Destroy.facet) [symbolic = %specific_impl_fn.loc21_5.3 (constants.%specific_impl_fn)]
+// CHECK:STDOUT:     %specific_impl_fn.loc21_5.1: <specific function> = specific_impl_function %impl.elem0.loc21_5.1, @Op.1(constants.%Destroy.facet) [symbolic = %specific_impl_fn.loc22_5.3 (constants.%specific_impl_fn)]
 // CHECK:STDOUT:     %bound_method.loc21_5.2: <bound method> = bound_method %.loc21_5.1, %specific_impl_fn.loc21_5.1
 // CHECK:STDOUT:     %addr.loc21_5.1: @F.%ptr (%ptr.955) = addr_of %.loc21_5.1
 // CHECK:STDOUT:     %.loc21_5.2: init %empty_tuple.type = call %bound_method.loc21_5.2(%addr.loc21_5.1)
-// CHECK:STDOUT:     %impl.elem0.loc21_5.2: @F.%.loc21_5.4 (%.d76) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc21_5.3 (constants.%impl.elem0)]
-// CHECK:STDOUT:     %bound_method.loc21_5.3: <bound method> = bound_method %s.var, %impl.elem0.loc21_5.2
-// CHECK:STDOUT:     %specific_impl_fn.loc21_5.2: <specific function> = specific_impl_function %impl.elem0.loc21_5.2, @Op.1(constants.%Destroy.facet) [symbolic = %specific_impl_fn.loc21_5.3 (constants.%specific_impl_fn)]
-// CHECK:STDOUT:     %bound_method.loc21_5.4: <bound method> = bound_method %s.var, %specific_impl_fn.loc21_5.2
-// CHECK:STDOUT:     %addr.loc21_5.2: @F.%ptr (%ptr.955) = addr_of %s.var
+// CHECK:STDOUT:     %impl.elem0.loc21_5.2: @F.%.loc22_5.4 (%.d76) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc22_5.3 (constants.%impl.elem0)]
+// CHECK:STDOUT:     %bound_method.loc21_5.3: <bound method> = bound_method %c.var, %impl.elem0.loc21_5.2
+// CHECK:STDOUT:     %specific_impl_fn.loc21_5.2: <specific function> = specific_impl_function %impl.elem0.loc21_5.2, @Op.1(constants.%Destroy.facet) [symbolic = %specific_impl_fn.loc22_5.3 (constants.%specific_impl_fn)]
+// CHECK:STDOUT:     %bound_method.loc21_5.4: <bound method> = bound_method %c.var, %specific_impl_fn.loc21_5.2
+// CHECK:STDOUT:     %addr.loc21_5.2: @F.%ptr (%ptr.955) = addr_of %c.var
 // CHECK:STDOUT:     %.loc21_5.3: init %empty_tuple.type = call %bound_method.loc21_5.4(%addr.loc21_5.2)
-// CHECK:STDOUT:     %impl.elem0.loc20_5.1: @F.%.loc21_5.4 (%.d76) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc21_5.3 (constants.%impl.elem0)]
-// CHECK:STDOUT:     %bound_method.loc20_5.1: <bound method> = bound_method %.loc20_5.1, %impl.elem0.loc20_5.1
-// CHECK:STDOUT:     %specific_impl_fn.loc20_5.1: <specific function> = specific_impl_function %impl.elem0.loc20_5.1, @Op.1(constants.%Destroy.facet) [symbolic = %specific_impl_fn.loc21_5.3 (constants.%specific_impl_fn)]
-// CHECK:STDOUT:     %bound_method.loc20_5.2: <bound method> = bound_method %.loc20_5.1, %specific_impl_fn.loc20_5.1
-// CHECK:STDOUT:     %addr.loc20_5.1: @F.%ptr (%ptr.955) = addr_of %.loc20_5.1
-// CHECK:STDOUT:     %.loc20_5.2: init %empty_tuple.type = call %bound_method.loc20_5.2(%addr.loc20_5.1)
-// CHECK:STDOUT:     %impl.elem0.loc20_5.2: @F.%.loc21_5.4 (%.d76) = impl_witness_access constants.%Destroy.lookup_impl_witness, element0 [symbolic = %impl.elem0.loc21_5.3 (constants.%impl.elem0)]
-// CHECK:STDOUT:     %bound_method.loc20_5.3: <bound method> = bound_method %c.var, %impl.elem0.loc20_5.2
-// CHECK:STDOUT:     %specific_impl_fn.loc20_5.2: <specific function> = specific_impl_function %impl.elem0.loc20_5.2, @Op.1(constants.%Destroy.facet) [symbolic = %specific_impl_fn.loc21_5.3 (constants.%specific_impl_fn)]
-// CHECK:STDOUT:     %bound_method.loc20_5.4: <bound method> = bound_method %c.var, %specific_impl_fn.loc20_5.2
-// CHECK:STDOUT:     %addr.loc20_5.2: @F.%ptr (%ptr.955) = addr_of %c.var
-// CHECK:STDOUT:     %.loc20_5.3: init %empty_tuple.type = call %bound_method.loc20_5.4(%addr.loc20_5.2)
 // CHECK:STDOUT:     return
 // CHECK:STDOUT:   }
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: specific @Class(constants.%T) {
-// CHECK:STDOUT:   %T.loc14_13.2 => constants.%T
+// CHECK:STDOUT:   %T.loc15_13.2 => constants.%T
 // CHECK:STDOUT:
 // CHECK:STDOUT: !definition:
 // CHECK:STDOUT:   %MakeSelf.type => constants.%MakeSelf.type
@@ -266,7 +267,7 @@ class Class(T:! type) {
 // CHECK:STDOUT:
 // CHECK:STDOUT: specific @MakeClass(constants.%T) {
 // CHECK:STDOUT:   %T => constants.%T
-// CHECK:STDOUT:   %Class.loc18_28.1 => constants.%Class
+// CHECK:STDOUT:   %Class.loc19_28.1 => constants.%Class
 // CHECK:STDOUT:   %pattern_type => constants.%pattern_type.3c1
 // CHECK:STDOUT:
 // CHECK:STDOUT: !definition:

+ 2 - 0
toolchain/check/testdata/facet/aggregate_through_access.carbon

@@ -2,6 +2,8 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
+//
 // AUTOUPDATE
 // TIP: To test this file alone, run:
 // TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/facet/aggregate_through_access.carbon

+ 1 - 0
toolchain/check/testdata/for/actual.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
 // AUTOUPDATE

+ 2 - 1
toolchain/check/testdata/function/call/fail_not_callable.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -67,7 +68,7 @@ fn Run() {
 // CHECK:STDOUT:   %x.var: ref %i32 = var %x.var_patt
 // CHECK:STDOUT:   %str: String = string_literal "hello" [concrete = constants.%str]
 // CHECK:STDOUT:   assign %x.var, <error>
-// CHECK:STDOUT:   %.loc19: type = splice_block %i32 [concrete = constants.%i32] {
+// CHECK:STDOUT:   %.loc20: type = splice_block %i32 [concrete = constants.%i32] {
 // CHECK:STDOUT:     %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
 // CHECK:STDOUT:     %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
 // CHECK:STDOUT:   }

+ 1 - 0
toolchain/check/testdata/generic/template/unimplemented.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //

+ 1 - 0
toolchain/check/testdata/impl/impl_assoc_const_with_prelude.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //

+ 2 - 1
toolchain/check/testdata/impl/lookup/transitive.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/convert.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -314,7 +315,7 @@ fn Call() {
 // CHECK:STDOUT:   %Main.import_ref.f50: type = import_ref Main//c, loc7_11, loaded [concrete = constants.%I.type]
 // CHECK:STDOUT:   %Main.import_ref.742: %F.type.5d6 = import_ref Main//c, loc7_34, loaded [concrete = constants.%F.a2e]
 // CHECK:STDOUT:   %I.impl_witness_table = impl_witness_table (%Main.import_ref.742), @I.impl [concrete]
-// CHECK:STDOUT:   %Core.Destroy: type = import_ref Core//prelude/destroy, Destroy, loaded [concrete = constants.%Destroy.type]
+// CHECK:STDOUT:   %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {

+ 26 - 24
toolchain/check/testdata/index/fail_invalid_base.carbon

@@ -5,6 +5,8 @@
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
+//
 // AUTOUPDATE
 // TIP: To test this file alone, run:
 // TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/index/fail_invalid_base.carbon
@@ -85,9 +87,9 @@ var d: i32 = {.a: i32, .b: i32}[0];
 // CHECK:STDOUT:     %a.var_patt: %pattern_type.7ce = var_pattern %a.patt [concrete]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %a.var: ref %i32 = var %a.var_patt [concrete]
-// CHECK:STDOUT:   %.loc19: type = splice_block %i32.loc19 [concrete = constants.%i32] {
-// CHECK:STDOUT:     %int_32.loc19: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
-// CHECK:STDOUT:     %i32.loc19: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
+// CHECK:STDOUT:   %.loc21: type = splice_block %i32.loc21 [concrete = constants.%i32] {
+// CHECK:STDOUT:     %int_32.loc21: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
+// CHECK:STDOUT:     %i32.loc21: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %a: ref %i32 = bind_name a, %a.var [concrete = %a.var]
 // CHECK:STDOUT:   %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {} {}
@@ -96,9 +98,9 @@ var d: i32 = {.a: i32, .b: i32}[0];
 // CHECK:STDOUT:     %b.var_patt: %pattern_type.7ce = var_pattern %b.patt [concrete]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %b.var: ref %i32 = var %b.var_patt [concrete]
-// CHECK:STDOUT:   %.loc26: type = splice_block %i32.loc26 [concrete = constants.%i32] {
-// CHECK:STDOUT:     %int_32.loc26: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
-// CHECK:STDOUT:     %i32.loc26: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
+// CHECK:STDOUT:   %.loc28: type = splice_block %i32.loc28 [concrete = constants.%i32] {
+// CHECK:STDOUT:     %int_32.loc28: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
+// CHECK:STDOUT:     %i32.loc28: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %b: ref %i32 = bind_name b, %b.var [concrete = %b.var]
 // CHECK:STDOUT:   name_binding_decl {
@@ -106,9 +108,9 @@ var d: i32 = {.a: i32, .b: i32}[0];
 // CHECK:STDOUT:     %c.var_patt: %pattern_type.7ce = var_pattern %c.patt [concrete]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %c.var: ref %i32 = var %c.var_patt [concrete]
-// CHECK:STDOUT:   %.loc32: type = splice_block %i32.loc32 [concrete = constants.%i32] {
-// CHECK:STDOUT:     %int_32.loc32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
-// CHECK:STDOUT:     %i32.loc32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
+// CHECK:STDOUT:   %.loc34: type = splice_block %i32.loc34 [concrete = constants.%i32] {
+// CHECK:STDOUT:     %int_32.loc34: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
+// CHECK:STDOUT:     %i32.loc34: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %c: ref %i32 = bind_name c, %c.var [concrete = %c.var]
 // CHECK:STDOUT:   name_binding_decl {
@@ -116,9 +118,9 @@ var d: i32 = {.a: i32, .b: i32}[0];
 // CHECK:STDOUT:     %d.var_patt: %pattern_type.7ce = var_pattern %d.patt [concrete]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %d.var: ref %i32 = var %d.var_patt [concrete]
-// CHECK:STDOUT:   %.loc38: type = splice_block %i32.loc38 [concrete = constants.%i32] {
-// CHECK:STDOUT:     %int_32.loc38: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
-// CHECK:STDOUT:     %i32.loc38: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
+// CHECK:STDOUT:   %.loc40: type = splice_block %i32.loc40 [concrete = constants.%i32] {
+// CHECK:STDOUT:     %int_32.loc40: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
+// CHECK:STDOUT:     %i32.loc40: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %d: ref %i32 = bind_name d, %d.var [concrete = %d.var]
 // CHECK:STDOUT: }
@@ -128,24 +130,24 @@ var d: i32 = {.a: i32, .b: i32}[0];
 // CHECK:STDOUT: fn @__global_init() {
 // CHECK:STDOUT: !entry:
 // CHECK:STDOUT:   %N.ref: <namespace> = name_ref N, file.%N [concrete = file.%N]
-// CHECK:STDOUT:   %int_0.loc19: Core.IntLiteral = int_value 0 [concrete = constants.%int_0]
+// CHECK:STDOUT:   %int_0.loc21: Core.IntLiteral = int_value 0 [concrete = constants.%int_0]
 // CHECK:STDOUT:   assign file.%a.var, <error>
 // CHECK:STDOUT:   %F.ref: %F.type = name_ref F, file.%F.decl [concrete = constants.%F]
-// CHECK:STDOUT:   %int_1.loc26: Core.IntLiteral = int_value 1 [concrete = constants.%int_1]
+// CHECK:STDOUT:   %int_1.loc28: Core.IntLiteral = int_value 1 [concrete = constants.%int_1]
 // CHECK:STDOUT:   assign file.%b.var, <error>
-// CHECK:STDOUT:   %int_1.loc32: Core.IntLiteral = int_value 1 [concrete = constants.%int_1]
+// CHECK:STDOUT:   %int_1.loc34: Core.IntLiteral = int_value 1 [concrete = constants.%int_1]
 // CHECK:STDOUT:   %int_2: Core.IntLiteral = int_value 2 [concrete = constants.%int_2]
-// CHECK:STDOUT:   %.loc32_29.1: %struct_type.a.b.cfd = struct_literal (%int_1.loc32, %int_2)
-// CHECK:STDOUT:   %int_0.loc32: Core.IntLiteral = int_value 0 [concrete = constants.%int_0]
-// CHECK:STDOUT:   %struct: %struct_type.a.b.cfd = struct_value (%int_1.loc32, %int_2) [concrete = constants.%struct]
-// CHECK:STDOUT:   %.loc32_29.2: %struct_type.a.b.cfd = converted %.loc32_29.1, %struct [concrete = constants.%struct]
+// CHECK:STDOUT:   %.loc34_29.1: %struct_type.a.b.cfd = struct_literal (%int_1.loc34, %int_2)
+// CHECK:STDOUT:   %int_0.loc34: Core.IntLiteral = int_value 0 [concrete = constants.%int_0]
+// CHECK:STDOUT:   %struct: %struct_type.a.b.cfd = struct_value (%int_1.loc34, %int_2) [concrete = constants.%struct]
+// CHECK:STDOUT:   %.loc34_29.2: %struct_type.a.b.cfd = converted %.loc34_29.1, %struct [concrete = constants.%struct]
 // CHECK:STDOUT:   assign file.%c.var, <error>
-// CHECK:STDOUT:   %int_32.loc38_19: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
-// CHECK:STDOUT:   %i32.loc38_19: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
-// CHECK:STDOUT:   %int_32.loc38_28: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
-// CHECK:STDOUT:   %i32.loc38_28: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
+// CHECK:STDOUT:   %int_32.loc40_19: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
+// CHECK:STDOUT:   %i32.loc40_19: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
+// CHECK:STDOUT:   %int_32.loc40_28: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
+// CHECK:STDOUT:   %i32.loc40_28: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
 // CHECK:STDOUT:   %struct_type.a.b: type = struct_type {.a: %i32, .b: %i32} [concrete = constants.%struct_type.a.b.501]
-// CHECK:STDOUT:   %int_0.loc38: Core.IntLiteral = int_value 0 [concrete = constants.%int_0]
+// CHECK:STDOUT:   %int_0.loc40: Core.IntLiteral = int_value 0 [concrete = constants.%int_0]
 // CHECK:STDOUT:   assign file.%d.var, <error>
 // CHECK:STDOUT:   return
 // CHECK:STDOUT: }

+ 1 - 0
toolchain/check/testdata/index/fail_non_tuple_access.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //

+ 1 - 0
toolchain/check/testdata/interop/cpp/fail_fuzzing.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/none.carbon
 // ARGS: --include-diagnostic-kind --fuzzing compile --no-prelude-import --dump-sem-ir-ranges=only --phase=check %s
 //
 // AUTOUPDATE

+ 2 - 0
toolchain/check/testdata/operators/builtin/bit_and.carbon

@@ -2,6 +2,8 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
+//
 // AUTOUPDATE
 // TIP: To test this file alone, run:
 // TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/operators/builtin/bit_and.carbon

+ 9 - 8
toolchain/check/testdata/operators/builtin/fail_type_mismatch.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/bool.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -49,9 +50,9 @@ fn Main() {
 // CHECK:STDOUT:     import Core//prelude
 // CHECK:STDOUT:     import Core//prelude/...
 // CHECK:STDOUT:   }
-// CHECK:STDOUT:   %Core.Bool: %Bool.type = import_ref Core//prelude/types/bool, Bool, loaded [concrete = constants.%Bool]
-// CHECK:STDOUT:   %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/operators/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic]
-// CHECK:STDOUT:   %Core.Destroy: type = import_ref Core//prelude/destroy, Destroy, loaded [concrete = constants.%Destroy.type]
+// CHECK:STDOUT:   %Core.Bool: %Bool.type = import_ref Core//prelude/parts/bool, Bool, loaded [concrete = constants.%Bool]
+// CHECK:STDOUT:   %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic]
+// CHECK:STDOUT:   %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
@@ -71,13 +72,13 @@ fn Main() {
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %x.var: ref bool = var %x.var_patt
 // CHECK:STDOUT:   %int_12: Core.IntLiteral = int_value 12 [concrete = constants.%int_12]
-// CHECK:STDOUT:   %.loc22_17.1: bool = converted %int_12, <error> [concrete = <error>]
-// CHECK:STDOUT:   %.loc22_17.2: <error> = not <error> [concrete = <error>]
+// CHECK:STDOUT:   %.loc23_17.1: bool = converted %int_12, <error> [concrete = <error>]
+// CHECK:STDOUT:   %.loc23_17.2: <error> = not <error> [concrete = <error>]
 // CHECK:STDOUT:   assign %x.var, <error>
-// CHECK:STDOUT:   %.loc22_10.1: type = splice_block %.loc22_10.3 [concrete = bool] {
+// CHECK:STDOUT:   %.loc23_10.1: type = splice_block %.loc23_10.3 [concrete = bool] {
 // CHECK:STDOUT:     %bool.make_type: init type = call constants.%Bool() [concrete = bool]
-// CHECK:STDOUT:     %.loc22_10.2: type = value_of_initializer %bool.make_type [concrete = bool]
-// CHECK:STDOUT:     %.loc22_10.3: type = converted %bool.make_type, %.loc22_10.2 [concrete = bool]
+// CHECK:STDOUT:     %.loc23_10.2: type = value_of_initializer %bool.make_type [concrete = bool]
+// CHECK:STDOUT:     %.loc23_10.3: type = converted %bool.make_type, %.loc23_10.2 [concrete = bool]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %x: ref bool = bind_name x, %x.var
 // CHECK:STDOUT:   %Op.bound: <bound method> = bound_method %x.var, constants.%Op.8b7

+ 2 - 1
toolchain/check/testdata/operators/builtin/fail_type_mismatch_once.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -68,7 +69,7 @@ fn Main() -> i32 {
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @Main() -> %i32 {
 // CHECK:STDOUT: !entry:
-// CHECK:STDOUT:   %.loc21: %empty_struct_type = struct_literal ()
+// CHECK:STDOUT:   %.loc22: %empty_struct_type = struct_literal ()
 // CHECK:STDOUT:   %float: f64 = float_literal 3.4000000000000004 [concrete = constants.%float]
 // CHECK:STDOUT:   %int_12: Core.IntLiteral = int_value 12 [concrete = constants.%int_12]
 // CHECK:STDOUT:   %impl.elem1: <error> = impl_witness_access <error>, element1 [concrete = <error>]

+ 2 - 1
toolchain/check/testdata/operators/builtin/fail_unimplemented_op.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -65,7 +66,7 @@ fn Main() -> i32 {
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @Main() -> %i32 {
 // CHECK:STDOUT: !entry:
-// CHECK:STDOUT:   %.loc19: %empty_struct_type = struct_literal ()
+// CHECK:STDOUT:   %.loc20: %empty_struct_type = struct_literal ()
 // CHECK:STDOUT:   %int_34: Core.IntLiteral = int_value 34 [concrete = constants.%int_34]
 // CHECK:STDOUT:   return <error>
 // CHECK:STDOUT: }

+ 143 - 142
toolchain/check/testdata/operators/builtin/or.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/bool.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -68,8 +69,8 @@ fn PartialConstant(x: bool) {
 // CHECK:STDOUT:     import Core//prelude
 // CHECK:STDOUT:     import Core//prelude/...
 // CHECK:STDOUT:   }
-// CHECK:STDOUT:   %Core.Bool: %Bool.type = import_ref Core//prelude/types/bool, Bool, loaded [concrete = constants.%Bool]
-// CHECK:STDOUT:   %Core.Destroy: type = import_ref Core//prelude/destroy, Destroy, loaded [concrete = constants.%Destroy.type]
+// CHECK:STDOUT:   %Core.Bool: %Bool.type = import_ref Core//prelude/parts/bool, Bool, loaded [concrete = constants.%Bool]
+// CHECK:STDOUT:   %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
@@ -87,8 +88,8 @@ fn PartialConstant(x: bool) {
 // CHECK:STDOUT:     %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param0 [concrete]
 // CHECK:STDOUT:   } {
 // CHECK:STDOUT:     %bool.make_type: init type = call constants.%Bool() [concrete = bool]
-// CHECK:STDOUT:     %.loc14_11.1: type = value_of_initializer %bool.make_type [concrete = bool]
-// CHECK:STDOUT:     %.loc14_11.2: type = converted %bool.make_type, %.loc14_11.1 [concrete = bool]
+// CHECK:STDOUT:     %.loc15_11.1: type = value_of_initializer %bool.make_type [concrete = bool]
+// CHECK:STDOUT:     %.loc15_11.2: type = converted %bool.make_type, %.loc15_11.1 [concrete = bool]
 // CHECK:STDOUT:     %return.param: ref bool = out_param call_param0
 // CHECK:STDOUT:     %return: ref bool = return_slot %return.param
 // CHECK:STDOUT:   }
@@ -97,8 +98,8 @@ fn PartialConstant(x: bool) {
 // CHECK:STDOUT:     %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param0 [concrete]
 // CHECK:STDOUT:   } {
 // CHECK:STDOUT:     %bool.make_type: init type = call constants.%Bool() [concrete = bool]
-// CHECK:STDOUT:     %.loc15_11.1: type = value_of_initializer %bool.make_type [concrete = bool]
-// CHECK:STDOUT:     %.loc15_11.2: type = converted %bool.make_type, %.loc15_11.1 [concrete = bool]
+// CHECK:STDOUT:     %.loc16_11.1: type = value_of_initializer %bool.make_type [concrete = bool]
+// CHECK:STDOUT:     %.loc16_11.2: type = converted %bool.make_type, %.loc16_11.1 [concrete = bool]
 // CHECK:STDOUT:     %return.param: ref bool = out_param call_param0
 // CHECK:STDOUT:     %return: ref bool = return_slot %return.param
 // CHECK:STDOUT:   }
@@ -107,8 +108,8 @@ fn PartialConstant(x: bool) {
 // CHECK:STDOUT:     %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param0 [concrete]
 // CHECK:STDOUT:   } {
 // CHECK:STDOUT:     %bool.make_type: init type = call constants.%Bool() [concrete = bool]
-// CHECK:STDOUT:     %.loc17_12.1: type = value_of_initializer %bool.make_type [concrete = bool]
-// CHECK:STDOUT:     %.loc17_12.2: type = converted %bool.make_type, %.loc17_12.1 [concrete = bool]
+// CHECK:STDOUT:     %.loc18_12.1: type = value_of_initializer %bool.make_type [concrete = bool]
+// CHECK:STDOUT:     %.loc18_12.2: type = converted %bool.make_type, %.loc18_12.1 [concrete = bool]
 // CHECK:STDOUT:     %return.param: ref bool = out_param call_param0
 // CHECK:STDOUT:     %return: ref bool = return_slot %return.param
 // CHECK:STDOUT:   }
@@ -118,10 +119,10 @@ fn PartialConstant(x: bool) {
 // CHECK:STDOUT:     %x.param_patt: %pattern_type.831 = value_param_pattern %x.patt, call_param0 [concrete]
 // CHECK:STDOUT:   } {
 // CHECK:STDOUT:     %x.param: bool = value_param call_param0
-// CHECK:STDOUT:     %.loc28_23.1: type = splice_block %.loc28_23.3 [concrete = bool] {
-// CHECK:STDOUT:       %bool.make_type.loc28: init type = call constants.%Bool() [concrete = bool]
-// CHECK:STDOUT:       %.loc28_23.2: type = value_of_initializer %bool.make_type.loc28 [concrete = bool]
-// CHECK:STDOUT:       %.loc28_23.3: type = converted %bool.make_type.loc28, %.loc28_23.2 [concrete = bool]
+// CHECK:STDOUT:     %.loc29_23.1: type = splice_block %.loc29_23.3 [concrete = bool] {
+// CHECK:STDOUT:       %bool.make_type.loc29: init type = call constants.%Bool() [concrete = bool]
+// CHECK:STDOUT:       %.loc29_23.2: type = value_of_initializer %bool.make_type.loc29 [concrete = bool]
+// CHECK:STDOUT:       %.loc29_23.3: type = converted %bool.make_type.loc29, %.loc29_23.2 [concrete = bool]
 // CHECK:STDOUT:     }
 // CHECK:STDOUT:     %x: bool = bind_name x, %x.param
 // CHECK:STDOUT:   }
@@ -143,22 +144,22 @@ fn PartialConstant(x: bool) {
 // CHECK:STDOUT: !entry:
 // CHECK:STDOUT:   %F.ref: %F.type = name_ref F, file.%F.decl [concrete = constants.%F]
 // CHECK:STDOUT:   %F.call: init bool = call %F.ref()
-// CHECK:STDOUT:   %.loc18_14.1: bool = value_of_initializer %F.call
-// CHECK:STDOUT:   %.loc18_14.2: bool = converted %F.call, %.loc18_14.1
-// CHECK:STDOUT:   %.loc18_14.3: bool = not %.loc18_14.2
+// CHECK:STDOUT:   %.loc19_14.1: bool = value_of_initializer %F.call
+// CHECK:STDOUT:   %.loc19_14.2: bool = converted %F.call, %.loc19_14.1
+// CHECK:STDOUT:   %.loc19_14.3: bool = not %.loc19_14.2
 // CHECK:STDOUT:   %true: bool = bool_literal true [concrete = constants.%true]
-// CHECK:STDOUT:   if %.loc18_14.3 br !or.rhs else br !or.result(%true)
+// CHECK:STDOUT:   if %.loc19_14.3 br !or.rhs else br !or.result(%true)
 // CHECK:STDOUT:
 // CHECK:STDOUT: !or.rhs:
 // CHECK:STDOUT:   %G.ref: %G.type = name_ref G, file.%G.decl [concrete = constants.%G]
 // CHECK:STDOUT:   %G.call: init bool = call %G.ref()
-// CHECK:STDOUT:   %.loc18_14.4: bool = value_of_initializer %G.call
-// CHECK:STDOUT:   %.loc18_14.5: bool = converted %G.call, %.loc18_14.4
-// CHECK:STDOUT:   br !or.result(%.loc18_14.5)
+// CHECK:STDOUT:   %.loc19_14.4: bool = value_of_initializer %G.call
+// CHECK:STDOUT:   %.loc19_14.5: bool = converted %G.call, %.loc19_14.4
+// CHECK:STDOUT:   br !or.result(%.loc19_14.5)
 // CHECK:STDOUT:
 // CHECK:STDOUT: !or.result:
-// CHECK:STDOUT:   %.loc18_14.6: bool = block_arg !or.result
-// CHECK:STDOUT:   return %.loc18_14.6
+// CHECK:STDOUT:   %.loc19_14.6: bool = block_arg !or.result
+// CHECK:STDOUT:   return %.loc19_14.6
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @Constant() {
@@ -168,48 +169,8 @@ fn PartialConstant(x: bool) {
 // CHECK:STDOUT:     %a.var_patt: %pattern_type.831 = var_pattern %a.patt [concrete]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %a.var: ref bool = var %a.var_patt
-// CHECK:STDOUT:   %true.loc22_46: bool = bool_literal true [concrete = constants.%true]
-// CHECK:STDOUT:   assign %a.var, %true.loc22_46
-// CHECK:STDOUT:   br !.loc22_13
-// CHECK:STDOUT:
-// CHECK:STDOUT: !.loc22_13:
-// CHECK:STDOUT:   %true.loc22_13: bool = bool_literal true [concrete = constants.%true]
-// CHECK:STDOUT:   %.loc22_18.1: bool = not %true.loc22_13 [concrete = constants.%false]
-// CHECK:STDOUT:   %true.loc22_18: bool = bool_literal true [concrete = constants.%true]
-// CHECK:STDOUT:   if %.loc22_18.1 br !or.rhs.loc22 else br !or.result.loc22(%true.loc22_18)
-// CHECK:STDOUT:
-// CHECK:STDOUT: !or.rhs.loc22:
-// CHECK:STDOUT:   %true.loc22_21: bool = bool_literal true [concrete = constants.%true]
-// CHECK:STDOUT:   br !or.result.loc22(%true.loc22_21)
-// CHECK:STDOUT:
-// CHECK:STDOUT: !or.result.loc22:
-// CHECK:STDOUT:   %.loc22_18.2: bool = block_arg !or.result.loc22 [concrete = constants.%true]
-// CHECK:STDOUT:   if %.loc22_18.2 br !if.expr.then.loc22 else br !if.expr.else.loc22
-// CHECK:STDOUT:
-// CHECK:STDOUT: !if.expr.then.loc22:
-// CHECK:STDOUT:   %bool.make_type.loc22: init type = call constants.%Bool() [concrete = bool]
-// CHECK:STDOUT:   %.loc22_31.1: type = value_of_initializer %bool.make_type.loc22 [concrete = bool]
-// CHECK:STDOUT:   %.loc22_31.2: type = converted %bool.make_type.loc22, %.loc22_31.1 [concrete = bool]
-// CHECK:STDOUT:   br !if.expr.result.loc22(%.loc22_31.2)
-// CHECK:STDOUT:
-// CHECK:STDOUT: !if.expr.else.loc22:
-// CHECK:STDOUT:   %.loc22_42: %empty_tuple.type = tuple_literal ()
-// CHECK:STDOUT:   %.loc22_36: type = converted %.loc22_42, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type]
-// CHECK:STDOUT:   br !if.expr.result.loc22(%.loc22_36)
-// CHECK:STDOUT:
-// CHECK:STDOUT: !if.expr.result.loc22:
-// CHECK:STDOUT:   %.loc22_10: type = block_arg !if.expr.result.loc22 [concrete = bool]
-// CHECK:STDOUT:   br !.loc22_7
-// CHECK:STDOUT:
-// CHECK:STDOUT: !.loc22_7:
-// CHECK:STDOUT:   %a: ref bool = bind_name a, %a.var
-// CHECK:STDOUT:   name_binding_decl {
-// CHECK:STDOUT:     %b.patt: %pattern_type.831 = binding_pattern b [concrete]
-// CHECK:STDOUT:     %b.var_patt: %pattern_type.831 = var_pattern %b.patt [concrete]
-// CHECK:STDOUT:   }
-// CHECK:STDOUT:   %b.var: ref bool = var %b.var_patt
-// CHECK:STDOUT:   %true.loc23_47: bool = bool_literal true [concrete = constants.%true]
-// CHECK:STDOUT:   assign %b.var, %true.loc23_47
+// CHECK:STDOUT:   %true.loc23_46: bool = bool_literal true [concrete = constants.%true]
+// CHECK:STDOUT:   assign %a.var, %true.loc23_46
 // CHECK:STDOUT:   br !.loc23_13
 // CHECK:STDOUT:
 // CHECK:STDOUT: !.loc23_13:
@@ -219,8 +180,8 @@ fn PartialConstant(x: bool) {
 // CHECK:STDOUT:   if %.loc23_18.1 br !or.rhs.loc23 else br !or.result.loc23(%true.loc23_18)
 // CHECK:STDOUT:
 // CHECK:STDOUT: !or.rhs.loc23:
-// CHECK:STDOUT:   %false.loc23: bool = bool_literal false [concrete = constants.%false]
-// CHECK:STDOUT:   br !or.result.loc23(%false.loc23)
+// CHECK:STDOUT:   %true.loc23_21: bool = bool_literal true [concrete = constants.%true]
+// CHECK:STDOUT:   br !or.result.loc23(%true.loc23_21)
 // CHECK:STDOUT:
 // CHECK:STDOUT: !or.result.loc23:
 // CHECK:STDOUT:   %.loc23_18.2: bool = block_arg !or.result.loc23 [concrete = constants.%true]
@@ -228,43 +189,43 @@ fn PartialConstant(x: bool) {
 // CHECK:STDOUT:
 // CHECK:STDOUT: !if.expr.then.loc23:
 // CHECK:STDOUT:   %bool.make_type.loc23: init type = call constants.%Bool() [concrete = bool]
-// CHECK:STDOUT:   %.loc23_32.1: type = value_of_initializer %bool.make_type.loc23 [concrete = bool]
-// CHECK:STDOUT:   %.loc23_32.2: type = converted %bool.make_type.loc23, %.loc23_32.1 [concrete = bool]
-// CHECK:STDOUT:   br !if.expr.result.loc23(%.loc23_32.2)
+// CHECK:STDOUT:   %.loc23_31.1: type = value_of_initializer %bool.make_type.loc23 [concrete = bool]
+// CHECK:STDOUT:   %.loc23_31.2: type = converted %bool.make_type.loc23, %.loc23_31.1 [concrete = bool]
+// CHECK:STDOUT:   br !if.expr.result.loc23(%.loc23_31.2)
 // CHECK:STDOUT:
 // CHECK:STDOUT: !if.expr.else.loc23:
-// CHECK:STDOUT:   %.loc23_43: %empty_tuple.type = tuple_literal ()
-// CHECK:STDOUT:   %.loc23_37: type = converted %.loc23_43, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type]
-// CHECK:STDOUT:   br !if.expr.result.loc23(%.loc23_37)
+// CHECK:STDOUT:   %.loc23_42: %empty_tuple.type = tuple_literal ()
+// CHECK:STDOUT:   %.loc23_36: type = converted %.loc23_42, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type]
+// CHECK:STDOUT:   br !if.expr.result.loc23(%.loc23_36)
 // CHECK:STDOUT:
 // CHECK:STDOUT: !if.expr.result.loc23:
 // CHECK:STDOUT:   %.loc23_10: type = block_arg !if.expr.result.loc23 [concrete = bool]
 // CHECK:STDOUT:   br !.loc23_7
 // CHECK:STDOUT:
 // CHECK:STDOUT: !.loc23_7:
-// CHECK:STDOUT:   %b: ref bool = bind_name b, %b.var
+// CHECK:STDOUT:   %a: ref bool = bind_name a, %a.var
 // CHECK:STDOUT:   name_binding_decl {
-// CHECK:STDOUT:     %c.patt: %pattern_type.831 = binding_pattern c [concrete]
-// CHECK:STDOUT:     %c.var_patt: %pattern_type.831 = var_pattern %c.patt [concrete]
+// CHECK:STDOUT:     %b.patt: %pattern_type.831 = binding_pattern b [concrete]
+// CHECK:STDOUT:     %b.var_patt: %pattern_type.831 = var_pattern %b.patt [concrete]
 // CHECK:STDOUT:   }
-// CHECK:STDOUT:   %c.var: ref bool = var %c.var_patt
+// CHECK:STDOUT:   %b.var: ref bool = var %b.var_patt
 // CHECK:STDOUT:   %true.loc24_47: bool = bool_literal true [concrete = constants.%true]
-// CHECK:STDOUT:   assign %c.var, %true.loc24_47
+// CHECK:STDOUT:   assign %b.var, %true.loc24_47
 // CHECK:STDOUT:   br !.loc24_13
 // CHECK:STDOUT:
 // CHECK:STDOUT: !.loc24_13:
-// CHECK:STDOUT:   %false.loc24: bool = bool_literal false [concrete = constants.%false]
-// CHECK:STDOUT:   %.loc24_19.1: bool = not %false.loc24 [concrete = constants.%true]
-// CHECK:STDOUT:   %true.loc24_19: bool = bool_literal true [concrete = constants.%true]
-// CHECK:STDOUT:   if %.loc24_19.1 br !or.rhs.loc24 else br !or.result.loc24(%true.loc24_19)
+// CHECK:STDOUT:   %true.loc24_13: bool = bool_literal true [concrete = constants.%true]
+// CHECK:STDOUT:   %.loc24_18.1: bool = not %true.loc24_13 [concrete = constants.%false]
+// CHECK:STDOUT:   %true.loc24_18: bool = bool_literal true [concrete = constants.%true]
+// CHECK:STDOUT:   if %.loc24_18.1 br !or.rhs.loc24 else br !or.result.loc24(%true.loc24_18)
 // CHECK:STDOUT:
 // CHECK:STDOUT: !or.rhs.loc24:
-// CHECK:STDOUT:   %true.loc24_22: bool = bool_literal true [concrete = constants.%true]
-// CHECK:STDOUT:   br !or.result.loc24(%true.loc24_22)
+// CHECK:STDOUT:   %false.loc24: bool = bool_literal false [concrete = constants.%false]
+// CHECK:STDOUT:   br !or.result.loc24(%false.loc24)
 // CHECK:STDOUT:
 // CHECK:STDOUT: !or.result.loc24:
-// CHECK:STDOUT:   %.loc24_19.2: bool = block_arg !or.result.loc24 [concrete = constants.%true]
-// CHECK:STDOUT:   if %.loc24_19.2 br !if.expr.then.loc24 else br !if.expr.else.loc24
+// CHECK:STDOUT:   %.loc24_18.2: bool = block_arg !or.result.loc24 [concrete = constants.%true]
+// CHECK:STDOUT:   if %.loc24_18.2 br !if.expr.then.loc24 else br !if.expr.else.loc24
 // CHECK:STDOUT:
 // CHECK:STDOUT: !if.expr.then.loc24:
 // CHECK:STDOUT:   %bool.make_type.loc24: init type = call constants.%Bool() [concrete = bool]
@@ -282,69 +243,109 @@ fn PartialConstant(x: bool) {
 // CHECK:STDOUT:   br !.loc24_7
 // CHECK:STDOUT:
 // CHECK:STDOUT: !.loc24_7:
-// CHECK:STDOUT:   %c: ref bool = bind_name c, %c.var
+// CHECK:STDOUT:   %b: ref bool = bind_name b, %b.var
 // CHECK:STDOUT:   name_binding_decl {
-// CHECK:STDOUT:     %d.patt: %pattern_type.cb1 = binding_pattern d [concrete]
-// CHECK:STDOUT:     %d.var_patt: %pattern_type.cb1 = var_pattern %d.patt [concrete]
+// CHECK:STDOUT:     %c.patt: %pattern_type.831 = binding_pattern c [concrete]
+// CHECK:STDOUT:     %c.var_patt: %pattern_type.831 = var_pattern %c.patt [concrete]
 // CHECK:STDOUT:   }
-// CHECK:STDOUT:   %d.var: ref %empty_tuple.type = var %d.var_patt
-// CHECK:STDOUT:   %.loc25_49.1: %empty_tuple.type = tuple_literal ()
-// CHECK:STDOUT:   %.loc25_49.2: init %empty_tuple.type = tuple_init () to %d.var [concrete = constants.%empty_tuple]
-// CHECK:STDOUT:   %.loc25_3: init %empty_tuple.type = converted %.loc25_49.1, %.loc25_49.2 [concrete = constants.%empty_tuple]
-// CHECK:STDOUT:   assign %d.var, %.loc25_3
+// CHECK:STDOUT:   %c.var: ref bool = var %c.var_patt
+// CHECK:STDOUT:   %true.loc25_47: bool = bool_literal true [concrete = constants.%true]
+// CHECK:STDOUT:   assign %c.var, %true.loc25_47
 // CHECK:STDOUT:   br !.loc25_13
 // CHECK:STDOUT:
 // CHECK:STDOUT: !.loc25_13:
-// CHECK:STDOUT:   %false.loc25_13: bool = bool_literal false [concrete = constants.%false]
-// CHECK:STDOUT:   %.loc25_19.1: bool = not %false.loc25_13 [concrete = constants.%true]
-// CHECK:STDOUT:   %true.loc25: bool = bool_literal true [concrete = constants.%true]
-// CHECK:STDOUT:   if %.loc25_19.1 br !or.rhs.loc25 else br !or.result.loc25(%true.loc25)
+// CHECK:STDOUT:   %false.loc25: bool = bool_literal false [concrete = constants.%false]
+// CHECK:STDOUT:   %.loc25_19.1: bool = not %false.loc25 [concrete = constants.%true]
+// CHECK:STDOUT:   %true.loc25_19: bool = bool_literal true [concrete = constants.%true]
+// CHECK:STDOUT:   if %.loc25_19.1 br !or.rhs.loc25 else br !or.result.loc25(%true.loc25_19)
 // CHECK:STDOUT:
 // CHECK:STDOUT: !or.rhs.loc25:
-// CHECK:STDOUT:   %false.loc25_22: bool = bool_literal false [concrete = constants.%false]
-// CHECK:STDOUT:   br !or.result.loc25(%false.loc25_22)
+// CHECK:STDOUT:   %true.loc25_22: bool = bool_literal true [concrete = constants.%true]
+// CHECK:STDOUT:   br !or.result.loc25(%true.loc25_22)
 // CHECK:STDOUT:
 // CHECK:STDOUT: !or.result.loc25:
-// CHECK:STDOUT:   %.loc25_19.2: bool = block_arg !or.result.loc25 [concrete = constants.%false]
+// CHECK:STDOUT:   %.loc25_19.2: bool = block_arg !or.result.loc25 [concrete = constants.%true]
 // CHECK:STDOUT:   if %.loc25_19.2 br !if.expr.then.loc25 else br !if.expr.else.loc25
 // CHECK:STDOUT:
 // CHECK:STDOUT: !if.expr.then.loc25:
 // CHECK:STDOUT:   %bool.make_type.loc25: init type = call constants.%Bool() [concrete = bool]
-// CHECK:STDOUT:   %.loc25_33.1: type = value_of_initializer %bool.make_type.loc25 [concrete = bool]
-// CHECK:STDOUT:   %.loc25_33.2: type = converted %bool.make_type.loc25, %.loc25_33.1 [concrete = bool]
-// CHECK:STDOUT:   br !if.expr.result.loc25(%.loc25_33.2)
+// CHECK:STDOUT:   %.loc25_32.1: type = value_of_initializer %bool.make_type.loc25 [concrete = bool]
+// CHECK:STDOUT:   %.loc25_32.2: type = converted %bool.make_type.loc25, %.loc25_32.1 [concrete = bool]
+// CHECK:STDOUT:   br !if.expr.result.loc25(%.loc25_32.2)
 // CHECK:STDOUT:
 // CHECK:STDOUT: !if.expr.else.loc25:
-// CHECK:STDOUT:   %.loc25_44: %empty_tuple.type = tuple_literal ()
-// CHECK:STDOUT:   %.loc25_38: type = converted %.loc25_44, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type]
-// CHECK:STDOUT:   br !if.expr.result.loc25(%.loc25_38)
+// CHECK:STDOUT:   %.loc25_43: %empty_tuple.type = tuple_literal ()
+// CHECK:STDOUT:   %.loc25_37: type = converted %.loc25_43, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type]
+// CHECK:STDOUT:   br !if.expr.result.loc25(%.loc25_37)
 // CHECK:STDOUT:
 // CHECK:STDOUT: !if.expr.result.loc25:
-// CHECK:STDOUT:   %.loc25_10: type = block_arg !if.expr.result.loc25 [concrete = constants.%empty_tuple.type]
+// CHECK:STDOUT:   %.loc25_10: type = block_arg !if.expr.result.loc25 [concrete = bool]
 // CHECK:STDOUT:   br !.loc25_7
 // CHECK:STDOUT:
 // CHECK:STDOUT: !.loc25_7:
+// CHECK:STDOUT:   %c: ref bool = bind_name c, %c.var
+// CHECK:STDOUT:   name_binding_decl {
+// CHECK:STDOUT:     %d.patt: %pattern_type.cb1 = binding_pattern d [concrete]
+// CHECK:STDOUT:     %d.var_patt: %pattern_type.cb1 = var_pattern %d.patt [concrete]
+// CHECK:STDOUT:   }
+// CHECK:STDOUT:   %d.var: ref %empty_tuple.type = var %d.var_patt
+// CHECK:STDOUT:   %.loc26_49.1: %empty_tuple.type = tuple_literal ()
+// CHECK:STDOUT:   %.loc26_49.2: init %empty_tuple.type = tuple_init () to %d.var [concrete = constants.%empty_tuple]
+// CHECK:STDOUT:   %.loc26_3: init %empty_tuple.type = converted %.loc26_49.1, %.loc26_49.2 [concrete = constants.%empty_tuple]
+// CHECK:STDOUT:   assign %d.var, %.loc26_3
+// CHECK:STDOUT:   br !.loc26_13
+// CHECK:STDOUT:
+// CHECK:STDOUT: !.loc26_13:
+// CHECK:STDOUT:   %false.loc26_13: bool = bool_literal false [concrete = constants.%false]
+// CHECK:STDOUT:   %.loc26_19.1: bool = not %false.loc26_13 [concrete = constants.%true]
+// CHECK:STDOUT:   %true.loc26: bool = bool_literal true [concrete = constants.%true]
+// CHECK:STDOUT:   if %.loc26_19.1 br !or.rhs.loc26 else br !or.result.loc26(%true.loc26)
+// CHECK:STDOUT:
+// CHECK:STDOUT: !or.rhs.loc26:
+// CHECK:STDOUT:   %false.loc26_22: bool = bool_literal false [concrete = constants.%false]
+// CHECK:STDOUT:   br !or.result.loc26(%false.loc26_22)
+// CHECK:STDOUT:
+// CHECK:STDOUT: !or.result.loc26:
+// CHECK:STDOUT:   %.loc26_19.2: bool = block_arg !or.result.loc26 [concrete = constants.%false]
+// CHECK:STDOUT:   if %.loc26_19.2 br !if.expr.then.loc26 else br !if.expr.else.loc26
+// CHECK:STDOUT:
+// CHECK:STDOUT: !if.expr.then.loc26:
+// CHECK:STDOUT:   %bool.make_type.loc26: init type = call constants.%Bool() [concrete = bool]
+// CHECK:STDOUT:   %.loc26_33.1: type = value_of_initializer %bool.make_type.loc26 [concrete = bool]
+// CHECK:STDOUT:   %.loc26_33.2: type = converted %bool.make_type.loc26, %.loc26_33.1 [concrete = bool]
+// CHECK:STDOUT:   br !if.expr.result.loc26(%.loc26_33.2)
+// CHECK:STDOUT:
+// CHECK:STDOUT: !if.expr.else.loc26:
+// CHECK:STDOUT:   %.loc26_44: %empty_tuple.type = tuple_literal ()
+// CHECK:STDOUT:   %.loc26_38: type = converted %.loc26_44, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type]
+// CHECK:STDOUT:   br !if.expr.result.loc26(%.loc26_38)
+// CHECK:STDOUT:
+// CHECK:STDOUT: !if.expr.result.loc26:
+// CHECK:STDOUT:   %.loc26_10: type = block_arg !if.expr.result.loc26 [concrete = constants.%empty_tuple.type]
+// CHECK:STDOUT:   br !.loc26_7
+// CHECK:STDOUT:
+// CHECK:STDOUT: !.loc26_7:
 // CHECK:STDOUT:   %d: ref %empty_tuple.type = bind_name d, %d.var
-// CHECK:STDOUT:   %Op.bound.loc25: <bound method> = bound_method %d.var, constants.%Op.ea3
+// CHECK:STDOUT:   %Op.bound.loc26: <bound method> = bound_method %d.var, constants.%Op.ea3
 // CHECK:STDOUT:   %Op.specific_fn.1: <specific function> = specific_function constants.%Op.ea3, @Op.2(constants.%empty_tuple.type) [concrete = constants.%Op.specific_fn.393]
-// CHECK:STDOUT:   %bound_method.loc25: <bound method> = bound_method %d.var, %Op.specific_fn.1
-// CHECK:STDOUT:   %addr.loc25: %ptr.843 = addr_of %d.var
-// CHECK:STDOUT:   %no_op.loc25: init %empty_tuple.type = call %bound_method.loc25(%addr.loc25)
-// CHECK:STDOUT:   %Op.bound.loc24: <bound method> = bound_method %c.var, constants.%Op.8b7
+// CHECK:STDOUT:   %bound_method.loc26: <bound method> = bound_method %d.var, %Op.specific_fn.1
+// CHECK:STDOUT:   %addr.loc26: %ptr.843 = addr_of %d.var
+// CHECK:STDOUT:   %no_op.loc26: init %empty_tuple.type = call %bound_method.loc26(%addr.loc26)
+// CHECK:STDOUT:   %Op.bound.loc25: <bound method> = bound_method %c.var, constants.%Op.8b7
 // CHECK:STDOUT:   %Op.specific_fn.2: <specific function> = specific_function constants.%Op.8b7, @Op.2(bool) [concrete = constants.%Op.specific_fn.c3f]
-// CHECK:STDOUT:   %bound_method.loc24: <bound method> = bound_method %c.var, %Op.specific_fn.2
-// CHECK:STDOUT:   %addr.loc24: %ptr.bb2 = addr_of %c.var
-// CHECK:STDOUT:   %no_op.loc24: init %empty_tuple.type = call %bound_method.loc24(%addr.loc24)
-// CHECK:STDOUT:   %Op.bound.loc23: <bound method> = bound_method %b.var, constants.%Op.8b7
+// CHECK:STDOUT:   %bound_method.loc25: <bound method> = bound_method %c.var, %Op.specific_fn.2
+// CHECK:STDOUT:   %addr.loc25: %ptr.bb2 = addr_of %c.var
+// CHECK:STDOUT:   %no_op.loc25: init %empty_tuple.type = call %bound_method.loc25(%addr.loc25)
+// CHECK:STDOUT:   %Op.bound.loc24: <bound method> = bound_method %b.var, constants.%Op.8b7
 // CHECK:STDOUT:   %Op.specific_fn.3: <specific function> = specific_function constants.%Op.8b7, @Op.2(bool) [concrete = constants.%Op.specific_fn.c3f]
-// CHECK:STDOUT:   %bound_method.loc23: <bound method> = bound_method %b.var, %Op.specific_fn.3
-// CHECK:STDOUT:   %addr.loc23: %ptr.bb2 = addr_of %b.var
-// CHECK:STDOUT:   %no_op.loc23: init %empty_tuple.type = call %bound_method.loc23(%addr.loc23)
-// CHECK:STDOUT:   %Op.bound.loc22: <bound method> = bound_method %a.var, constants.%Op.8b7
+// CHECK:STDOUT:   %bound_method.loc24: <bound method> = bound_method %b.var, %Op.specific_fn.3
+// CHECK:STDOUT:   %addr.loc24: %ptr.bb2 = addr_of %b.var
+// CHECK:STDOUT:   %no_op.loc24: init %empty_tuple.type = call %bound_method.loc24(%addr.loc24)
+// CHECK:STDOUT:   %Op.bound.loc23: <bound method> = bound_method %a.var, constants.%Op.8b7
 // CHECK:STDOUT:   %Op.specific_fn.4: <specific function> = specific_function constants.%Op.8b7, @Op.2(bool) [concrete = constants.%Op.specific_fn.c3f]
-// CHECK:STDOUT:   %bound_method.loc22: <bound method> = bound_method %a.var, %Op.specific_fn.4
-// CHECK:STDOUT:   %addr.loc22: %ptr.bb2 = addr_of %a.var
-// CHECK:STDOUT:   %no_op.loc22: init %empty_tuple.type = call %bound_method.loc22(%addr.loc22)
+// CHECK:STDOUT:   %bound_method.loc23: <bound method> = bound_method %a.var, %Op.specific_fn.4
+// CHECK:STDOUT:   %addr.loc23: %ptr.bb2 = addr_of %a.var
+// CHECK:STDOUT:   %no_op.loc23: init %empty_tuple.type = call %bound_method.loc23(%addr.loc23)
 // CHECK:STDOUT:   return
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
@@ -355,40 +356,40 @@ fn PartialConstant(x: bool) {
 // CHECK:STDOUT:     %a.var_patt: %pattern_type.831 = var_pattern %a.patt [concrete]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %a.var: ref bool = var %a.var_patt
-// CHECK:STDOUT:   %true.loc29_43: bool = bool_literal true [concrete = constants.%true]
-// CHECK:STDOUT:   assign %a.var, %true.loc29_43
-// CHECK:STDOUT:   br !.loc29_13
+// CHECK:STDOUT:   %true.loc30_43: bool = bool_literal true [concrete = constants.%true]
+// CHECK:STDOUT:   assign %a.var, %true.loc30_43
+// CHECK:STDOUT:   br !.loc30_13
 // CHECK:STDOUT:
-// CHECK:STDOUT: !.loc29_13:
-// CHECK:STDOUT:   %true.loc29_13: bool = bool_literal true [concrete = constants.%true]
-// CHECK:STDOUT:   %.loc29_18.1: bool = not %true.loc29_13 [concrete = constants.%false]
-// CHECK:STDOUT:   %true.loc29_18: bool = bool_literal true [concrete = constants.%true]
-// CHECK:STDOUT:   if %.loc29_18.1 br !or.rhs else br !or.result(%true.loc29_18)
+// CHECK:STDOUT: !.loc30_13:
+// CHECK:STDOUT:   %true.loc30_13: bool = bool_literal true [concrete = constants.%true]
+// CHECK:STDOUT:   %.loc30_18.1: bool = not %true.loc30_13 [concrete = constants.%false]
+// CHECK:STDOUT:   %true.loc30_18: bool = bool_literal true [concrete = constants.%true]
+// CHECK:STDOUT:   if %.loc30_18.1 br !or.rhs else br !or.result(%true.loc30_18)
 // CHECK:STDOUT:
 // CHECK:STDOUT: !or.rhs:
 // CHECK:STDOUT:   %x.ref: bool = name_ref x, %x
 // CHECK:STDOUT:   br !or.result(%x.ref)
 // CHECK:STDOUT:
 // CHECK:STDOUT: !or.result:
-// CHECK:STDOUT:   %.loc29_18.2: bool = block_arg !or.result [concrete = constants.%true]
-// CHECK:STDOUT:   if %.loc29_18.2 br !if.expr.then else br !if.expr.else
+// CHECK:STDOUT:   %.loc30_18.2: bool = block_arg !or.result [concrete = constants.%true]
+// CHECK:STDOUT:   if %.loc30_18.2 br !if.expr.then else br !if.expr.else
 // CHECK:STDOUT:
 // CHECK:STDOUT: !if.expr.then:
-// CHECK:STDOUT:   %bool.make_type.loc29: init type = call constants.%Bool() [concrete = bool]
-// CHECK:STDOUT:   %.loc29_28.1: type = value_of_initializer %bool.make_type.loc29 [concrete = bool]
-// CHECK:STDOUT:   %.loc29_28.2: type = converted %bool.make_type.loc29, %.loc29_28.1 [concrete = bool]
-// CHECK:STDOUT:   br !if.expr.result(%.loc29_28.2)
+// CHECK:STDOUT:   %bool.make_type.loc30: init type = call constants.%Bool() [concrete = bool]
+// CHECK:STDOUT:   %.loc30_28.1: type = value_of_initializer %bool.make_type.loc30 [concrete = bool]
+// CHECK:STDOUT:   %.loc30_28.2: type = converted %bool.make_type.loc30, %.loc30_28.1 [concrete = bool]
+// CHECK:STDOUT:   br !if.expr.result(%.loc30_28.2)
 // CHECK:STDOUT:
 // CHECK:STDOUT: !if.expr.else:
-// CHECK:STDOUT:   %.loc29_39: %empty_tuple.type = tuple_literal ()
-// CHECK:STDOUT:   %.loc29_33: type = converted %.loc29_39, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type]
-// CHECK:STDOUT:   br !if.expr.result(%.loc29_33)
+// CHECK:STDOUT:   %.loc30_39: %empty_tuple.type = tuple_literal ()
+// CHECK:STDOUT:   %.loc30_33: type = converted %.loc30_39, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type]
+// CHECK:STDOUT:   br !if.expr.result(%.loc30_33)
 // CHECK:STDOUT:
 // CHECK:STDOUT: !if.expr.result:
-// CHECK:STDOUT:   %.loc29_10: type = block_arg !if.expr.result [concrete = bool]
-// CHECK:STDOUT:   br !.loc29_7
+// CHECK:STDOUT:   %.loc30_10: type = block_arg !if.expr.result [concrete = bool]
+// CHECK:STDOUT:   br !.loc30_7
 // CHECK:STDOUT:
-// CHECK:STDOUT: !.loc29_7:
+// CHECK:STDOUT: !.loc30_7:
 // CHECK:STDOUT:   %a: ref bool = bind_name a, %a.var
 // CHECK:STDOUT:   %Op.bound: <bound method> = bound_method %a.var, constants.%Op.8b7
 // CHECK:STDOUT:   %Op.specific_fn: <specific function> = specific_function constants.%Op.8b7, @Op.2(bool) [concrete = constants.%Op.specific_fn.c3f]

+ 76 - 75
toolchain/check/testdata/operators/builtin/unary_op.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/bool.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -56,8 +57,8 @@ fn Constant() {
 // CHECK:STDOUT:     import Core//prelude
 // CHECK:STDOUT:     import Core//prelude/...
 // CHECK:STDOUT:   }
-// CHECK:STDOUT:   %Core.Bool: %Bool.type = import_ref Core//prelude/types/bool, Bool, loaded [concrete = constants.%Bool]
-// CHECK:STDOUT:   %Core.Destroy: type = import_ref Core//prelude/destroy, Destroy, loaded [concrete = constants.%Destroy.type]
+// CHECK:STDOUT:   %Core.Bool: %Bool.type = import_ref Core//prelude/parts/bool, Bool, loaded [concrete = constants.%Bool]
+// CHECK:STDOUT:   %Core.Destroy: type = import_ref Core//prelude/parts/destroy, Destroy, loaded [concrete = constants.%Destroy.type]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
@@ -75,14 +76,14 @@ fn Constant() {
 // CHECK:STDOUT:     %return.patt: %pattern_type.831 = return_slot_pattern [concrete]
 // CHECK:STDOUT:     %return.param_patt: %pattern_type.831 = out_param_pattern %return.patt, call_param1 [concrete]
 // CHECK:STDOUT:   } {
-// CHECK:STDOUT:     %bool.make_type.loc14_20: init type = call constants.%Bool() [concrete = bool]
-// CHECK:STDOUT:     %.loc14_20.1: type = value_of_initializer %bool.make_type.loc14_20 [concrete = bool]
-// CHECK:STDOUT:     %.loc14_20.2: type = converted %bool.make_type.loc14_20, %.loc14_20.1 [concrete = bool]
+// CHECK:STDOUT:     %bool.make_type.loc15_20: init type = call constants.%Bool() [concrete = bool]
+// CHECK:STDOUT:     %.loc15_20.1: type = value_of_initializer %bool.make_type.loc15_20 [concrete = bool]
+// CHECK:STDOUT:     %.loc15_20.2: type = converted %bool.make_type.loc15_20, %.loc15_20.1 [concrete = bool]
 // CHECK:STDOUT:     %b.param: bool = value_param call_param0
-// CHECK:STDOUT:     %.loc14_11.1: type = splice_block %.loc14_11.3 [concrete = bool] {
-// CHECK:STDOUT:       %bool.make_type.loc14_11: init type = call constants.%Bool() [concrete = bool]
-// CHECK:STDOUT:       %.loc14_11.2: type = value_of_initializer %bool.make_type.loc14_11 [concrete = bool]
-// CHECK:STDOUT:       %.loc14_11.3: type = converted %bool.make_type.loc14_11, %.loc14_11.2 [concrete = bool]
+// CHECK:STDOUT:     %.loc15_11.1: type = splice_block %.loc15_11.3 [concrete = bool] {
+// CHECK:STDOUT:       %bool.make_type.loc15_11: init type = call constants.%Bool() [concrete = bool]
+// CHECK:STDOUT:       %.loc15_11.2: type = value_of_initializer %bool.make_type.loc15_11 [concrete = bool]
+// CHECK:STDOUT:       %.loc15_11.3: type = converted %bool.make_type.loc15_11, %.loc15_11.2 [concrete = bool]
 // CHECK:STDOUT:     }
 // CHECK:STDOUT:     %b: bool = bind_name b, %b.param
 // CHECK:STDOUT:     %return.param: ref bool = out_param call_param1
@@ -91,29 +92,29 @@ fn Constant() {
 // CHECK:STDOUT:   name_binding_decl {
 // CHECK:STDOUT:     %not_true.patt: %pattern_type.831 = binding_pattern not_true [concrete]
 // CHECK:STDOUT:   }
-// CHECK:STDOUT:   %.loc18_15.1: type = splice_block %.loc18_15.3 [concrete = bool] {
-// CHECK:STDOUT:     %bool.make_type.loc18: init type = call constants.%Bool() [concrete = bool]
-// CHECK:STDOUT:     %.loc18_15.2: type = value_of_initializer %bool.make_type.loc18 [concrete = bool]
-// CHECK:STDOUT:     %.loc18_15.3: type = converted %bool.make_type.loc18, %.loc18_15.2 [concrete = bool]
+// CHECK:STDOUT:   %.loc19_15.1: type = splice_block %.loc19_15.3 [concrete = bool] {
+// CHECK:STDOUT:     %bool.make_type.loc19: init type = call constants.%Bool() [concrete = bool]
+// CHECK:STDOUT:     %.loc19_15.2: type = value_of_initializer %bool.make_type.loc19 [concrete = bool]
+// CHECK:STDOUT:     %.loc19_15.3: type = converted %bool.make_type.loc19, %.loc19_15.2 [concrete = bool]
 // CHECK:STDOUT:   }
-// CHECK:STDOUT:   %not_true: bool = bind_name not_true, @__global_init.%.loc18
+// CHECK:STDOUT:   %not_true: bool = bind_name not_true, @__global_init.%.loc19
 // CHECK:STDOUT:   name_binding_decl {
 // CHECK:STDOUT:     %not_false.patt: %pattern_type.831 = binding_pattern not_false [concrete]
 // CHECK:STDOUT:   }
-// CHECK:STDOUT:   %.loc19_16.1: type = splice_block %.loc19_16.3 [concrete = bool] {
-// CHECK:STDOUT:     %bool.make_type.loc19: init type = call constants.%Bool() [concrete = bool]
-// CHECK:STDOUT:     %.loc19_16.2: type = value_of_initializer %bool.make_type.loc19 [concrete = bool]
-// CHECK:STDOUT:     %.loc19_16.3: type = converted %bool.make_type.loc19, %.loc19_16.2 [concrete = bool]
+// CHECK:STDOUT:   %.loc20_16.1: type = splice_block %.loc20_16.3 [concrete = bool] {
+// CHECK:STDOUT:     %bool.make_type.loc20: init type = call constants.%Bool() [concrete = bool]
+// CHECK:STDOUT:     %.loc20_16.2: type = value_of_initializer %bool.make_type.loc20 [concrete = bool]
+// CHECK:STDOUT:     %.loc20_16.3: type = converted %bool.make_type.loc20, %.loc20_16.2 [concrete = bool]
 // CHECK:STDOUT:   }
-// CHECK:STDOUT:   %not_false: bool = bind_name not_false, @__global_init.%.loc19
+// CHECK:STDOUT:   %not_false: bool = bind_name not_false, @__global_init.%.loc20
 // CHECK:STDOUT:   %Constant.decl: %Constant.type = fn_decl @Constant [concrete = constants.%Constant] {} {}
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @Not(%b.param: bool) -> bool {
 // CHECK:STDOUT: !entry:
 // CHECK:STDOUT:   %b.ref: bool = name_ref b, %b
-// CHECK:STDOUT:   %.loc15: bool = not %b.ref
-// CHECK:STDOUT:   return %.loc15
+// CHECK:STDOUT:   %.loc16: bool = not %b.ref
+// CHECK:STDOUT:   return %.loc16
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @Constant() {
@@ -123,84 +124,84 @@ fn Constant() {
 // CHECK:STDOUT:     %a.var_patt: %pattern_type.cb1 = var_pattern %a.patt [concrete]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %a.var: ref %empty_tuple.type = var %a.var_patt
-// CHECK:STDOUT:   %.loc22_43.1: %empty_tuple.type = tuple_literal ()
-// CHECK:STDOUT:   %.loc22_43.2: init %empty_tuple.type = tuple_init () to %a.var [concrete = constants.%empty_tuple]
-// CHECK:STDOUT:   %.loc22_3: init %empty_tuple.type = converted %.loc22_43.1, %.loc22_43.2 [concrete = constants.%empty_tuple]
-// CHECK:STDOUT:   assign %a.var, %.loc22_3
-// CHECK:STDOUT:   br !.loc22_17
-// CHECK:STDOUT:
-// CHECK:STDOUT: !.loc22_17:
-// CHECK:STDOUT:   %true.loc22: bool = bool_literal true [concrete = constants.%true]
-// CHECK:STDOUT:   %.loc22_13: bool = not %true.loc22 [concrete = constants.%false]
-// CHECK:STDOUT:   if %.loc22_13 br !if.expr.then.loc22 else br !if.expr.else.loc22
-// CHECK:STDOUT:
-// CHECK:STDOUT: !if.expr.then.loc22:
-// CHECK:STDOUT:   %bool.make_type.loc22: init type = call constants.%Bool() [concrete = bool]
-// CHECK:STDOUT:   %.loc22_27.1: type = value_of_initializer %bool.make_type.loc22 [concrete = bool]
-// CHECK:STDOUT:   %.loc22_27.2: type = converted %bool.make_type.loc22, %.loc22_27.1 [concrete = bool]
-// CHECK:STDOUT:   br !if.expr.result.loc22(%.loc22_27.2)
-// CHECK:STDOUT:
-// CHECK:STDOUT: !if.expr.else.loc22:
-// CHECK:STDOUT:   %.loc22_38: %empty_tuple.type = tuple_literal ()
-// CHECK:STDOUT:   %.loc22_32: type = converted %.loc22_38, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type]
-// CHECK:STDOUT:   br !if.expr.result.loc22(%.loc22_32)
-// CHECK:STDOUT:
-// CHECK:STDOUT: !if.expr.result.loc22:
-// CHECK:STDOUT:   %.loc22_10: type = block_arg !if.expr.result.loc22 [concrete = constants.%empty_tuple.type]
-// CHECK:STDOUT:   br !.loc22_7
-// CHECK:STDOUT:
-// CHECK:STDOUT: !.loc22_7:
-// CHECK:STDOUT:   %a: ref %empty_tuple.type = bind_name a, %a.var
-// CHECK:STDOUT:   name_binding_decl {
-// CHECK:STDOUT:     %b.patt: %pattern_type.831 = binding_pattern b [concrete]
-// CHECK:STDOUT:     %b.var_patt: %pattern_type.831 = var_pattern %b.patt [concrete]
-// CHECK:STDOUT:   }
-// CHECK:STDOUT:   %b.var: ref bool = var %b.var_patt
-// CHECK:STDOUT:   %true.loc23: bool = bool_literal true [concrete = constants.%true]
-// CHECK:STDOUT:   assign %b.var, %true.loc23
+// CHECK:STDOUT:   %.loc23_43.1: %empty_tuple.type = tuple_literal ()
+// CHECK:STDOUT:   %.loc23_43.2: init %empty_tuple.type = tuple_init () to %a.var [concrete = constants.%empty_tuple]
+// CHECK:STDOUT:   %.loc23_3: init %empty_tuple.type = converted %.loc23_43.1, %.loc23_43.2 [concrete = constants.%empty_tuple]
+// CHECK:STDOUT:   assign %a.var, %.loc23_3
 // CHECK:STDOUT:   br !.loc23_17
 // CHECK:STDOUT:
 // CHECK:STDOUT: !.loc23_17:
-// CHECK:STDOUT:   %false: bool = bool_literal false [concrete = constants.%false]
-// CHECK:STDOUT:   %.loc23_13: bool = not %false [concrete = constants.%true]
+// CHECK:STDOUT:   %true.loc23: bool = bool_literal true [concrete = constants.%true]
+// CHECK:STDOUT:   %.loc23_13: bool = not %true.loc23 [concrete = constants.%false]
 // CHECK:STDOUT:   if %.loc23_13 br !if.expr.then.loc23 else br !if.expr.else.loc23
 // CHECK:STDOUT:
 // CHECK:STDOUT: !if.expr.then.loc23:
 // CHECK:STDOUT:   %bool.make_type.loc23: init type = call constants.%Bool() [concrete = bool]
-// CHECK:STDOUT:   %.loc23_28.1: type = value_of_initializer %bool.make_type.loc23 [concrete = bool]
-// CHECK:STDOUT:   %.loc23_28.2: type = converted %bool.make_type.loc23, %.loc23_28.1 [concrete = bool]
-// CHECK:STDOUT:   br !if.expr.result.loc23(%.loc23_28.2)
+// CHECK:STDOUT:   %.loc23_27.1: type = value_of_initializer %bool.make_type.loc23 [concrete = bool]
+// CHECK:STDOUT:   %.loc23_27.2: type = converted %bool.make_type.loc23, %.loc23_27.1 [concrete = bool]
+// CHECK:STDOUT:   br !if.expr.result.loc23(%.loc23_27.2)
 // CHECK:STDOUT:
 // CHECK:STDOUT: !if.expr.else.loc23:
-// CHECK:STDOUT:   %.loc23_39: %empty_tuple.type = tuple_literal ()
-// CHECK:STDOUT:   %.loc23_33: type = converted %.loc23_39, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type]
-// CHECK:STDOUT:   br !if.expr.result.loc23(%.loc23_33)
+// CHECK:STDOUT:   %.loc23_38: %empty_tuple.type = tuple_literal ()
+// CHECK:STDOUT:   %.loc23_32: type = converted %.loc23_38, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type]
+// CHECK:STDOUT:   br !if.expr.result.loc23(%.loc23_32)
 // CHECK:STDOUT:
 // CHECK:STDOUT: !if.expr.result.loc23:
-// CHECK:STDOUT:   %.loc23_10: type = block_arg !if.expr.result.loc23 [concrete = bool]
+// CHECK:STDOUT:   %.loc23_10: type = block_arg !if.expr.result.loc23 [concrete = constants.%empty_tuple.type]
 // CHECK:STDOUT:   br !.loc23_7
 // CHECK:STDOUT:
 // CHECK:STDOUT: !.loc23_7:
+// CHECK:STDOUT:   %a: ref %empty_tuple.type = bind_name a, %a.var
+// CHECK:STDOUT:   name_binding_decl {
+// CHECK:STDOUT:     %b.patt: %pattern_type.831 = binding_pattern b [concrete]
+// CHECK:STDOUT:     %b.var_patt: %pattern_type.831 = var_pattern %b.patt [concrete]
+// CHECK:STDOUT:   }
+// CHECK:STDOUT:   %b.var: ref bool = var %b.var_patt
+// CHECK:STDOUT:   %true.loc24: bool = bool_literal true [concrete = constants.%true]
+// CHECK:STDOUT:   assign %b.var, %true.loc24
+// CHECK:STDOUT:   br !.loc24_17
+// CHECK:STDOUT:
+// CHECK:STDOUT: !.loc24_17:
+// CHECK:STDOUT:   %false: bool = bool_literal false [concrete = constants.%false]
+// CHECK:STDOUT:   %.loc24_13: bool = not %false [concrete = constants.%true]
+// CHECK:STDOUT:   if %.loc24_13 br !if.expr.then.loc24 else br !if.expr.else.loc24
+// CHECK:STDOUT:
+// CHECK:STDOUT: !if.expr.then.loc24:
+// CHECK:STDOUT:   %bool.make_type.loc24: init type = call constants.%Bool() [concrete = bool]
+// CHECK:STDOUT:   %.loc24_28.1: type = value_of_initializer %bool.make_type.loc24 [concrete = bool]
+// CHECK:STDOUT:   %.loc24_28.2: type = converted %bool.make_type.loc24, %.loc24_28.1 [concrete = bool]
+// CHECK:STDOUT:   br !if.expr.result.loc24(%.loc24_28.2)
+// CHECK:STDOUT:
+// CHECK:STDOUT: !if.expr.else.loc24:
+// CHECK:STDOUT:   %.loc24_39: %empty_tuple.type = tuple_literal ()
+// CHECK:STDOUT:   %.loc24_33: type = converted %.loc24_39, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type]
+// CHECK:STDOUT:   br !if.expr.result.loc24(%.loc24_33)
+// CHECK:STDOUT:
+// CHECK:STDOUT: !if.expr.result.loc24:
+// CHECK:STDOUT:   %.loc24_10: type = block_arg !if.expr.result.loc24 [concrete = bool]
+// CHECK:STDOUT:   br !.loc24_7
+// CHECK:STDOUT:
+// CHECK:STDOUT: !.loc24_7:
 // CHECK:STDOUT:   %b: ref bool = bind_name b, %b.var
-// CHECK:STDOUT:   %Op.bound.loc23: <bound method> = bound_method %b.var, constants.%Op.8b7
+// CHECK:STDOUT:   %Op.bound.loc24: <bound method> = bound_method %b.var, constants.%Op.8b7
 // CHECK:STDOUT:   %Op.specific_fn.1: <specific function> = specific_function constants.%Op.8b7, @Op.2(bool) [concrete = constants.%Op.specific_fn.c3f]
-// CHECK:STDOUT:   %bound_method.loc23: <bound method> = bound_method %b.var, %Op.specific_fn.1
-// CHECK:STDOUT:   %addr.loc23: %ptr.bb2 = addr_of %b.var
-// CHECK:STDOUT:   %no_op.loc23: init %empty_tuple.type = call %bound_method.loc23(%addr.loc23)
-// CHECK:STDOUT:   %Op.bound.loc22: <bound method> = bound_method %a.var, constants.%Op.ea3
+// CHECK:STDOUT:   %bound_method.loc24: <bound method> = bound_method %b.var, %Op.specific_fn.1
+// CHECK:STDOUT:   %addr.loc24: %ptr.bb2 = addr_of %b.var
+// CHECK:STDOUT:   %no_op.loc24: init %empty_tuple.type = call %bound_method.loc24(%addr.loc24)
+// CHECK:STDOUT:   %Op.bound.loc23: <bound method> = bound_method %a.var, constants.%Op.ea3
 // CHECK:STDOUT:   %Op.specific_fn.2: <specific function> = specific_function constants.%Op.ea3, @Op.2(constants.%empty_tuple.type) [concrete = constants.%Op.specific_fn.393]
-// CHECK:STDOUT:   %bound_method.loc22: <bound method> = bound_method %a.var, %Op.specific_fn.2
-// CHECK:STDOUT:   %addr.loc22: %ptr.843 = addr_of %a.var
-// CHECK:STDOUT:   %no_op.loc22: init %empty_tuple.type = call %bound_method.loc22(%addr.loc22)
+// CHECK:STDOUT:   %bound_method.loc23: <bound method> = bound_method %a.var, %Op.specific_fn.2
+// CHECK:STDOUT:   %addr.loc23: %ptr.843 = addr_of %a.var
+// CHECK:STDOUT:   %no_op.loc23: init %empty_tuple.type = call %bound_method.loc23(%addr.loc23)
 // CHECK:STDOUT:   return
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @__global_init() {
 // CHECK:STDOUT: !entry:
 // CHECK:STDOUT:   %true: bool = bool_literal true [concrete = constants.%true]
-// CHECK:STDOUT:   %.loc18: bool = not %true [concrete = constants.%false]
+// CHECK:STDOUT:   %.loc19: bool = not %true [concrete = constants.%false]
 // CHECK:STDOUT:   %false: bool = bool_literal false [concrete = constants.%false]
-// CHECK:STDOUT:   %.loc19: bool = not %false [concrete = constants.%true]
+// CHECK:STDOUT:   %.loc20: bool = not %false [concrete = constants.%true]
 // CHECK:STDOUT:   return
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 8 - 7
toolchain/check/testdata/operators/overloaded/add.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -46,14 +47,14 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT:   %AddWith.type.ffb: type = facet_type <@AddWith, @AddWith(%C)> [concrete]
 // CHECK:STDOUT:   %Op.type.45e: type = fn_type @Op.1, @AddWith(%C) [concrete]
 // CHECK:STDOUT:   %AddWith.impl_witness: <witness> = impl_witness file.%AddWith.impl_witness_table [concrete]
-// CHECK:STDOUT:   %Op.type.638: type = fn_type @Op.loc21 [concrete]
+// CHECK:STDOUT:   %Op.type.638: type = fn_type @Op.loc22 [concrete]
 // CHECK:STDOUT:   %Op.276: %Op.type.638 = struct_value () [concrete]
 // CHECK:STDOUT:   %AddWith.facet.3ef: %AddWith.type.ffb = facet_value %C, (%AddWith.impl_witness) [concrete]
 // CHECK:STDOUT:   %AddAssignWith.type.393: type = facet_type <@AddAssignWith, @AddAssignWith(%C)> [concrete]
 // CHECK:STDOUT:   %Op.type.5af: type = fn_type @Op.6, @AddAssignWith(%C) [concrete]
 // CHECK:STDOUT:   %AddAssignWith.impl_witness: <witness> = impl_witness file.%AddAssignWith.impl_witness_table [concrete]
 // CHECK:STDOUT:   %ptr.019: type = ptr_type %C [concrete]
-// CHECK:STDOUT:   %Op.type.0d7: type = fn_type @Op.loc26 [concrete]
+// CHECK:STDOUT:   %Op.type.0d7: type = fn_type @Op.loc27 [concrete]
 // CHECK:STDOUT:   %Op.572: %Op.type.0d7 = struct_value () [concrete]
 // CHECK:STDOUT:   %AddAssignWith.facet: %AddAssignWith.type.393 = facet_value %C, (%AddAssignWith.impl_witness) [concrete]
 // CHECK:STDOUT:   %.268: type = fn_type_with_self_type %Op.type.45e, %AddWith.facet.3ef [concrete]
@@ -68,9 +69,9 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT:   %a.ref: %C = name_ref a, %a
 // CHECK:STDOUT:   %b.ref: %C = name_ref b, %b
 // CHECK:STDOUT:   %impl.elem1: %.268 = impl_witness_access constants.%AddWith.impl_witness, element1 [concrete = constants.%Op.276]
-// CHECK:STDOUT:   %bound_method.loc31: <bound method> = bound_method %a.ref, %impl.elem1
+// CHECK:STDOUT:   %bound_method.loc32: <bound method> = bound_method %a.ref, %impl.elem1
 // CHECK:STDOUT:   <elided>
-// CHECK:STDOUT:   %Op.call: init %C = call %bound_method.loc31(%a.ref, %b.ref) to %.loc29
+// CHECK:STDOUT:   %Op.call: init %C = call %bound_method.loc32(%a.ref, %b.ref) to %.loc30
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT:   return %Op.call to %return
 // CHECK:STDOUT: }
@@ -78,11 +79,11 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT: fn @TestAssign(%a.param: %ptr.019, %b.param: %C) {
 // CHECK:STDOUT: !entry:
 // CHECK:STDOUT:   %a.ref: %ptr.019 = name_ref a, %a
-// CHECK:STDOUT:   %.loc37: ref %C = deref %a.ref
+// CHECK:STDOUT:   %.loc38: ref %C = deref %a.ref
 // CHECK:STDOUT:   %b.ref: %C = name_ref b, %b
 // CHECK:STDOUT:   %impl.elem0: %.e2d = impl_witness_access constants.%AddAssignWith.impl_witness, element0 [concrete = constants.%Op.572]
-// CHECK:STDOUT:   %bound_method: <bound method> = bound_method %.loc37, %impl.elem0
-// CHECK:STDOUT:   %addr: %ptr.019 = addr_of %.loc37
+// CHECK:STDOUT:   %bound_method: <bound method> = bound_method %.loc38, %impl.elem0
+// CHECK:STDOUT:   %addr: %ptr.019 = addr_of %.loc38
 // CHECK:STDOUT:   %Op.call: init %empty_tuple.type = call %bound_method(%addr, %b.ref)
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT: }

+ 8 - 7
toolchain/check/testdata/operators/overloaded/bit_and.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -46,14 +47,14 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT:   %BitAndWith.type.e40: type = facet_type <@BitAndWith, @BitAndWith(%C)> [concrete]
 // CHECK:STDOUT:   %Op.type.914: type = fn_type @Op.1, @BitAndWith(%C) [concrete]
 // CHECK:STDOUT:   %BitAndWith.impl_witness: <witness> = impl_witness file.%BitAndWith.impl_witness_table [concrete]
-// CHECK:STDOUT:   %Op.type.bcc: type = fn_type @Op.loc21 [concrete]
+// CHECK:STDOUT:   %Op.type.bcc: type = fn_type @Op.loc22 [concrete]
 // CHECK:STDOUT:   %Op.c46: %Op.type.bcc = struct_value () [concrete]
 // CHECK:STDOUT:   %BitAndWith.facet.783: %BitAndWith.type.e40 = facet_value %C, (%BitAndWith.impl_witness) [concrete]
 // CHECK:STDOUT:   %BitAndAssignWith.type.e85: type = facet_type <@BitAndAssignWith, @BitAndAssignWith(%C)> [concrete]
 // CHECK:STDOUT:   %Op.type.73d: type = fn_type @Op.6, @BitAndAssignWith(%C) [concrete]
 // CHECK:STDOUT:   %BitAndAssignWith.impl_witness: <witness> = impl_witness file.%BitAndAssignWith.impl_witness_table [concrete]
 // CHECK:STDOUT:   %ptr.019: type = ptr_type %C [concrete]
-// CHECK:STDOUT:   %Op.type.115: type = fn_type @Op.loc26 [concrete]
+// CHECK:STDOUT:   %Op.type.115: type = fn_type @Op.loc27 [concrete]
 // CHECK:STDOUT:   %Op.270: %Op.type.115 = struct_value () [concrete]
 // CHECK:STDOUT:   %BitAndAssignWith.facet: %BitAndAssignWith.type.e85 = facet_value %C, (%BitAndAssignWith.impl_witness) [concrete]
 // CHECK:STDOUT:   %.04a: type = fn_type_with_self_type %Op.type.914, %BitAndWith.facet.783 [concrete]
@@ -68,9 +69,9 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT:   %a.ref: %C = name_ref a, %a
 // CHECK:STDOUT:   %b.ref: %C = name_ref b, %b
 // CHECK:STDOUT:   %impl.elem1: %.04a = impl_witness_access constants.%BitAndWith.impl_witness, element1 [concrete = constants.%Op.c46]
-// CHECK:STDOUT:   %bound_method.loc31: <bound method> = bound_method %a.ref, %impl.elem1
+// CHECK:STDOUT:   %bound_method.loc32: <bound method> = bound_method %a.ref, %impl.elem1
 // CHECK:STDOUT:   <elided>
-// CHECK:STDOUT:   %Op.call: init %C = call %bound_method.loc31(%a.ref, %b.ref) to %.loc29
+// CHECK:STDOUT:   %Op.call: init %C = call %bound_method.loc32(%a.ref, %b.ref) to %.loc30
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT:   return %Op.call to %return
 // CHECK:STDOUT: }
@@ -78,11 +79,11 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT: fn @TestAssign(%a.param: %ptr.019, %b.param: %C) {
 // CHECK:STDOUT: !entry:
 // CHECK:STDOUT:   %a.ref: %ptr.019 = name_ref a, %a
-// CHECK:STDOUT:   %.loc37: ref %C = deref %a.ref
+// CHECK:STDOUT:   %.loc38: ref %C = deref %a.ref
 // CHECK:STDOUT:   %b.ref: %C = name_ref b, %b
 // CHECK:STDOUT:   %impl.elem0: %.554 = impl_witness_access constants.%BitAndAssignWith.impl_witness, element0 [concrete = constants.%Op.270]
-// CHECK:STDOUT:   %bound_method: <bound method> = bound_method %.loc37, %impl.elem0
-// CHECK:STDOUT:   %addr: %ptr.019 = addr_of %.loc37
+// CHECK:STDOUT:   %bound_method: <bound method> = bound_method %.loc38, %impl.elem0
+// CHECK:STDOUT:   %addr: %ptr.019 = addr_of %.loc38
 // CHECK:STDOUT:   %Op.call: init %empty_tuple.type = call %bound_method(%addr, %b.ref)
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT: }

+ 4 - 3
toolchain/check/testdata/operators/overloaded/bit_complement.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -36,7 +37,7 @@ fn TestOp(a: C) -> C {
 // CHECK:STDOUT:   %BitComplement.type: type = facet_type <@BitComplement> [concrete]
 // CHECK:STDOUT:   %Op.type.f25: type = fn_type @Op.6 [concrete]
 // CHECK:STDOUT:   %BitComplement.impl_witness: <witness> = impl_witness file.%BitComplement.impl_witness_table [concrete]
-// CHECK:STDOUT:   %Op.type.e57: type = fn_type @Op.loc21 [concrete]
+// CHECK:STDOUT:   %Op.type.e57: type = fn_type @Op.loc22 [concrete]
 // CHECK:STDOUT:   %Op.d4b: %Op.type.e57 = struct_value () [concrete]
 // CHECK:STDOUT:   %BitComplement.facet.c4c: %BitComplement.type = facet_value %C, (%BitComplement.impl_witness) [concrete]
 // CHECK:STDOUT:   %.18b: type = fn_type_with_self_type %Op.type.f25, %BitComplement.facet.c4c [concrete]
@@ -49,9 +50,9 @@ fn TestOp(a: C) -> C {
 // CHECK:STDOUT: !entry:
 // CHECK:STDOUT:   %a.ref: %C = name_ref a, %a
 // CHECK:STDOUT:   %impl.elem1: %.18b = impl_witness_access constants.%BitComplement.impl_witness, element1 [concrete = constants.%Op.d4b]
-// CHECK:STDOUT:   %bound_method.loc28: <bound method> = bound_method %a.ref, %impl.elem1
+// CHECK:STDOUT:   %bound_method.loc29: <bound method> = bound_method %a.ref, %impl.elem1
 // CHECK:STDOUT:   <elided>
-// CHECK:STDOUT:   %Op.call: init %C = call %bound_method.loc28(%a.ref) to %.loc26
+// CHECK:STDOUT:   %Op.call: init %C = call %bound_method.loc29(%a.ref) to %.loc27
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT:   return %Op.call to %return
 // CHECK:STDOUT: }

+ 8 - 7
toolchain/check/testdata/operators/overloaded/bit_or.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -46,14 +47,14 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT:   %BitOrWith.type.502: type = facet_type <@BitOrWith, @BitOrWith(%C)> [concrete]
 // CHECK:STDOUT:   %Op.type.501: type = fn_type @Op.1, @BitOrWith(%C) [concrete]
 // CHECK:STDOUT:   %BitOrWith.impl_witness: <witness> = impl_witness file.%BitOrWith.impl_witness_table [concrete]
-// CHECK:STDOUT:   %Op.type.cc7: type = fn_type @Op.loc21 [concrete]
+// CHECK:STDOUT:   %Op.type.cc7: type = fn_type @Op.loc22 [concrete]
 // CHECK:STDOUT:   %Op.3e9: %Op.type.cc7 = struct_value () [concrete]
 // CHECK:STDOUT:   %BitOrWith.facet.f19: %BitOrWith.type.502 = facet_value %C, (%BitOrWith.impl_witness) [concrete]
 // CHECK:STDOUT:   %BitOrAssignWith.type.3e6: type = facet_type <@BitOrAssignWith, @BitOrAssignWith(%C)> [concrete]
 // CHECK:STDOUT:   %Op.type.efc: type = fn_type @Op.6, @BitOrAssignWith(%C) [concrete]
 // CHECK:STDOUT:   %BitOrAssignWith.impl_witness: <witness> = impl_witness file.%BitOrAssignWith.impl_witness_table [concrete]
 // CHECK:STDOUT:   %ptr.019: type = ptr_type %C [concrete]
-// CHECK:STDOUT:   %Op.type.4ee: type = fn_type @Op.loc26 [concrete]
+// CHECK:STDOUT:   %Op.type.4ee: type = fn_type @Op.loc27 [concrete]
 // CHECK:STDOUT:   %Op.afa: %Op.type.4ee = struct_value () [concrete]
 // CHECK:STDOUT:   %BitOrAssignWith.facet: %BitOrAssignWith.type.3e6 = facet_value %C, (%BitOrAssignWith.impl_witness) [concrete]
 // CHECK:STDOUT:   %.b8d: type = fn_type_with_self_type %Op.type.501, %BitOrWith.facet.f19 [concrete]
@@ -68,9 +69,9 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT:   %a.ref: %C = name_ref a, %a
 // CHECK:STDOUT:   %b.ref: %C = name_ref b, %b
 // CHECK:STDOUT:   %impl.elem1: %.b8d = impl_witness_access constants.%BitOrWith.impl_witness, element1 [concrete = constants.%Op.3e9]
-// CHECK:STDOUT:   %bound_method.loc31: <bound method> = bound_method %a.ref, %impl.elem1
+// CHECK:STDOUT:   %bound_method.loc32: <bound method> = bound_method %a.ref, %impl.elem1
 // CHECK:STDOUT:   <elided>
-// CHECK:STDOUT:   %Op.call: init %C = call %bound_method.loc31(%a.ref, %b.ref) to %.loc29
+// CHECK:STDOUT:   %Op.call: init %C = call %bound_method.loc32(%a.ref, %b.ref) to %.loc30
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT:   return %Op.call to %return
 // CHECK:STDOUT: }
@@ -78,11 +79,11 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT: fn @TestAssign(%a.param: %ptr.019, %b.param: %C) {
 // CHECK:STDOUT: !entry:
 // CHECK:STDOUT:   %a.ref: %ptr.019 = name_ref a, %a
-// CHECK:STDOUT:   %.loc37: ref %C = deref %a.ref
+// CHECK:STDOUT:   %.loc38: ref %C = deref %a.ref
 // CHECK:STDOUT:   %b.ref: %C = name_ref b, %b
 // CHECK:STDOUT:   %impl.elem0: %.c8a = impl_witness_access constants.%BitOrAssignWith.impl_witness, element0 [concrete = constants.%Op.afa]
-// CHECK:STDOUT:   %bound_method: <bound method> = bound_method %.loc37, %impl.elem0
-// CHECK:STDOUT:   %addr: %ptr.019 = addr_of %.loc37
+// CHECK:STDOUT:   %bound_method: <bound method> = bound_method %.loc38, %impl.elem0
+// CHECK:STDOUT:   %addr: %ptr.019 = addr_of %.loc38
 // CHECK:STDOUT:   %Op.call: init %empty_tuple.type = call %bound_method(%addr, %b.ref)
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT: }

+ 8 - 7
toolchain/check/testdata/operators/overloaded/bit_xor.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -46,14 +47,14 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT:   %BitXorWith.type.f9b: type = facet_type <@BitXorWith, @BitXorWith(%C)> [concrete]
 // CHECK:STDOUT:   %Op.type.502: type = fn_type @Op.1, @BitXorWith(%C) [concrete]
 // CHECK:STDOUT:   %BitXorWith.impl_witness: <witness> = impl_witness file.%BitXorWith.impl_witness_table [concrete]
-// CHECK:STDOUT:   %Op.type.5e4: type = fn_type @Op.loc21 [concrete]
+// CHECK:STDOUT:   %Op.type.5e4: type = fn_type @Op.loc22 [concrete]
 // CHECK:STDOUT:   %Op.ef1: %Op.type.5e4 = struct_value () [concrete]
 // CHECK:STDOUT:   %BitXorWith.facet.d57: %BitXorWith.type.f9b = facet_value %C, (%BitXorWith.impl_witness) [concrete]
 // CHECK:STDOUT:   %BitXorAssignWith.type.57a: type = facet_type <@BitXorAssignWith, @BitXorAssignWith(%C)> [concrete]
 // CHECK:STDOUT:   %Op.type.ad0: type = fn_type @Op.6, @BitXorAssignWith(%C) [concrete]
 // CHECK:STDOUT:   %BitXorAssignWith.impl_witness: <witness> = impl_witness file.%BitXorAssignWith.impl_witness_table [concrete]
 // CHECK:STDOUT:   %ptr.019: type = ptr_type %C [concrete]
-// CHECK:STDOUT:   %Op.type.d64: type = fn_type @Op.loc26 [concrete]
+// CHECK:STDOUT:   %Op.type.d64: type = fn_type @Op.loc27 [concrete]
 // CHECK:STDOUT:   %Op.5e5: %Op.type.d64 = struct_value () [concrete]
 // CHECK:STDOUT:   %BitXorAssignWith.facet: %BitXorAssignWith.type.57a = facet_value %C, (%BitXorAssignWith.impl_witness) [concrete]
 // CHECK:STDOUT:   %.c60: type = fn_type_with_self_type %Op.type.502, %BitXorWith.facet.d57 [concrete]
@@ -68,9 +69,9 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT:   %a.ref: %C = name_ref a, %a
 // CHECK:STDOUT:   %b.ref: %C = name_ref b, %b
 // CHECK:STDOUT:   %impl.elem1: %.c60 = impl_witness_access constants.%BitXorWith.impl_witness, element1 [concrete = constants.%Op.ef1]
-// CHECK:STDOUT:   %bound_method.loc31: <bound method> = bound_method %a.ref, %impl.elem1
+// CHECK:STDOUT:   %bound_method.loc32: <bound method> = bound_method %a.ref, %impl.elem1
 // CHECK:STDOUT:   <elided>
-// CHECK:STDOUT:   %Op.call: init %C = call %bound_method.loc31(%a.ref, %b.ref) to %.loc29
+// CHECK:STDOUT:   %Op.call: init %C = call %bound_method.loc32(%a.ref, %b.ref) to %.loc30
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT:   return %Op.call to %return
 // CHECK:STDOUT: }
@@ -78,11 +79,11 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT: fn @TestAssign(%a.param: %ptr.019, %b.param: %C) {
 // CHECK:STDOUT: !entry:
 // CHECK:STDOUT:   %a.ref: %ptr.019 = name_ref a, %a
-// CHECK:STDOUT:   %.loc37: ref %C = deref %a.ref
+// CHECK:STDOUT:   %.loc38: ref %C = deref %a.ref
 // CHECK:STDOUT:   %b.ref: %C = name_ref b, %b
 // CHECK:STDOUT:   %impl.elem0: %.d8a = impl_witness_access constants.%BitXorAssignWith.impl_witness, element0 [concrete = constants.%Op.5e5]
-// CHECK:STDOUT:   %bound_method: <bound method> = bound_method %.loc37, %impl.elem0
-// CHECK:STDOUT:   %addr: %ptr.019 = addr_of %.loc37
+// CHECK:STDOUT:   %bound_method: <bound method> = bound_method %.loc38, %impl.elem0
+// CHECK:STDOUT:   %addr: %ptr.019 = addr_of %.loc38
 // CHECK:STDOUT:   %Op.call: init %empty_tuple.type = call %bound_method(%addr, %b.ref)
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT: }

+ 5 - 4
toolchain/check/testdata/operators/overloaded/dec.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -37,7 +38,7 @@ fn TestOp() {
 // CHECK:STDOUT:   %empty_tuple.type: type = tuple_type () [concrete]
 // CHECK:STDOUT:   %Dec.impl_witness: <witness> = impl_witness file.%Dec.impl_witness_table [concrete]
 // CHECK:STDOUT:   %ptr.019: type = ptr_type %C [concrete]
-// CHECK:STDOUT:   %Op.type.9e0: type = fn_type @Op.loc21 [concrete]
+// CHECK:STDOUT:   %Op.type.9e0: type = fn_type @Op.loc22 [concrete]
 // CHECK:STDOUT:   %Op.cf9: %Op.type.9e0 = struct_value () [concrete]
 // CHECK:STDOUT:   %Dec.facet: %Dec.type = facet_value %C, (%Dec.impl_witness) [concrete]
 // CHECK:STDOUT:   %.859: type = fn_type_with_self_type %Op.type.633, %Dec.facet [concrete]
@@ -51,9 +52,9 @@ fn TestOp() {
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT:   %c.ref: ref %C = name_ref c, %c
 // CHECK:STDOUT:   %impl.elem0: %.859 = impl_witness_access constants.%Dec.impl_witness, element0 [concrete = constants.%Op.cf9]
-// CHECK:STDOUT:   %bound_method.loc27: <bound method> = bound_method %c.ref, %impl.elem0
-// CHECK:STDOUT:   %addr.loc27: %ptr.019 = addr_of %c.ref
-// CHECK:STDOUT:   %Op.call: init %empty_tuple.type = call %bound_method.loc27(%addr.loc27)
+// CHECK:STDOUT:   %bound_method.loc28: <bound method> = bound_method %c.ref, %impl.elem0
+// CHECK:STDOUT:   %addr.loc28: %ptr.019 = addr_of %c.ref
+// CHECK:STDOUT:   %Op.call: init %empty_tuple.type = call %bound_method.loc28(%addr.loc28)
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 8 - 7
toolchain/check/testdata/operators/overloaded/div.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -46,14 +47,14 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT:   %DivWith.type.ead: type = facet_type <@DivWith, @DivWith(%C)> [concrete]
 // CHECK:STDOUT:   %Op.type.c4b: type = fn_type @Op.1, @DivWith(%C) [concrete]
 // CHECK:STDOUT:   %DivWith.impl_witness: <witness> = impl_witness file.%DivWith.impl_witness_table [concrete]
-// CHECK:STDOUT:   %Op.type.a37: type = fn_type @Op.loc21 [concrete]
+// CHECK:STDOUT:   %Op.type.a37: type = fn_type @Op.loc22 [concrete]
 // CHECK:STDOUT:   %Op.5b4: %Op.type.a37 = struct_value () [concrete]
 // CHECK:STDOUT:   %DivWith.facet.f3b: %DivWith.type.ead = facet_value %C, (%DivWith.impl_witness) [concrete]
 // CHECK:STDOUT:   %DivAssignWith.type.08b: type = facet_type <@DivAssignWith, @DivAssignWith(%C)> [concrete]
 // CHECK:STDOUT:   %Op.type.629: type = fn_type @Op.6, @DivAssignWith(%C) [concrete]
 // CHECK:STDOUT:   %DivAssignWith.impl_witness: <witness> = impl_witness file.%DivAssignWith.impl_witness_table [concrete]
 // CHECK:STDOUT:   %ptr.019: type = ptr_type %C [concrete]
-// CHECK:STDOUT:   %Op.type.1b1: type = fn_type @Op.loc26 [concrete]
+// CHECK:STDOUT:   %Op.type.1b1: type = fn_type @Op.loc27 [concrete]
 // CHECK:STDOUT:   %Op.27f: %Op.type.1b1 = struct_value () [concrete]
 // CHECK:STDOUT:   %DivAssignWith.facet: %DivAssignWith.type.08b = facet_value %C, (%DivAssignWith.impl_witness) [concrete]
 // CHECK:STDOUT:   %.bb6: type = fn_type_with_self_type %Op.type.c4b, %DivWith.facet.f3b [concrete]
@@ -68,9 +69,9 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT:   %a.ref: %C = name_ref a, %a
 // CHECK:STDOUT:   %b.ref: %C = name_ref b, %b
 // CHECK:STDOUT:   %impl.elem1: %.bb6 = impl_witness_access constants.%DivWith.impl_witness, element1 [concrete = constants.%Op.5b4]
-// CHECK:STDOUT:   %bound_method.loc31: <bound method> = bound_method %a.ref, %impl.elem1
+// CHECK:STDOUT:   %bound_method.loc32: <bound method> = bound_method %a.ref, %impl.elem1
 // CHECK:STDOUT:   <elided>
-// CHECK:STDOUT:   %Op.call: init %C = call %bound_method.loc31(%a.ref, %b.ref) to %.loc29
+// CHECK:STDOUT:   %Op.call: init %C = call %bound_method.loc32(%a.ref, %b.ref) to %.loc30
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT:   return %Op.call to %return
 // CHECK:STDOUT: }
@@ -78,11 +79,11 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT: fn @TestAssign(%a.param: %ptr.019, %b.param: %C) {
 // CHECK:STDOUT: !entry:
 // CHECK:STDOUT:   %a.ref: %ptr.019 = name_ref a, %a
-// CHECK:STDOUT:   %.loc37: ref %C = deref %a.ref
+// CHECK:STDOUT:   %.loc38: ref %C = deref %a.ref
 // CHECK:STDOUT:   %b.ref: %C = name_ref b, %b
 // CHECK:STDOUT:   %impl.elem0: %.f19 = impl_witness_access constants.%DivAssignWith.impl_witness, element0 [concrete = constants.%Op.27f]
-// CHECK:STDOUT:   %bound_method: <bound method> = bound_method %.loc37, %impl.elem0
-// CHECK:STDOUT:   %addr: %ptr.019 = addr_of %.loc37
+// CHECK:STDOUT:   %bound_method: <bound method> = bound_method %.loc38, %impl.elem0
+// CHECK:STDOUT:   %addr: %ptr.019 = addr_of %.loc38
 // CHECK:STDOUT:   %Op.call: init %empty_tuple.type = call %bound_method(%addr, %b.ref)
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT: }

+ 1 - 0
toolchain/check/testdata/operators/overloaded/eq.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //

+ 35 - 34
toolchain/check/testdata/operators/overloaded/fail_assign_non_ref.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -57,7 +58,7 @@ fn TestAddAssignNonRef(a: C, b: C) {
 // CHECK:STDOUT:   %Inc.impl_witness: <witness> = impl_witness file.%Inc.impl_witness_table [concrete]
 // CHECK:STDOUT:   %ptr.019: type = ptr_type %C [concrete]
 // CHECK:STDOUT:   %pattern_type.44a: type = pattern_type %ptr.019 [concrete]
-// CHECK:STDOUT:   %Op.type.73a: type = fn_type @Op.loc19 [concrete]
+// CHECK:STDOUT:   %Op.type.73a: type = fn_type @Op.loc20 [concrete]
 // CHECK:STDOUT:   %Op.0c9: %Op.type.73a = struct_value () [concrete]
 // CHECK:STDOUT:   %Inc.facet: %Inc.type = facet_value %C, (%Inc.impl_witness) [concrete]
 // CHECK:STDOUT:   %AddAssignWith.type.fc6: type = generic_interface_type @AddAssignWith [concrete]
@@ -66,7 +67,7 @@ fn TestAddAssignNonRef(a: C, b: C) {
 // CHECK:STDOUT:   %Op.type.5af: type = fn_type @Op.2, @AddAssignWith(%C) [concrete]
 // CHECK:STDOUT:   %AddAssignWith.impl_witness: <witness> = impl_witness file.%AddAssignWith.impl_witness_table [concrete]
 // CHECK:STDOUT:   %pattern_type.c48: type = pattern_type %C [concrete]
-// CHECK:STDOUT:   %Op.type.0d7: type = fn_type @Op.loc22 [concrete]
+// CHECK:STDOUT:   %Op.type.0d7: type = fn_type @Op.loc23 [concrete]
 // CHECK:STDOUT:   %Op.572: %Op.type.0d7 = struct_value () [concrete]
 // CHECK:STDOUT:   %AddAssignWith.facet: %AddAssignWith.type.393 = facet_value %C, (%AddAssignWith.impl_witness) [concrete]
 // CHECK:STDOUT:   %TestIncNonRef.type: type = fn_type @TestIncNonRef [concrete]
@@ -111,10 +112,10 @@ fn TestAddAssignNonRef(a: C, b: C) {
 // CHECK:STDOUT:   %Inc.impl_witness_table = impl_witness_table (@Inc.impl.%Op.decl), @Inc.impl [concrete]
 // CHECK:STDOUT:   %Inc.impl_witness: <witness> = impl_witness %Inc.impl_witness_table [concrete = constants.%Inc.impl_witness]
 // CHECK:STDOUT:   impl_decl @AddAssignWith.impl [concrete] {} {
-// CHECK:STDOUT:     %C.ref.loc21_6: type = name_ref C, file.%C.decl [concrete = constants.%C]
+// CHECK:STDOUT:     %C.ref.loc22_6: type = name_ref C, file.%C.decl [concrete = constants.%C]
 // CHECK:STDOUT:     %Core.ref: <namespace> = name_ref Core, imports.%Core [concrete = imports.%Core]
 // CHECK:STDOUT:     %AddAssignWith.ref: %AddAssignWith.type.fc6 = name_ref AddAssignWith, imports.%Core.AddAssignWith [concrete = constants.%AddAssignWith.generic]
-// CHECK:STDOUT:     %C.ref.loc21_30: type = name_ref C, file.%C.decl [concrete = constants.%C]
+// CHECK:STDOUT:     %C.ref.loc22_30: type = name_ref C, file.%C.decl [concrete = constants.%C]
 // CHECK:STDOUT:     %AddAssignWith.type: type = facet_type <@AddAssignWith, @AddAssignWith(constants.%C)> [concrete = constants.%AddAssignWith.type.393]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %AddAssignWith.impl_witness_table = impl_witness_table (@AddAssignWith.impl.%Op.decl), @AddAssignWith.impl [concrete]
@@ -134,22 +135,22 @@ fn TestAddAssignNonRef(a: C, b: C) {
 // CHECK:STDOUT:     %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param1 [concrete]
 // CHECK:STDOUT:   } {
 // CHECK:STDOUT:     %a.param: %C = value_param call_param0
-// CHECK:STDOUT:     %C.ref.loc36_27: type = name_ref C, file.%C.decl [concrete = constants.%C]
+// CHECK:STDOUT:     %C.ref.loc37_27: type = name_ref C, file.%C.decl [concrete = constants.%C]
 // CHECK:STDOUT:     %a: %C = bind_name a, %a.param
 // CHECK:STDOUT:     %b.param: %C = value_param call_param1
-// CHECK:STDOUT:     %C.ref.loc36_33: type = name_ref C, file.%C.decl [concrete = constants.%C]
+// CHECK:STDOUT:     %C.ref.loc37_33: type = name_ref C, file.%C.decl [concrete = constants.%C]
 // CHECK:STDOUT:     %b: %C = bind_name b, %b.param
 // CHECK:STDOUT:   }
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: impl @Inc.impl: %C.ref as %Inc.ref {
-// CHECK:STDOUT:   %Op.decl: %Op.type.73a = fn_decl @Op.loc19 [concrete = constants.%Op.0c9] {
+// CHECK:STDOUT:   %Op.decl: %Op.type.73a = fn_decl @Op.loc20 [concrete = constants.%Op.0c9] {
 // CHECK:STDOUT:     %self.patt: %pattern_type.44a = binding_pattern self [concrete]
 // CHECK:STDOUT:     %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete]
-// CHECK:STDOUT:     %.loc19_9: %pattern_type.f6d = addr_pattern %self.param_patt [concrete]
+// CHECK:STDOUT:     %.loc20_9: %pattern_type.f6d = addr_pattern %self.param_patt [concrete]
 // CHECK:STDOUT:   } {
 // CHECK:STDOUT:     %self.param: %ptr.019 = value_param call_param0
-// CHECK:STDOUT:     %.loc19_21: type = splice_block %ptr [concrete = constants.%ptr.019] {
+// CHECK:STDOUT:     %.loc20_21: type = splice_block %ptr [concrete = constants.%ptr.019] {
 // CHECK:STDOUT:       %C.ref: type = name_ref C, file.%C.decl [concrete = constants.%C]
 // CHECK:STDOUT:       %ptr: type = ptr_type %C.ref [concrete = constants.%ptr.019]
 // CHECK:STDOUT:     }
@@ -162,22 +163,22 @@ fn TestAddAssignNonRef(a: C, b: C) {
 // CHECK:STDOUT:   witness = file.%Inc.impl_witness
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: impl @AddAssignWith.impl: %C.ref.loc21_6 as %AddAssignWith.type {
-// CHECK:STDOUT:   %Op.decl: %Op.type.0d7 = fn_decl @Op.loc22 [concrete = constants.%Op.572] {
+// CHECK:STDOUT: impl @AddAssignWith.impl: %C.ref.loc22_6 as %AddAssignWith.type {
+// CHECK:STDOUT:   %Op.decl: %Op.type.0d7 = fn_decl @Op.loc23 [concrete = constants.%Op.572] {
 // CHECK:STDOUT:     %self.patt: %pattern_type.44a = binding_pattern self [concrete]
 // CHECK:STDOUT:     %self.param_patt: %pattern_type.44a = value_param_pattern %self.patt, call_param0 [concrete]
-// CHECK:STDOUT:     %.loc22_9: %pattern_type.f6d = addr_pattern %self.param_patt [concrete]
+// CHECK:STDOUT:     %.loc23_9: %pattern_type.f6d = addr_pattern %self.param_patt [concrete]
 // CHECK:STDOUT:     %other.patt: %pattern_type.c48 = binding_pattern other [concrete]
 // CHECK:STDOUT:     %other.param_patt: %pattern_type.c48 = value_param_pattern %other.patt, call_param1 [concrete]
 // CHECK:STDOUT:   } {
 // CHECK:STDOUT:     %self.param: %ptr.019 = value_param call_param0
-// CHECK:STDOUT:     %.loc22_21: type = splice_block %ptr [concrete = constants.%ptr.019] {
-// CHECK:STDOUT:       %C.ref.loc22_20: type = name_ref C, file.%C.decl [concrete = constants.%C]
-// CHECK:STDOUT:       %ptr: type = ptr_type %C.ref.loc22_20 [concrete = constants.%ptr.019]
+// CHECK:STDOUT:     %.loc23_21: type = splice_block %ptr [concrete = constants.%ptr.019] {
+// CHECK:STDOUT:       %C.ref.loc23_20: type = name_ref C, file.%C.decl [concrete = constants.%C]
+// CHECK:STDOUT:       %ptr: type = ptr_type %C.ref.loc23_20 [concrete = constants.%ptr.019]
 // CHECK:STDOUT:     }
 // CHECK:STDOUT:     %self: %ptr.019 = bind_name self, %self.param
 // CHECK:STDOUT:     %other.param: %C = value_param call_param1
-// CHECK:STDOUT:     %C.ref.loc22_31: type = name_ref C, file.%C.decl [concrete = constants.%C]
+// CHECK:STDOUT:     %C.ref.loc23_31: type = name_ref C, file.%C.decl [concrete = constants.%C]
 // CHECK:STDOUT:     %other: %C = bind_name other, %other.param
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:
@@ -196,23 +197,23 @@ fn TestAddAssignNonRef(a: C, b: C) {
 // CHECK:STDOUT:   .Self = constants.%C
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: fn @Op.loc19(%self.param: %ptr.019);
+// CHECK:STDOUT: fn @Op.loc20(%self.param: %ptr.019);
 // CHECK:STDOUT:
-// CHECK:STDOUT: fn @Op.loc22(%self.param: %ptr.019, %other.param: %C);
+// CHECK:STDOUT: fn @Op.loc23(%self.param: %ptr.019, %other.param: %C);
 // CHECK:STDOUT:
 // CHECK:STDOUT: fn @TestIncNonRef(%a.param: %C) {
 // CHECK:STDOUT: !entry:
 // CHECK:STDOUT:   %a.ref: %C = name_ref a, %a
 // CHECK:STDOUT:   %impl.elem0: %.bc7 = impl_witness_access constants.%Inc.impl_witness, element0 [concrete = constants.%Op.0c9]
-// CHECK:STDOUT:   %bound_method.loc33_3: <bound method> = bound_method %a.ref, %impl.elem0
-// CHECK:STDOUT:   %.loc33: ref %C = temporary_storage
-// CHECK:STDOUT:   %addr.loc33_5.1: %ptr.019 = addr_of %.loc33
-// CHECK:STDOUT:   %Op.call: init %empty_tuple.type = call %bound_method.loc33_3(%addr.loc33_5.1)
-// CHECK:STDOUT:   %Op.bound: <bound method> = bound_method %.loc33, constants.%Op.5d7
+// CHECK:STDOUT:   %bound_method.loc34_3: <bound method> = bound_method %a.ref, %impl.elem0
+// CHECK:STDOUT:   %.loc34: ref %C = temporary_storage
+// CHECK:STDOUT:   %addr.loc34_5.1: %ptr.019 = addr_of %.loc34
+// CHECK:STDOUT:   %Op.call: init %empty_tuple.type = call %bound_method.loc34_3(%addr.loc34_5.1)
+// CHECK:STDOUT:   %Op.bound: <bound method> = bound_method %.loc34, constants.%Op.5d7
 // CHECK:STDOUT:   %Op.specific_fn: <specific function> = specific_function constants.%Op.5d7, @Op.9(constants.%C) [concrete = constants.%Op.specific_fn]
-// CHECK:STDOUT:   %bound_method.loc33_5: <bound method> = bound_method %.loc33, %Op.specific_fn
-// CHECK:STDOUT:   %addr.loc33_5.2: %ptr.019 = addr_of %.loc33
-// CHECK:STDOUT:   %no_op: init %empty_tuple.type = call %bound_method.loc33_5(%addr.loc33_5.2)
+// CHECK:STDOUT:   %bound_method.loc34_5: <bound method> = bound_method %.loc34, %Op.specific_fn
+// CHECK:STDOUT:   %addr.loc34_5.2: %ptr.019 = addr_of %.loc34
+// CHECK:STDOUT:   %no_op: init %empty_tuple.type = call %bound_method.loc34_5(%addr.loc34_5.2)
 // CHECK:STDOUT:   return
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
@@ -221,15 +222,15 @@ fn TestAddAssignNonRef(a: C, b: C) {
 // CHECK:STDOUT:   %a.ref: %C = name_ref a, %a
 // CHECK:STDOUT:   %b.ref: %C = name_ref b, %b
 // CHECK:STDOUT:   %impl.elem0: %.e2d = impl_witness_access constants.%AddAssignWith.impl_witness, element0 [concrete = constants.%Op.572]
-// CHECK:STDOUT:   %bound_method.loc44_5: <bound method> = bound_method %a.ref, %impl.elem0
-// CHECK:STDOUT:   %.loc44: ref %C = temporary_storage
-// CHECK:STDOUT:   %addr.loc44_3.1: %ptr.019 = addr_of %.loc44
-// CHECK:STDOUT:   %Op.call: init %empty_tuple.type = call %bound_method.loc44_5(%addr.loc44_3.1, %b.ref)
-// CHECK:STDOUT:   %Op.bound: <bound method> = bound_method %.loc44, constants.%Op.5d7
+// CHECK:STDOUT:   %bound_method.loc45_5: <bound method> = bound_method %a.ref, %impl.elem0
+// CHECK:STDOUT:   %.loc45: ref %C = temporary_storage
+// CHECK:STDOUT:   %addr.loc45_3.1: %ptr.019 = addr_of %.loc45
+// CHECK:STDOUT:   %Op.call: init %empty_tuple.type = call %bound_method.loc45_5(%addr.loc45_3.1, %b.ref)
+// CHECK:STDOUT:   %Op.bound: <bound method> = bound_method %.loc45, constants.%Op.5d7
 // CHECK:STDOUT:   %Op.specific_fn: <specific function> = specific_function constants.%Op.5d7, @Op.9(constants.%C) [concrete = constants.%Op.specific_fn]
-// CHECK:STDOUT:   %bound_method.loc44_3: <bound method> = bound_method %.loc44, %Op.specific_fn
-// CHECK:STDOUT:   %addr.loc44_3.2: %ptr.019 = addr_of %.loc44
-// CHECK:STDOUT:   %no_op: init %empty_tuple.type = call %bound_method.loc44_3(%addr.loc44_3.2)
+// CHECK:STDOUT:   %bound_method.loc45_3: <bound method> = bound_method %.loc45, %Op.specific_fn
+// CHECK:STDOUT:   %addr.loc45_3.2: %ptr.019 = addr_of %.loc45
+// CHECK:STDOUT:   %no_op: init %empty_tuple.type = call %bound_method.loc45_3(%addr.loc45_3.2)
 // CHECK:STDOUT:   return
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 2 - 1
toolchain/check/testdata/operators/overloaded/fail_error_recovery.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -72,7 +73,7 @@ fn G(n: i32) {
 // CHECK:STDOUT:     %n.param_patt: %pattern_type.7ce = value_param_pattern %n.patt, call_param0 [concrete]
 // CHECK:STDOUT:   } {
 // CHECK:STDOUT:     %n.param: %i32 = value_param call_param0
-// CHECK:STDOUT:     %.loc25: type = splice_block %i32 [concrete = constants.%i32] {
+// CHECK:STDOUT:     %.loc26: type = splice_block %i32 [concrete = constants.%i32] {
 // CHECK:STDOUT:       %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
 // CHECK:STDOUT:       %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
 // CHECK:STDOUT:     }

+ 14 - 13
toolchain/check/testdata/operators/overloaded/fail_no_impl.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -106,9 +107,9 @@ fn TestRef(b: C) {
 // CHECK:STDOUT:     %return.patt: %pattern_type.c48 = return_slot_pattern [concrete]
 // CHECK:STDOUT:     %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param1 [concrete]
 // CHECK:STDOUT:   } {
-// CHECK:STDOUT:     %C.ref.loc18_23: type = name_ref C, file.%C.decl [concrete = constants.%C]
+// CHECK:STDOUT:     %C.ref.loc19_23: type = name_ref C, file.%C.decl [concrete = constants.%C]
 // CHECK:STDOUT:     %a.param: %C = value_param call_param0
-// CHECK:STDOUT:     %C.ref.loc18_17: type = name_ref C, file.%C.decl [concrete = constants.%C]
+// CHECK:STDOUT:     %C.ref.loc19_17: type = name_ref C, file.%C.decl [concrete = constants.%C]
 // CHECK:STDOUT:     %a: %C = bind_name a, %a.param
 // CHECK:STDOUT:     %return.param: ref %C = out_param call_param1
 // CHECK:STDOUT:     %return: ref %C = return_slot %return.param
@@ -121,12 +122,12 @@ fn TestRef(b: C) {
 // CHECK:STDOUT:     %return.patt: %pattern_type.c48 = return_slot_pattern [concrete]
 // CHECK:STDOUT:     %return.param_patt: %pattern_type.c48 = out_param_pattern %return.patt, call_param2 [concrete]
 // CHECK:STDOUT:   } {
-// CHECK:STDOUT:     %C.ref.loc26_30: type = name_ref C, file.%C.decl [concrete = constants.%C]
+// CHECK:STDOUT:     %C.ref.loc27_30: type = name_ref C, file.%C.decl [concrete = constants.%C]
 // CHECK:STDOUT:     %a.param: %C = value_param call_param0
-// CHECK:STDOUT:     %C.ref.loc26_18: type = name_ref C, file.%C.decl [concrete = constants.%C]
+// CHECK:STDOUT:     %C.ref.loc27_18: type = name_ref C, file.%C.decl [concrete = constants.%C]
 // CHECK:STDOUT:     %a: %C = bind_name a, %a.param
 // CHECK:STDOUT:     %b.param: %C = value_param call_param1
-// CHECK:STDOUT:     %C.ref.loc26_24: type = name_ref C, file.%C.decl [concrete = constants.%C]
+// CHECK:STDOUT:     %C.ref.loc27_24: type = name_ref C, file.%C.decl [concrete = constants.%C]
 // CHECK:STDOUT:     %b: %C = bind_name b, %b.param
 // CHECK:STDOUT:     %return.param: ref %C = out_param call_param2
 // CHECK:STDOUT:     %return: ref %C = return_slot %return.param
@@ -136,7 +137,7 @@ fn TestRef(b: C) {
 // CHECK:STDOUT:     %b.param_patt: %pattern_type.c48 = value_param_pattern %b.patt, call_param0 [concrete]
 // CHECK:STDOUT:   } {
 // CHECK:STDOUT:     %b.param: %C = value_param call_param0
-// CHECK:STDOUT:     %C.ref.loc34: type = name_ref C, file.%C.decl [concrete = constants.%C]
+// CHECK:STDOUT:     %C.ref.loc35: type = name_ref C, file.%C.decl [concrete = constants.%C]
 // CHECK:STDOUT:     %b: %C = bind_name b, %b.param
 // CHECK:STDOUT:   }
 // CHECK:STDOUT: }
@@ -170,15 +171,15 @@ fn TestRef(b: C) {
 // CHECK:STDOUT:     %a.var_patt: %pattern_type.c48 = var_pattern %a.patt [concrete]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %a.var: ref %C = var %a.var_patt
-// CHECK:STDOUT:   %.loc35_15.1: %empty_struct_type = struct_literal ()
-// CHECK:STDOUT:   %.loc35_15.2: init %C = class_init (), %a.var [concrete = constants.%C.val]
-// CHECK:STDOUT:   %.loc35_3: init %C = converted %.loc35_15.1, %.loc35_15.2 [concrete = constants.%C.val]
-// CHECK:STDOUT:   assign %a.var, %.loc35_3
-// CHECK:STDOUT:   %C.ref.loc35: type = name_ref C, file.%C.decl [concrete = constants.%C]
+// CHECK:STDOUT:   %.loc36_15.1: %empty_struct_type = struct_literal ()
+// CHECK:STDOUT:   %.loc36_15.2: init %C = class_init (), %a.var [concrete = constants.%C.val]
+// CHECK:STDOUT:   %.loc36_3: init %C = converted %.loc36_15.1, %.loc36_15.2 [concrete = constants.%C.val]
+// CHECK:STDOUT:   assign %a.var, %.loc36_3
+// CHECK:STDOUT:   %C.ref.loc36: type = name_ref C, file.%C.decl [concrete = constants.%C]
 // CHECK:STDOUT:   %a: ref %C = bind_name a, %a.var
-// CHECK:STDOUT:   %a.ref.loc40: ref %C = name_ref a, %a
+// CHECK:STDOUT:   %a.ref.loc41: ref %C = name_ref a, %a
 // CHECK:STDOUT:   %b.ref: %C = name_ref b, %b
-// CHECK:STDOUT:   %a.ref.loc45: ref %C = name_ref a, %a
+// CHECK:STDOUT:   %a.ref.loc46: ref %C = name_ref a, %a
 // CHECK:STDOUT:   %Op.bound: <bound method> = bound_method %a.var, constants.%Op.5d7
 // CHECK:STDOUT:   %Op.specific_fn: <specific function> = specific_function constants.%Op.5d7, @Op.10(constants.%C) [concrete = constants.%Op.specific_fn]
 // CHECK:STDOUT:   %bound_method: <bound method> = bound_method %a.var, %Op.specific_fn

+ 2 - 0
toolchain/check/testdata/operators/overloaded/fail_no_impl_for_arg.carbon

@@ -2,6 +2,8 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
+//
 // AUTOUPDATE
 // TIP: To test this file alone, run:
 // TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/check/testdata/operators/overloaded/fail_no_impl_for_arg.carbon

+ 5 - 4
toolchain/check/testdata/operators/overloaded/inc.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -37,7 +38,7 @@ fn TestOp() {
 // CHECK:STDOUT:   %empty_tuple.type: type = tuple_type () [concrete]
 // CHECK:STDOUT:   %Inc.impl_witness: <witness> = impl_witness file.%Inc.impl_witness_table [concrete]
 // CHECK:STDOUT:   %ptr.019: type = ptr_type %C [concrete]
-// CHECK:STDOUT:   %Op.type.73a: type = fn_type @Op.loc21 [concrete]
+// CHECK:STDOUT:   %Op.type.73a: type = fn_type @Op.loc22 [concrete]
 // CHECK:STDOUT:   %Op.0c9: %Op.type.73a = struct_value () [concrete]
 // CHECK:STDOUT:   %Inc.facet: %Inc.type = facet_value %C, (%Inc.impl_witness) [concrete]
 // CHECK:STDOUT:   %.bc7: type = fn_type_with_self_type %Op.type.e3a, %Inc.facet [concrete]
@@ -51,9 +52,9 @@ fn TestOp() {
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT:   %c.ref: ref %C = name_ref c, %c
 // CHECK:STDOUT:   %impl.elem0: %.bc7 = impl_witness_access constants.%Inc.impl_witness, element0 [concrete = constants.%Op.0c9]
-// CHECK:STDOUT:   %bound_method.loc27: <bound method> = bound_method %c.ref, %impl.elem0
-// CHECK:STDOUT:   %addr.loc27: %ptr.019 = addr_of %c.ref
-// CHECK:STDOUT:   %Op.call: init %empty_tuple.type = call %bound_method.loc27(%addr.loc27)
+// CHECK:STDOUT:   %bound_method.loc28: <bound method> = bound_method %c.ref, %impl.elem0
+// CHECK:STDOUT:   %addr.loc28: %ptr.019 = addr_of %c.ref
+// CHECK:STDOUT:   %Op.call: init %empty_tuple.type = call %bound_method.loc28(%addr.loc28)
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 1 - 0
toolchain/check/testdata/operators/overloaded/index_with_prelude.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //

+ 8 - 7
toolchain/check/testdata/operators/overloaded/left_shift.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -46,14 +47,14 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT:   %LeftShiftWith.type.f92: type = facet_type <@LeftShiftWith, @LeftShiftWith(%C)> [concrete]
 // CHECK:STDOUT:   %Op.type.097: type = fn_type @Op.1, @LeftShiftWith(%C) [concrete]
 // CHECK:STDOUT:   %LeftShiftWith.impl_witness: <witness> = impl_witness file.%LeftShiftWith.impl_witness_table [concrete]
-// CHECK:STDOUT:   %Op.type.be6: type = fn_type @Op.loc21 [concrete]
+// CHECK:STDOUT:   %Op.type.be6: type = fn_type @Op.loc22 [concrete]
 // CHECK:STDOUT:   %Op.4d9: %Op.type.be6 = struct_value () [concrete]
 // CHECK:STDOUT:   %LeftShiftWith.facet.662: %LeftShiftWith.type.f92 = facet_value %C, (%LeftShiftWith.impl_witness) [concrete]
 // CHECK:STDOUT:   %LeftShiftAssignWith.type.56d: type = facet_type <@LeftShiftAssignWith, @LeftShiftAssignWith(%C)> [concrete]
 // CHECK:STDOUT:   %Op.type.30f: type = fn_type @Op.6, @LeftShiftAssignWith(%C) [concrete]
 // CHECK:STDOUT:   %LeftShiftAssignWith.impl_witness: <witness> = impl_witness file.%LeftShiftAssignWith.impl_witness_table [concrete]
 // CHECK:STDOUT:   %ptr.019: type = ptr_type %C [concrete]
-// CHECK:STDOUT:   %Op.type.b1b6: type = fn_type @Op.loc26 [concrete]
+// CHECK:STDOUT:   %Op.type.b1b6: type = fn_type @Op.loc27 [concrete]
 // CHECK:STDOUT:   %Op.07c: %Op.type.b1b6 = struct_value () [concrete]
 // CHECK:STDOUT:   %LeftShiftAssignWith.facet: %LeftShiftAssignWith.type.56d = facet_value %C, (%LeftShiftAssignWith.impl_witness) [concrete]
 // CHECK:STDOUT:   %.cd9: type = fn_type_with_self_type %Op.type.097, %LeftShiftWith.facet.662 [concrete]
@@ -68,9 +69,9 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT:   %a.ref: %C = name_ref a, %a
 // CHECK:STDOUT:   %b.ref: %C = name_ref b, %b
 // CHECK:STDOUT:   %impl.elem1: %.cd9 = impl_witness_access constants.%LeftShiftWith.impl_witness, element1 [concrete = constants.%Op.4d9]
-// CHECK:STDOUT:   %bound_method.loc31: <bound method> = bound_method %a.ref, %impl.elem1
+// CHECK:STDOUT:   %bound_method.loc32: <bound method> = bound_method %a.ref, %impl.elem1
 // CHECK:STDOUT:   <elided>
-// CHECK:STDOUT:   %Op.call: init %C = call %bound_method.loc31(%a.ref, %b.ref) to %.loc29
+// CHECK:STDOUT:   %Op.call: init %C = call %bound_method.loc32(%a.ref, %b.ref) to %.loc30
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT:   return %Op.call to %return
 // CHECK:STDOUT: }
@@ -78,11 +79,11 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT: fn @TestAssign(%a.param: %ptr.019, %b.param: %C) {
 // CHECK:STDOUT: !entry:
 // CHECK:STDOUT:   %a.ref: %ptr.019 = name_ref a, %a
-// CHECK:STDOUT:   %.loc37: ref %C = deref %a.ref
+// CHECK:STDOUT:   %.loc38: ref %C = deref %a.ref
 // CHECK:STDOUT:   %b.ref: %C = name_ref b, %b
 // CHECK:STDOUT:   %impl.elem0: %.97b = impl_witness_access constants.%LeftShiftAssignWith.impl_witness, element0 [concrete = constants.%Op.07c]
-// CHECK:STDOUT:   %bound_method: <bound method> = bound_method %.loc37, %impl.elem0
-// CHECK:STDOUT:   %addr: %ptr.019 = addr_of %.loc37
+// CHECK:STDOUT:   %bound_method: <bound method> = bound_method %.loc38, %impl.elem0
+// CHECK:STDOUT:   %addr: %ptr.019 = addr_of %.loc38
 // CHECK:STDOUT:   %Op.call: init %empty_tuple.type = call %bound_method(%addr, %b.ref)
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT: }

+ 8 - 7
toolchain/check/testdata/operators/overloaded/mod.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -46,14 +47,14 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT:   %ModWith.type.4d0: type = facet_type <@ModWith, @ModWith(%C)> [concrete]
 // CHECK:STDOUT:   %Op.type.140: type = fn_type @Op.1, @ModWith(%C) [concrete]
 // CHECK:STDOUT:   %ModWith.impl_witness: <witness> = impl_witness file.%ModWith.impl_witness_table [concrete]
-// CHECK:STDOUT:   %Op.type.0ad: type = fn_type @Op.loc21 [concrete]
+// CHECK:STDOUT:   %Op.type.0ad: type = fn_type @Op.loc22 [concrete]
 // CHECK:STDOUT:   %Op.d57: %Op.type.0ad = struct_value () [concrete]
 // CHECK:STDOUT:   %ModWith.facet.517: %ModWith.type.4d0 = facet_value %C, (%ModWith.impl_witness) [concrete]
 // CHECK:STDOUT:   %ModAssignWith.type.8eb: type = facet_type <@ModAssignWith, @ModAssignWith(%C)> [concrete]
 // CHECK:STDOUT:   %Op.type.dd0: type = fn_type @Op.6, @ModAssignWith(%C) [concrete]
 // CHECK:STDOUT:   %ModAssignWith.impl_witness: <witness> = impl_witness file.%ModAssignWith.impl_witness_table [concrete]
 // CHECK:STDOUT:   %ptr.019: type = ptr_type %C [concrete]
-// CHECK:STDOUT:   %Op.type.4dd: type = fn_type @Op.loc26 [concrete]
+// CHECK:STDOUT:   %Op.type.4dd: type = fn_type @Op.loc27 [concrete]
 // CHECK:STDOUT:   %Op.4f0: %Op.type.4dd = struct_value () [concrete]
 // CHECK:STDOUT:   %ModAssignWith.facet: %ModAssignWith.type.8eb = facet_value %C, (%ModAssignWith.impl_witness) [concrete]
 // CHECK:STDOUT:   %.f08: type = fn_type_with_self_type %Op.type.140, %ModWith.facet.517 [concrete]
@@ -68,9 +69,9 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT:   %a.ref: %C = name_ref a, %a
 // CHECK:STDOUT:   %b.ref: %C = name_ref b, %b
 // CHECK:STDOUT:   %impl.elem1: %.f08 = impl_witness_access constants.%ModWith.impl_witness, element1 [concrete = constants.%Op.d57]
-// CHECK:STDOUT:   %bound_method.loc31: <bound method> = bound_method %a.ref, %impl.elem1
+// CHECK:STDOUT:   %bound_method.loc32: <bound method> = bound_method %a.ref, %impl.elem1
 // CHECK:STDOUT:   <elided>
-// CHECK:STDOUT:   %Op.call: init %C = call %bound_method.loc31(%a.ref, %b.ref) to %.loc29
+// CHECK:STDOUT:   %Op.call: init %C = call %bound_method.loc32(%a.ref, %b.ref) to %.loc30
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT:   return %Op.call to %return
 // CHECK:STDOUT: }
@@ -78,11 +79,11 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT: fn @TestAssign(%a.param: %ptr.019, %b.param: %C) {
 // CHECK:STDOUT: !entry:
 // CHECK:STDOUT:   %a.ref: %ptr.019 = name_ref a, %a
-// CHECK:STDOUT:   %.loc37: ref %C = deref %a.ref
+// CHECK:STDOUT:   %.loc38: ref %C = deref %a.ref
 // CHECK:STDOUT:   %b.ref: %C = name_ref b, %b
 // CHECK:STDOUT:   %impl.elem0: %.f3c = impl_witness_access constants.%ModAssignWith.impl_witness, element0 [concrete = constants.%Op.4f0]
-// CHECK:STDOUT:   %bound_method: <bound method> = bound_method %.loc37, %impl.elem0
-// CHECK:STDOUT:   %addr: %ptr.019 = addr_of %.loc37
+// CHECK:STDOUT:   %bound_method: <bound method> = bound_method %.loc38, %impl.elem0
+// CHECK:STDOUT:   %addr: %ptr.019 = addr_of %.loc38
 // CHECK:STDOUT:   %Op.call: init %empty_tuple.type = call %bound_method(%addr, %b.ref)
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT: }

+ 8 - 7
toolchain/check/testdata/operators/overloaded/mul.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -46,14 +47,14 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT:   %MulWith.type.3ed: type = facet_type <@MulWith, @MulWith(%C)> [concrete]
 // CHECK:STDOUT:   %Op.type.2c9: type = fn_type @Op.1, @MulWith(%C) [concrete]
 // CHECK:STDOUT:   %MulWith.impl_witness: <witness> = impl_witness file.%MulWith.impl_witness_table [concrete]
-// CHECK:STDOUT:   %Op.type.304: type = fn_type @Op.loc21 [concrete]
+// CHECK:STDOUT:   %Op.type.304: type = fn_type @Op.loc22 [concrete]
 // CHECK:STDOUT:   %Op.7af: %Op.type.304 = struct_value () [concrete]
 // CHECK:STDOUT:   %MulWith.facet.6c2: %MulWith.type.3ed = facet_value %C, (%MulWith.impl_witness) [concrete]
 // CHECK:STDOUT:   %MulAssignWith.type.a15: type = facet_type <@MulAssignWith, @MulAssignWith(%C)> [concrete]
 // CHECK:STDOUT:   %Op.type.5c8: type = fn_type @Op.6, @MulAssignWith(%C) [concrete]
 // CHECK:STDOUT:   %MulAssignWith.impl_witness: <witness> = impl_witness file.%MulAssignWith.impl_witness_table [concrete]
 // CHECK:STDOUT:   %ptr.019: type = ptr_type %C [concrete]
-// CHECK:STDOUT:   %Op.type.e9a: type = fn_type @Op.loc26 [concrete]
+// CHECK:STDOUT:   %Op.type.e9a: type = fn_type @Op.loc27 [concrete]
 // CHECK:STDOUT:   %Op.d43: %Op.type.e9a = struct_value () [concrete]
 // CHECK:STDOUT:   %MulAssignWith.facet: %MulAssignWith.type.a15 = facet_value %C, (%MulAssignWith.impl_witness) [concrete]
 // CHECK:STDOUT:   %.6ce: type = fn_type_with_self_type %Op.type.2c9, %MulWith.facet.6c2 [concrete]
@@ -68,9 +69,9 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT:   %a.ref: %C = name_ref a, %a
 // CHECK:STDOUT:   %b.ref: %C = name_ref b, %b
 // CHECK:STDOUT:   %impl.elem1: %.6ce = impl_witness_access constants.%MulWith.impl_witness, element1 [concrete = constants.%Op.7af]
-// CHECK:STDOUT:   %bound_method.loc31: <bound method> = bound_method %a.ref, %impl.elem1
+// CHECK:STDOUT:   %bound_method.loc32: <bound method> = bound_method %a.ref, %impl.elem1
 // CHECK:STDOUT:   <elided>
-// CHECK:STDOUT:   %Op.call: init %C = call %bound_method.loc31(%a.ref, %b.ref) to %.loc29
+// CHECK:STDOUT:   %Op.call: init %C = call %bound_method.loc32(%a.ref, %b.ref) to %.loc30
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT:   return %Op.call to %return
 // CHECK:STDOUT: }
@@ -78,11 +79,11 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT: fn @TestAssign(%a.param: %ptr.019, %b.param: %C) {
 // CHECK:STDOUT: !entry:
 // CHECK:STDOUT:   %a.ref: %ptr.019 = name_ref a, %a
-// CHECK:STDOUT:   %.loc37: ref %C = deref %a.ref
+// CHECK:STDOUT:   %.loc38: ref %C = deref %a.ref
 // CHECK:STDOUT:   %b.ref: %C = name_ref b, %b
 // CHECK:STDOUT:   %impl.elem0: %.5e8 = impl_witness_access constants.%MulAssignWith.impl_witness, element0 [concrete = constants.%Op.d43]
-// CHECK:STDOUT:   %bound_method: <bound method> = bound_method %.loc37, %impl.elem0
-// CHECK:STDOUT:   %addr: %ptr.019 = addr_of %.loc37
+// CHECK:STDOUT:   %bound_method: <bound method> = bound_method %.loc38, %impl.elem0
+// CHECK:STDOUT:   %addr: %ptr.019 = addr_of %.loc38
 // CHECK:STDOUT:   %Op.call: init %empty_tuple.type = call %bound_method(%addr, %b.ref)
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT: }

+ 1 - 0
toolchain/check/testdata/operators/overloaded/ordered.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //

+ 8 - 7
toolchain/check/testdata/operators/overloaded/right_shift.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -46,14 +47,14 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT:   %RightShiftWith.type.bd6: type = facet_type <@RightShiftWith, @RightShiftWith(%C)> [concrete]
 // CHECK:STDOUT:   %Op.type.19b: type = fn_type @Op.1, @RightShiftWith(%C) [concrete]
 // CHECK:STDOUT:   %RightShiftWith.impl_witness: <witness> = impl_witness file.%RightShiftWith.impl_witness_table [concrete]
-// CHECK:STDOUT:   %Op.type.873: type = fn_type @Op.loc21 [concrete]
+// CHECK:STDOUT:   %Op.type.873: type = fn_type @Op.loc22 [concrete]
 // CHECK:STDOUT:   %Op.909: %Op.type.873 = struct_value () [concrete]
 // CHECK:STDOUT:   %RightShiftWith.facet.fb0: %RightShiftWith.type.bd6 = facet_value %C, (%RightShiftWith.impl_witness) [concrete]
 // CHECK:STDOUT:   %RightShiftAssignWith.type.cd0: type = facet_type <@RightShiftAssignWith, @RightShiftAssignWith(%C)> [concrete]
 // CHECK:STDOUT:   %Op.type.ae9: type = fn_type @Op.6, @RightShiftAssignWith(%C) [concrete]
 // CHECK:STDOUT:   %RightShiftAssignWith.impl_witness: <witness> = impl_witness file.%RightShiftAssignWith.impl_witness_table [concrete]
 // CHECK:STDOUT:   %ptr.019: type = ptr_type %C [concrete]
-// CHECK:STDOUT:   %Op.type.e0c: type = fn_type @Op.loc26 [concrete]
+// CHECK:STDOUT:   %Op.type.e0c: type = fn_type @Op.loc27 [concrete]
 // CHECK:STDOUT:   %Op.6a2: %Op.type.e0c = struct_value () [concrete]
 // CHECK:STDOUT:   %RightShiftAssignWith.facet: %RightShiftAssignWith.type.cd0 = facet_value %C, (%RightShiftAssignWith.impl_witness) [concrete]
 // CHECK:STDOUT:   %.982: type = fn_type_with_self_type %Op.type.19b, %RightShiftWith.facet.fb0 [concrete]
@@ -68,9 +69,9 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT:   %a.ref: %C = name_ref a, %a
 // CHECK:STDOUT:   %b.ref: %C = name_ref b, %b
 // CHECK:STDOUT:   %impl.elem1: %.982 = impl_witness_access constants.%RightShiftWith.impl_witness, element1 [concrete = constants.%Op.909]
-// CHECK:STDOUT:   %bound_method.loc31: <bound method> = bound_method %a.ref, %impl.elem1
+// CHECK:STDOUT:   %bound_method.loc32: <bound method> = bound_method %a.ref, %impl.elem1
 // CHECK:STDOUT:   <elided>
-// CHECK:STDOUT:   %Op.call: init %C = call %bound_method.loc31(%a.ref, %b.ref) to %.loc29
+// CHECK:STDOUT:   %Op.call: init %C = call %bound_method.loc32(%a.ref, %b.ref) to %.loc30
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT:   return %Op.call to %return
 // CHECK:STDOUT: }
@@ -78,11 +79,11 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT: fn @TestAssign(%a.param: %ptr.019, %b.param: %C) {
 // CHECK:STDOUT: !entry:
 // CHECK:STDOUT:   %a.ref: %ptr.019 = name_ref a, %a
-// CHECK:STDOUT:   %.loc37: ref %C = deref %a.ref
+// CHECK:STDOUT:   %.loc38: ref %C = deref %a.ref
 // CHECK:STDOUT:   %b.ref: %C = name_ref b, %b
 // CHECK:STDOUT:   %impl.elem0: %.d41 = impl_witness_access constants.%RightShiftAssignWith.impl_witness, element0 [concrete = constants.%Op.6a2]
-// CHECK:STDOUT:   %bound_method: <bound method> = bound_method %.loc37, %impl.elem0
-// CHECK:STDOUT:   %addr: %ptr.019 = addr_of %.loc37
+// CHECK:STDOUT:   %bound_method: <bound method> = bound_method %.loc38, %impl.elem0
+// CHECK:STDOUT:   %addr: %ptr.019 = addr_of %.loc38
 // CHECK:STDOUT:   %Op.call: init %empty_tuple.type = call %bound_method(%addr, %b.ref)
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT: }

+ 8 - 7
toolchain/check/testdata/operators/overloaded/sub.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -46,14 +47,14 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT:   %SubWith.type.d29: type = facet_type <@SubWith, @SubWith(%C)> [concrete]
 // CHECK:STDOUT:   %Op.type.fc0: type = fn_type @Op.1, @SubWith(%C) [concrete]
 // CHECK:STDOUT:   %SubWith.impl_witness: <witness> = impl_witness file.%SubWith.impl_witness_table [concrete]
-// CHECK:STDOUT:   %Op.type.3fa: type = fn_type @Op.loc21 [concrete]
+// CHECK:STDOUT:   %Op.type.3fa: type = fn_type @Op.loc22 [concrete]
 // CHECK:STDOUT:   %Op.5e4: %Op.type.3fa = struct_value () [concrete]
 // CHECK:STDOUT:   %SubWith.facet.0b6: %SubWith.type.d29 = facet_value %C, (%SubWith.impl_witness) [concrete]
 // CHECK:STDOUT:   %SubAssignWith.type.df6: type = facet_type <@SubAssignWith, @SubAssignWith(%C)> [concrete]
 // CHECK:STDOUT:   %Op.type.ffe: type = fn_type @Op.6, @SubAssignWith(%C) [concrete]
 // CHECK:STDOUT:   %SubAssignWith.impl_witness: <witness> = impl_witness file.%SubAssignWith.impl_witness_table [concrete]
 // CHECK:STDOUT:   %ptr.019: type = ptr_type %C [concrete]
-// CHECK:STDOUT:   %Op.type.26d: type = fn_type @Op.loc26 [concrete]
+// CHECK:STDOUT:   %Op.type.26d: type = fn_type @Op.loc27 [concrete]
 // CHECK:STDOUT:   %Op.f7d: %Op.type.26d = struct_value () [concrete]
 // CHECK:STDOUT:   %SubAssignWith.facet: %SubAssignWith.type.df6 = facet_value %C, (%SubAssignWith.impl_witness) [concrete]
 // CHECK:STDOUT:   %.71c: type = fn_type_with_self_type %Op.type.fc0, %SubWith.facet.0b6 [concrete]
@@ -68,9 +69,9 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT:   %a.ref: %C = name_ref a, %a
 // CHECK:STDOUT:   %b.ref: %C = name_ref b, %b
 // CHECK:STDOUT:   %impl.elem1: %.71c = impl_witness_access constants.%SubWith.impl_witness, element1 [concrete = constants.%Op.5e4]
-// CHECK:STDOUT:   %bound_method.loc31: <bound method> = bound_method %a.ref, %impl.elem1
+// CHECK:STDOUT:   %bound_method.loc32: <bound method> = bound_method %a.ref, %impl.elem1
 // CHECK:STDOUT:   <elided>
-// CHECK:STDOUT:   %Op.call: init %C = call %bound_method.loc31(%a.ref, %b.ref) to %.loc29
+// CHECK:STDOUT:   %Op.call: init %C = call %bound_method.loc32(%a.ref, %b.ref) to %.loc30
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT:   return %Op.call to %return
 // CHECK:STDOUT: }
@@ -78,11 +79,11 @@ fn TestAssign(a: C*, b: C) {
 // CHECK:STDOUT: fn @TestAssign(%a.param: %ptr.019, %b.param: %C) {
 // CHECK:STDOUT: !entry:
 // CHECK:STDOUT:   %a.ref: %ptr.019 = name_ref a, %a
-// CHECK:STDOUT:   %.loc37: ref %C = deref %a.ref
+// CHECK:STDOUT:   %.loc38: ref %C = deref %a.ref
 // CHECK:STDOUT:   %b.ref: %C = name_ref b, %b
 // CHECK:STDOUT:   %impl.elem0: %.647 = impl_witness_access constants.%SubAssignWith.impl_witness, element0 [concrete = constants.%Op.f7d]
-// CHECK:STDOUT:   %bound_method: <bound method> = bound_method %.loc37, %impl.elem0
-// CHECK:STDOUT:   %addr: %ptr.019 = addr_of %.loc37
+// CHECK:STDOUT:   %bound_method: <bound method> = bound_method %.loc38, %impl.elem0
+// CHECK:STDOUT:   %addr: %ptr.019 = addr_of %.loc38
 // CHECK:STDOUT:   %Op.call: init %empty_tuple.type = call %bound_method(%addr, %b.ref)
 // CHECK:STDOUT:   <elided>
 // CHECK:STDOUT: }

+ 2 - 1
toolchain/check/testdata/packages/fail_import_type_error.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/int.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -125,7 +126,7 @@ var d: i32 = d_ref;
 // CHECK:STDOUT:     import Core//prelude
 // CHECK:STDOUT:     import Core//prelude/...
 // CHECK:STDOUT:   }
-// CHECK:STDOUT:   %Core.Int: %Int.type = import_ref Core//prelude/types/int, Int, loaded [concrete = constants.%Int.generic]
+// CHECK:STDOUT:   %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {

+ 1 - 9
toolchain/check/testdata/packages/fail_name_with_import_failure.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/none.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -28,22 +29,13 @@ var a: () = A();
 // CHECK:STDOUT:   %pattern_type: type = pattern_type %empty_tuple.type [concrete]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: imports {
-// CHECK:STDOUT:   %Core: <namespace> = namespace file.%Core.import, [concrete] {
-// CHECK:STDOUT:     import Core//prelude
-// CHECK:STDOUT:     import Core//prelude/...
-// CHECK:STDOUT:   }
-// CHECK:STDOUT: }
-// CHECK:STDOUT:
 // CHECK:STDOUT: file {
 // CHECK:STDOUT:   package: <namespace> = namespace [concrete] {
-// CHECK:STDOUT:     .Core = imports.%Core
 // CHECK:STDOUT:     .a = %a
 // CHECK:STDOUT:     .A = <poisoned>
 // CHECK:STDOUT:     has_error
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %default.import = import <none>
-// CHECK:STDOUT:   %Core.import = import Core
 // CHECK:STDOUT:   name_binding_decl {
 // CHECK:STDOUT:     %a.patt: %pattern_type = binding_pattern a [concrete]
 // CHECK:STDOUT:     %a.var_patt: %pattern_type = var_pattern %a.patt [concrete]

+ 1 - 30
toolchain/check/testdata/packages/loaded_global.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/none.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -48,19 +49,10 @@ var package_b: () = package.B();
 // CHECK:STDOUT:   %A: %A.type = struct_value () [concrete]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: imports {
-// CHECK:STDOUT:   %Core: <namespace> = namespace file.%Core.import, [concrete] {
-// CHECK:STDOUT:     import Core//prelude
-// CHECK:STDOUT:     import Core//prelude/...
-// CHECK:STDOUT:   }
-// CHECK:STDOUT: }
-// CHECK:STDOUT:
 // CHECK:STDOUT: file {
 // CHECK:STDOUT:   package: <namespace> = namespace [concrete] {
-// CHECK:STDOUT:     .Core = imports.%Core
 // CHECK:STDOUT:     .A = %A.decl
 // CHECK:STDOUT:   }
-// CHECK:STDOUT:   %Core.import = import Core
 // CHECK:STDOUT:   %A.decl: %A.type = fn_decl @A [concrete = constants.%A] {} {}
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
@@ -77,22 +69,16 @@ var package_b: () = package.B();
 // CHECK:STDOUT:
 // CHECK:STDOUT: imports {
 // CHECK:STDOUT:   %Implicit.A: %A.type = import_ref Implicit//default, A, loaded [concrete = constants.%A]
-// CHECK:STDOUT:   %Core: <namespace> = namespace file.%Core.import, [concrete] {
-// CHECK:STDOUT:     import Core//prelude
-// CHECK:STDOUT:     import Core//prelude/...
-// CHECK:STDOUT:   }
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
 // CHECK:STDOUT:   package: <namespace> = namespace [concrete] {
 // CHECK:STDOUT:     .A = imports.%Implicit.A
-// CHECK:STDOUT:     .Core = imports.%Core
 // CHECK:STDOUT:     .a = %a
 // CHECK:STDOUT:     .package_a = %package_a
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %Implicit.import = import Implicit
 // CHECK:STDOUT:   %default.import = import <none>
-// CHECK:STDOUT:   %Core.import = import Core
 // CHECK:STDOUT:   name_binding_decl {
 // CHECK:STDOUT:     %a.patt: %pattern_type = binding_pattern a [concrete]
 // CHECK:STDOUT:     %a.var_patt: %pattern_type = var_pattern %a.patt [concrete]
@@ -136,19 +122,10 @@ var package_b: () = package.B();
 // CHECK:STDOUT:   %B: %B.type = struct_value () [concrete]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: imports {
-// CHECK:STDOUT:   %Core: <namespace> = namespace file.%Core.import, [concrete] {
-// CHECK:STDOUT:     import Core//prelude
-// CHECK:STDOUT:     import Core//prelude/...
-// CHECK:STDOUT:   }
-// CHECK:STDOUT: }
-// CHECK:STDOUT:
 // CHECK:STDOUT: file {
 // CHECK:STDOUT:   package: <namespace> = namespace [concrete] {
-// CHECK:STDOUT:     .Core = imports.%Core
 // CHECK:STDOUT:     .B = %B.decl
 // CHECK:STDOUT:   }
-// CHECK:STDOUT:   %Core.import = import Core
 // CHECK:STDOUT:   %B.decl: %B.type = fn_decl @B [concrete = constants.%B] {} {}
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
@@ -165,20 +142,14 @@ var package_b: () = package.B();
 // CHECK:STDOUT:
 // CHECK:STDOUT: imports {
 // CHECK:STDOUT:   %SamePackage.B: %B.type = import_ref SamePackage//default, B, loaded [concrete = constants.%B]
-// CHECK:STDOUT:   %Core: <namespace> = namespace file.%Core.import, [concrete] {
-// CHECK:STDOUT:     import Core//prelude
-// CHECK:STDOUT:     import Core//prelude/...
-// CHECK:STDOUT:   }
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
 // CHECK:STDOUT:   package: <namespace> = namespace [concrete] {
 // CHECK:STDOUT:     .B = imports.%SamePackage.B
-// CHECK:STDOUT:     .Core = imports.%Core
 // CHECK:STDOUT:     .b = %b
 // CHECK:STDOUT:     .package_b = %package_b
 // CHECK:STDOUT:   }
-// CHECK:STDOUT:   %Core.import = import Core
 // CHECK:STDOUT:   %default.import = import <none>
 // CHECK:STDOUT:   name_binding_decl {
 // CHECK:STDOUT:     %b.patt: %pattern_type = binding_pattern b [concrete]

+ 1 - 15
toolchain/check/testdata/packages/unused_lazy_import.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/none.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -28,19 +29,10 @@ impl package Implicit;
 // CHECK:STDOUT:   %A: %A.type = struct_value () [concrete]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: imports {
-// CHECK:STDOUT:   %Core: <namespace> = namespace file.%Core.import, [concrete] {
-// CHECK:STDOUT:     import Core//prelude
-// CHECK:STDOUT:     import Core//prelude/...
-// CHECK:STDOUT:   }
-// CHECK:STDOUT: }
-// CHECK:STDOUT:
 // CHECK:STDOUT: file {
 // CHECK:STDOUT:   package: <namespace> = namespace [concrete] {
-// CHECK:STDOUT:     .Core = imports.%Core
 // CHECK:STDOUT:     .A = %A.decl
 // CHECK:STDOUT:   }
-// CHECK:STDOUT:   %Core.import = import Core
 // CHECK:STDOUT:   %A.decl: %A.type = fn_decl @A [concrete = constants.%A] {} {}
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
@@ -50,19 +42,13 @@ impl package Implicit;
 // CHECK:STDOUT:
 // CHECK:STDOUT: imports {
 // CHECK:STDOUT:   %Implicit.A = import_ref Implicit//default, A, unloaded
-// CHECK:STDOUT:   %Core: <namespace> = namespace file.%Core.import, [concrete] {
-// CHECK:STDOUT:     import Core//prelude
-// CHECK:STDOUT:     import Core//prelude/...
-// CHECK:STDOUT:   }
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
 // CHECK:STDOUT:   package: <namespace> = namespace [concrete] {
 // CHECK:STDOUT:     .A = imports.%Implicit.A
-// CHECK:STDOUT:     .Core = imports.%Core
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %Implicit.import = import Implicit
 // CHECK:STDOUT:   %default.import = import <none>
-// CHECK:STDOUT:   %Core.import = import Core
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 3 - 11
toolchain/check/testdata/return/fail_missing_return_empty_tuple.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/none.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -27,25 +28,16 @@ fn F() -> () {
 // CHECK:STDOUT:   %F: %F.type = struct_value () [concrete]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
-// CHECK:STDOUT: imports {
-// CHECK:STDOUT:   %Core: <namespace> = namespace file.%Core.import, [concrete] {
-// CHECK:STDOUT:     import Core//prelude
-// CHECK:STDOUT:     import Core//prelude/...
-// CHECK:STDOUT:   }
-// CHECK:STDOUT: }
-// CHECK:STDOUT:
 // CHECK:STDOUT: file {
 // CHECK:STDOUT:   package: <namespace> = namespace [concrete] {
-// CHECK:STDOUT:     .Core = imports.%Core
 // CHECK:STDOUT:     .F = %F.decl
 // CHECK:STDOUT:   }
-// CHECK:STDOUT:   %Core.import = import Core
 // CHECK:STDOUT:   %F.decl: %F.type = fn_decl @F [concrete = constants.%F] {
 // CHECK:STDOUT:     %return.patt: %pattern_type = return_slot_pattern [concrete]
 // CHECK:STDOUT:     %return.param_patt: %pattern_type = out_param_pattern %return.patt, call_param0 [concrete]
 // CHECK:STDOUT:   } {
-// CHECK:STDOUT:     %.loc14_12.1: %empty_tuple.type = tuple_literal ()
-// CHECK:STDOUT:     %.loc14_12.2: type = converted %.loc14_12.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type]
+// CHECK:STDOUT:     %.loc15_12.1: %empty_tuple.type = tuple_literal ()
+// CHECK:STDOUT:     %.loc15_12.2: type = converted %.loc15_12.1, constants.%empty_tuple.type [concrete = constants.%empty_tuple.type]
 // CHECK:STDOUT:     %return.param: ref %empty_tuple.type = out_param call_param0
 // CHECK:STDOUT:     %return: ref %empty_tuple.type = return_slot %return.param
 // CHECK:STDOUT:   }

+ 2 - 1
toolchain/check/testdata/return/fail_return_var_no_returned_var.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/int.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -37,7 +38,7 @@ fn Procedure() -> i32 {
 // CHECK:STDOUT:     import Core//prelude
 // CHECK:STDOUT:     import Core//prelude/...
 // CHECK:STDOUT:   }
-// CHECK:STDOUT:   %Core.Int: %Int.type = import_ref Core//prelude/types/int, Int, loaded [concrete = constants.%Int.generic]
+// CHECK:STDOUT:   %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {

+ 5 - 4
toolchain/check/testdata/struct/fail_type_assign.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/int.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -40,8 +41,8 @@ var x: {.a: i32} = {.a: i32};
 // CHECK:STDOUT:     import Core//prelude
 // CHECK:STDOUT:     import Core//prelude/...
 // CHECK:STDOUT:   }
-// CHECK:STDOUT:   %Core.Int: %Int.type = import_ref Core//prelude/types/int, Int, loaded [concrete = constants.%Int.generic]
-// CHECK:STDOUT:   %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/operators/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic]
+// CHECK:STDOUT:   %Core.Int: %Int.type = import_ref Core//prelude/parts/int, Int, loaded [concrete = constants.%Int.generic]
+// CHECK:STDOUT:   %Core.ImplicitAs: %ImplicitAs.type.cc7 = import_ref Core//prelude/parts/as, ImplicitAs, loaded [concrete = constants.%ImplicitAs.generic]
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: file {
@@ -55,7 +56,7 @@ var x: {.a: i32} = {.a: i32};
 // CHECK:STDOUT:     %x.var_patt: %pattern_type.268 = var_pattern %x.patt [concrete]
 // CHECK:STDOUT:   }
 // CHECK:STDOUT:   %x.var: ref %struct_type.a = var %x.var_patt [concrete]
-// CHECK:STDOUT:   %.loc21: type = splice_block %struct_type.a [concrete = constants.%struct_type.a] {
+// CHECK:STDOUT:   %.loc22: type = splice_block %struct_type.a [concrete = constants.%struct_type.a] {
 // CHECK:STDOUT:     %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
 // CHECK:STDOUT:     %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
 // CHECK:STDOUT:     %struct_type.a: type = struct_type {.a: %i32} [concrete = constants.%struct_type.a]
@@ -68,7 +69,7 @@ var x: {.a: i32} = {.a: i32};
 // CHECK:STDOUT:   %int_32: Core.IntLiteral = int_value 32 [concrete = constants.%int_32]
 // CHECK:STDOUT:   %i32: type = class_type @Int, @Int(constants.%int_32) [concrete = constants.%i32]
 // CHECK:STDOUT:   %struct_type.a: type = struct_type {.a: %i32} [concrete = constants.%struct_type.a]
-// CHECK:STDOUT:   %.loc21: %struct_type.a = converted %struct_type.a, <error> [concrete = <error>]
+// CHECK:STDOUT:   %.loc22: %struct_type.a = converted %struct_type.a, <error> [concrete = <error>]
 // CHECK:STDOUT:   assign file.%x.var, <error>
 // CHECK:STDOUT:   return
 // CHECK:STDOUT: }

+ 11 - 10
toolchain/check/testdata/var/fail_not_copyable.carbon

@@ -2,6 +2,7 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
 // TODO: Add ranges and switch to "--dump-sem-ir-ranges=only".
 // EXTRA-ARGS: --dump-sem-ir-ranges=if-present
 //
@@ -76,7 +77,7 @@ fn F(x: X) {
 // CHECK:STDOUT:     %x.param_patt: %pattern_type.019 = value_param_pattern %x.patt, call_param0 [concrete]
 // CHECK:STDOUT:   } {
 // CHECK:STDOUT:     %x.param: %X = value_param call_param0
-// CHECK:STDOUT:     %X.ref.loc17: type = name_ref X, file.%X.decl [concrete = constants.%X]
+// CHECK:STDOUT:     %X.ref.loc18: type = name_ref X, file.%X.decl [concrete = constants.%X]
 // CHECK:STDOUT:     %x: %X = bind_name x, %x.param
 // CHECK:STDOUT:   }
 // CHECK:STDOUT: }
@@ -107,18 +108,18 @@ fn F(x: X) {
 // CHECK:STDOUT:   %y.var: ref %X = var %y.var_patt
 // CHECK:STDOUT:   %x.ref: %X = name_ref x, %x
 // CHECK:STDOUT:   assign %y.var, <error>
-// CHECK:STDOUT:   %X.ref.loc31: type = name_ref X, file.%X.decl [concrete = constants.%X]
+// CHECK:STDOUT:   %X.ref.loc32: type = name_ref X, file.%X.decl [concrete = constants.%X]
 // CHECK:STDOUT:   %y: ref %X = bind_name y, %y.var
-// CHECK:STDOUT:   %Op.bound.loc31: <bound method> = bound_method %y.var, constants.%Op.33a
+// CHECK:STDOUT:   %Op.bound.loc32: <bound method> = bound_method %y.var, constants.%Op.33a
 // CHECK:STDOUT:   %Op.specific_fn.1: <specific function> = specific_function constants.%Op.33a, @Op.2(constants.%X) [concrete = constants.%Op.specific_fn.d1f]
-// CHECK:STDOUT:   %bound_method.loc31: <bound method> = bound_method %y.var, %Op.specific_fn.1
-// CHECK:STDOUT:   %addr.loc31: %ptr.d17 = addr_of %y.var
-// CHECK:STDOUT:   %no_op.loc31: init %empty_tuple.type = call %bound_method.loc31(%addr.loc31)
-// CHECK:STDOUT:   %Op.bound.loc24: <bound method> = bound_method %s.var, constants.%Op.5ef
+// CHECK:STDOUT:   %bound_method.loc32: <bound method> = bound_method %y.var, %Op.specific_fn.1
+// CHECK:STDOUT:   %addr.loc32: %ptr.d17 = addr_of %y.var
+// CHECK:STDOUT:   %no_op.loc32: init %empty_tuple.type = call %bound_method.loc32(%addr.loc32)
+// CHECK:STDOUT:   %Op.bound.loc25: <bound method> = bound_method %s.var, constants.%Op.5ef
 // CHECK:STDOUT:   %Op.specific_fn.2: <specific function> = specific_function constants.%Op.5ef, @Op.2(String) [concrete = constants.%Op.specific_fn.93f]
-// CHECK:STDOUT:   %bound_method.loc24: <bound method> = bound_method %s.var, %Op.specific_fn.2
-// CHECK:STDOUT:   %addr.loc24: %ptr.a45 = addr_of %s.var
-// CHECK:STDOUT:   %no_op.loc24: init %empty_tuple.type = call %bound_method.loc24(%addr.loc24)
+// CHECK:STDOUT:   %bound_method.loc25: <bound method> = bound_method %s.var, %Op.specific_fn.2
+// CHECK:STDOUT:   %addr.loc25: %ptr.a45 = addr_of %s.var
+// CHECK:STDOUT:   %no_op.loc25: init %empty_tuple.type = call %bound_method.loc25(%addr.loc25)
 // CHECK:STDOUT:   return
 // CHECK:STDOUT: }
 // CHECK:STDOUT:

+ 10 - 8
toolchain/lower/testdata/builtins/int_literal.carbon

@@ -2,6 +2,8 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
+//
 // AUTOUPDATE
 // TIP: To test this file alone, run:
 // TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/lower/testdata/builtins/int_literal.carbon
@@ -56,13 +58,13 @@ fn IntMin() -> i32 {
 // CHECK:STDOUT: !1 = !{i32 2, !"Debug Info Version", i32 3}
 // CHECK:STDOUT: !2 = distinct !DICompileUnit(language: DW_LANG_C, file: !3, producer: "carbon", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)
 // CHECK:STDOUT: !3 = !DIFile(filename: "int_literal.carbon", directory: "")
-// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "Copy", linkageName: "_CCopy.Main", scope: null, file: !3, line: 13, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "Copy", linkageName: "_CCopy.Main", scope: null, file: !3, line: 15, type: !5, spFlags: DISPFlagDefinition, unit: !2)
 // CHECK:STDOUT: !5 = !DISubroutineType(types: !6)
 // CHECK:STDOUT: !6 = !{}
-// CHECK:STDOUT: !7 = !DILocation(line: 14, column: 3, scope: !4)
-// CHECK:STDOUT: !8 = distinct !DISubprogram(name: "MinusOne", linkageName: "_CMinusOne.Main", scope: null, file: !3, line: 17, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !9 = !DILocation(line: 18, column: 3, scope: !8)
-// CHECK:STDOUT: !10 = distinct !DISubprogram(name: "IntMax", linkageName: "_CIntMax.Main", scope: null, file: !3, line: 21, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !11 = !DILocation(line: 22, column: 3, scope: !10)
-// CHECK:STDOUT: !12 = distinct !DISubprogram(name: "IntMin", linkageName: "_CIntMin.Main", scope: null, file: !3, line: 25, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !13 = !DILocation(line: 26, column: 3, scope: !12)
+// CHECK:STDOUT: !7 = !DILocation(line: 16, column: 3, scope: !4)
+// CHECK:STDOUT: !8 = distinct !DISubprogram(name: "MinusOne", linkageName: "_CMinusOne.Main", scope: null, file: !3, line: 19, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !9 = !DILocation(line: 20, column: 3, scope: !8)
+// CHECK:STDOUT: !10 = distinct !DISubprogram(name: "IntMax", linkageName: "_CIntMax.Main", scope: null, file: !3, line: 23, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !11 = !DILocation(line: 24, column: 3, scope: !10)
+// CHECK:STDOUT: !12 = distinct !DISubprogram(name: "IntMin", linkageName: "_CIntMin.Main", scope: null, file: !3, line: 27, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !13 = !DILocation(line: 28, column: 3, scope: !12)

+ 8 - 6
toolchain/lower/testdata/builtins/overloaded_operator.carbon

@@ -2,6 +2,8 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
+//
 // AUTOUPDATE
 // TIP: To test this file alone, run:
 // TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/lower/testdata/builtins/overloaded_operator.carbon
@@ -17,9 +19,9 @@ fn AddThreeIntegers(a: i32, b: i32, c: i32) -> i32 {
 // CHECK:STDOUT:
 // CHECK:STDOUT: define i32 @_CAddThreeIntegers.Main(i32 %a, i32 %b, i32 %c) !dbg !4 {
 // CHECK:STDOUT: entry:
-// CHECK:STDOUT:   %int.sadd.loc12_12 = add i32 %a, %b, !dbg !7
-// CHECK:STDOUT:   %int.sadd.loc12_16 = add i32 %int.sadd.loc12_12, %c, !dbg !7
-// CHECK:STDOUT:   ret i32 %int.sadd.loc12_16, !dbg !8
+// CHECK:STDOUT:   %int.sadd.loc14_12 = add i32 %a, %b, !dbg !7
+// CHECK:STDOUT:   %int.sadd.loc14_16 = add i32 %int.sadd.loc14_12, %c, !dbg !7
+// CHECK:STDOUT:   ret i32 %int.sadd.loc14_16, !dbg !8
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: !llvm.module.flags = !{!0, !1}
@@ -29,8 +31,8 @@ fn AddThreeIntegers(a: i32, b: i32, c: i32) -> i32 {
 // CHECK:STDOUT: !1 = !{i32 2, !"Debug Info Version", i32 3}
 // CHECK:STDOUT: !2 = distinct !DICompileUnit(language: DW_LANG_C, file: !3, producer: "carbon", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)
 // CHECK:STDOUT: !3 = !DIFile(filename: "overloaded_operator.carbon", directory: "")
-// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "AddThreeIntegers", linkageName: "_CAddThreeIntegers.Main", scope: null, file: !3, line: 11, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "AddThreeIntegers", linkageName: "_CAddThreeIntegers.Main", scope: null, file: !3, line: 13, type: !5, spFlags: DISPFlagDefinition, unit: !2)
 // CHECK:STDOUT: !5 = !DISubroutineType(types: !6)
 // CHECK:STDOUT: !6 = !{}
-// CHECK:STDOUT: !7 = !DILocation(line: 12, column: 10, scope: !4)
-// CHECK:STDOUT: !8 = !DILocation(line: 12, column: 3, scope: !4)
+// CHECK:STDOUT: !7 = !DILocation(line: 14, column: 10, scope: !4)
+// CHECK:STDOUT: !8 = !DILocation(line: 14, column: 3, scope: !4)

+ 18 - 16
toolchain/lower/testdata/builtins/print_read.carbon

@@ -2,6 +2,8 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
+//
 // AUTOUPDATE
 // TIP: To test this file alone, run:
 // TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/lower/testdata/builtins/print_read.carbon
@@ -37,16 +39,16 @@ fn Main() {
 // CHECK:STDOUT:
 // CHECK:STDOUT: while.cond:                                       ; preds = %if.else, %entry
 // CHECK:STDOUT:   %read.char = call i32 @getchar(), !dbg !9
-// CHECK:STDOUT:   %int.neq.loc20 = icmp ne i32 %read.char, -1, !dbg !9
-// CHECK:STDOUT:   br i1 %int.neq.loc20, label %while.body, label %while.done, !dbg !8
+// CHECK:STDOUT:   %int.neq.loc22 = icmp ne i32 %read.char, -1, !dbg !9
+// CHECK:STDOUT:   br i1 %int.neq.loc22, label %while.body, label %while.done, !dbg !8
 // CHECK:STDOUT:
 // CHECK:STDOUT: while.body:                                       ; preds = %while.cond
-// CHECK:STDOUT:   %print.char.loc22 = call i32 @putchar(i32 72), !dbg !10
-// CHECK:STDOUT:   %int.neq.loc22 = icmp ne i32 %print.char.loc22, -1, !dbg !10
-// CHECK:STDOUT:   br i1 %int.neq.loc22, label %if.then, label %if.else, !dbg !11
+// CHECK:STDOUT:   %print.char.loc24 = call i32 @putchar(i32 72), !dbg !10
+// CHECK:STDOUT:   %int.neq.loc24 = icmp ne i32 %print.char.loc24, -1, !dbg !10
+// CHECK:STDOUT:   br i1 %int.neq.loc24, label %if.then, label %if.else, !dbg !11
 // CHECK:STDOUT:
 // CHECK:STDOUT: if.then:                                          ; preds = %while.body
-// CHECK:STDOUT:   %print.char.loc23 = call i32 @putchar(i32 105), !dbg !12
+// CHECK:STDOUT:   %print.char.loc25 = call i32 @putchar(i32 105), !dbg !12
 // CHECK:STDOUT:   br label %if.else, !dbg !13
 // CHECK:STDOUT:
 // CHECK:STDOUT: if.else:                                          ; preds = %if.then, %while.body
@@ -72,15 +74,15 @@ fn Main() {
 // CHECK:STDOUT: !1 = !{i32 2, !"Debug Info Version", i32 3}
 // CHECK:STDOUT: !2 = distinct !DICompileUnit(language: DW_LANG_C, file: !3, producer: "carbon", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)
 // CHECK:STDOUT: !3 = !DIFile(filename: "print_read.carbon", directory: "")
-// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "Main", linkageName: "_CMain.Main", scope: null, file: !3, line: 16, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "Main", linkageName: "_CMain.Main", scope: null, file: !3, line: 18, type: !5, spFlags: DISPFlagDefinition, unit: !2)
 // CHECK:STDOUT: !5 = !DISubroutineType(types: !6)
 // CHECK:STDOUT: !6 = !{}
-// CHECK:STDOUT: !7 = !DILocation(line: 17, column: 3, scope: !4)
-// CHECK:STDOUT: !8 = !DILocation(line: 20, column: 9, scope: !4)
-// CHECK:STDOUT: !9 = !DILocation(line: 20, column: 10, scope: !4)
-// CHECK:STDOUT: !10 = !DILocation(line: 22, column: 9, scope: !4)
-// CHECK:STDOUT: !11 = !DILocation(line: 22, column: 8, scope: !4)
-// CHECK:STDOUT: !12 = !DILocation(line: 23, column: 7, scope: !4)
-// CHECK:STDOUT: !13 = !DILocation(line: 22, column: 5, scope: !4)
-// CHECK:STDOUT: !14 = !DILocation(line: 20, column: 3, scope: !4)
-// CHECK:STDOUT: !15 = !DILocation(line: 16, column: 1, scope: !4)
+// CHECK:STDOUT: !7 = !DILocation(line: 19, column: 3, scope: !4)
+// CHECK:STDOUT: !8 = !DILocation(line: 22, column: 9, scope: !4)
+// CHECK:STDOUT: !9 = !DILocation(line: 22, column: 10, scope: !4)
+// CHECK:STDOUT: !10 = !DILocation(line: 24, column: 9, scope: !4)
+// CHECK:STDOUT: !11 = !DILocation(line: 24, column: 8, scope: !4)
+// CHECK:STDOUT: !12 = !DILocation(line: 25, column: 7, scope: !4)
+// CHECK:STDOUT: !13 = !DILocation(line: 24, column: 5, scope: !4)
+// CHECK:STDOUT: !14 = !DILocation(line: 22, column: 3, scope: !4)
+// CHECK:STDOUT: !15 = !DILocation(line: 18, column: 1, scope: !4)

+ 29 - 27
toolchain/lower/testdata/for/bindings.carbon

@@ -2,6 +2,8 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
+//
 // AUTOUPDATE
 // TIP: To test this file alone, run:
 // TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/lower/testdata/for/bindings.carbon
@@ -32,7 +34,7 @@ fn For() {
 // CHECK:STDOUT: ; ModuleID = 'bindings.carbon'
 // CHECK:STDOUT: source_filename = "bindings.carbon"
 // CHECK:STDOUT:
-// CHECK:STDOUT: @EmptyRange.val.loc25_3 = internal constant {} zeroinitializer
+// CHECK:STDOUT: @EmptyRange.val.loc27_3 = internal constant {} zeroinitializer
 // CHECK:STDOUT:
 // CHECK:STDOUT: declare void @_CF.Main(i32, ptr)
 // CHECK:STDOUT:
@@ -40,31 +42,31 @@ fn For() {
 // CHECK:STDOUT: entry:
 // CHECK:STDOUT:   %r.var = alloca {}, align 8, !dbg !7
 // CHECK:STDOUT:   %var = alloca {}, align 8, !dbg !8
-// CHECK:STDOUT:   %.loc27_33.1.temp = alloca { i1, { i32, i32 } }, align 8, !dbg !8
+// CHECK:STDOUT:   %.loc29_33.1.temp = alloca { i1, { i32, i32 } }, align 8, !dbg !8
 // CHECK:STDOUT:   %n.var = alloca i32, align 4, !dbg !9
-// CHECK:STDOUT:   %.loc27_33.8.temp = alloca { i32, i32 }, align 8, !dbg !8
+// CHECK:STDOUT:   %.loc29_33.8.temp = alloca { i32, i32 }, align 8, !dbg !8
 // CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 0, ptr %r.var), !dbg !7
-// CHECK:STDOUT:   call void @llvm.memcpy.p0.p0.i64(ptr align 1 %r.var, ptr align 1 @EmptyRange.val.loc25_3, i64 0, i1 false), !dbg !7
+// CHECK:STDOUT:   call void @llvm.memcpy.p0.p0.i64(ptr align 1 %r.var, ptr align 1 @EmptyRange.val.loc27_3, i64 0, i1 false), !dbg !7
 // CHECK:STDOUT:   call void @"_CNewCursor.EmptyRange.Main:Iterate.Core.29d34654e802e24e"(ptr %r.var), !dbg !8
 // CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 0, ptr %var), !dbg !8
 // CHECK:STDOUT:   br label %for.next, !dbg !8
 // CHECK:STDOUT:
 // CHECK:STDOUT: for.next:                                         ; preds = %for.body, %entry
-// CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 12, ptr %.loc27_33.1.temp), !dbg !8
-// CHECK:STDOUT:   call void @"_CNext.EmptyRange.Main:Iterate.Core.29d34654e802e24e"(ptr %.loc27_33.1.temp, ptr %r.var, ptr %var), !dbg !8
-// CHECK:STDOUT:   %HasValue.call = call i1 @_CHasValue.Optional.Core.29d34654e802e24e(ptr %.loc27_33.1.temp), !dbg !8
+// CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 12, ptr %.loc29_33.1.temp), !dbg !8
+// CHECK:STDOUT:   call void @"_CNext.EmptyRange.Main:Iterate.Core.29d34654e802e24e"(ptr %.loc29_33.1.temp, ptr %r.var, ptr %var), !dbg !8
+// CHECK:STDOUT:   %HasValue.call = call i1 @_CHasValue.Optional.Core.29d34654e802e24e(ptr %.loc29_33.1.temp), !dbg !8
 // CHECK:STDOUT:   br i1 %HasValue.call, label %for.body, label %for.done, !dbg !8
 // CHECK:STDOUT:
 // CHECK:STDOUT: for.body:                                         ; preds = %for.next
 // CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 4, ptr %n.var), !dbg !9
-// CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 8, ptr %.loc27_33.8.temp), !dbg !8
-// CHECK:STDOUT:   call void @_CGet.Optional.Core.29d34654e802e24e(ptr %.loc27_33.8.temp, ptr %.loc27_33.1.temp), !dbg !8
-// CHECK:STDOUT:   %tuple.elem0.tuple.elem = getelementptr inbounds nuw { i32, i32 }, ptr %.loc27_33.8.temp, i32 0, i32 0, !dbg !8
-// CHECK:STDOUT:   %tuple.elem1.tuple.elem = getelementptr inbounds nuw { i32, i32 }, ptr %.loc27_33.8.temp, i32 0, i32 1, !dbg !8
-// CHECK:STDOUT:   %.loc27_33.11 = load i32, ptr %tuple.elem0.tuple.elem, align 4, !dbg !8
-// CHECK:STDOUT:   %.loc27_33.12 = load i32, ptr %tuple.elem1.tuple.elem, align 4, !dbg !8
-// CHECK:STDOUT:   store i32 %.loc27_33.12, ptr %n.var, align 4, !dbg !9
-// CHECK:STDOUT:   call void @_CF.Main(i32 %.loc27_33.11, ptr %n.var), !dbg !10
+// CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 8, ptr %.loc29_33.8.temp), !dbg !8
+// CHECK:STDOUT:   call void @_CGet.Optional.Core.29d34654e802e24e(ptr %.loc29_33.8.temp, ptr %.loc29_33.1.temp), !dbg !8
+// CHECK:STDOUT:   %tuple.elem0.tuple.elem = getelementptr inbounds nuw { i32, i32 }, ptr %.loc29_33.8.temp, i32 0, i32 0, !dbg !8
+// CHECK:STDOUT:   %tuple.elem1.tuple.elem = getelementptr inbounds nuw { i32, i32 }, ptr %.loc29_33.8.temp, i32 0, i32 1, !dbg !8
+// CHECK:STDOUT:   %.loc29_33.11 = load i32, ptr %tuple.elem0.tuple.elem, align 4, !dbg !8
+// CHECK:STDOUT:   %.loc29_33.12 = load i32, ptr %tuple.elem1.tuple.elem, align 4, !dbg !8
+// CHECK:STDOUT:   store i32 %.loc29_33.12, ptr %n.var, align 4, !dbg !9
+// CHECK:STDOUT:   call void @_CF.Main(i32 %.loc29_33.11, ptr %n.var), !dbg !10
 // CHECK:STDOUT:   br label %for.next, !dbg !11
 // CHECK:STDOUT:
 // CHECK:STDOUT: for.done:                                         ; preds = %for.next
@@ -118,20 +120,20 @@ fn For() {
 // CHECK:STDOUT: !1 = !{i32 2, !"Debug Info Version", i32 3}
 // CHECK:STDOUT: !2 = distinct !DICompileUnit(language: DW_LANG_C, file: !3, producer: "carbon", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)
 // CHECK:STDOUT: !3 = !DIFile(filename: "bindings.carbon", directory: "")
-// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "For", linkageName: "_CFor.Main", scope: null, file: !3, line: 24, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "For", linkageName: "_CFor.Main", scope: null, file: !3, line: 26, type: !5, spFlags: DISPFlagDefinition, unit: !2)
 // CHECK:STDOUT: !5 = !DISubroutineType(types: !6)
 // CHECK:STDOUT: !6 = !{}
-// CHECK:STDOUT: !7 = !DILocation(line: 25, column: 3, scope: !4)
-// CHECK:STDOUT: !8 = !DILocation(line: 27, column: 7, scope: !4)
-// CHECK:STDOUT: !9 = !DILocation(line: 27, column: 17, scope: !4)
-// CHECK:STDOUT: !10 = !DILocation(line: 28, column: 5, scope: !4)
-// CHECK:STDOUT: !11 = !DILocation(line: 27, column: 3, scope: !4)
-// CHECK:STDOUT: !12 = !DILocation(line: 24, column: 1, scope: !4)
-// CHECK:STDOUT: !13 = distinct !DISubprogram(name: "NewCursor", linkageName: "_CNewCursor.EmptyRange.Main:Iterate.Core.29d34654e802e24e", scope: null, file: !3, line: 13, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !14 = !DILocation(line: 14, column: 7, scope: !13)
-// CHECK:STDOUT: !15 = distinct !DISubprogram(name: "Next", linkageName: "_CNext.EmptyRange.Main:Iterate.Core.29d34654e802e24e", scope: null, file: !3, line: 16, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !16 = !DILocation(line: 17, column: 14, scope: !15)
-// CHECK:STDOUT: !17 = !DILocation(line: 17, column: 7, scope: !15)
+// CHECK:STDOUT: !7 = !DILocation(line: 27, column: 3, scope: !4)
+// CHECK:STDOUT: !8 = !DILocation(line: 29, column: 7, scope: !4)
+// CHECK:STDOUT: !9 = !DILocation(line: 29, column: 17, scope: !4)
+// CHECK:STDOUT: !10 = !DILocation(line: 30, column: 5, scope: !4)
+// CHECK:STDOUT: !11 = !DILocation(line: 29, column: 3, scope: !4)
+// CHECK:STDOUT: !12 = !DILocation(line: 26, column: 1, scope: !4)
+// CHECK:STDOUT: !13 = distinct !DISubprogram(name: "NewCursor", linkageName: "_CNewCursor.EmptyRange.Main:Iterate.Core.29d34654e802e24e", scope: null, file: !3, line: 15, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !14 = !DILocation(line: 16, column: 7, scope: !13)
+// CHECK:STDOUT: !15 = distinct !DISubprogram(name: "Next", linkageName: "_CNext.EmptyRange.Main:Iterate.Core.29d34654e802e24e", scope: null, file: !3, line: 18, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !16 = !DILocation(line: 19, column: 14, scope: !15)
+// CHECK:STDOUT: !17 = !DILocation(line: 19, column: 7, scope: !15)
 // CHECK:STDOUT: !18 = distinct !DISubprogram(name: "HasValue", linkageName: "_CHasValue.Optional.Core.29d34654e802e24e", scope: null, file: !19, line: 28, type: !5, spFlags: DISPFlagDefinition, unit: !2)
 // CHECK:STDOUT: !19 = !DIFile(filename: "{{.*}}/prelude/types/optional.carbon", directory: "")
 // CHECK:STDOUT: !20 = !DILocation(line: 28, column: 46, scope: !18)

+ 31 - 29
toolchain/lower/testdata/for/break_continue.carbon

@@ -2,6 +2,8 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
+//
 // AUTOUPDATE
 // TIP: To test this file alone, run:
 // TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/lower/testdata/for/break_continue.carbon
@@ -33,42 +35,42 @@ fn For() {
 // CHECK:STDOUT:
 // CHECK:STDOUT: define void @_CFor.Main() !dbg !4 {
 // CHECK:STDOUT: entry:
-// CHECK:STDOUT:   %.loc18_32.1.temp = alloca { i32, i32 }, align 8, !dbg !7
+// CHECK:STDOUT:   %.loc20_32.1.temp = alloca { i32, i32 }, align 8, !dbg !7
 // CHECK:STDOUT:   %var = alloca i32, align 4, !dbg !8
-// CHECK:STDOUT:   %.loc18_33.1.temp = alloca { i1, i32 }, align 8, !dbg !8
-// CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 8, ptr %.loc18_32.1.temp), !dbg !7
-// CHECK:STDOUT:   call void @_CRange.Core(ptr %.loc18_32.1.temp, i32 100), !dbg !7
-// CHECK:STDOUT:   %NewCursor.call = call i32 @"_CNewCursor.IntRange.Core:Iterate.Core.be1e879c1ad406d8"(ptr %.loc18_32.1.temp), !dbg !8
+// CHECK:STDOUT:   %.loc20_33.1.temp = alloca { i1, i32 }, align 8, !dbg !8
+// CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 8, ptr %.loc20_32.1.temp), !dbg !7
+// CHECK:STDOUT:   call void @_CRange.Core(ptr %.loc20_32.1.temp, i32 100), !dbg !7
+// CHECK:STDOUT:   %NewCursor.call = call i32 @"_CNewCursor.IntRange.Core:Iterate.Core.be1e879c1ad406d8"(ptr %.loc20_32.1.temp), !dbg !8
 // CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 4, ptr %var), !dbg !8
 // CHECK:STDOUT:   store i32 %NewCursor.call, ptr %var, align 4, !dbg !8
 // CHECK:STDOUT:   br label %for.next, !dbg !8
 // CHECK:STDOUT:
-// CHECK:STDOUT: for.next:                                         ; preds = %if.else.loc20, %if.then.loc20, %entry
-// CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 8, ptr %.loc18_33.1.temp), !dbg !8
-// CHECK:STDOUT:   call void @"_CNext.IntRange.Core:Iterate.Core.be1e879c1ad406d8"(ptr %.loc18_33.1.temp, ptr %.loc18_32.1.temp, ptr %var), !dbg !8
-// CHECK:STDOUT:   %HasValue.call = call i1 @_CHasValue.Optional.Core.b88d1103f417c6d4(ptr %.loc18_33.1.temp), !dbg !8
+// CHECK:STDOUT: for.next:                                         ; preds = %if.else.loc22, %if.then.loc22, %entry
+// CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 8, ptr %.loc20_33.1.temp), !dbg !8
+// CHECK:STDOUT:   call void @"_CNext.IntRange.Core:Iterate.Core.be1e879c1ad406d8"(ptr %.loc20_33.1.temp, ptr %.loc20_32.1.temp, ptr %var), !dbg !8
+// CHECK:STDOUT:   %HasValue.call = call i1 @_CHasValue.Optional.Core.b88d1103f417c6d4(ptr %.loc20_33.1.temp), !dbg !8
 // CHECK:STDOUT:   br i1 %HasValue.call, label %for.body, label %for.done, !dbg !8
 // CHECK:STDOUT:
 // CHECK:STDOUT: for.body:                                         ; preds = %for.next
-// CHECK:STDOUT:   %Get.call = call i32 @_CGet.Optional.Core.b88d1103f417c6d4(ptr %.loc18_33.1.temp), !dbg !8
+// CHECK:STDOUT:   %Get.call = call i32 @_CGet.Optional.Core.b88d1103f417c6d4(ptr %.loc20_33.1.temp), !dbg !8
 // CHECK:STDOUT:   %F.call = call i1 @_CF.Main(), !dbg !9
-// CHECK:STDOUT:   br i1 %F.call, label %if.then.loc19, label %if.else.loc19, !dbg !10
+// CHECK:STDOUT:   br i1 %F.call, label %if.then.loc21, label %if.else.loc21, !dbg !10
 // CHECK:STDOUT:
-// CHECK:STDOUT: if.then.loc19:                                    ; preds = %for.body
+// CHECK:STDOUT: if.then.loc21:                                    ; preds = %for.body
 // CHECK:STDOUT:   br label %for.done, !dbg !11
 // CHECK:STDOUT:
-// CHECK:STDOUT: if.else.loc19:                                    ; preds = %for.body
+// CHECK:STDOUT: if.else.loc21:                                    ; preds = %for.body
 // CHECK:STDOUT:   %G.call = call i1 @_CG.Main(), !dbg !12
-// CHECK:STDOUT:   br i1 %G.call, label %if.then.loc20, label %if.else.loc20, !dbg !13
+// CHECK:STDOUT:   br i1 %G.call, label %if.then.loc22, label %if.else.loc22, !dbg !13
 // CHECK:STDOUT:
-// CHECK:STDOUT: if.then.loc20:                                    ; preds = %if.else.loc19
+// CHECK:STDOUT: if.then.loc22:                                    ; preds = %if.else.loc21
 // CHECK:STDOUT:   br label %for.next, !dbg !14
 // CHECK:STDOUT:
-// CHECK:STDOUT: if.else.loc20:                                    ; preds = %if.else.loc19
+// CHECK:STDOUT: if.else.loc22:                                    ; preds = %if.else.loc21
 // CHECK:STDOUT:   call void @_CH.Main(), !dbg !15
 // CHECK:STDOUT:   br label %for.next, !dbg !16
 // CHECK:STDOUT:
-// CHECK:STDOUT: for.done:                                         ; preds = %if.then.loc19, %for.next
+// CHECK:STDOUT: for.done:                                         ; preds = %if.then.loc21, %for.next
 // CHECK:STDOUT:   ret void, !dbg !17
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
@@ -162,20 +164,20 @@ fn For() {
 // CHECK:STDOUT: !1 = !{i32 2, !"Debug Info Version", i32 3}
 // CHECK:STDOUT: !2 = distinct !DICompileUnit(language: DW_LANG_C, file: !3, producer: "carbon", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)
 // CHECK:STDOUT: !3 = !DIFile(filename: "break_continue.carbon", directory: "")
-// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "For", linkageName: "_CFor.Main", scope: null, file: !3, line: 17, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "For", linkageName: "_CFor.Main", scope: null, file: !3, line: 19, type: !5, spFlags: DISPFlagDefinition, unit: !2)
 // CHECK:STDOUT: !5 = !DISubroutineType(types: !6)
 // CHECK:STDOUT: !6 = !{}
-// CHECK:STDOUT: !7 = !DILocation(line: 18, column: 18, scope: !4)
-// CHECK:STDOUT: !8 = !DILocation(line: 18, column: 7, scope: !4)
-// CHECK:STDOUT: !9 = !DILocation(line: 19, column: 9, scope: !4)
-// CHECK:STDOUT: !10 = !DILocation(line: 19, column: 8, scope: !4)
-// CHECK:STDOUT: !11 = !DILocation(line: 19, column: 16, scope: !4)
-// CHECK:STDOUT: !12 = !DILocation(line: 20, column: 9, scope: !4)
-// CHECK:STDOUT: !13 = !DILocation(line: 20, column: 8, scope: !4)
-// CHECK:STDOUT: !14 = !DILocation(line: 20, column: 16, scope: !4)
-// CHECK:STDOUT: !15 = !DILocation(line: 21, column: 5, scope: !4)
-// CHECK:STDOUT: !16 = !DILocation(line: 18, column: 3, scope: !4)
-// CHECK:STDOUT: !17 = !DILocation(line: 17, column: 1, scope: !4)
+// CHECK:STDOUT: !7 = !DILocation(line: 20, column: 18, scope: !4)
+// CHECK:STDOUT: !8 = !DILocation(line: 20, column: 7, scope: !4)
+// CHECK:STDOUT: !9 = !DILocation(line: 21, column: 9, scope: !4)
+// CHECK:STDOUT: !10 = !DILocation(line: 21, column: 8, scope: !4)
+// CHECK:STDOUT: !11 = !DILocation(line: 21, column: 16, scope: !4)
+// CHECK:STDOUT: !12 = !DILocation(line: 22, column: 9, scope: !4)
+// CHECK:STDOUT: !13 = !DILocation(line: 22, column: 8, scope: !4)
+// CHECK:STDOUT: !14 = !DILocation(line: 22, column: 16, scope: !4)
+// CHECK:STDOUT: !15 = !DILocation(line: 23, column: 5, scope: !4)
+// CHECK:STDOUT: !16 = !DILocation(line: 20, column: 3, scope: !4)
+// CHECK:STDOUT: !17 = !DILocation(line: 19, column: 1, scope: !4)
 // CHECK:STDOUT: !18 = distinct !DISubprogram(name: "NewCursor", linkageName: "_CNewCursor.IntRange.Core:Iterate.Core.be1e879c1ad406d8", scope: null, file: !19, line: 25, type: !5, spFlags: DISPFlagDefinition, unit: !2)
 // CHECK:STDOUT: !19 = !DIFile(filename: "{{.*}}/range.carbon", directory: "")
 // CHECK:STDOUT: !20 = !DILocation(line: 25, column: 51, scope: !18)

+ 19 - 17
toolchain/lower/testdata/for/for.carbon

@@ -2,6 +2,8 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
+//
 // AUTOUPDATE
 // TIP: To test this file alone, run:
 // TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/lower/testdata/for/for.carbon
@@ -33,25 +35,25 @@ fn For() {
 // CHECK:STDOUT:
 // CHECK:STDOUT: define void @_CFor.Main() !dbg !4 {
 // CHECK:STDOUT: entry:
-// CHECK:STDOUT:   %.loc19_32.1.temp = alloca { i32, i32 }, align 8, !dbg !7
+// CHECK:STDOUT:   %.loc21_32.1.temp = alloca { i32, i32 }, align 8, !dbg !7
 // CHECK:STDOUT:   %var = alloca i32, align 4, !dbg !8
-// CHECK:STDOUT:   %.loc19_33.1.temp = alloca { i1, i32 }, align 8, !dbg !8
+// CHECK:STDOUT:   %.loc21_33.1.temp = alloca { i1, i32 }, align 8, !dbg !8
 // CHECK:STDOUT:   call void @_CF.Main(), !dbg !9
-// CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 8, ptr %.loc19_32.1.temp), !dbg !7
-// CHECK:STDOUT:   call void @_CRange.Core(ptr %.loc19_32.1.temp, i32 100), !dbg !7
-// CHECK:STDOUT:   %NewCursor.call = call i32 @"_CNewCursor.IntRange.Core:Iterate.Core.be1e879c1ad406d8"(ptr %.loc19_32.1.temp), !dbg !8
+// CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 8, ptr %.loc21_32.1.temp), !dbg !7
+// CHECK:STDOUT:   call void @_CRange.Core(ptr %.loc21_32.1.temp, i32 100), !dbg !7
+// CHECK:STDOUT:   %NewCursor.call = call i32 @"_CNewCursor.IntRange.Core:Iterate.Core.be1e879c1ad406d8"(ptr %.loc21_32.1.temp), !dbg !8
 // CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 4, ptr %var), !dbg !8
 // CHECK:STDOUT:   store i32 %NewCursor.call, ptr %var, align 4, !dbg !8
 // CHECK:STDOUT:   br label %for.next, !dbg !8
 // CHECK:STDOUT:
 // CHECK:STDOUT: for.next:                                         ; preds = %for.body, %entry
-// CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 8, ptr %.loc19_33.1.temp), !dbg !8
-// CHECK:STDOUT:   call void @"_CNext.IntRange.Core:Iterate.Core.be1e879c1ad406d8"(ptr %.loc19_33.1.temp, ptr %.loc19_32.1.temp, ptr %var), !dbg !8
-// CHECK:STDOUT:   %HasValue.call = call i1 @_CHasValue.Optional.Core.b88d1103f417c6d4(ptr %.loc19_33.1.temp), !dbg !8
+// CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 8, ptr %.loc21_33.1.temp), !dbg !8
+// CHECK:STDOUT:   call void @"_CNext.IntRange.Core:Iterate.Core.be1e879c1ad406d8"(ptr %.loc21_33.1.temp, ptr %.loc21_32.1.temp, ptr %var), !dbg !8
+// CHECK:STDOUT:   %HasValue.call = call i1 @_CHasValue.Optional.Core.b88d1103f417c6d4(ptr %.loc21_33.1.temp), !dbg !8
 // CHECK:STDOUT:   br i1 %HasValue.call, label %for.body, label %for.done, !dbg !8
 // CHECK:STDOUT:
 // CHECK:STDOUT: for.body:                                         ; preds = %for.next
-// CHECK:STDOUT:   %Get.call = call i32 @_CGet.Optional.Core.b88d1103f417c6d4(ptr %.loc19_33.1.temp), !dbg !8
+// CHECK:STDOUT:   %Get.call = call i32 @_CGet.Optional.Core.b88d1103f417c6d4(ptr %.loc21_33.1.temp), !dbg !8
 // CHECK:STDOUT:   call void @_CG.Main(), !dbg !10
 // CHECK:STDOUT:   br label %for.next, !dbg !11
 // CHECK:STDOUT:
@@ -150,16 +152,16 @@ fn For() {
 // CHECK:STDOUT: !1 = !{i32 2, !"Debug Info Version", i32 3}
 // CHECK:STDOUT: !2 = distinct !DICompileUnit(language: DW_LANG_C, file: !3, producer: "carbon", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)
 // CHECK:STDOUT: !3 = !DIFile(filename: "for.carbon", directory: "")
-// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "For", linkageName: "_CFor.Main", scope: null, file: !3, line: 17, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "For", linkageName: "_CFor.Main", scope: null, file: !3, line: 19, type: !5, spFlags: DISPFlagDefinition, unit: !2)
 // CHECK:STDOUT: !5 = !DISubroutineType(types: !6)
 // CHECK:STDOUT: !6 = !{}
-// CHECK:STDOUT: !7 = !DILocation(line: 19, column: 18, scope: !4)
-// CHECK:STDOUT: !8 = !DILocation(line: 19, column: 7, scope: !4)
-// CHECK:STDOUT: !9 = !DILocation(line: 18, column: 3, scope: !4)
-// CHECK:STDOUT: !10 = !DILocation(line: 20, column: 5, scope: !4)
-// CHECK:STDOUT: !11 = !DILocation(line: 19, column: 3, scope: !4)
-// CHECK:STDOUT: !12 = !DILocation(line: 22, column: 3, scope: !4)
-// CHECK:STDOUT: !13 = !DILocation(line: 17, column: 1, scope: !4)
+// CHECK:STDOUT: !7 = !DILocation(line: 21, column: 18, scope: !4)
+// CHECK:STDOUT: !8 = !DILocation(line: 21, column: 7, scope: !4)
+// CHECK:STDOUT: !9 = !DILocation(line: 20, column: 3, scope: !4)
+// CHECK:STDOUT: !10 = !DILocation(line: 22, column: 5, scope: !4)
+// CHECK:STDOUT: !11 = !DILocation(line: 21, column: 3, scope: !4)
+// CHECK:STDOUT: !12 = !DILocation(line: 24, column: 3, scope: !4)
+// CHECK:STDOUT: !13 = !DILocation(line: 19, column: 1, scope: !4)
 // CHECK:STDOUT: !14 = distinct !DISubprogram(name: "NewCursor", linkageName: "_CNewCursor.IntRange.Core:Iterate.Core.be1e879c1ad406d8", scope: null, file: !15, line: 25, type: !5, spFlags: DISPFlagDefinition, unit: !2)
 // CHECK:STDOUT: !15 = !DIFile(filename: "{{.*}}/range.carbon", directory: "")
 // CHECK:STDOUT: !16 = !DILocation(line: 25, column: 51, scope: !14)

+ 18 - 16
toolchain/lower/testdata/function/generic/call_different_impls.carbon

@@ -2,6 +2,8 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
+//
 // AUTOUPDATE
 // TIP: To test this file alone, run:
 // TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/lower/testdata/function/generic/call_different_impls.carbon
@@ -79,21 +81,21 @@ fn Run() {
 // CHECK:STDOUT: !1 = !{i32 2, !"Debug Info Version", i32 3}
 // CHECK:STDOUT: !2 = distinct !DICompileUnit(language: DW_LANG_C, file: !3, producer: "carbon", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)
 // CHECK:STDOUT: !3 = !DIFile(filename: "call_different_impls.carbon", directory: "")
-// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "F", linkageName: "_CF.X.Main:I.Main", scope: null, file: !3, line: 18, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "F", linkageName: "_CF.X.Main:I.Main", scope: null, file: !3, line: 20, type: !5, spFlags: DISPFlagDefinition, unit: !2)
 // CHECK:STDOUT: !5 = !DISubroutineType(types: !6)
 // CHECK:STDOUT: !6 = !{}
-// CHECK:STDOUT: !7 = !DILocation(line: 18, column: 12, scope: !4)
-// CHECK:STDOUT: !8 = !DILocation(line: 18, column: 3, scope: !4)
-// CHECK:STDOUT: !9 = distinct !DISubprogram(name: "F", linkageName: "_CF.Y.Main:I.Main", scope: null, file: !3, line: 22, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !10 = !DILocation(line: 22, column: 12, scope: !9)
-// CHECK:STDOUT: !11 = !DILocation(line: 22, column: 3, scope: !9)
-// CHECK:STDOUT: !12 = distinct !DISubprogram(name: "Run", linkageName: "main", scope: null, file: !3, line: 29, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !13 = !DILocation(line: 30, column: 3, scope: !12)
-// CHECK:STDOUT: !14 = !DILocation(line: 31, column: 3, scope: !12)
-// CHECK:STDOUT: !15 = !DILocation(line: 29, column: 1, scope: !12)
-// CHECK:STDOUT: !16 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.2c436a64dfc3fd29", scope: null, file: !3, line: 27, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !17 = !DILocation(line: 27, column: 15, scope: !16)
-// CHECK:STDOUT: !18 = !DILocation(line: 27, column: 1, scope: !16)
-// CHECK:STDOUT: !19 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.c124d41ebc08c32b", scope: null, file: !3, line: 27, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !20 = !DILocation(line: 27, column: 15, scope: !19)
-// CHECK:STDOUT: !21 = !DILocation(line: 27, column: 1, scope: !19)
+// CHECK:STDOUT: !7 = !DILocation(line: 20, column: 12, scope: !4)
+// CHECK:STDOUT: !8 = !DILocation(line: 20, column: 3, scope: !4)
+// CHECK:STDOUT: !9 = distinct !DISubprogram(name: "F", linkageName: "_CF.Y.Main:I.Main", scope: null, file: !3, line: 24, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !10 = !DILocation(line: 24, column: 12, scope: !9)
+// CHECK:STDOUT: !11 = !DILocation(line: 24, column: 3, scope: !9)
+// CHECK:STDOUT: !12 = distinct !DISubprogram(name: "Run", linkageName: "main", scope: null, file: !3, line: 31, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !13 = !DILocation(line: 32, column: 3, scope: !12)
+// CHECK:STDOUT: !14 = !DILocation(line: 33, column: 3, scope: !12)
+// CHECK:STDOUT: !15 = !DILocation(line: 31, column: 1, scope: !12)
+// CHECK:STDOUT: !16 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.2c436a64dfc3fd29", scope: null, file: !3, line: 29, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !17 = !DILocation(line: 29, column: 15, scope: !16)
+// CHECK:STDOUT: !18 = !DILocation(line: 29, column: 1, scope: !16)
+// CHECK:STDOUT: !19 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.c124d41ebc08c32b", scope: null, file: !3, line: 29, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !20 = !DILocation(line: 29, column: 15, scope: !19)
+// CHECK:STDOUT: !21 = !DILocation(line: 29, column: 1, scope: !19)

+ 20 - 18
toolchain/lower/testdata/function/generic/call_different_impls_with_const.carbon

@@ -2,6 +2,8 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
+//
 // AUTOUPDATE
 // TIP: To test this file alone, run:
 // TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/lower/testdata/function/generic/call_different_impls_with_const.carbon
@@ -68,13 +70,13 @@ fn Run() {
 // CHECK:STDOUT:
 // CHECK:STDOUT: define linkonce_odr void @_CG.Main.ae78220c5e9d4af5() !dbg !16 {
 // CHECK:STDOUT: entry:
-// CHECK:STDOUT:   %.loc35_20.1 = call i1 @"_CF.X.Main:I.Main"(), !dbg !17
+// CHECK:STDOUT:   %.loc37_20.1 = call i1 @"_CF.X.Main:I.Main"(), !dbg !17
 // CHECK:STDOUT:   ret void, !dbg !18
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: define linkonce_odr void @_CG.Main.6b293b16be321a45() !dbg !19 {
 // CHECK:STDOUT: entry:
-// CHECK:STDOUT:   %.loc35_20.1 = call i32 @"_CF.Y.Main:I.Main"(), !dbg !20
+// CHECK:STDOUT:   %.loc37_20.1 = call i32 @"_CF.Y.Main:I.Main"(), !dbg !20
 // CHECK:STDOUT:   ret void, !dbg !21
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
@@ -88,21 +90,21 @@ fn Run() {
 // CHECK:STDOUT: !1 = !{i32 2, !"Debug Info Version", i32 3}
 // CHECK:STDOUT: !2 = distinct !DICompileUnit(language: DW_LANG_C, file: !3, producer: "carbon", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)
 // CHECK:STDOUT: !3 = !DIFile(filename: "call_different_impls_with_const.carbon", directory: "")
-// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "F", linkageName: "_CF.X.Main:I.Main", scope: null, file: !3, line: 19, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "F", linkageName: "_CF.X.Main:I.Main", scope: null, file: !3, line: 21, type: !5, spFlags: DISPFlagDefinition, unit: !2)
 // CHECK:STDOUT: !5 = !DISubroutineType(types: !6)
 // CHECK:STDOUT: !6 = !{}
-// CHECK:STDOUT: !7 = !DILocation(line: 20, column: 5, scope: !4)
-// CHECK:STDOUT: !8 = !DILocation(line: 21, column: 5, scope: !4)
-// CHECK:STDOUT: !9 = distinct !DISubprogram(name: "F", linkageName: "_CF.Y.Main:I.Main", scope: null, file: !3, line: 26, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !10 = !DILocation(line: 27, column: 5, scope: !9)
-// CHECK:STDOUT: !11 = !DILocation(line: 28, column: 5, scope: !9)
-// CHECK:STDOUT: !12 = distinct !DISubprogram(name: "Run", linkageName: "main", scope: null, file: !3, line: 38, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !13 = !DILocation(line: 39, column: 3, scope: !12)
-// CHECK:STDOUT: !14 = !DILocation(line: 40, column: 3, scope: !12)
-// CHECK:STDOUT: !15 = !DILocation(line: 38, column: 1, scope: !12)
-// CHECK:STDOUT: !16 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.ae78220c5e9d4af5", scope: null, file: !3, line: 34, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !17 = !DILocation(line: 35, column: 16, scope: !16)
-// CHECK:STDOUT: !18 = !DILocation(line: 34, column: 1, scope: !16)
-// CHECK:STDOUT: !19 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.6b293b16be321a45", scope: null, file: !3, line: 34, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !20 = !DILocation(line: 35, column: 16, scope: !19)
-// CHECK:STDOUT: !21 = !DILocation(line: 34, column: 1, scope: !19)
+// CHECK:STDOUT: !7 = !DILocation(line: 22, column: 5, scope: !4)
+// CHECK:STDOUT: !8 = !DILocation(line: 23, column: 5, scope: !4)
+// CHECK:STDOUT: !9 = distinct !DISubprogram(name: "F", linkageName: "_CF.Y.Main:I.Main", scope: null, file: !3, line: 28, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !10 = !DILocation(line: 29, column: 5, scope: !9)
+// CHECK:STDOUT: !11 = !DILocation(line: 30, column: 5, scope: !9)
+// CHECK:STDOUT: !12 = distinct !DISubprogram(name: "Run", linkageName: "main", scope: null, file: !3, line: 40, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !13 = !DILocation(line: 41, column: 3, scope: !12)
+// CHECK:STDOUT: !14 = !DILocation(line: 42, column: 3, scope: !12)
+// CHECK:STDOUT: !15 = !DILocation(line: 40, column: 1, scope: !12)
+// CHECK:STDOUT: !16 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.ae78220c5e9d4af5", scope: null, file: !3, line: 36, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !17 = !DILocation(line: 37, column: 16, scope: !16)
+// CHECK:STDOUT: !18 = !DILocation(line: 36, column: 1, scope: !16)
+// CHECK:STDOUT: !19 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.6b293b16be321a45", scope: null, file: !3, line: 36, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !20 = !DILocation(line: 37, column: 16, scope: !19)
+// CHECK:STDOUT: !21 = !DILocation(line: 36, column: 1, scope: !19)

+ 40 - 38
toolchain/lower/testdata/function/generic/call_different_specific.carbon

@@ -2,6 +2,8 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
+//
 // AUTOUPDATE
 // TIP: To test this file alone, run:
 // TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/lower/testdata/function/generic/call_different_specific.carbon
@@ -57,10 +59,10 @@ fn M() {
 // CHECK:STDOUT:   %ptr_f64.var = alloca ptr, align 8, !dbg !8
 // CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 8, ptr %ptr_i32.var), !dbg !7
 // CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 8, ptr %ptr_f64.var), !dbg !8
-// CHECK:STDOUT:   %.loc44 = load ptr, ptr %ptr_i32.var, align 8, !dbg !9
-// CHECK:STDOUT:   call void @_CF.Main.b88d1103f417c6d4(ptr %.loc44), !dbg !10
-// CHECK:STDOUT:   %.loc45 = load ptr, ptr %ptr_f64.var, align 8, !dbg !11
-// CHECK:STDOUT:   call void @_CF.Main.66be507887ceee78(ptr %.loc45), !dbg !12
+// CHECK:STDOUT:   %.loc46 = load ptr, ptr %ptr_i32.var, align 8, !dbg !9
+// CHECK:STDOUT:   call void @_CF.Main.b88d1103f417c6d4(ptr %.loc46), !dbg !10
+// CHECK:STDOUT:   %.loc47 = load ptr, ptr %ptr_f64.var, align 8, !dbg !11
+// CHECK:STDOUT:   call void @_CF.Main.66be507887ceee78(ptr %.loc47), !dbg !12
 // CHECK:STDOUT:   ret void, !dbg !13
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
@@ -88,15 +90,15 @@ fn M() {
 // CHECK:STDOUT:
 // CHECK:STDOUT: define linkonce_odr void @_CB.Main.b88d1103f417c6d4(ptr %x) !dbg !24 {
 // CHECK:STDOUT: entry:
-// CHECK:STDOUT:   %.loc32_5.2 = load i32, ptr %x, align 4, !dbg !25
-// CHECK:STDOUT:   %D.call = call i32 @_CD.Main.b88d1103f417c6d4(i32 %.loc32_5.2), !dbg !26
+// CHECK:STDOUT:   %.loc34_5.2 = load i32, ptr %x, align 4, !dbg !25
+// CHECK:STDOUT:   %D.call = call i32 @_CD.Main.b88d1103f417c6d4(i32 %.loc34_5.2), !dbg !26
 // CHECK:STDOUT:   ret void, !dbg !27
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: define linkonce_odr void @_CB.Main.66be507887ceee78(ptr %x) !dbg !28 {
 // CHECK:STDOUT: entry:
-// CHECK:STDOUT:   %.loc32_5.2 = load double, ptr %x, align 8, !dbg !29
-// CHECK:STDOUT:   %D.call = call double @_CD.Main.66be507887ceee78(double %.loc32_5.2), !dbg !30
+// CHECK:STDOUT:   %.loc34_5.2 = load double, ptr %x, align 8, !dbg !29
+// CHECK:STDOUT:   %D.call = call double @_CD.Main.66be507887ceee78(double %.loc34_5.2), !dbg !30
 // CHECK:STDOUT:   ret void, !dbg !31
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
@@ -123,35 +125,35 @@ fn M() {
 // CHECK:STDOUT: !1 = !{i32 2, !"Debug Info Version", i32 3}
 // CHECK:STDOUT: !2 = distinct !DICompileUnit(language: DW_LANG_C, file: !3, producer: "carbon", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)
 // CHECK:STDOUT: !3 = !DIFile(filename: "call_different_specific.carbon", directory: "")
-// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "M", linkageName: "_CM.Main", scope: null, file: !3, line: 40, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "M", linkageName: "_CM.Main", scope: null, file: !3, line: 42, type: !5, spFlags: DISPFlagDefinition, unit: !2)
 // CHECK:STDOUT: !5 = !DISubroutineType(types: !6)
 // CHECK:STDOUT: !6 = !{}
-// CHECK:STDOUT: !7 = !DILocation(line: 41, column: 3, scope: !4)
-// CHECK:STDOUT: !8 = !DILocation(line: 42, column: 3, scope: !4)
-// CHECK:STDOUT: !9 = !DILocation(line: 44, column: 5, scope: !4)
-// CHECK:STDOUT: !10 = !DILocation(line: 44, column: 3, scope: !4)
-// CHECK:STDOUT: !11 = !DILocation(line: 45, column: 5, scope: !4)
-// CHECK:STDOUT: !12 = !DILocation(line: 45, column: 3, scope: !4)
-// CHECK:STDOUT: !13 = !DILocation(line: 40, column: 1, scope: !4)
-// CHECK:STDOUT: !14 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.b88d1103f417c6d4", scope: null, file: !3, line: 35, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !15 = !DILocation(line: 36, column: 3, scope: !14)
-// CHECK:STDOUT: !16 = !DILocation(line: 37, column: 3, scope: !14)
-// CHECK:STDOUT: !17 = !DILocation(line: 35, column: 1, scope: !14)
-// CHECK:STDOUT: !18 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.66be507887ceee78", scope: null, file: !3, line: 35, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !19 = !DILocation(line: 36, column: 3, scope: !18)
-// CHECK:STDOUT: !20 = !DILocation(line: 37, column: 3, scope: !18)
-// CHECK:STDOUT: !21 = !DILocation(line: 35, column: 1, scope: !18)
-// CHECK:STDOUT: !22 = distinct !DISubprogram(name: "A", linkageName: "_CA.Main.5754c7a55c7cbe4a", scope: null, file: !3, line: 23, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !23 = !DILocation(line: 24, column: 3, scope: !22)
-// CHECK:STDOUT: !24 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.b88d1103f417c6d4", scope: null, file: !3, line: 31, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !25 = !DILocation(line: 32, column: 5, scope: !24)
-// CHECK:STDOUT: !26 = !DILocation(line: 32, column: 3, scope: !24)
-// CHECK:STDOUT: !27 = !DILocation(line: 31, column: 1, scope: !24)
-// CHECK:STDOUT: !28 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.66be507887ceee78", scope: null, file: !3, line: 31, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !29 = !DILocation(line: 32, column: 5, scope: !28)
-// CHECK:STDOUT: !30 = !DILocation(line: 32, column: 3, scope: !28)
-// CHECK:STDOUT: !31 = !DILocation(line: 31, column: 1, scope: !28)
-// CHECK:STDOUT: !32 = distinct !DISubprogram(name: "D", linkageName: "_CD.Main.b88d1103f417c6d4", scope: null, file: !3, line: 27, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !33 = !DILocation(line: 28, column: 3, scope: !32)
-// CHECK:STDOUT: !34 = distinct !DISubprogram(name: "D", linkageName: "_CD.Main.66be507887ceee78", scope: null, file: !3, line: 27, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !35 = !DILocation(line: 28, column: 3, scope: !34)
+// CHECK:STDOUT: !7 = !DILocation(line: 43, column: 3, scope: !4)
+// CHECK:STDOUT: !8 = !DILocation(line: 44, column: 3, scope: !4)
+// CHECK:STDOUT: !9 = !DILocation(line: 46, column: 5, scope: !4)
+// CHECK:STDOUT: !10 = !DILocation(line: 46, column: 3, scope: !4)
+// CHECK:STDOUT: !11 = !DILocation(line: 47, column: 5, scope: !4)
+// CHECK:STDOUT: !12 = !DILocation(line: 47, column: 3, scope: !4)
+// CHECK:STDOUT: !13 = !DILocation(line: 42, column: 1, scope: !4)
+// CHECK:STDOUT: !14 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.b88d1103f417c6d4", scope: null, file: !3, line: 37, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !15 = !DILocation(line: 38, column: 3, scope: !14)
+// CHECK:STDOUT: !16 = !DILocation(line: 39, column: 3, scope: !14)
+// CHECK:STDOUT: !17 = !DILocation(line: 37, column: 1, scope: !14)
+// CHECK:STDOUT: !18 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.66be507887ceee78", scope: null, file: !3, line: 37, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !19 = !DILocation(line: 38, column: 3, scope: !18)
+// CHECK:STDOUT: !20 = !DILocation(line: 39, column: 3, scope: !18)
+// CHECK:STDOUT: !21 = !DILocation(line: 37, column: 1, scope: !18)
+// CHECK:STDOUT: !22 = distinct !DISubprogram(name: "A", linkageName: "_CA.Main.5754c7a55c7cbe4a", scope: null, file: !3, line: 25, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !23 = !DILocation(line: 26, column: 3, scope: !22)
+// CHECK:STDOUT: !24 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.b88d1103f417c6d4", scope: null, file: !3, line: 33, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !25 = !DILocation(line: 34, column: 5, scope: !24)
+// CHECK:STDOUT: !26 = !DILocation(line: 34, column: 3, scope: !24)
+// CHECK:STDOUT: !27 = !DILocation(line: 33, column: 1, scope: !24)
+// CHECK:STDOUT: !28 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.66be507887ceee78", scope: null, file: !3, line: 33, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !29 = !DILocation(line: 34, column: 5, scope: !28)
+// CHECK:STDOUT: !30 = !DILocation(line: 34, column: 3, scope: !28)
+// CHECK:STDOUT: !31 = !DILocation(line: 33, column: 1, scope: !28)
+// CHECK:STDOUT: !32 = distinct !DISubprogram(name: "D", linkageName: "_CD.Main.b88d1103f417c6d4", scope: null, file: !3, line: 29, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !33 = !DILocation(line: 30, column: 3, scope: !32)
+// CHECK:STDOUT: !34 = distinct !DISubprogram(name: "D", linkageName: "_CD.Main.66be507887ceee78", scope: null, file: !3, line: 29, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !35 = !DILocation(line: 30, column: 3, scope: !34)

+ 45 - 43
toolchain/lower/testdata/function/generic/call_recursive_basic.carbon

@@ -2,6 +2,8 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
+//
 // AUTOUPDATE
 // TIP: To test this file alone, run:
 // TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/lower/testdata/function/generic/call_recursive_basic.carbon
@@ -52,14 +54,14 @@ fn M() {
 // CHECK:STDOUT:   store double 1.000000e+00, ptr %m.var, align 8, !dbg !8
 // CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 8, ptr %ptr_i32.var), !dbg !9
 // CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 8, ptr %ptr_f64.var), !dbg !10
-// CHECK:STDOUT:   %.loc28_5 = load i32, ptr %n.var, align 4, !dbg !11
-// CHECK:STDOUT:   %F.call.loc28 = call i32 @_CF.Main.b88d1103f417c6d4(i32 %.loc28_5, i32 0), !dbg !12
-// CHECK:STDOUT:   %.loc29_5 = load double, ptr %m.var, align 8, !dbg !13
-// CHECK:STDOUT:   %F.call.loc29 = call double @_CF.Main.66be507887ceee78(double %.loc29_5, i32 0), !dbg !14
-// CHECK:STDOUT:   %.loc30_5 = load ptr, ptr %ptr_i32.var, align 8, !dbg !15
-// CHECK:STDOUT:   %F.call.loc30 = call ptr @_CF.Main.e8193710fd35b608(ptr %.loc30_5, i32 0), !dbg !16
-// CHECK:STDOUT:   %.loc31_5 = load ptr, ptr %ptr_f64.var, align 8, !dbg !17
-// CHECK:STDOUT:   %F.call.loc31 = call ptr @_CF.Main.e8193710fd35b608(ptr %.loc31_5, i32 0), !dbg !18
+// CHECK:STDOUT:   %.loc30_5 = load i32, ptr %n.var, align 4, !dbg !11
+// CHECK:STDOUT:   %F.call.loc30 = call i32 @_CF.Main.b88d1103f417c6d4(i32 %.loc30_5, i32 0), !dbg !12
+// CHECK:STDOUT:   %.loc31_5 = load double, ptr %m.var, align 8, !dbg !13
+// CHECK:STDOUT:   %F.call.loc31 = call double @_CF.Main.66be507887ceee78(double %.loc31_5, i32 0), !dbg !14
+// CHECK:STDOUT:   %.loc32_5 = load ptr, ptr %ptr_i32.var, align 8, !dbg !15
+// CHECK:STDOUT:   %F.call.loc32 = call ptr @_CF.Main.e8193710fd35b608(ptr %.loc32_5, i32 0), !dbg !16
+// CHECK:STDOUT:   %.loc33_5 = load ptr, ptr %ptr_f64.var, align 8, !dbg !17
+// CHECK:STDOUT:   %F.call.loc33 = call ptr @_CF.Main.e8193710fd35b608(ptr %.loc33_5, i32 0), !dbg !18
 // CHECK:STDOUT:   ret void, !dbg !19
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
@@ -121,40 +123,40 @@ fn M() {
 // CHECK:STDOUT: !1 = !{i32 2, !"Debug Info Version", i32 3}
 // CHECK:STDOUT: !2 = distinct !DICompileUnit(language: DW_LANG_C, file: !3, producer: "carbon", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)
 // CHECK:STDOUT: !3 = !DIFile(filename: "call_recursive_basic.carbon", directory: "")
-// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "M", linkageName: "_CM.Main", scope: null, file: !3, line: 22, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "M", linkageName: "_CM.Main", scope: null, file: !3, line: 24, type: !5, spFlags: DISPFlagDefinition, unit: !2)
 // CHECK:STDOUT: !5 = !DISubroutineType(types: !6)
 // CHECK:STDOUT: !6 = !{}
-// CHECK:STDOUT: !7 = !DILocation(line: 23, column: 3, scope: !4)
-// CHECK:STDOUT: !8 = !DILocation(line: 24, column: 3, scope: !4)
-// CHECK:STDOUT: !9 = !DILocation(line: 25, column: 3, scope: !4)
-// CHECK:STDOUT: !10 = !DILocation(line: 26, column: 3, scope: !4)
-// CHECK:STDOUT: !11 = !DILocation(line: 28, column: 5, scope: !4)
-// CHECK:STDOUT: !12 = !DILocation(line: 28, column: 3, scope: !4)
-// CHECK:STDOUT: !13 = !DILocation(line: 29, column: 5, scope: !4)
-// CHECK:STDOUT: !14 = !DILocation(line: 29, column: 3, scope: !4)
-// CHECK:STDOUT: !15 = !DILocation(line: 30, column: 5, scope: !4)
-// CHECK:STDOUT: !16 = !DILocation(line: 30, column: 3, scope: !4)
-// CHECK:STDOUT: !17 = !DILocation(line: 31, column: 5, scope: !4)
-// CHECK:STDOUT: !18 = !DILocation(line: 31, column: 3, scope: !4)
-// CHECK:STDOUT: !19 = !DILocation(line: 22, column: 1, scope: !4)
-// CHECK:STDOUT: !20 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.b88d1103f417c6d4", scope: null, file: !3, line: 15, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !21 = !DILocation(line: 16, column: 7, scope: !20)
-// CHECK:STDOUT: !22 = !DILocation(line: 16, column: 6, scope: !20)
-// CHECK:STDOUT: !23 = !DILocation(line: 17, column: 5, scope: !20)
-// CHECK:STDOUT: !24 = !DILocation(line: 19, column: 15, scope: !20)
-// CHECK:STDOUT: !25 = !DILocation(line: 19, column: 10, scope: !20)
-// CHECK:STDOUT: !26 = !DILocation(line: 19, column: 3, scope: !20)
-// CHECK:STDOUT: !27 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.66be507887ceee78", scope: null, file: !3, line: 15, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !28 = !DILocation(line: 16, column: 7, scope: !27)
-// CHECK:STDOUT: !29 = !DILocation(line: 16, column: 6, scope: !27)
-// CHECK:STDOUT: !30 = !DILocation(line: 17, column: 5, scope: !27)
-// CHECK:STDOUT: !31 = !DILocation(line: 19, column: 15, scope: !27)
-// CHECK:STDOUT: !32 = !DILocation(line: 19, column: 10, scope: !27)
-// CHECK:STDOUT: !33 = !DILocation(line: 19, column: 3, scope: !27)
-// CHECK:STDOUT: !34 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.e8193710fd35b608", scope: null, file: !3, line: 15, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !35 = !DILocation(line: 16, column: 7, scope: !34)
-// CHECK:STDOUT: !36 = !DILocation(line: 16, column: 6, scope: !34)
-// CHECK:STDOUT: !37 = !DILocation(line: 17, column: 5, scope: !34)
-// CHECK:STDOUT: !38 = !DILocation(line: 19, column: 15, scope: !34)
-// CHECK:STDOUT: !39 = !DILocation(line: 19, column: 10, scope: !34)
-// CHECK:STDOUT: !40 = !DILocation(line: 19, column: 3, scope: !34)
+// CHECK:STDOUT: !7 = !DILocation(line: 25, column: 3, scope: !4)
+// CHECK:STDOUT: !8 = !DILocation(line: 26, column: 3, scope: !4)
+// CHECK:STDOUT: !9 = !DILocation(line: 27, column: 3, scope: !4)
+// CHECK:STDOUT: !10 = !DILocation(line: 28, column: 3, scope: !4)
+// CHECK:STDOUT: !11 = !DILocation(line: 30, column: 5, scope: !4)
+// CHECK:STDOUT: !12 = !DILocation(line: 30, column: 3, scope: !4)
+// CHECK:STDOUT: !13 = !DILocation(line: 31, column: 5, scope: !4)
+// CHECK:STDOUT: !14 = !DILocation(line: 31, column: 3, scope: !4)
+// CHECK:STDOUT: !15 = !DILocation(line: 32, column: 5, scope: !4)
+// CHECK:STDOUT: !16 = !DILocation(line: 32, column: 3, scope: !4)
+// CHECK:STDOUT: !17 = !DILocation(line: 33, column: 5, scope: !4)
+// CHECK:STDOUT: !18 = !DILocation(line: 33, column: 3, scope: !4)
+// CHECK:STDOUT: !19 = !DILocation(line: 24, column: 1, scope: !4)
+// CHECK:STDOUT: !20 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.b88d1103f417c6d4", scope: null, file: !3, line: 17, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !21 = !DILocation(line: 18, column: 7, scope: !20)
+// CHECK:STDOUT: !22 = !DILocation(line: 18, column: 6, scope: !20)
+// CHECK:STDOUT: !23 = !DILocation(line: 19, column: 5, scope: !20)
+// CHECK:STDOUT: !24 = !DILocation(line: 21, column: 15, scope: !20)
+// CHECK:STDOUT: !25 = !DILocation(line: 21, column: 10, scope: !20)
+// CHECK:STDOUT: !26 = !DILocation(line: 21, column: 3, scope: !20)
+// CHECK:STDOUT: !27 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.66be507887ceee78", scope: null, file: !3, line: 17, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !28 = !DILocation(line: 18, column: 7, scope: !27)
+// CHECK:STDOUT: !29 = !DILocation(line: 18, column: 6, scope: !27)
+// CHECK:STDOUT: !30 = !DILocation(line: 19, column: 5, scope: !27)
+// CHECK:STDOUT: !31 = !DILocation(line: 21, column: 15, scope: !27)
+// CHECK:STDOUT: !32 = !DILocation(line: 21, column: 10, scope: !27)
+// CHECK:STDOUT: !33 = !DILocation(line: 21, column: 3, scope: !27)
+// CHECK:STDOUT: !34 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.e8193710fd35b608", scope: null, file: !3, line: 17, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !35 = !DILocation(line: 18, column: 7, scope: !34)
+// CHECK:STDOUT: !36 = !DILocation(line: 18, column: 6, scope: !34)
+// CHECK:STDOUT: !37 = !DILocation(line: 19, column: 5, scope: !34)
+// CHECK:STDOUT: !38 = !DILocation(line: 21, column: 15, scope: !34)
+// CHECK:STDOUT: !39 = !DILocation(line: 21, column: 10, scope: !34)
+// CHECK:STDOUT: !40 = !DILocation(line: 21, column: 3, scope: !34)

+ 108 - 106
toolchain/lower/testdata/function/generic/call_recursive_diamond.carbon

@@ -2,6 +2,8 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
+//
 // AUTOUPDATE
 // TIP: To test this file alone, run:
 // TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/lower/testdata/function/generic/call_recursive_diamond.carbon
@@ -71,14 +73,14 @@ fn M() {
 // CHECK:STDOUT:   store double 1.000000e+00, ptr %m.var, align 8, !dbg !8
 // CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 8, ptr %ptr_i32.var), !dbg !9
 // CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 8, ptr %ptr_f64.var), !dbg !10
-// CHECK:STDOUT:   %.loc51_5 = load i32, ptr %n.var, align 4, !dbg !11
-// CHECK:STDOUT:   %A.call.loc51 = call i32 @_CA.Main.b88d1103f417c6d4(i32 %.loc51_5, i32 0), !dbg !12
-// CHECK:STDOUT:   %.loc52_5 = load double, ptr %m.var, align 8, !dbg !13
-// CHECK:STDOUT:   %A.call.loc52 = call double @_CA.Main.66be507887ceee78(double %.loc52_5, i32 0), !dbg !14
-// CHECK:STDOUT:   %.loc53_5 = load ptr, ptr %ptr_i32.var, align 8, !dbg !15
-// CHECK:STDOUT:   %A.call.loc53 = call ptr @_CA.Main.e8193710fd35b608(ptr %.loc53_5, i32 0), !dbg !16
-// CHECK:STDOUT:   %.loc54_5 = load ptr, ptr %ptr_f64.var, align 8, !dbg !17
-// CHECK:STDOUT:   %A.call.loc54 = call ptr @_CA.Main.e8193710fd35b608(ptr %.loc54_5, i32 0), !dbg !18
+// CHECK:STDOUT:   %.loc53_5 = load i32, ptr %n.var, align 4, !dbg !11
+// CHECK:STDOUT:   %A.call.loc53 = call i32 @_CA.Main.b88d1103f417c6d4(i32 %.loc53_5, i32 0), !dbg !12
+// CHECK:STDOUT:   %.loc54_5 = load double, ptr %m.var, align 8, !dbg !13
+// CHECK:STDOUT:   %A.call.loc54 = call double @_CA.Main.66be507887ceee78(double %.loc54_5, i32 0), !dbg !14
+// CHECK:STDOUT:   %.loc55_5 = load ptr, ptr %ptr_i32.var, align 8, !dbg !15
+// CHECK:STDOUT:   %A.call.loc55 = call ptr @_CA.Main.e8193710fd35b608(ptr %.loc55_5, i32 0), !dbg !16
+// CHECK:STDOUT:   %.loc56_5 = load ptr, ptr %ptr_f64.var, align 8, !dbg !17
+// CHECK:STDOUT:   %A.call.loc56 = call ptr @_CA.Main.e8193710fd35b608(ptr %.loc56_5, i32 0), !dbg !18
 // CHECK:STDOUT:   ret void, !dbg !19
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
@@ -88,21 +90,21 @@ fn M() {
 // CHECK:STDOUT: define linkonce_odr i32 @_CA.Main.b88d1103f417c6d4(i32 %x, i32 %count) !dbg !20 {
 // CHECK:STDOUT: entry:
 // CHECK:STDOUT:   %int.greater = icmp sgt i32 %count, 4, !dbg !21
-// CHECK:STDOUT:   br i1 %int.greater, label %if.then.loc20, label %if.else.loc20, !dbg !22
+// CHECK:STDOUT:   br i1 %int.greater, label %if.then.loc22, label %if.else.loc22, !dbg !22
 // CHECK:STDOUT:
-// CHECK:STDOUT: if.then.loc20:                                    ; preds = %entry
+// CHECK:STDOUT: if.then.loc22:                                    ; preds = %entry
 // CHECK:STDOUT:   ret i32 %x, !dbg !23
 // CHECK:STDOUT:
-// CHECK:STDOUT: if.else.loc20:                                    ; preds = %entry
+// CHECK:STDOUT: if.else.loc22:                                    ; preds = %entry
 // CHECK:STDOUT:   %int.smod = srem i32 %count, 2, !dbg !24
 // CHECK:STDOUT:   %int.eq = icmp eq i32 %int.smod, 0, !dbg !24
-// CHECK:STDOUT:   br i1 %int.eq, label %if.then.loc23, label %if.else.loc23, !dbg !25
+// CHECK:STDOUT:   br i1 %int.eq, label %if.then.loc25, label %if.else.loc25, !dbg !25
 // CHECK:STDOUT:
-// CHECK:STDOUT: if.then.loc23:                                    ; preds = %if.else.loc20
+// CHECK:STDOUT: if.then.loc25:                                    ; preds = %if.else.loc22
 // CHECK:STDOUT:   %B.call = call i32 @_CB.Main.b88d1103f417c6d4(i32 %x, i32 %count), !dbg !26
 // CHECK:STDOUT:   ret i32 %B.call, !dbg !27
 // CHECK:STDOUT:
-// CHECK:STDOUT: if.else.loc23:                                    ; preds = %if.else.loc20
+// CHECK:STDOUT: if.else.loc25:                                    ; preds = %if.else.loc22
 // CHECK:STDOUT:   %C.call = call i32 @_CC.Main.b88d1103f417c6d4(i32 %x, i32 %count), !dbg !28
 // CHECK:STDOUT:   ret i32 %C.call, !dbg !29
 // CHECK:STDOUT: }
@@ -110,21 +112,21 @@ fn M() {
 // CHECK:STDOUT: define linkonce_odr double @_CA.Main.66be507887ceee78(double %x, i32 %count) !dbg !30 {
 // CHECK:STDOUT: entry:
 // CHECK:STDOUT:   %int.greater = icmp sgt i32 %count, 4, !dbg !31
-// CHECK:STDOUT:   br i1 %int.greater, label %if.then.loc20, label %if.else.loc20, !dbg !32
+// CHECK:STDOUT:   br i1 %int.greater, label %if.then.loc22, label %if.else.loc22, !dbg !32
 // CHECK:STDOUT:
-// CHECK:STDOUT: if.then.loc20:                                    ; preds = %entry
+// CHECK:STDOUT: if.then.loc22:                                    ; preds = %entry
 // CHECK:STDOUT:   ret double %x, !dbg !33
 // CHECK:STDOUT:
-// CHECK:STDOUT: if.else.loc20:                                    ; preds = %entry
+// CHECK:STDOUT: if.else.loc22:                                    ; preds = %entry
 // CHECK:STDOUT:   %int.smod = srem i32 %count, 2, !dbg !34
 // CHECK:STDOUT:   %int.eq = icmp eq i32 %int.smod, 0, !dbg !34
-// CHECK:STDOUT:   br i1 %int.eq, label %if.then.loc23, label %if.else.loc23, !dbg !35
+// CHECK:STDOUT:   br i1 %int.eq, label %if.then.loc25, label %if.else.loc25, !dbg !35
 // CHECK:STDOUT:
-// CHECK:STDOUT: if.then.loc23:                                    ; preds = %if.else.loc20
+// CHECK:STDOUT: if.then.loc25:                                    ; preds = %if.else.loc22
 // CHECK:STDOUT:   %B.call = call double @_CB.Main.66be507887ceee78(double %x, i32 %count), !dbg !36
 // CHECK:STDOUT:   ret double %B.call, !dbg !37
 // CHECK:STDOUT:
-// CHECK:STDOUT: if.else.loc23:                                    ; preds = %if.else.loc20
+// CHECK:STDOUT: if.else.loc25:                                    ; preds = %if.else.loc22
 // CHECK:STDOUT:   %C.call = call double @_CC.Main.66be507887ceee78(double %x, i32 %count), !dbg !38
 // CHECK:STDOUT:   ret double %C.call, !dbg !39
 // CHECK:STDOUT: }
@@ -132,21 +134,21 @@ fn M() {
 // CHECK:STDOUT: define linkonce_odr ptr @_CA.Main.e8193710fd35b608(ptr %x, i32 %count) !dbg !40 {
 // CHECK:STDOUT: entry:
 // CHECK:STDOUT:   %int.greater = icmp sgt i32 %count, 4, !dbg !41
-// CHECK:STDOUT:   br i1 %int.greater, label %if.then.loc20, label %if.else.loc20, !dbg !42
+// CHECK:STDOUT:   br i1 %int.greater, label %if.then.loc22, label %if.else.loc22, !dbg !42
 // CHECK:STDOUT:
-// CHECK:STDOUT: if.then.loc20:                                    ; preds = %entry
+// CHECK:STDOUT: if.then.loc22:                                    ; preds = %entry
 // CHECK:STDOUT:   ret ptr %x, !dbg !43
 // CHECK:STDOUT:
-// CHECK:STDOUT: if.else.loc20:                                    ; preds = %entry
+// CHECK:STDOUT: if.else.loc22:                                    ; preds = %entry
 // CHECK:STDOUT:   %int.smod = srem i32 %count, 2, !dbg !44
 // CHECK:STDOUT:   %int.eq = icmp eq i32 %int.smod, 0, !dbg !44
-// CHECK:STDOUT:   br i1 %int.eq, label %if.then.loc23, label %if.else.loc23, !dbg !45
+// CHECK:STDOUT:   br i1 %int.eq, label %if.then.loc25, label %if.else.loc25, !dbg !45
 // CHECK:STDOUT:
-// CHECK:STDOUT: if.then.loc23:                                    ; preds = %if.else.loc20
+// CHECK:STDOUT: if.then.loc25:                                    ; preds = %if.else.loc22
 // CHECK:STDOUT:   %B.call = call ptr @_CB.Main.e8193710fd35b608(ptr %x, i32 %count), !dbg !46
 // CHECK:STDOUT:   ret ptr %B.call, !dbg !47
 // CHECK:STDOUT:
-// CHECK:STDOUT: if.else.loc23:                                    ; preds = %if.else.loc20
+// CHECK:STDOUT: if.else.loc25:                                    ; preds = %if.else.loc22
 // CHECK:STDOUT:   %C.call = call ptr @_CC.Main.e8193710fd35b608(ptr %x, i32 %count), !dbg !48
 // CHECK:STDOUT:   ret ptr %C.call, !dbg !49
 // CHECK:STDOUT: }
@@ -233,85 +235,85 @@ fn M() {
 // CHECK:STDOUT: !1 = !{i32 2, !"Debug Info Version", i32 3}
 // CHECK:STDOUT: !2 = distinct !DICompileUnit(language: DW_LANG_C, file: !3, producer: "carbon", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)
 // CHECK:STDOUT: !3 = !DIFile(filename: "call_recursive_diamond.carbon", directory: "")
-// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "M", linkageName: "_CM.Main", scope: null, file: !3, line: 45, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "M", linkageName: "_CM.Main", scope: null, file: !3, line: 47, type: !5, spFlags: DISPFlagDefinition, unit: !2)
 // CHECK:STDOUT: !5 = !DISubroutineType(types: !6)
 // CHECK:STDOUT: !6 = !{}
-// CHECK:STDOUT: !7 = !DILocation(line: 46, column: 3, scope: !4)
-// CHECK:STDOUT: !8 = !DILocation(line: 47, column: 3, scope: !4)
-// CHECK:STDOUT: !9 = !DILocation(line: 48, column: 3, scope: !4)
-// CHECK:STDOUT: !10 = !DILocation(line: 49, column: 3, scope: !4)
-// CHECK:STDOUT: !11 = !DILocation(line: 51, column: 5, scope: !4)
-// CHECK:STDOUT: !12 = !DILocation(line: 51, column: 3, scope: !4)
-// CHECK:STDOUT: !13 = !DILocation(line: 52, column: 5, scope: !4)
-// CHECK:STDOUT: !14 = !DILocation(line: 52, column: 3, scope: !4)
-// CHECK:STDOUT: !15 = !DILocation(line: 53, column: 5, scope: !4)
-// CHECK:STDOUT: !16 = !DILocation(line: 53, column: 3, scope: !4)
-// CHECK:STDOUT: !17 = !DILocation(line: 54, column: 5, scope: !4)
-// CHECK:STDOUT: !18 = !DILocation(line: 54, column: 3, scope: !4)
-// CHECK:STDOUT: !19 = !DILocation(line: 45, column: 1, scope: !4)
-// CHECK:STDOUT: !20 = distinct !DISubprogram(name: "A", linkageName: "_CA.Main.b88d1103f417c6d4", scope: null, file: !3, line: 19, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !21 = !DILocation(line: 20, column: 7, scope: !20)
-// CHECK:STDOUT: !22 = !DILocation(line: 20, column: 6, scope: !20)
-// CHECK:STDOUT: !23 = !DILocation(line: 21, column: 5, scope: !20)
-// CHECK:STDOUT: !24 = !DILocation(line: 23, column: 7, scope: !20)
-// CHECK:STDOUT: !25 = !DILocation(line: 23, column: 6, scope: !20)
-// CHECK:STDOUT: !26 = !DILocation(line: 24, column: 12, scope: !20)
-// CHECK:STDOUT: !27 = !DILocation(line: 24, column: 5, scope: !20)
-// CHECK:STDOUT: !28 = !DILocation(line: 26, column: 12, scope: !20)
-// CHECK:STDOUT: !29 = !DILocation(line: 26, column: 5, scope: !20)
-// CHECK:STDOUT: !30 = distinct !DISubprogram(name: "A", linkageName: "_CA.Main.66be507887ceee78", scope: null, file: !3, line: 19, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !31 = !DILocation(line: 20, column: 7, scope: !30)
-// CHECK:STDOUT: !32 = !DILocation(line: 20, column: 6, scope: !30)
-// CHECK:STDOUT: !33 = !DILocation(line: 21, column: 5, scope: !30)
-// CHECK:STDOUT: !34 = !DILocation(line: 23, column: 7, scope: !30)
-// CHECK:STDOUT: !35 = !DILocation(line: 23, column: 6, scope: !30)
-// CHECK:STDOUT: !36 = !DILocation(line: 24, column: 12, scope: !30)
-// CHECK:STDOUT: !37 = !DILocation(line: 24, column: 5, scope: !30)
-// CHECK:STDOUT: !38 = !DILocation(line: 26, column: 12, scope: !30)
-// CHECK:STDOUT: !39 = !DILocation(line: 26, column: 5, scope: !30)
-// CHECK:STDOUT: !40 = distinct !DISubprogram(name: "A", linkageName: "_CA.Main.e8193710fd35b608", scope: null, file: !3, line: 19, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !41 = !DILocation(line: 20, column: 7, scope: !40)
-// CHECK:STDOUT: !42 = !DILocation(line: 20, column: 6, scope: !40)
-// CHECK:STDOUT: !43 = !DILocation(line: 21, column: 5, scope: !40)
-// CHECK:STDOUT: !44 = !DILocation(line: 23, column: 7, scope: !40)
-// CHECK:STDOUT: !45 = !DILocation(line: 23, column: 6, scope: !40)
-// CHECK:STDOUT: !46 = !DILocation(line: 24, column: 12, scope: !40)
-// CHECK:STDOUT: !47 = !DILocation(line: 24, column: 5, scope: !40)
-// CHECK:STDOUT: !48 = !DILocation(line: 26, column: 12, scope: !40)
-// CHECK:STDOUT: !49 = !DILocation(line: 26, column: 5, scope: !40)
-// CHECK:STDOUT: !50 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.b88d1103f417c6d4", scope: null, file: !3, line: 31, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !51 = !DILocation(line: 32, column: 3, scope: !50)
-// CHECK:STDOUT: !52 = !DILocation(line: 33, column: 10, scope: !50)
-// CHECK:STDOUT: !53 = !DILocation(line: 33, column: 3, scope: !50)
-// CHECK:STDOUT: !54 = distinct !DISubprogram(name: "C", linkageName: "_CC.Main.b88d1103f417c6d4", scope: null, file: !3, line: 36, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !55 = !DILocation(line: 37, column: 3, scope: !54)
-// CHECK:STDOUT: !56 = !DILocation(line: 38, column: 10, scope: !54)
-// CHECK:STDOUT: !57 = !DILocation(line: 38, column: 3, scope: !54)
-// CHECK:STDOUT: !58 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.66be507887ceee78", scope: null, file: !3, line: 31, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !59 = !DILocation(line: 32, column: 3, scope: !58)
-// CHECK:STDOUT: !60 = !DILocation(line: 33, column: 10, scope: !58)
-// CHECK:STDOUT: !61 = !DILocation(line: 33, column: 3, scope: !58)
-// CHECK:STDOUT: !62 = distinct !DISubprogram(name: "C", linkageName: "_CC.Main.66be507887ceee78", scope: null, file: !3, line: 36, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !63 = !DILocation(line: 37, column: 3, scope: !62)
-// CHECK:STDOUT: !64 = !DILocation(line: 38, column: 10, scope: !62)
-// CHECK:STDOUT: !65 = !DILocation(line: 38, column: 3, scope: !62)
-// CHECK:STDOUT: !66 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.e8193710fd35b608", scope: null, file: !3, line: 31, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !67 = !DILocation(line: 32, column: 3, scope: !66)
-// CHECK:STDOUT: !68 = !DILocation(line: 33, column: 10, scope: !66)
-// CHECK:STDOUT: !69 = !DILocation(line: 33, column: 3, scope: !66)
-// CHECK:STDOUT: !70 = distinct !DISubprogram(name: "C", linkageName: "_CC.Main.e8193710fd35b608", scope: null, file: !3, line: 36, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !71 = !DILocation(line: 37, column: 3, scope: !70)
-// CHECK:STDOUT: !72 = !DILocation(line: 38, column: 10, scope: !70)
-// CHECK:STDOUT: !73 = !DILocation(line: 38, column: 3, scope: !70)
-// CHECK:STDOUT: !74 = distinct !DISubprogram(name: "D", linkageName: "_CD.Main.b88d1103f417c6d4", scope: null, file: !3, line: 41, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !75 = !DILocation(line: 42, column: 15, scope: !74)
-// CHECK:STDOUT: !76 = !DILocation(line: 42, column: 10, scope: !74)
-// CHECK:STDOUT: !77 = !DILocation(line: 42, column: 3, scope: !74)
-// CHECK:STDOUT: !78 = distinct !DISubprogram(name: "D", linkageName: "_CD.Main.66be507887ceee78", scope: null, file: !3, line: 41, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !79 = !DILocation(line: 42, column: 15, scope: !78)
-// CHECK:STDOUT: !80 = !DILocation(line: 42, column: 10, scope: !78)
-// CHECK:STDOUT: !81 = !DILocation(line: 42, column: 3, scope: !78)
-// CHECK:STDOUT: !82 = distinct !DISubprogram(name: "D", linkageName: "_CD.Main.e8193710fd35b608", scope: null, file: !3, line: 41, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !83 = !DILocation(line: 42, column: 15, scope: !82)
-// CHECK:STDOUT: !84 = !DILocation(line: 42, column: 10, scope: !82)
-// CHECK:STDOUT: !85 = !DILocation(line: 42, column: 3, scope: !82)
+// CHECK:STDOUT: !7 = !DILocation(line: 48, column: 3, scope: !4)
+// CHECK:STDOUT: !8 = !DILocation(line: 49, column: 3, scope: !4)
+// CHECK:STDOUT: !9 = !DILocation(line: 50, column: 3, scope: !4)
+// CHECK:STDOUT: !10 = !DILocation(line: 51, column: 3, scope: !4)
+// CHECK:STDOUT: !11 = !DILocation(line: 53, column: 5, scope: !4)
+// CHECK:STDOUT: !12 = !DILocation(line: 53, column: 3, scope: !4)
+// CHECK:STDOUT: !13 = !DILocation(line: 54, column: 5, scope: !4)
+// CHECK:STDOUT: !14 = !DILocation(line: 54, column: 3, scope: !4)
+// CHECK:STDOUT: !15 = !DILocation(line: 55, column: 5, scope: !4)
+// CHECK:STDOUT: !16 = !DILocation(line: 55, column: 3, scope: !4)
+// CHECK:STDOUT: !17 = !DILocation(line: 56, column: 5, scope: !4)
+// CHECK:STDOUT: !18 = !DILocation(line: 56, column: 3, scope: !4)
+// CHECK:STDOUT: !19 = !DILocation(line: 47, column: 1, scope: !4)
+// CHECK:STDOUT: !20 = distinct !DISubprogram(name: "A", linkageName: "_CA.Main.b88d1103f417c6d4", scope: null, file: !3, line: 21, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !21 = !DILocation(line: 22, column: 7, scope: !20)
+// CHECK:STDOUT: !22 = !DILocation(line: 22, column: 6, scope: !20)
+// CHECK:STDOUT: !23 = !DILocation(line: 23, column: 5, scope: !20)
+// CHECK:STDOUT: !24 = !DILocation(line: 25, column: 7, scope: !20)
+// CHECK:STDOUT: !25 = !DILocation(line: 25, column: 6, scope: !20)
+// CHECK:STDOUT: !26 = !DILocation(line: 26, column: 12, scope: !20)
+// CHECK:STDOUT: !27 = !DILocation(line: 26, column: 5, scope: !20)
+// CHECK:STDOUT: !28 = !DILocation(line: 28, column: 12, scope: !20)
+// CHECK:STDOUT: !29 = !DILocation(line: 28, column: 5, scope: !20)
+// CHECK:STDOUT: !30 = distinct !DISubprogram(name: "A", linkageName: "_CA.Main.66be507887ceee78", scope: null, file: !3, line: 21, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !31 = !DILocation(line: 22, column: 7, scope: !30)
+// CHECK:STDOUT: !32 = !DILocation(line: 22, column: 6, scope: !30)
+// CHECK:STDOUT: !33 = !DILocation(line: 23, column: 5, scope: !30)
+// CHECK:STDOUT: !34 = !DILocation(line: 25, column: 7, scope: !30)
+// CHECK:STDOUT: !35 = !DILocation(line: 25, column: 6, scope: !30)
+// CHECK:STDOUT: !36 = !DILocation(line: 26, column: 12, scope: !30)
+// CHECK:STDOUT: !37 = !DILocation(line: 26, column: 5, scope: !30)
+// CHECK:STDOUT: !38 = !DILocation(line: 28, column: 12, scope: !30)
+// CHECK:STDOUT: !39 = !DILocation(line: 28, column: 5, scope: !30)
+// CHECK:STDOUT: !40 = distinct !DISubprogram(name: "A", linkageName: "_CA.Main.e8193710fd35b608", scope: null, file: !3, line: 21, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !41 = !DILocation(line: 22, column: 7, scope: !40)
+// CHECK:STDOUT: !42 = !DILocation(line: 22, column: 6, scope: !40)
+// CHECK:STDOUT: !43 = !DILocation(line: 23, column: 5, scope: !40)
+// CHECK:STDOUT: !44 = !DILocation(line: 25, column: 7, scope: !40)
+// CHECK:STDOUT: !45 = !DILocation(line: 25, column: 6, scope: !40)
+// CHECK:STDOUT: !46 = !DILocation(line: 26, column: 12, scope: !40)
+// CHECK:STDOUT: !47 = !DILocation(line: 26, column: 5, scope: !40)
+// CHECK:STDOUT: !48 = !DILocation(line: 28, column: 12, scope: !40)
+// CHECK:STDOUT: !49 = !DILocation(line: 28, column: 5, scope: !40)
+// CHECK:STDOUT: !50 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.b88d1103f417c6d4", scope: null, file: !3, line: 33, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !51 = !DILocation(line: 34, column: 3, scope: !50)
+// CHECK:STDOUT: !52 = !DILocation(line: 35, column: 10, scope: !50)
+// CHECK:STDOUT: !53 = !DILocation(line: 35, column: 3, scope: !50)
+// CHECK:STDOUT: !54 = distinct !DISubprogram(name: "C", linkageName: "_CC.Main.b88d1103f417c6d4", scope: null, file: !3, line: 38, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !55 = !DILocation(line: 39, column: 3, scope: !54)
+// CHECK:STDOUT: !56 = !DILocation(line: 40, column: 10, scope: !54)
+// CHECK:STDOUT: !57 = !DILocation(line: 40, column: 3, scope: !54)
+// CHECK:STDOUT: !58 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.66be507887ceee78", scope: null, file: !3, line: 33, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !59 = !DILocation(line: 34, column: 3, scope: !58)
+// CHECK:STDOUT: !60 = !DILocation(line: 35, column: 10, scope: !58)
+// CHECK:STDOUT: !61 = !DILocation(line: 35, column: 3, scope: !58)
+// CHECK:STDOUT: !62 = distinct !DISubprogram(name: "C", linkageName: "_CC.Main.66be507887ceee78", scope: null, file: !3, line: 38, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !63 = !DILocation(line: 39, column: 3, scope: !62)
+// CHECK:STDOUT: !64 = !DILocation(line: 40, column: 10, scope: !62)
+// CHECK:STDOUT: !65 = !DILocation(line: 40, column: 3, scope: !62)
+// CHECK:STDOUT: !66 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.e8193710fd35b608", scope: null, file: !3, line: 33, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !67 = !DILocation(line: 34, column: 3, scope: !66)
+// CHECK:STDOUT: !68 = !DILocation(line: 35, column: 10, scope: !66)
+// CHECK:STDOUT: !69 = !DILocation(line: 35, column: 3, scope: !66)
+// CHECK:STDOUT: !70 = distinct !DISubprogram(name: "C", linkageName: "_CC.Main.e8193710fd35b608", scope: null, file: !3, line: 38, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !71 = !DILocation(line: 39, column: 3, scope: !70)
+// CHECK:STDOUT: !72 = !DILocation(line: 40, column: 10, scope: !70)
+// CHECK:STDOUT: !73 = !DILocation(line: 40, column: 3, scope: !70)
+// CHECK:STDOUT: !74 = distinct !DISubprogram(name: "D", linkageName: "_CD.Main.b88d1103f417c6d4", scope: null, file: !3, line: 43, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !75 = !DILocation(line: 44, column: 15, scope: !74)
+// CHECK:STDOUT: !76 = !DILocation(line: 44, column: 10, scope: !74)
+// CHECK:STDOUT: !77 = !DILocation(line: 44, column: 3, scope: !74)
+// CHECK:STDOUT: !78 = distinct !DISubprogram(name: "D", linkageName: "_CD.Main.66be507887ceee78", scope: null, file: !3, line: 43, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !79 = !DILocation(line: 44, column: 15, scope: !78)
+// CHECK:STDOUT: !80 = !DILocation(line: 44, column: 10, scope: !78)
+// CHECK:STDOUT: !81 = !DILocation(line: 44, column: 3, scope: !78)
+// CHECK:STDOUT: !82 = distinct !DISubprogram(name: "D", linkageName: "_CD.Main.e8193710fd35b608", scope: null, file: !3, line: 43, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !83 = !DILocation(line: 44, column: 15, scope: !82)
+// CHECK:STDOUT: !84 = !DILocation(line: 44, column: 10, scope: !82)
+// CHECK:STDOUT: !85 = !DILocation(line: 44, column: 3, scope: !82)

+ 30 - 28
toolchain/lower/testdata/function/generic/call_recursive_impl.carbon

@@ -2,6 +2,8 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
+//
 // AUTOUPDATE
 // TIP: To test this file alone, run:
 // TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/lower/testdata/function/generic/call_recursive_impl.carbon
@@ -58,8 +60,8 @@ fn Run() {
 // CHECK:STDOUT:
 // CHECK:STDOUT: define void @main() !dbg !12 {
 // CHECK:STDOUT: entry:
-// CHECK:STDOUT:   %G.call.loc38 = call i32 @_CG.Main.2c436a64dfc3fd29(i32 0), !dbg !13
-// CHECK:STDOUT:   %G.call.loc39 = call i32 @_CG.Main.c124d41ebc08c32b(i32 0), !dbg !14
+// CHECK:STDOUT:   %G.call.loc40 = call i32 @_CG.Main.2c436a64dfc3fd29(i32 0), !dbg !13
+// CHECK:STDOUT:   %G.call.loc41 = call i32 @_CG.Main.c124d41ebc08c32b(i32 0), !dbg !14
 // CHECK:STDOUT:   ret void, !dbg !15
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
@@ -105,31 +107,31 @@ fn Run() {
 // CHECK:STDOUT: !1 = !{i32 2, !"Debug Info Version", i32 3}
 // CHECK:STDOUT: !2 = distinct !DICompileUnit(language: DW_LANG_C, file: !3, producer: "carbon", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)
 // CHECK:STDOUT: !3 = !DIFile(filename: "call_recursive_impl.carbon", directory: "")
-// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "F", linkageName: "_CF.X.Main:I.Main", scope: null, file: !3, line: 18, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "F", linkageName: "_CF.X.Main:I.Main", scope: null, file: !3, line: 20, type: !5, spFlags: DISPFlagDefinition, unit: !2)
 // CHECK:STDOUT: !5 = !DISubroutineType(types: !6)
 // CHECK:STDOUT: !6 = !{}
-// CHECK:STDOUT: !7 = !DILocation(line: 18, column: 12, scope: !4)
-// CHECK:STDOUT: !8 = !DILocation(line: 18, column: 3, scope: !4)
-// CHECK:STDOUT: !9 = distinct !DISubprogram(name: "F", linkageName: "_CF.Y.Main:I.Main", scope: null, file: !3, line: 22, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !10 = !DILocation(line: 22, column: 12, scope: !9)
-// CHECK:STDOUT: !11 = !DILocation(line: 22, column: 3, scope: !9)
-// CHECK:STDOUT: !12 = distinct !DISubprogram(name: "Run", linkageName: "main", scope: null, file: !3, line: 37, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !13 = !DILocation(line: 38, column: 3, scope: !12)
-// CHECK:STDOUT: !14 = !DILocation(line: 39, column: 3, scope: !12)
-// CHECK:STDOUT: !15 = !DILocation(line: 37, column: 1, scope: !12)
-// CHECK:STDOUT: !16 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.2c436a64dfc3fd29", scope: null, file: !3, line: 28, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !17 = !DILocation(line: 29, column: 3, scope: !16)
-// CHECK:STDOUT: !18 = !DILocation(line: 31, column: 7, scope: !16)
-// CHECK:STDOUT: !19 = !DILocation(line: 31, column: 6, scope: !16)
-// CHECK:STDOUT: !20 = !DILocation(line: 32, column: 5, scope: !16)
-// CHECK:STDOUT: !21 = !DILocation(line: 34, column: 15, scope: !16)
-// CHECK:STDOUT: !22 = !DILocation(line: 34, column: 10, scope: !16)
-// CHECK:STDOUT: !23 = !DILocation(line: 34, column: 3, scope: !16)
-// CHECK:STDOUT: !24 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.c124d41ebc08c32b", scope: null, file: !3, line: 28, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !25 = !DILocation(line: 29, column: 3, scope: !24)
-// CHECK:STDOUT: !26 = !DILocation(line: 31, column: 7, scope: !24)
-// CHECK:STDOUT: !27 = !DILocation(line: 31, column: 6, scope: !24)
-// CHECK:STDOUT: !28 = !DILocation(line: 32, column: 5, scope: !24)
-// CHECK:STDOUT: !29 = !DILocation(line: 34, column: 15, scope: !24)
-// CHECK:STDOUT: !30 = !DILocation(line: 34, column: 10, scope: !24)
-// CHECK:STDOUT: !31 = !DILocation(line: 34, column: 3, scope: !24)
+// CHECK:STDOUT: !7 = !DILocation(line: 20, column: 12, scope: !4)
+// CHECK:STDOUT: !8 = !DILocation(line: 20, column: 3, scope: !4)
+// CHECK:STDOUT: !9 = distinct !DISubprogram(name: "F", linkageName: "_CF.Y.Main:I.Main", scope: null, file: !3, line: 24, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !10 = !DILocation(line: 24, column: 12, scope: !9)
+// CHECK:STDOUT: !11 = !DILocation(line: 24, column: 3, scope: !9)
+// CHECK:STDOUT: !12 = distinct !DISubprogram(name: "Run", linkageName: "main", scope: null, file: !3, line: 39, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !13 = !DILocation(line: 40, column: 3, scope: !12)
+// CHECK:STDOUT: !14 = !DILocation(line: 41, column: 3, scope: !12)
+// CHECK:STDOUT: !15 = !DILocation(line: 39, column: 1, scope: !12)
+// CHECK:STDOUT: !16 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.2c436a64dfc3fd29", scope: null, file: !3, line: 30, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !17 = !DILocation(line: 31, column: 3, scope: !16)
+// CHECK:STDOUT: !18 = !DILocation(line: 33, column: 7, scope: !16)
+// CHECK:STDOUT: !19 = !DILocation(line: 33, column: 6, scope: !16)
+// CHECK:STDOUT: !20 = !DILocation(line: 34, column: 5, scope: !16)
+// CHECK:STDOUT: !21 = !DILocation(line: 36, column: 15, scope: !16)
+// CHECK:STDOUT: !22 = !DILocation(line: 36, column: 10, scope: !16)
+// CHECK:STDOUT: !23 = !DILocation(line: 36, column: 3, scope: !16)
+// CHECK:STDOUT: !24 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.c124d41ebc08c32b", scope: null, file: !3, line: 30, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !25 = !DILocation(line: 31, column: 3, scope: !24)
+// CHECK:STDOUT: !26 = !DILocation(line: 33, column: 7, scope: !24)
+// CHECK:STDOUT: !27 = !DILocation(line: 33, column: 6, scope: !24)
+// CHECK:STDOUT: !28 = !DILocation(line: 34, column: 5, scope: !24)
+// CHECK:STDOUT: !29 = !DILocation(line: 36, column: 15, scope: !24)
+// CHECK:STDOUT: !30 = !DILocation(line: 36, column: 10, scope: !24)
+// CHECK:STDOUT: !31 = !DILocation(line: 36, column: 3, scope: !24)

+ 66 - 64
toolchain/lower/testdata/function/generic/call_recursive_mutual.carbon

@@ -2,6 +2,8 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
+//
 // AUTOUPDATE
 // TIP: To test this file alone, run:
 // TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/lower/testdata/function/generic/call_recursive_mutual.carbon
@@ -54,14 +56,14 @@ fn M() {
 // CHECK:STDOUT:   store double 1.000000e+00, ptr %m.var, align 8, !dbg !8
 // CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 8, ptr %ptr_i32.var), !dbg !9
 // CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 8, ptr %ptr_f64.var), !dbg !10
-// CHECK:STDOUT:   %.loc36_5 = load i32, ptr %n.var, align 4, !dbg !11
-// CHECK:STDOUT:   %F.call.loc36 = call i32 @_CF.Main.b88d1103f417c6d4(i32 %.loc36_5, i32 0), !dbg !12
-// CHECK:STDOUT:   %.loc37_5 = load double, ptr %m.var, align 8, !dbg !13
-// CHECK:STDOUT:   %F.call.loc37 = call double @_CF.Main.66be507887ceee78(double %.loc37_5, i32 0), !dbg !14
-// CHECK:STDOUT:   %.loc38_5 = load ptr, ptr %ptr_i32.var, align 8, !dbg !15
-// CHECK:STDOUT:   %F.call.loc38 = call ptr @_CF.Main.e8193710fd35b608(ptr %.loc38_5, i32 0), !dbg !16
-// CHECK:STDOUT:   %.loc39_5 = load ptr, ptr %ptr_f64.var, align 8, !dbg !17
-// CHECK:STDOUT:   %F.call.loc39 = call ptr @_CF.Main.e8193710fd35b608(ptr %.loc39_5, i32 0), !dbg !18
+// CHECK:STDOUT:   %.loc38_5 = load i32, ptr %n.var, align 4, !dbg !11
+// CHECK:STDOUT:   %F.call.loc38 = call i32 @_CF.Main.b88d1103f417c6d4(i32 %.loc38_5, i32 0), !dbg !12
+// CHECK:STDOUT:   %.loc39_5 = load double, ptr %m.var, align 8, !dbg !13
+// CHECK:STDOUT:   %F.call.loc39 = call double @_CF.Main.66be507887ceee78(double %.loc39_5, i32 0), !dbg !14
+// CHECK:STDOUT:   %.loc40_5 = load ptr, ptr %ptr_i32.var, align 8, !dbg !15
+// CHECK:STDOUT:   %F.call.loc40 = call ptr @_CF.Main.e8193710fd35b608(ptr %.loc40_5, i32 0), !dbg !16
+// CHECK:STDOUT:   %.loc41_5 = load ptr, ptr %ptr_f64.var, align 8, !dbg !17
+// CHECK:STDOUT:   %F.call.loc41 = call ptr @_CF.Main.e8193710fd35b608(ptr %.loc41_5, i32 0), !dbg !18
 // CHECK:STDOUT:   ret void, !dbg !19
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
@@ -165,61 +167,61 @@ fn M() {
 // CHECK:STDOUT: !1 = !{i32 2, !"Debug Info Version", i32 3}
 // CHECK:STDOUT: !2 = distinct !DICompileUnit(language: DW_LANG_C, file: !3, producer: "carbon", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)
 // CHECK:STDOUT: !3 = !DIFile(filename: "call_recursive_mutual.carbon", directory: "")
-// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "M", linkageName: "_CM.Main", scope: null, file: !3, line: 30, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "M", linkageName: "_CM.Main", scope: null, file: !3, line: 32, type: !5, spFlags: DISPFlagDefinition, unit: !2)
 // CHECK:STDOUT: !5 = !DISubroutineType(types: !6)
 // CHECK:STDOUT: !6 = !{}
-// CHECK:STDOUT: !7 = !DILocation(line: 31, column: 3, scope: !4)
-// CHECK:STDOUT: !8 = !DILocation(line: 32, column: 3, scope: !4)
-// CHECK:STDOUT: !9 = !DILocation(line: 33, column: 3, scope: !4)
-// CHECK:STDOUT: !10 = !DILocation(line: 34, column: 3, scope: !4)
-// CHECK:STDOUT: !11 = !DILocation(line: 36, column: 5, scope: !4)
-// CHECK:STDOUT: !12 = !DILocation(line: 36, column: 3, scope: !4)
-// CHECK:STDOUT: !13 = !DILocation(line: 37, column: 5, scope: !4)
-// CHECK:STDOUT: !14 = !DILocation(line: 37, column: 3, scope: !4)
-// CHECK:STDOUT: !15 = !DILocation(line: 38, column: 5, scope: !4)
-// CHECK:STDOUT: !16 = !DILocation(line: 38, column: 3, scope: !4)
-// CHECK:STDOUT: !17 = !DILocation(line: 39, column: 5, scope: !4)
-// CHECK:STDOUT: !18 = !DILocation(line: 39, column: 3, scope: !4)
-// CHECK:STDOUT: !19 = !DILocation(line: 30, column: 1, scope: !4)
-// CHECK:STDOUT: !20 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.b88d1103f417c6d4", scope: null, file: !3, line: 16, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !21 = !DILocation(line: 17, column: 7, scope: !20)
-// CHECK:STDOUT: !22 = !DILocation(line: 17, column: 6, scope: !20)
-// CHECK:STDOUT: !23 = !DILocation(line: 18, column: 5, scope: !20)
-// CHECK:STDOUT: !24 = !DILocation(line: 20, column: 15, scope: !20)
-// CHECK:STDOUT: !25 = !DILocation(line: 20, column: 10, scope: !20)
-// CHECK:STDOUT: !26 = !DILocation(line: 20, column: 3, scope: !20)
-// CHECK:STDOUT: !27 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.66be507887ceee78", scope: null, file: !3, line: 16, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !28 = !DILocation(line: 17, column: 7, scope: !27)
-// CHECK:STDOUT: !29 = !DILocation(line: 17, column: 6, scope: !27)
-// CHECK:STDOUT: !30 = !DILocation(line: 18, column: 5, scope: !27)
-// CHECK:STDOUT: !31 = !DILocation(line: 20, column: 15, scope: !27)
-// CHECK:STDOUT: !32 = !DILocation(line: 20, column: 10, scope: !27)
-// CHECK:STDOUT: !33 = !DILocation(line: 20, column: 3, scope: !27)
-// CHECK:STDOUT: !34 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.e8193710fd35b608", scope: null, file: !3, line: 16, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !35 = !DILocation(line: 17, column: 7, scope: !34)
-// CHECK:STDOUT: !36 = !DILocation(line: 17, column: 6, scope: !34)
-// CHECK:STDOUT: !37 = !DILocation(line: 18, column: 5, scope: !34)
-// CHECK:STDOUT: !38 = !DILocation(line: 20, column: 15, scope: !34)
-// CHECK:STDOUT: !39 = !DILocation(line: 20, column: 10, scope: !34)
-// CHECK:STDOUT: !40 = !DILocation(line: 20, column: 3, scope: !34)
-// CHECK:STDOUT: !41 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.b88d1103f417c6d4", scope: null, file: !3, line: 23, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !42 = !DILocation(line: 24, column: 7, scope: !41)
-// CHECK:STDOUT: !43 = !DILocation(line: 24, column: 6, scope: !41)
-// CHECK:STDOUT: !44 = !DILocation(line: 25, column: 5, scope: !41)
-// CHECK:STDOUT: !45 = !DILocation(line: 27, column: 15, scope: !41)
-// CHECK:STDOUT: !46 = !DILocation(line: 27, column: 10, scope: !41)
-// CHECK:STDOUT: !47 = !DILocation(line: 27, column: 3, scope: !41)
-// CHECK:STDOUT: !48 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.66be507887ceee78", scope: null, file: !3, line: 23, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !49 = !DILocation(line: 24, column: 7, scope: !48)
-// CHECK:STDOUT: !50 = !DILocation(line: 24, column: 6, scope: !48)
-// CHECK:STDOUT: !51 = !DILocation(line: 25, column: 5, scope: !48)
-// CHECK:STDOUT: !52 = !DILocation(line: 27, column: 15, scope: !48)
-// CHECK:STDOUT: !53 = !DILocation(line: 27, column: 10, scope: !48)
-// CHECK:STDOUT: !54 = !DILocation(line: 27, column: 3, scope: !48)
-// CHECK:STDOUT: !55 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.e8193710fd35b608", scope: null, file: !3, line: 23, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !56 = !DILocation(line: 24, column: 7, scope: !55)
-// CHECK:STDOUT: !57 = !DILocation(line: 24, column: 6, scope: !55)
-// CHECK:STDOUT: !58 = !DILocation(line: 25, column: 5, scope: !55)
-// CHECK:STDOUT: !59 = !DILocation(line: 27, column: 15, scope: !55)
-// CHECK:STDOUT: !60 = !DILocation(line: 27, column: 10, scope: !55)
-// CHECK:STDOUT: !61 = !DILocation(line: 27, column: 3, scope: !55)
+// CHECK:STDOUT: !7 = !DILocation(line: 33, column: 3, scope: !4)
+// CHECK:STDOUT: !8 = !DILocation(line: 34, column: 3, scope: !4)
+// CHECK:STDOUT: !9 = !DILocation(line: 35, column: 3, scope: !4)
+// CHECK:STDOUT: !10 = !DILocation(line: 36, column: 3, scope: !4)
+// CHECK:STDOUT: !11 = !DILocation(line: 38, column: 5, scope: !4)
+// CHECK:STDOUT: !12 = !DILocation(line: 38, column: 3, scope: !4)
+// CHECK:STDOUT: !13 = !DILocation(line: 39, column: 5, scope: !4)
+// CHECK:STDOUT: !14 = !DILocation(line: 39, column: 3, scope: !4)
+// CHECK:STDOUT: !15 = !DILocation(line: 40, column: 5, scope: !4)
+// CHECK:STDOUT: !16 = !DILocation(line: 40, column: 3, scope: !4)
+// CHECK:STDOUT: !17 = !DILocation(line: 41, column: 5, scope: !4)
+// CHECK:STDOUT: !18 = !DILocation(line: 41, column: 3, scope: !4)
+// CHECK:STDOUT: !19 = !DILocation(line: 32, column: 1, scope: !4)
+// CHECK:STDOUT: !20 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.b88d1103f417c6d4", scope: null, file: !3, line: 18, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !21 = !DILocation(line: 19, column: 7, scope: !20)
+// CHECK:STDOUT: !22 = !DILocation(line: 19, column: 6, scope: !20)
+// CHECK:STDOUT: !23 = !DILocation(line: 20, column: 5, scope: !20)
+// CHECK:STDOUT: !24 = !DILocation(line: 22, column: 15, scope: !20)
+// CHECK:STDOUT: !25 = !DILocation(line: 22, column: 10, scope: !20)
+// CHECK:STDOUT: !26 = !DILocation(line: 22, column: 3, scope: !20)
+// CHECK:STDOUT: !27 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.66be507887ceee78", scope: null, file: !3, line: 18, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !28 = !DILocation(line: 19, column: 7, scope: !27)
+// CHECK:STDOUT: !29 = !DILocation(line: 19, column: 6, scope: !27)
+// CHECK:STDOUT: !30 = !DILocation(line: 20, column: 5, scope: !27)
+// CHECK:STDOUT: !31 = !DILocation(line: 22, column: 15, scope: !27)
+// CHECK:STDOUT: !32 = !DILocation(line: 22, column: 10, scope: !27)
+// CHECK:STDOUT: !33 = !DILocation(line: 22, column: 3, scope: !27)
+// CHECK:STDOUT: !34 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.e8193710fd35b608", scope: null, file: !3, line: 18, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !35 = !DILocation(line: 19, column: 7, scope: !34)
+// CHECK:STDOUT: !36 = !DILocation(line: 19, column: 6, scope: !34)
+// CHECK:STDOUT: !37 = !DILocation(line: 20, column: 5, scope: !34)
+// CHECK:STDOUT: !38 = !DILocation(line: 22, column: 15, scope: !34)
+// CHECK:STDOUT: !39 = !DILocation(line: 22, column: 10, scope: !34)
+// CHECK:STDOUT: !40 = !DILocation(line: 22, column: 3, scope: !34)
+// CHECK:STDOUT: !41 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.b88d1103f417c6d4", scope: null, file: !3, line: 25, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !42 = !DILocation(line: 26, column: 7, scope: !41)
+// CHECK:STDOUT: !43 = !DILocation(line: 26, column: 6, scope: !41)
+// CHECK:STDOUT: !44 = !DILocation(line: 27, column: 5, scope: !41)
+// CHECK:STDOUT: !45 = !DILocation(line: 29, column: 15, scope: !41)
+// CHECK:STDOUT: !46 = !DILocation(line: 29, column: 10, scope: !41)
+// CHECK:STDOUT: !47 = !DILocation(line: 29, column: 3, scope: !41)
+// CHECK:STDOUT: !48 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.66be507887ceee78", scope: null, file: !3, line: 25, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !49 = !DILocation(line: 26, column: 7, scope: !48)
+// CHECK:STDOUT: !50 = !DILocation(line: 26, column: 6, scope: !48)
+// CHECK:STDOUT: !51 = !DILocation(line: 27, column: 5, scope: !48)
+// CHECK:STDOUT: !52 = !DILocation(line: 29, column: 15, scope: !48)
+// CHECK:STDOUT: !53 = !DILocation(line: 29, column: 10, scope: !48)
+// CHECK:STDOUT: !54 = !DILocation(line: 29, column: 3, scope: !48)
+// CHECK:STDOUT: !55 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.e8193710fd35b608", scope: null, file: !3, line: 25, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !56 = !DILocation(line: 26, column: 7, scope: !55)
+// CHECK:STDOUT: !57 = !DILocation(line: 26, column: 6, scope: !55)
+// CHECK:STDOUT: !58 = !DILocation(line: 27, column: 5, scope: !55)
+// CHECK:STDOUT: !59 = !DILocation(line: 29, column: 15, scope: !55)
+// CHECK:STDOUT: !60 = !DILocation(line: 29, column: 10, scope: !55)
+// CHECK:STDOUT: !61 = !DILocation(line: 29, column: 3, scope: !55)

+ 26 - 24
toolchain/lower/testdata/function/generic/call_recursive_reorder.carbon

@@ -2,6 +2,8 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
+//
 // AUTOUPDATE
 // TIP: To test this file alone, run:
 // TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/lower/testdata/function/generic/call_recursive_reorder.carbon
@@ -37,12 +39,12 @@ fn M() {
 // CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 8, ptr %ptr_i32.var), !dbg !7
 // CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 8, ptr %ptr_f64.var), !dbg !8
 // CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 8, ptr %ptr_bool.var), !dbg !9
-// CHECK:STDOUT:   %.loc25_5 = load ptr, ptr %ptr_i32.var, align 8, !dbg !10
-// CHECK:STDOUT:   %.loc25_14 = load ptr, ptr %ptr_bool.var, align 8, !dbg !11
-// CHECK:STDOUT:   %F.call.loc25 = call i32 @_CF.Main.2fe87eb83f5a4614(ptr %.loc25_5, ptr %.loc25_14, i32 0), !dbg !12
-// CHECK:STDOUT:   %.loc26_5 = load ptr, ptr %ptr_f64.var, align 8, !dbg !13
-// CHECK:STDOUT:   %.loc26_14 = load ptr, ptr %ptr_bool.var, align 8, !dbg !14
-// CHECK:STDOUT:   %F.call.loc26 = call i32 @_CF.Main.2fe87eb83f5a4614(ptr %.loc26_5, ptr %.loc26_14, i32 0), !dbg !15
+// CHECK:STDOUT:   %.loc27_5 = load ptr, ptr %ptr_i32.var, align 8, !dbg !10
+// CHECK:STDOUT:   %.loc27_14 = load ptr, ptr %ptr_bool.var, align 8, !dbg !11
+// CHECK:STDOUT:   %F.call.loc27 = call i32 @_CF.Main.2fe87eb83f5a4614(ptr %.loc27_5, ptr %.loc27_14, i32 0), !dbg !12
+// CHECK:STDOUT:   %.loc28_5 = load ptr, ptr %ptr_f64.var, align 8, !dbg !13
+// CHECK:STDOUT:   %.loc28_14 = load ptr, ptr %ptr_bool.var, align 8, !dbg !14
+// CHECK:STDOUT:   %F.call.loc28 = call i32 @_CF.Main.2fe87eb83f5a4614(ptr %.loc28_5, ptr %.loc28_14, i32 0), !dbg !15
 // CHECK:STDOUT:   ret void, !dbg !16
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
@@ -76,23 +78,23 @@ fn M() {
 // CHECK:STDOUT: !1 = !{i32 2, !"Debug Info Version", i32 3}
 // CHECK:STDOUT: !2 = distinct !DICompileUnit(language: DW_LANG_C, file: !3, producer: "carbon", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)
 // CHECK:STDOUT: !3 = !DIFile(filename: "call_recursive_reorder.carbon", directory: "")
-// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "M", linkageName: "_CM.Main", scope: null, file: !3, line: 20, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "M", linkageName: "_CM.Main", scope: null, file: !3, line: 22, type: !5, spFlags: DISPFlagDefinition, unit: !2)
 // CHECK:STDOUT: !5 = !DISubroutineType(types: !6)
 // CHECK:STDOUT: !6 = !{}
-// CHECK:STDOUT: !7 = !DILocation(line: 21, column: 3, scope: !4)
-// CHECK:STDOUT: !8 = !DILocation(line: 22, column: 3, scope: !4)
-// CHECK:STDOUT: !9 = !DILocation(line: 23, column: 3, scope: !4)
-// CHECK:STDOUT: !10 = !DILocation(line: 25, column: 5, scope: !4)
-// CHECK:STDOUT: !11 = !DILocation(line: 25, column: 14, scope: !4)
-// CHECK:STDOUT: !12 = !DILocation(line: 25, column: 3, scope: !4)
-// CHECK:STDOUT: !13 = !DILocation(line: 26, column: 5, scope: !4)
-// CHECK:STDOUT: !14 = !DILocation(line: 26, column: 14, scope: !4)
-// CHECK:STDOUT: !15 = !DILocation(line: 26, column: 3, scope: !4)
-// CHECK:STDOUT: !16 = !DILocation(line: 20, column: 1, scope: !4)
-// CHECK:STDOUT: !17 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.2fe87eb83f5a4614", scope: null, file: !3, line: 13, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !18 = !DILocation(line: 14, column: 7, scope: !17)
-// CHECK:STDOUT: !19 = !DILocation(line: 14, column: 6, scope: !17)
-// CHECK:STDOUT: !20 = !DILocation(line: 15, column: 5, scope: !17)
-// CHECK:STDOUT: !21 = !DILocation(line: 17, column: 18, scope: !17)
-// CHECK:STDOUT: !22 = !DILocation(line: 17, column: 10, scope: !17)
-// CHECK:STDOUT: !23 = !DILocation(line: 17, column: 3, scope: !17)
+// CHECK:STDOUT: !7 = !DILocation(line: 23, column: 3, scope: !4)
+// CHECK:STDOUT: !8 = !DILocation(line: 24, column: 3, scope: !4)
+// CHECK:STDOUT: !9 = !DILocation(line: 25, column: 3, scope: !4)
+// CHECK:STDOUT: !10 = !DILocation(line: 27, column: 5, scope: !4)
+// CHECK:STDOUT: !11 = !DILocation(line: 27, column: 14, scope: !4)
+// CHECK:STDOUT: !12 = !DILocation(line: 27, column: 3, scope: !4)
+// CHECK:STDOUT: !13 = !DILocation(line: 28, column: 5, scope: !4)
+// CHECK:STDOUT: !14 = !DILocation(line: 28, column: 14, scope: !4)
+// CHECK:STDOUT: !15 = !DILocation(line: 28, column: 3, scope: !4)
+// CHECK:STDOUT: !16 = !DILocation(line: 22, column: 1, scope: !4)
+// CHECK:STDOUT: !17 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.2fe87eb83f5a4614", scope: null, file: !3, line: 15, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !18 = !DILocation(line: 16, column: 7, scope: !17)
+// CHECK:STDOUT: !19 = !DILocation(line: 16, column: 6, scope: !17)
+// CHECK:STDOUT: !20 = !DILocation(line: 17, column: 5, scope: !17)
+// CHECK:STDOUT: !21 = !DILocation(line: 19, column: 18, scope: !17)
+// CHECK:STDOUT: !22 = !DILocation(line: 19, column: 10, scope: !17)
+// CHECK:STDOUT: !23 = !DILocation(line: 19, column: 3, scope: !17)

+ 158 - 156
toolchain/lower/testdata/function/generic/call_recursive_reorder_more.carbon

@@ -2,6 +2,8 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
+//
 // AUTOUPDATE
 // TIP: To test this file alone, run:
 // TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/lower/testdata/function/generic/call_recursive_reorder_more.carbon
@@ -73,54 +75,54 @@ fn M() {
 // CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 8, ptr %ptr_i32.var), !dbg !13
 // CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 8, ptr %ptr_i64.var), !dbg !14
 // CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 8, ptr %ptr_bool.var), !dbg !15
-// CHECK:STDOUT:   %.loc36_5 = load i16, ptr %val_i16.var, align 2, !dbg !16
-// CHECK:STDOUT:   %.loc36_14 = load ptr, ptr %ptr_i32.var, align 8, !dbg !17
-// CHECK:STDOUT:   %.loc36_23 = load ptr, ptr %ptr_bool.var, align 8, !dbg !18
-// CHECK:STDOUT:   %F.call.loc36 = call i32 @_CF.Main.077d2bb2ab5eee86(i16 %.loc36_5, ptr %.loc36_14, ptr %.loc36_23, i32 0), !dbg !19
-// CHECK:STDOUT:   %.loc37_5 = load i32, ptr %val_i32.var, align 4, !dbg !20
-// CHECK:STDOUT:   %.loc37_14 = load ptr, ptr %ptr_bool.var, align 8, !dbg !21
-// CHECK:STDOUT:   %.loc37_24 = load ptr, ptr %ptr_i64.var, align 8, !dbg !22
-// CHECK:STDOUT:   %F.call.loc37 = call i32 @_CF.Main.9a89ac9e10448feb(i32 %.loc37_5, ptr %.loc37_14, ptr %.loc37_24, i32 0), !dbg !23
-// CHECK:STDOUT:   %.loc38_5 = load i1, ptr %val_bool.var, align 1, !dbg !24
-// CHECK:STDOUT:   %.loc38_15 = load ptr, ptr %ptr_bool.var, align 8, !dbg !25
-// CHECK:STDOUT:   %.loc38_25 = load ptr, ptr %ptr_i16.var, align 8, !dbg !26
-// CHECK:STDOUT:   %F.call.loc38 = call i32 @_CF.Main.76a945443862cc1f(i1 %.loc38_5, ptr %.loc38_15, ptr %.loc38_25, i32 0), !dbg !27
-// CHECK:STDOUT:   %.loc39_5 = load i64, ptr %val_i64.var, align 4, !dbg !28
-// CHECK:STDOUT:   %.loc39_14 = load i1, ptr %val_bool.var, align 1, !dbg !29
-// CHECK:STDOUT:   %.loc39_24 = load ptr, ptr %ptr_bool.var, align 8, !dbg !30
-// CHECK:STDOUT:   %F.call.loc39 = call i32 @_CF.Main.02da1a7614ea56b6(i64 %.loc39_5, i1 %.loc39_14, ptr %.loc39_24, i32 0), !dbg !31
-// CHECK:STDOUT:   %.loc40_5 = load double, ptr %val_f64.var, align 8, !dbg !32
-// CHECK:STDOUT:   %.loc40_14 = load ptr, ptr %ptr_bool.var, align 8, !dbg !33
-// CHECK:STDOUT:   %.loc40_24 = load ptr, ptr %ptr_bool.var, align 8, !dbg !34
-// CHECK:STDOUT:   %F.call.loc40 = call i32 @_CF.Main.f51a89281f4fb62e(double %.loc40_5, ptr %.loc40_14, ptr %.loc40_24, i32 0), !dbg !35
-// CHECK:STDOUT:   %.loc44_5 = load ptr, ptr %ptr_bool.var, align 8, !dbg !36
-// CHECK:STDOUT:   %.loc44_15 = load ptr, ptr %ptr_i16.var, align 8, !dbg !37
-// CHECK:STDOUT:   %.loc44_24 = load ptr, ptr %ptr_i32.var, align 8, !dbg !38
-// CHECK:STDOUT:   %F.call.loc44 = call i32 @_CF.Main.7776e910959584d9(ptr %.loc44_5, ptr %.loc44_15, ptr %.loc44_24, i32 0), !dbg !39
-// CHECK:STDOUT:   %.loc45_5 = load ptr, ptr %ptr_bool.var, align 8, !dbg !40
-// CHECK:STDOUT:   %.loc45_15 = load ptr, ptr %ptr_i16.var, align 8, !dbg !41
-// CHECK:STDOUT:   %.loc45_24 = load ptr, ptr %ptr_i64.var, align 8, !dbg !42
-// CHECK:STDOUT:   %F.call.loc45 = call i32 @_CF.Main.7776e910959584d9(ptr %.loc45_5, ptr %.loc45_15, ptr %.loc45_24, i32 0), !dbg !43
-// CHECK:STDOUT:   %.loc46_5 = load ptr, ptr %ptr_i32.var, align 8, !dbg !44
-// CHECK:STDOUT:   %.loc46_14 = load ptr, ptr %ptr_bool.var, align 8, !dbg !45
-// CHECK:STDOUT:   %.loc46_24 = load ptr, ptr %ptr_i16.var, align 8, !dbg !46
-// CHECK:STDOUT:   %F.call.loc46 = call i32 @_CF.Main.7776e910959584d9(ptr %.loc46_5, ptr %.loc46_14, ptr %.loc46_24, i32 0), !dbg !47
-// CHECK:STDOUT:   %.loc47_5 = load ptr, ptr %ptr_i32.var, align 8, !dbg !48
-// CHECK:STDOUT:   %.loc47_14 = load ptr, ptr %ptr_bool.var, align 8, !dbg !49
-// CHECK:STDOUT:   %.loc47_24 = load ptr, ptr %ptr_i64.var, align 8, !dbg !50
-// CHECK:STDOUT:   %F.call.loc47 = call i32 @_CF.Main.7776e910959584d9(ptr %.loc47_5, ptr %.loc47_14, ptr %.loc47_24, i32 0), !dbg !51
-// CHECK:STDOUT:   %.loc48_5 = load ptr, ptr %ptr_i16.var, align 8, !dbg !52
-// CHECK:STDOUT:   %.loc48_14 = load ptr, ptr %ptr_i32.var, align 8, !dbg !53
-// CHECK:STDOUT:   %.loc48_23 = load ptr, ptr %ptr_i64.var, align 8, !dbg !54
-// CHECK:STDOUT:   %F.call.loc48 = call i32 @_CF.Main.7776e910959584d9(ptr %.loc48_5, ptr %.loc48_14, ptr %.loc48_23, i32 0), !dbg !55
-// CHECK:STDOUT:   %.loc49_5 = load ptr, ptr %ptr_i64.var, align 8, !dbg !56
-// CHECK:STDOUT:   %.loc49_14 = load ptr, ptr %ptr_bool.var, align 8, !dbg !57
-// CHECK:STDOUT:   %.loc49_24 = load ptr, ptr %ptr_i16.var, align 8, !dbg !58
-// CHECK:STDOUT:   %F.call.loc49 = call i32 @_CF.Main.7776e910959584d9(ptr %.loc49_5, ptr %.loc49_14, ptr %.loc49_24, i32 0), !dbg !59
-// CHECK:STDOUT:   %.loc50_5 = load ptr, ptr %ptr_bool.var, align 8, !dbg !60
-// CHECK:STDOUT:   %.loc50_15 = load ptr, ptr %ptr_bool.var, align 8, !dbg !61
-// CHECK:STDOUT:   %.loc50_25 = load ptr, ptr %ptr_bool.var, align 8, !dbg !62
-// CHECK:STDOUT:   %F.call.loc50 = call i32 @_CF.Main.7776e910959584d9(ptr %.loc50_5, ptr %.loc50_15, ptr %.loc50_25, i32 0), !dbg !63
+// CHECK:STDOUT:   %.loc38_5 = load i16, ptr %val_i16.var, align 2, !dbg !16
+// CHECK:STDOUT:   %.loc38_14 = load ptr, ptr %ptr_i32.var, align 8, !dbg !17
+// CHECK:STDOUT:   %.loc38_23 = load ptr, ptr %ptr_bool.var, align 8, !dbg !18
+// CHECK:STDOUT:   %F.call.loc38 = call i32 @_CF.Main.077d2bb2ab5eee86(i16 %.loc38_5, ptr %.loc38_14, ptr %.loc38_23, i32 0), !dbg !19
+// CHECK:STDOUT:   %.loc39_5 = load i32, ptr %val_i32.var, align 4, !dbg !20
+// CHECK:STDOUT:   %.loc39_14 = load ptr, ptr %ptr_bool.var, align 8, !dbg !21
+// CHECK:STDOUT:   %.loc39_24 = load ptr, ptr %ptr_i64.var, align 8, !dbg !22
+// CHECK:STDOUT:   %F.call.loc39 = call i32 @_CF.Main.9a89ac9e10448feb(i32 %.loc39_5, ptr %.loc39_14, ptr %.loc39_24, i32 0), !dbg !23
+// CHECK:STDOUT:   %.loc40_5 = load i1, ptr %val_bool.var, align 1, !dbg !24
+// CHECK:STDOUT:   %.loc40_15 = load ptr, ptr %ptr_bool.var, align 8, !dbg !25
+// CHECK:STDOUT:   %.loc40_25 = load ptr, ptr %ptr_i16.var, align 8, !dbg !26
+// CHECK:STDOUT:   %F.call.loc40 = call i32 @_CF.Main.76a945443862cc1f(i1 %.loc40_5, ptr %.loc40_15, ptr %.loc40_25, i32 0), !dbg !27
+// CHECK:STDOUT:   %.loc41_5 = load i64, ptr %val_i64.var, align 4, !dbg !28
+// CHECK:STDOUT:   %.loc41_14 = load i1, ptr %val_bool.var, align 1, !dbg !29
+// CHECK:STDOUT:   %.loc41_24 = load ptr, ptr %ptr_bool.var, align 8, !dbg !30
+// CHECK:STDOUT:   %F.call.loc41 = call i32 @_CF.Main.02da1a7614ea56b6(i64 %.loc41_5, i1 %.loc41_14, ptr %.loc41_24, i32 0), !dbg !31
+// CHECK:STDOUT:   %.loc42_5 = load double, ptr %val_f64.var, align 8, !dbg !32
+// CHECK:STDOUT:   %.loc42_14 = load ptr, ptr %ptr_bool.var, align 8, !dbg !33
+// CHECK:STDOUT:   %.loc42_24 = load ptr, ptr %ptr_bool.var, align 8, !dbg !34
+// CHECK:STDOUT:   %F.call.loc42 = call i32 @_CF.Main.f51a89281f4fb62e(double %.loc42_5, ptr %.loc42_14, ptr %.loc42_24, i32 0), !dbg !35
+// CHECK:STDOUT:   %.loc46_5 = load ptr, ptr %ptr_bool.var, align 8, !dbg !36
+// CHECK:STDOUT:   %.loc46_15 = load ptr, ptr %ptr_i16.var, align 8, !dbg !37
+// CHECK:STDOUT:   %.loc46_24 = load ptr, ptr %ptr_i32.var, align 8, !dbg !38
+// CHECK:STDOUT:   %F.call.loc46 = call i32 @_CF.Main.7776e910959584d9(ptr %.loc46_5, ptr %.loc46_15, ptr %.loc46_24, i32 0), !dbg !39
+// CHECK:STDOUT:   %.loc47_5 = load ptr, ptr %ptr_bool.var, align 8, !dbg !40
+// CHECK:STDOUT:   %.loc47_15 = load ptr, ptr %ptr_i16.var, align 8, !dbg !41
+// CHECK:STDOUT:   %.loc47_24 = load ptr, ptr %ptr_i64.var, align 8, !dbg !42
+// CHECK:STDOUT:   %F.call.loc47 = call i32 @_CF.Main.7776e910959584d9(ptr %.loc47_5, ptr %.loc47_15, ptr %.loc47_24, i32 0), !dbg !43
+// CHECK:STDOUT:   %.loc48_5 = load ptr, ptr %ptr_i32.var, align 8, !dbg !44
+// CHECK:STDOUT:   %.loc48_14 = load ptr, ptr %ptr_bool.var, align 8, !dbg !45
+// CHECK:STDOUT:   %.loc48_24 = load ptr, ptr %ptr_i16.var, align 8, !dbg !46
+// CHECK:STDOUT:   %F.call.loc48 = call i32 @_CF.Main.7776e910959584d9(ptr %.loc48_5, ptr %.loc48_14, ptr %.loc48_24, i32 0), !dbg !47
+// CHECK:STDOUT:   %.loc49_5 = load ptr, ptr %ptr_i32.var, align 8, !dbg !48
+// CHECK:STDOUT:   %.loc49_14 = load ptr, ptr %ptr_bool.var, align 8, !dbg !49
+// CHECK:STDOUT:   %.loc49_24 = load ptr, ptr %ptr_i64.var, align 8, !dbg !50
+// CHECK:STDOUT:   %F.call.loc49 = call i32 @_CF.Main.7776e910959584d9(ptr %.loc49_5, ptr %.loc49_14, ptr %.loc49_24, i32 0), !dbg !51
+// CHECK:STDOUT:   %.loc50_5 = load ptr, ptr %ptr_i16.var, align 8, !dbg !52
+// CHECK:STDOUT:   %.loc50_14 = load ptr, ptr %ptr_i32.var, align 8, !dbg !53
+// CHECK:STDOUT:   %.loc50_23 = load ptr, ptr %ptr_i64.var, align 8, !dbg !54
+// CHECK:STDOUT:   %F.call.loc50 = call i32 @_CF.Main.7776e910959584d9(ptr %.loc50_5, ptr %.loc50_14, ptr %.loc50_23, i32 0), !dbg !55
+// CHECK:STDOUT:   %.loc51_5 = load ptr, ptr %ptr_i64.var, align 8, !dbg !56
+// CHECK:STDOUT:   %.loc51_14 = load ptr, ptr %ptr_bool.var, align 8, !dbg !57
+// CHECK:STDOUT:   %.loc51_24 = load ptr, ptr %ptr_i16.var, align 8, !dbg !58
+// CHECK:STDOUT:   %F.call.loc51 = call i32 @_CF.Main.7776e910959584d9(ptr %.loc51_5, ptr %.loc51_14, ptr %.loc51_24, i32 0), !dbg !59
+// CHECK:STDOUT:   %.loc52_5 = load ptr, ptr %ptr_bool.var, align 8, !dbg !60
+// CHECK:STDOUT:   %.loc52_15 = load ptr, ptr %ptr_bool.var, align 8, !dbg !61
+// CHECK:STDOUT:   %.loc52_25 = load ptr, ptr %ptr_bool.var, align 8, !dbg !62
+// CHECK:STDOUT:   %F.call.loc52 = call i32 @_CF.Main.7776e910959584d9(ptr %.loc52_5, ptr %.loc52_15, ptr %.loc52_25, i32 0), !dbg !63
 // CHECK:STDOUT:   ret void, !dbg !64
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
@@ -238,113 +240,113 @@ fn M() {
 // CHECK:STDOUT: !1 = !{i32 2, !"Debug Info Version", i32 3}
 // CHECK:STDOUT: !2 = distinct !DICompileUnit(language: DW_LANG_C, file: !3, producer: "carbon", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)
 // CHECK:STDOUT: !3 = !DIFile(filename: "call_recursive_reorder_more.carbon", directory: "")
-// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "M", linkageName: "_CM.Main", scope: null, file: !3, line: 20, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "M", linkageName: "_CM.Main", scope: null, file: !3, line: 22, type: !5, spFlags: DISPFlagDefinition, unit: !2)
 // CHECK:STDOUT: !5 = !DISubroutineType(types: !6)
 // CHECK:STDOUT: !6 = !{}
-// CHECK:STDOUT: !7 = !DILocation(line: 21, column: 3, scope: !4)
-// CHECK:STDOUT: !8 = !DILocation(line: 22, column: 3, scope: !4)
-// CHECK:STDOUT: !9 = !DILocation(line: 23, column: 3, scope: !4)
-// CHECK:STDOUT: !10 = !DILocation(line: 24, column: 3, scope: !4)
-// CHECK:STDOUT: !11 = !DILocation(line: 25, column: 3, scope: !4)
-// CHECK:STDOUT: !12 = !DILocation(line: 27, column: 3, scope: !4)
-// CHECK:STDOUT: !13 = !DILocation(line: 28, column: 3, scope: !4)
-// CHECK:STDOUT: !14 = !DILocation(line: 29, column: 3, scope: !4)
-// CHECK:STDOUT: !15 = !DILocation(line: 30, column: 3, scope: !4)
-// CHECK:STDOUT: !16 = !DILocation(line: 36, column: 5, scope: !4)
-// CHECK:STDOUT: !17 = !DILocation(line: 36, column: 14, scope: !4)
-// CHECK:STDOUT: !18 = !DILocation(line: 36, column: 23, scope: !4)
-// CHECK:STDOUT: !19 = !DILocation(line: 36, column: 3, scope: !4)
-// CHECK:STDOUT: !20 = !DILocation(line: 37, column: 5, scope: !4)
-// CHECK:STDOUT: !21 = !DILocation(line: 37, column: 14, scope: !4)
-// CHECK:STDOUT: !22 = !DILocation(line: 37, column: 24, scope: !4)
-// CHECK:STDOUT: !23 = !DILocation(line: 37, column: 3, scope: !4)
-// CHECK:STDOUT: !24 = !DILocation(line: 38, column: 5, scope: !4)
-// CHECK:STDOUT: !25 = !DILocation(line: 38, column: 15, scope: !4)
-// CHECK:STDOUT: !26 = !DILocation(line: 38, column: 25, scope: !4)
-// CHECK:STDOUT: !27 = !DILocation(line: 38, column: 3, scope: !4)
-// CHECK:STDOUT: !28 = !DILocation(line: 39, column: 5, scope: !4)
-// CHECK:STDOUT: !29 = !DILocation(line: 39, column: 14, scope: !4)
-// CHECK:STDOUT: !30 = !DILocation(line: 39, column: 24, scope: !4)
-// CHECK:STDOUT: !31 = !DILocation(line: 39, column: 3, scope: !4)
-// CHECK:STDOUT: !32 = !DILocation(line: 40, column: 5, scope: !4)
-// CHECK:STDOUT: !33 = !DILocation(line: 40, column: 14, scope: !4)
-// CHECK:STDOUT: !34 = !DILocation(line: 40, column: 24, scope: !4)
-// CHECK:STDOUT: !35 = !DILocation(line: 40, column: 3, scope: !4)
-// CHECK:STDOUT: !36 = !DILocation(line: 44, column: 5, scope: !4)
-// CHECK:STDOUT: !37 = !DILocation(line: 44, column: 15, scope: !4)
-// CHECK:STDOUT: !38 = !DILocation(line: 44, column: 24, scope: !4)
-// CHECK:STDOUT: !39 = !DILocation(line: 44, column: 3, scope: !4)
-// CHECK:STDOUT: !40 = !DILocation(line: 45, column: 5, scope: !4)
-// CHECK:STDOUT: !41 = !DILocation(line: 45, column: 15, scope: !4)
-// CHECK:STDOUT: !42 = !DILocation(line: 45, column: 24, scope: !4)
-// CHECK:STDOUT: !43 = !DILocation(line: 45, column: 3, scope: !4)
-// CHECK:STDOUT: !44 = !DILocation(line: 46, column: 5, scope: !4)
-// CHECK:STDOUT: !45 = !DILocation(line: 46, column: 14, scope: !4)
-// CHECK:STDOUT: !46 = !DILocation(line: 46, column: 24, scope: !4)
-// CHECK:STDOUT: !47 = !DILocation(line: 46, column: 3, scope: !4)
-// CHECK:STDOUT: !48 = !DILocation(line: 47, column: 5, scope: !4)
-// CHECK:STDOUT: !49 = !DILocation(line: 47, column: 14, scope: !4)
-// CHECK:STDOUT: !50 = !DILocation(line: 47, column: 24, scope: !4)
-// CHECK:STDOUT: !51 = !DILocation(line: 47, column: 3, scope: !4)
-// CHECK:STDOUT: !52 = !DILocation(line: 48, column: 5, scope: !4)
-// CHECK:STDOUT: !53 = !DILocation(line: 48, column: 14, scope: !4)
-// CHECK:STDOUT: !54 = !DILocation(line: 48, column: 23, scope: !4)
-// CHECK:STDOUT: !55 = !DILocation(line: 48, column: 3, scope: !4)
-// CHECK:STDOUT: !56 = !DILocation(line: 49, column: 5, scope: !4)
-// CHECK:STDOUT: !57 = !DILocation(line: 49, column: 14, scope: !4)
-// CHECK:STDOUT: !58 = !DILocation(line: 49, column: 24, scope: !4)
-// CHECK:STDOUT: !59 = !DILocation(line: 49, column: 3, scope: !4)
-// CHECK:STDOUT: !60 = !DILocation(line: 50, column: 5, scope: !4)
-// CHECK:STDOUT: !61 = !DILocation(line: 50, column: 15, scope: !4)
-// CHECK:STDOUT: !62 = !DILocation(line: 50, column: 25, scope: !4)
-// CHECK:STDOUT: !63 = !DILocation(line: 50, column: 3, scope: !4)
-// CHECK:STDOUT: !64 = !DILocation(line: 20, column: 1, scope: !4)
-// CHECK:STDOUT: !65 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.077d2bb2ab5eee86", scope: null, file: !3, line: 13, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !66 = !DILocation(line: 14, column: 7, scope: !65)
-// CHECK:STDOUT: !67 = !DILocation(line: 14, column: 6, scope: !65)
-// CHECK:STDOUT: !68 = !DILocation(line: 15, column: 5, scope: !65)
-// CHECK:STDOUT: !69 = !DILocation(line: 17, column: 21, scope: !65)
-// CHECK:STDOUT: !70 = !DILocation(line: 17, column: 10, scope: !65)
-// CHECK:STDOUT: !71 = !DILocation(line: 17, column: 3, scope: !65)
-// CHECK:STDOUT: !72 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.9a89ac9e10448feb", scope: null, file: !3, line: 13, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !73 = !DILocation(line: 14, column: 7, scope: !72)
-// CHECK:STDOUT: !74 = !DILocation(line: 14, column: 6, scope: !72)
-// CHECK:STDOUT: !75 = !DILocation(line: 15, column: 5, scope: !72)
-// CHECK:STDOUT: !76 = !DILocation(line: 17, column: 21, scope: !72)
-// CHECK:STDOUT: !77 = !DILocation(line: 17, column: 10, scope: !72)
-// CHECK:STDOUT: !78 = !DILocation(line: 17, column: 3, scope: !72)
-// CHECK:STDOUT: !79 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.76a945443862cc1f", scope: null, file: !3, line: 13, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !80 = !DILocation(line: 14, column: 7, scope: !79)
-// CHECK:STDOUT: !81 = !DILocation(line: 14, column: 6, scope: !79)
-// CHECK:STDOUT: !82 = !DILocation(line: 15, column: 5, scope: !79)
-// CHECK:STDOUT: !83 = !DILocation(line: 17, column: 21, scope: !79)
-// CHECK:STDOUT: !84 = !DILocation(line: 17, column: 10, scope: !79)
-// CHECK:STDOUT: !85 = !DILocation(line: 17, column: 3, scope: !79)
-// CHECK:STDOUT: !86 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.02da1a7614ea56b6", scope: null, file: !3, line: 13, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !87 = !DILocation(line: 14, column: 7, scope: !86)
-// CHECK:STDOUT: !88 = !DILocation(line: 14, column: 6, scope: !86)
-// CHECK:STDOUT: !89 = !DILocation(line: 15, column: 5, scope: !86)
-// CHECK:STDOUT: !90 = !DILocation(line: 17, column: 21, scope: !86)
-// CHECK:STDOUT: !91 = !DILocation(line: 17, column: 10, scope: !86)
-// CHECK:STDOUT: !92 = !DILocation(line: 17, column: 3, scope: !86)
-// CHECK:STDOUT: !93 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.f51a89281f4fb62e", scope: null, file: !3, line: 13, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !94 = !DILocation(line: 14, column: 7, scope: !93)
-// CHECK:STDOUT: !95 = !DILocation(line: 14, column: 6, scope: !93)
-// CHECK:STDOUT: !96 = !DILocation(line: 15, column: 5, scope: !93)
-// CHECK:STDOUT: !97 = !DILocation(line: 17, column: 21, scope: !93)
-// CHECK:STDOUT: !98 = !DILocation(line: 17, column: 10, scope: !93)
-// CHECK:STDOUT: !99 = !DILocation(line: 17, column: 3, scope: !93)
-// CHECK:STDOUT: !100 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.7776e910959584d9", scope: null, file: !3, line: 13, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !101 = !DILocation(line: 14, column: 7, scope: !100)
-// CHECK:STDOUT: !102 = !DILocation(line: 14, column: 6, scope: !100)
-// CHECK:STDOUT: !103 = !DILocation(line: 15, column: 5, scope: !100)
-// CHECK:STDOUT: !104 = !DILocation(line: 17, column: 21, scope: !100)
-// CHECK:STDOUT: !105 = !DILocation(line: 17, column: 10, scope: !100)
-// CHECK:STDOUT: !106 = !DILocation(line: 17, column: 3, scope: !100)
-// CHECK:STDOUT: !107 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.bea8bae6e14e4034", scope: null, file: !3, line: 13, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !108 = !DILocation(line: 14, column: 7, scope: !107)
-// CHECK:STDOUT: !109 = !DILocation(line: 14, column: 6, scope: !107)
-// CHECK:STDOUT: !110 = !DILocation(line: 15, column: 5, scope: !107)
-// CHECK:STDOUT: !111 = !DILocation(line: 17, column: 21, scope: !107)
-// CHECK:STDOUT: !112 = !DILocation(line: 17, column: 10, scope: !107)
-// CHECK:STDOUT: !113 = !DILocation(line: 17, column: 3, scope: !107)
+// CHECK:STDOUT: !7 = !DILocation(line: 23, column: 3, scope: !4)
+// CHECK:STDOUT: !8 = !DILocation(line: 24, column: 3, scope: !4)
+// CHECK:STDOUT: !9 = !DILocation(line: 25, column: 3, scope: !4)
+// CHECK:STDOUT: !10 = !DILocation(line: 26, column: 3, scope: !4)
+// CHECK:STDOUT: !11 = !DILocation(line: 27, column: 3, scope: !4)
+// CHECK:STDOUT: !12 = !DILocation(line: 29, column: 3, scope: !4)
+// CHECK:STDOUT: !13 = !DILocation(line: 30, column: 3, scope: !4)
+// CHECK:STDOUT: !14 = !DILocation(line: 31, column: 3, scope: !4)
+// CHECK:STDOUT: !15 = !DILocation(line: 32, column: 3, scope: !4)
+// CHECK:STDOUT: !16 = !DILocation(line: 38, column: 5, scope: !4)
+// CHECK:STDOUT: !17 = !DILocation(line: 38, column: 14, scope: !4)
+// CHECK:STDOUT: !18 = !DILocation(line: 38, column: 23, scope: !4)
+// CHECK:STDOUT: !19 = !DILocation(line: 38, column: 3, scope: !4)
+// CHECK:STDOUT: !20 = !DILocation(line: 39, column: 5, scope: !4)
+// CHECK:STDOUT: !21 = !DILocation(line: 39, column: 14, scope: !4)
+// CHECK:STDOUT: !22 = !DILocation(line: 39, column: 24, scope: !4)
+// CHECK:STDOUT: !23 = !DILocation(line: 39, column: 3, scope: !4)
+// CHECK:STDOUT: !24 = !DILocation(line: 40, column: 5, scope: !4)
+// CHECK:STDOUT: !25 = !DILocation(line: 40, column: 15, scope: !4)
+// CHECK:STDOUT: !26 = !DILocation(line: 40, column: 25, scope: !4)
+// CHECK:STDOUT: !27 = !DILocation(line: 40, column: 3, scope: !4)
+// CHECK:STDOUT: !28 = !DILocation(line: 41, column: 5, scope: !4)
+// CHECK:STDOUT: !29 = !DILocation(line: 41, column: 14, scope: !4)
+// CHECK:STDOUT: !30 = !DILocation(line: 41, column: 24, scope: !4)
+// CHECK:STDOUT: !31 = !DILocation(line: 41, column: 3, scope: !4)
+// CHECK:STDOUT: !32 = !DILocation(line: 42, column: 5, scope: !4)
+// CHECK:STDOUT: !33 = !DILocation(line: 42, column: 14, scope: !4)
+// CHECK:STDOUT: !34 = !DILocation(line: 42, column: 24, scope: !4)
+// CHECK:STDOUT: !35 = !DILocation(line: 42, column: 3, scope: !4)
+// CHECK:STDOUT: !36 = !DILocation(line: 46, column: 5, scope: !4)
+// CHECK:STDOUT: !37 = !DILocation(line: 46, column: 15, scope: !4)
+// CHECK:STDOUT: !38 = !DILocation(line: 46, column: 24, scope: !4)
+// CHECK:STDOUT: !39 = !DILocation(line: 46, column: 3, scope: !4)
+// CHECK:STDOUT: !40 = !DILocation(line: 47, column: 5, scope: !4)
+// CHECK:STDOUT: !41 = !DILocation(line: 47, column: 15, scope: !4)
+// CHECK:STDOUT: !42 = !DILocation(line: 47, column: 24, scope: !4)
+// CHECK:STDOUT: !43 = !DILocation(line: 47, column: 3, scope: !4)
+// CHECK:STDOUT: !44 = !DILocation(line: 48, column: 5, scope: !4)
+// CHECK:STDOUT: !45 = !DILocation(line: 48, column: 14, scope: !4)
+// CHECK:STDOUT: !46 = !DILocation(line: 48, column: 24, scope: !4)
+// CHECK:STDOUT: !47 = !DILocation(line: 48, column: 3, scope: !4)
+// CHECK:STDOUT: !48 = !DILocation(line: 49, column: 5, scope: !4)
+// CHECK:STDOUT: !49 = !DILocation(line: 49, column: 14, scope: !4)
+// CHECK:STDOUT: !50 = !DILocation(line: 49, column: 24, scope: !4)
+// CHECK:STDOUT: !51 = !DILocation(line: 49, column: 3, scope: !4)
+// CHECK:STDOUT: !52 = !DILocation(line: 50, column: 5, scope: !4)
+// CHECK:STDOUT: !53 = !DILocation(line: 50, column: 14, scope: !4)
+// CHECK:STDOUT: !54 = !DILocation(line: 50, column: 23, scope: !4)
+// CHECK:STDOUT: !55 = !DILocation(line: 50, column: 3, scope: !4)
+// CHECK:STDOUT: !56 = !DILocation(line: 51, column: 5, scope: !4)
+// CHECK:STDOUT: !57 = !DILocation(line: 51, column: 14, scope: !4)
+// CHECK:STDOUT: !58 = !DILocation(line: 51, column: 24, scope: !4)
+// CHECK:STDOUT: !59 = !DILocation(line: 51, column: 3, scope: !4)
+// CHECK:STDOUT: !60 = !DILocation(line: 52, column: 5, scope: !4)
+// CHECK:STDOUT: !61 = !DILocation(line: 52, column: 15, scope: !4)
+// CHECK:STDOUT: !62 = !DILocation(line: 52, column: 25, scope: !4)
+// CHECK:STDOUT: !63 = !DILocation(line: 52, column: 3, scope: !4)
+// CHECK:STDOUT: !64 = !DILocation(line: 22, column: 1, scope: !4)
+// CHECK:STDOUT: !65 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.077d2bb2ab5eee86", scope: null, file: !3, line: 15, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !66 = !DILocation(line: 16, column: 7, scope: !65)
+// CHECK:STDOUT: !67 = !DILocation(line: 16, column: 6, scope: !65)
+// CHECK:STDOUT: !68 = !DILocation(line: 17, column: 5, scope: !65)
+// CHECK:STDOUT: !69 = !DILocation(line: 19, column: 21, scope: !65)
+// CHECK:STDOUT: !70 = !DILocation(line: 19, column: 10, scope: !65)
+// CHECK:STDOUT: !71 = !DILocation(line: 19, column: 3, scope: !65)
+// CHECK:STDOUT: !72 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.9a89ac9e10448feb", scope: null, file: !3, line: 15, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !73 = !DILocation(line: 16, column: 7, scope: !72)
+// CHECK:STDOUT: !74 = !DILocation(line: 16, column: 6, scope: !72)
+// CHECK:STDOUT: !75 = !DILocation(line: 17, column: 5, scope: !72)
+// CHECK:STDOUT: !76 = !DILocation(line: 19, column: 21, scope: !72)
+// CHECK:STDOUT: !77 = !DILocation(line: 19, column: 10, scope: !72)
+// CHECK:STDOUT: !78 = !DILocation(line: 19, column: 3, scope: !72)
+// CHECK:STDOUT: !79 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.76a945443862cc1f", scope: null, file: !3, line: 15, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !80 = !DILocation(line: 16, column: 7, scope: !79)
+// CHECK:STDOUT: !81 = !DILocation(line: 16, column: 6, scope: !79)
+// CHECK:STDOUT: !82 = !DILocation(line: 17, column: 5, scope: !79)
+// CHECK:STDOUT: !83 = !DILocation(line: 19, column: 21, scope: !79)
+// CHECK:STDOUT: !84 = !DILocation(line: 19, column: 10, scope: !79)
+// CHECK:STDOUT: !85 = !DILocation(line: 19, column: 3, scope: !79)
+// CHECK:STDOUT: !86 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.02da1a7614ea56b6", scope: null, file: !3, line: 15, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !87 = !DILocation(line: 16, column: 7, scope: !86)
+// CHECK:STDOUT: !88 = !DILocation(line: 16, column: 6, scope: !86)
+// CHECK:STDOUT: !89 = !DILocation(line: 17, column: 5, scope: !86)
+// CHECK:STDOUT: !90 = !DILocation(line: 19, column: 21, scope: !86)
+// CHECK:STDOUT: !91 = !DILocation(line: 19, column: 10, scope: !86)
+// CHECK:STDOUT: !92 = !DILocation(line: 19, column: 3, scope: !86)
+// CHECK:STDOUT: !93 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.f51a89281f4fb62e", scope: null, file: !3, line: 15, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !94 = !DILocation(line: 16, column: 7, scope: !93)
+// CHECK:STDOUT: !95 = !DILocation(line: 16, column: 6, scope: !93)
+// CHECK:STDOUT: !96 = !DILocation(line: 17, column: 5, scope: !93)
+// CHECK:STDOUT: !97 = !DILocation(line: 19, column: 21, scope: !93)
+// CHECK:STDOUT: !98 = !DILocation(line: 19, column: 10, scope: !93)
+// CHECK:STDOUT: !99 = !DILocation(line: 19, column: 3, scope: !93)
+// CHECK:STDOUT: !100 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.7776e910959584d9", scope: null, file: !3, line: 15, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !101 = !DILocation(line: 16, column: 7, scope: !100)
+// CHECK:STDOUT: !102 = !DILocation(line: 16, column: 6, scope: !100)
+// CHECK:STDOUT: !103 = !DILocation(line: 17, column: 5, scope: !100)
+// CHECK:STDOUT: !104 = !DILocation(line: 19, column: 21, scope: !100)
+// CHECK:STDOUT: !105 = !DILocation(line: 19, column: 10, scope: !100)
+// CHECK:STDOUT: !106 = !DILocation(line: 19, column: 3, scope: !100)
+// CHECK:STDOUT: !107 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.bea8bae6e14e4034", scope: null, file: !3, line: 15, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !108 = !DILocation(line: 16, column: 7, scope: !107)
+// CHECK:STDOUT: !109 = !DILocation(line: 16, column: 6, scope: !107)
+// CHECK:STDOUT: !110 = !DILocation(line: 17, column: 5, scope: !107)
+// CHECK:STDOUT: !111 = !DILocation(line: 19, column: 21, scope: !107)
+// CHECK:STDOUT: !112 = !DILocation(line: 19, column: 10, scope: !107)
+// CHECK:STDOUT: !113 = !DILocation(line: 19, column: 3, scope: !107)

+ 147 - 145
toolchain/lower/testdata/function/generic/call_recursive_sccs_deep.carbon

@@ -2,6 +2,8 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
+//
 // AUTOUPDATE
 // TIP: To test this file alone, run:
 // TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/lower/testdata/function/generic/call_recursive_sccs_deep.carbon
@@ -98,14 +100,14 @@ fn M() {
 // CHECK:STDOUT:   store double 1.000000e+00, ptr %m.var, align 8, !dbg !8
 // CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 8, ptr %ptr_i32.var), !dbg !9
 // CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 8, ptr %ptr_f64.var), !dbg !10
-// CHECK:STDOUT:   %.loc77_5 = load i32, ptr %n.var, align 4, !dbg !11
-// CHECK:STDOUT:   %A.call.loc77 = call i32 @_CA.Main.b88d1103f417c6d4(i32 %.loc77_5, i32 0), !dbg !12
-// CHECK:STDOUT:   %.loc78_5 = load double, ptr %m.var, align 8, !dbg !13
-// CHECK:STDOUT:   %A.call.loc78 = call double @_CA.Main.66be507887ceee78(double %.loc78_5, i32 0), !dbg !14
-// CHECK:STDOUT:   %.loc79_5 = load ptr, ptr %ptr_i32.var, align 8, !dbg !15
-// CHECK:STDOUT:   %A.call.loc79 = call ptr @_CA.Main.e8193710fd35b608(ptr %.loc79_5, i32 0), !dbg !16
-// CHECK:STDOUT:   %.loc80_5 = load ptr, ptr %ptr_f64.var, align 8, !dbg !17
-// CHECK:STDOUT:   %A.call.loc80 = call ptr @_CA.Main.e8193710fd35b608(ptr %.loc80_5, i32 0), !dbg !18
+// CHECK:STDOUT:   %.loc79_5 = load i32, ptr %n.var, align 4, !dbg !11
+// CHECK:STDOUT:   %A.call.loc79 = call i32 @_CA.Main.b88d1103f417c6d4(i32 %.loc79_5, i32 0), !dbg !12
+// CHECK:STDOUT:   %.loc80_5 = load double, ptr %m.var, align 8, !dbg !13
+// CHECK:STDOUT:   %A.call.loc80 = call double @_CA.Main.66be507887ceee78(double %.loc80_5, i32 0), !dbg !14
+// CHECK:STDOUT:   %.loc81_5 = load ptr, ptr %ptr_i32.var, align 8, !dbg !15
+// CHECK:STDOUT:   %A.call.loc81 = call ptr @_CA.Main.e8193710fd35b608(ptr %.loc81_5, i32 0), !dbg !16
+// CHECK:STDOUT:   %.loc82_5 = load ptr, ptr %ptr_f64.var, align 8, !dbg !17
+// CHECK:STDOUT:   %A.call.loc82 = call ptr @_CA.Main.e8193710fd35b608(ptr %.loc82_5, i32 0), !dbg !18
 // CHECK:STDOUT:   ret void, !dbg !19
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
@@ -142,21 +144,21 @@ fn M() {
 // CHECK:STDOUT: define linkonce_odr i32 @_CD.Main.b88d1103f417c6d4(i32 %x, i32 %count) !dbg !35 {
 // CHECK:STDOUT: entry:
 // CHECK:STDOUT:   %int.greater = icmp sgt i32 %count, 4, !dbg !36
-// CHECK:STDOUT:   br i1 %int.greater, label %if.then.loc46, label %if.else.loc46, !dbg !37
+// CHECK:STDOUT:   br i1 %int.greater, label %if.then.loc48, label %if.else.loc48, !dbg !37
 // CHECK:STDOUT:
-// CHECK:STDOUT: if.then.loc46:                                    ; preds = %entry
+// CHECK:STDOUT: if.then.loc48:                                    ; preds = %entry
 // CHECK:STDOUT:   ret i32 %x, !dbg !38
 // CHECK:STDOUT:
-// CHECK:STDOUT: if.else.loc46:                                    ; preds = %entry
+// CHECK:STDOUT: if.else.loc48:                                    ; preds = %entry
 // CHECK:STDOUT:   %int.smod = srem i32 %count, 2, !dbg !39
 // CHECK:STDOUT:   %int.eq = icmp eq i32 %int.smod, 0, !dbg !39
-// CHECK:STDOUT:   br i1 %int.eq, label %if.then.loc49, label %if.else.loc49, !dbg !40
+// CHECK:STDOUT:   br i1 %int.eq, label %if.then.loc51, label %if.else.loc51, !dbg !40
 // CHECK:STDOUT:
-// CHECK:STDOUT: if.then.loc49:                                    ; preds = %if.else.loc46
+// CHECK:STDOUT: if.then.loc51:                                    ; preds = %if.else.loc48
 // CHECK:STDOUT:   %E.call = call i32 @_CE.Main.b88d1103f417c6d4(i32 %x, i32 %count), !dbg !41
 // CHECK:STDOUT:   ret i32 %E.call, !dbg !42
 // CHECK:STDOUT:
-// CHECK:STDOUT: if.else.loc49:                                    ; preds = %if.else.loc46
+// CHECK:STDOUT: if.else.loc51:                                    ; preds = %if.else.loc48
 // CHECK:STDOUT:   %F.call = call i32 @_CF.Main.b88d1103f417c6d4(i32 %x, i32 %count), !dbg !43
 // CHECK:STDOUT:   ret i32 %F.call, !dbg !44
 // CHECK:STDOUT: }
@@ -170,21 +172,21 @@ fn M() {
 // CHECK:STDOUT: define linkonce_odr double @_CD.Main.66be507887ceee78(double %x, i32 %count) !dbg !48 {
 // CHECK:STDOUT: entry:
 // CHECK:STDOUT:   %int.greater = icmp sgt i32 %count, 4, !dbg !49
-// CHECK:STDOUT:   br i1 %int.greater, label %if.then.loc46, label %if.else.loc46, !dbg !50
+// CHECK:STDOUT:   br i1 %int.greater, label %if.then.loc48, label %if.else.loc48, !dbg !50
 // CHECK:STDOUT:
-// CHECK:STDOUT: if.then.loc46:                                    ; preds = %entry
+// CHECK:STDOUT: if.then.loc48:                                    ; preds = %entry
 // CHECK:STDOUT:   ret double %x, !dbg !51
 // CHECK:STDOUT:
-// CHECK:STDOUT: if.else.loc46:                                    ; preds = %entry
+// CHECK:STDOUT: if.else.loc48:                                    ; preds = %entry
 // CHECK:STDOUT:   %int.smod = srem i32 %count, 2, !dbg !52
 // CHECK:STDOUT:   %int.eq = icmp eq i32 %int.smod, 0, !dbg !52
-// CHECK:STDOUT:   br i1 %int.eq, label %if.then.loc49, label %if.else.loc49, !dbg !53
+// CHECK:STDOUT:   br i1 %int.eq, label %if.then.loc51, label %if.else.loc51, !dbg !53
 // CHECK:STDOUT:
-// CHECK:STDOUT: if.then.loc49:                                    ; preds = %if.else.loc46
+// CHECK:STDOUT: if.then.loc51:                                    ; preds = %if.else.loc48
 // CHECK:STDOUT:   %E.call = call double @_CE.Main.66be507887ceee78(double %x, i32 %count), !dbg !54
 // CHECK:STDOUT:   ret double %E.call, !dbg !55
 // CHECK:STDOUT:
-// CHECK:STDOUT: if.else.loc49:                                    ; preds = %if.else.loc46
+// CHECK:STDOUT: if.else.loc51:                                    ; preds = %if.else.loc48
 // CHECK:STDOUT:   %F.call = call double @_CF.Main.66be507887ceee78(double %x, i32 %count), !dbg !56
 // CHECK:STDOUT:   ret double %F.call, !dbg !57
 // CHECK:STDOUT: }
@@ -198,21 +200,21 @@ fn M() {
 // CHECK:STDOUT: define linkonce_odr ptr @_CD.Main.e8193710fd35b608(ptr %x, i32 %count) !dbg !61 {
 // CHECK:STDOUT: entry:
 // CHECK:STDOUT:   %int.greater = icmp sgt i32 %count, 4, !dbg !62
-// CHECK:STDOUT:   br i1 %int.greater, label %if.then.loc46, label %if.else.loc46, !dbg !63
+// CHECK:STDOUT:   br i1 %int.greater, label %if.then.loc48, label %if.else.loc48, !dbg !63
 // CHECK:STDOUT:
-// CHECK:STDOUT: if.then.loc46:                                    ; preds = %entry
+// CHECK:STDOUT: if.then.loc48:                                    ; preds = %entry
 // CHECK:STDOUT:   ret ptr %x, !dbg !64
 // CHECK:STDOUT:
-// CHECK:STDOUT: if.else.loc46:                                    ; preds = %entry
+// CHECK:STDOUT: if.else.loc48:                                    ; preds = %entry
 // CHECK:STDOUT:   %int.smod = srem i32 %count, 2, !dbg !65
 // CHECK:STDOUT:   %int.eq = icmp eq i32 %int.smod, 0, !dbg !65
-// CHECK:STDOUT:   br i1 %int.eq, label %if.then.loc49, label %if.else.loc49, !dbg !66
+// CHECK:STDOUT:   br i1 %int.eq, label %if.then.loc51, label %if.else.loc51, !dbg !66
 // CHECK:STDOUT:
-// CHECK:STDOUT: if.then.loc49:                                    ; preds = %if.else.loc46
+// CHECK:STDOUT: if.then.loc51:                                    ; preds = %if.else.loc48
 // CHECK:STDOUT:   %E.call = call ptr @_CE.Main.e8193710fd35b608(ptr %x, i32 %count), !dbg !67
 // CHECK:STDOUT:   ret ptr %E.call, !dbg !68
 // CHECK:STDOUT:
-// CHECK:STDOUT: if.else.loc49:                                    ; preds = %if.else.loc46
+// CHECK:STDOUT: if.else.loc51:                                    ; preds = %if.else.loc48
 // CHECK:STDOUT:   %F.call = call ptr @_CF.Main.e8193710fd35b608(ptr %x, i32 %count), !dbg !69
 // CHECK:STDOUT:   ret ptr %F.call, !dbg !70
 // CHECK:STDOUT: }
@@ -338,124 +340,124 @@ fn M() {
 // CHECK:STDOUT: !1 = !{i32 2, !"Debug Info Version", i32 3}
 // CHECK:STDOUT: !2 = distinct !DICompileUnit(language: DW_LANG_C, file: !3, producer: "carbon", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)
 // CHECK:STDOUT: !3 = !DIFile(filename: "call_recursive_sccs_deep.carbon", directory: "")
-// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "M", linkageName: "_CM.Main", scope: null, file: !3, line: 71, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "M", linkageName: "_CM.Main", scope: null, file: !3, line: 73, type: !5, spFlags: DISPFlagDefinition, unit: !2)
 // CHECK:STDOUT: !5 = !DISubroutineType(types: !6)
 // CHECK:STDOUT: !6 = !{}
-// CHECK:STDOUT: !7 = !DILocation(line: 72, column: 3, scope: !4)
-// CHECK:STDOUT: !8 = !DILocation(line: 73, column: 3, scope: !4)
-// CHECK:STDOUT: !9 = !DILocation(line: 74, column: 3, scope: !4)
-// CHECK:STDOUT: !10 = !DILocation(line: 75, column: 3, scope: !4)
-// CHECK:STDOUT: !11 = !DILocation(line: 77, column: 5, scope: !4)
-// CHECK:STDOUT: !12 = !DILocation(line: 77, column: 3, scope: !4)
-// CHECK:STDOUT: !13 = !DILocation(line: 78, column: 5, scope: !4)
-// CHECK:STDOUT: !14 = !DILocation(line: 78, column: 3, scope: !4)
-// CHECK:STDOUT: !15 = !DILocation(line: 79, column: 5, scope: !4)
-// CHECK:STDOUT: !16 = !DILocation(line: 79, column: 3, scope: !4)
-// CHECK:STDOUT: !17 = !DILocation(line: 80, column: 5, scope: !4)
-// CHECK:STDOUT: !18 = !DILocation(line: 80, column: 3, scope: !4)
-// CHECK:STDOUT: !19 = !DILocation(line: 71, column: 1, scope: !4)
-// CHECK:STDOUT: !20 = distinct !DISubprogram(name: "A", linkageName: "_CA.Main.b88d1103f417c6d4", scope: null, file: !3, line: 29, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !21 = !DILocation(line: 30, column: 3, scope: !20)
-// CHECK:STDOUT: !22 = !DILocation(line: 31, column: 10, scope: !20)
-// CHECK:STDOUT: !23 = !DILocation(line: 31, column: 3, scope: !20)
-// CHECK:STDOUT: !24 = distinct !DISubprogram(name: "A", linkageName: "_CA.Main.66be507887ceee78", scope: null, file: !3, line: 29, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !25 = !DILocation(line: 30, column: 3, scope: !24)
-// CHECK:STDOUT: !26 = !DILocation(line: 31, column: 10, scope: !24)
-// CHECK:STDOUT: !27 = !DILocation(line: 31, column: 3, scope: !24)
-// CHECK:STDOUT: !28 = distinct !DISubprogram(name: "A", linkageName: "_CA.Main.e8193710fd35b608", scope: null, file: !3, line: 29, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !29 = !DILocation(line: 30, column: 3, scope: !28)
-// CHECK:STDOUT: !30 = !DILocation(line: 31, column: 10, scope: !28)
-// CHECK:STDOUT: !31 = !DILocation(line: 31, column: 3, scope: !28)
-// CHECK:STDOUT: !32 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.b88d1103f417c6d4", scope: null, file: !3, line: 34, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !33 = !DILocation(line: 35, column: 3, scope: !32)
-// CHECK:STDOUT: !34 = !DILocation(line: 34, column: 1, scope: !32)
-// CHECK:STDOUT: !35 = distinct !DISubprogram(name: "D", linkageName: "_CD.Main.b88d1103f417c6d4", scope: null, file: !3, line: 45, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !36 = !DILocation(line: 46, column: 7, scope: !35)
-// CHECK:STDOUT: !37 = !DILocation(line: 46, column: 6, scope: !35)
-// CHECK:STDOUT: !38 = !DILocation(line: 47, column: 5, scope: !35)
-// CHECK:STDOUT: !39 = !DILocation(line: 49, column: 7, scope: !35)
-// CHECK:STDOUT: !40 = !DILocation(line: 49, column: 6, scope: !35)
-// CHECK:STDOUT: !41 = !DILocation(line: 50, column: 12, scope: !35)
-// CHECK:STDOUT: !42 = !DILocation(line: 50, column: 5, scope: !35)
-// CHECK:STDOUT: !43 = !DILocation(line: 52, column: 12, scope: !35)
-// CHECK:STDOUT: !44 = !DILocation(line: 52, column: 5, scope: !35)
-// CHECK:STDOUT: !45 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.66be507887ceee78", scope: null, file: !3, line: 34, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !46 = !DILocation(line: 35, column: 3, scope: !45)
-// CHECK:STDOUT: !47 = !DILocation(line: 34, column: 1, scope: !45)
-// CHECK:STDOUT: !48 = distinct !DISubprogram(name: "D", linkageName: "_CD.Main.66be507887ceee78", scope: null, file: !3, line: 45, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !49 = !DILocation(line: 46, column: 7, scope: !48)
-// CHECK:STDOUT: !50 = !DILocation(line: 46, column: 6, scope: !48)
-// CHECK:STDOUT: !51 = !DILocation(line: 47, column: 5, scope: !48)
-// CHECK:STDOUT: !52 = !DILocation(line: 49, column: 7, scope: !48)
-// CHECK:STDOUT: !53 = !DILocation(line: 49, column: 6, scope: !48)
-// CHECK:STDOUT: !54 = !DILocation(line: 50, column: 12, scope: !48)
-// CHECK:STDOUT: !55 = !DILocation(line: 50, column: 5, scope: !48)
-// CHECK:STDOUT: !56 = !DILocation(line: 52, column: 12, scope: !48)
-// CHECK:STDOUT: !57 = !DILocation(line: 52, column: 5, scope: !48)
-// CHECK:STDOUT: !58 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.e8193710fd35b608", scope: null, file: !3, line: 34, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !59 = !DILocation(line: 35, column: 3, scope: !58)
-// CHECK:STDOUT: !60 = !DILocation(line: 34, column: 1, scope: !58)
-// CHECK:STDOUT: !61 = distinct !DISubprogram(name: "D", linkageName: "_CD.Main.e8193710fd35b608", scope: null, file: !3, line: 45, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !62 = !DILocation(line: 46, column: 7, scope: !61)
-// CHECK:STDOUT: !63 = !DILocation(line: 46, column: 6, scope: !61)
-// CHECK:STDOUT: !64 = !DILocation(line: 47, column: 5, scope: !61)
-// CHECK:STDOUT: !65 = !DILocation(line: 49, column: 7, scope: !61)
-// CHECK:STDOUT: !66 = !DILocation(line: 49, column: 6, scope: !61)
-// CHECK:STDOUT: !67 = !DILocation(line: 50, column: 12, scope: !61)
-// CHECK:STDOUT: !68 = !DILocation(line: 50, column: 5, scope: !61)
-// CHECK:STDOUT: !69 = !DILocation(line: 52, column: 12, scope: !61)
-// CHECK:STDOUT: !70 = !DILocation(line: 52, column: 5, scope: !61)
-// CHECK:STDOUT: !71 = distinct !DISubprogram(name: "C", linkageName: "_CC.Main.b88d1103f417c6d4", scope: null, file: !3, line: 38, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !72 = !DILocation(line: 39, column: 7, scope: !71)
-// CHECK:STDOUT: !73 = !DILocation(line: 39, column: 6, scope: !71)
-// CHECK:STDOUT: !74 = !DILocation(line: 40, column: 5, scope: !71)
-// CHECK:STDOUT: !75 = !DILocation(line: 41, column: 10, scope: !71)
-// CHECK:STDOUT: !76 = !DILocation(line: 41, column: 5, scope: !71)
-// CHECK:STDOUT: !77 = !DILocation(line: 39, column: 3, scope: !71)
-// CHECK:STDOUT: !78 = !DILocation(line: 38, column: 1, scope: !71)
-// CHECK:STDOUT: !79 = distinct !DISubprogram(name: "E", linkageName: "_CE.Main.b88d1103f417c6d4", scope: null, file: !3, line: 58, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !80 = !DILocation(line: 59, column: 10, scope: !79)
-// CHECK:STDOUT: !81 = !DILocation(line: 59, column: 3, scope: !79)
-// CHECK:STDOUT: !82 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.b88d1103f417c6d4", scope: null, file: !3, line: 62, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !83 = !DILocation(line: 63, column: 10, scope: !82)
-// CHECK:STDOUT: !84 = !DILocation(line: 63, column: 3, scope: !82)
-// CHECK:STDOUT: !85 = distinct !DISubprogram(name: "C", linkageName: "_CC.Main.66be507887ceee78", scope: null, file: !3, line: 38, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !86 = !DILocation(line: 39, column: 7, scope: !85)
-// CHECK:STDOUT: !87 = !DILocation(line: 39, column: 6, scope: !85)
-// CHECK:STDOUT: !88 = !DILocation(line: 40, column: 5, scope: !85)
-// CHECK:STDOUT: !89 = !DILocation(line: 41, column: 10, scope: !85)
-// CHECK:STDOUT: !90 = !DILocation(line: 41, column: 5, scope: !85)
-// CHECK:STDOUT: !91 = !DILocation(line: 39, column: 3, scope: !85)
-// CHECK:STDOUT: !92 = !DILocation(line: 38, column: 1, scope: !85)
-// CHECK:STDOUT: !93 = distinct !DISubprogram(name: "E", linkageName: "_CE.Main.66be507887ceee78", scope: null, file: !3, line: 58, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !94 = !DILocation(line: 59, column: 10, scope: !93)
-// CHECK:STDOUT: !95 = !DILocation(line: 59, column: 3, scope: !93)
-// CHECK:STDOUT: !96 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.66be507887ceee78", scope: null, file: !3, line: 62, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !97 = !DILocation(line: 63, column: 10, scope: !96)
-// CHECK:STDOUT: !98 = !DILocation(line: 63, column: 3, scope: !96)
-// CHECK:STDOUT: !99 = distinct !DISubprogram(name: "C", linkageName: "_CC.Main.e8193710fd35b608", scope: null, file: !3, line: 38, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !100 = !DILocation(line: 39, column: 7, scope: !99)
-// CHECK:STDOUT: !101 = !DILocation(line: 39, column: 6, scope: !99)
-// CHECK:STDOUT: !102 = !DILocation(line: 40, column: 5, scope: !99)
-// CHECK:STDOUT: !103 = !DILocation(line: 41, column: 10, scope: !99)
-// CHECK:STDOUT: !104 = !DILocation(line: 41, column: 5, scope: !99)
-// CHECK:STDOUT: !105 = !DILocation(line: 39, column: 3, scope: !99)
-// CHECK:STDOUT: !106 = !DILocation(line: 38, column: 1, scope: !99)
-// CHECK:STDOUT: !107 = distinct !DISubprogram(name: "E", linkageName: "_CE.Main.e8193710fd35b608", scope: null, file: !3, line: 58, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !108 = !DILocation(line: 59, column: 10, scope: !107)
-// CHECK:STDOUT: !109 = !DILocation(line: 59, column: 3, scope: !107)
-// CHECK:STDOUT: !110 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.e8193710fd35b608", scope: null, file: !3, line: 62, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !111 = !DILocation(line: 63, column: 10, scope: !110)
-// CHECK:STDOUT: !112 = !DILocation(line: 63, column: 3, scope: !110)
-// CHECK:STDOUT: !113 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.b88d1103f417c6d4", scope: null, file: !3, line: 66, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !114 = !DILocation(line: 67, column: 15, scope: !113)
-// CHECK:STDOUT: !115 = !DILocation(line: 67, column: 10, scope: !113)
-// CHECK:STDOUT: !116 = !DILocation(line: 67, column: 3, scope: !113)
-// CHECK:STDOUT: !117 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.66be507887ceee78", scope: null, file: !3, line: 66, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !118 = !DILocation(line: 67, column: 15, scope: !117)
-// CHECK:STDOUT: !119 = !DILocation(line: 67, column: 10, scope: !117)
-// CHECK:STDOUT: !120 = !DILocation(line: 67, column: 3, scope: !117)
-// CHECK:STDOUT: !121 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.e8193710fd35b608", scope: null, file: !3, line: 66, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !122 = !DILocation(line: 67, column: 15, scope: !121)
-// CHECK:STDOUT: !123 = !DILocation(line: 67, column: 10, scope: !121)
-// CHECK:STDOUT: !124 = !DILocation(line: 67, column: 3, scope: !121)
+// CHECK:STDOUT: !7 = !DILocation(line: 74, column: 3, scope: !4)
+// CHECK:STDOUT: !8 = !DILocation(line: 75, column: 3, scope: !4)
+// CHECK:STDOUT: !9 = !DILocation(line: 76, column: 3, scope: !4)
+// CHECK:STDOUT: !10 = !DILocation(line: 77, column: 3, scope: !4)
+// CHECK:STDOUT: !11 = !DILocation(line: 79, column: 5, scope: !4)
+// CHECK:STDOUT: !12 = !DILocation(line: 79, column: 3, scope: !4)
+// CHECK:STDOUT: !13 = !DILocation(line: 80, column: 5, scope: !4)
+// CHECK:STDOUT: !14 = !DILocation(line: 80, column: 3, scope: !4)
+// CHECK:STDOUT: !15 = !DILocation(line: 81, column: 5, scope: !4)
+// CHECK:STDOUT: !16 = !DILocation(line: 81, column: 3, scope: !4)
+// CHECK:STDOUT: !17 = !DILocation(line: 82, column: 5, scope: !4)
+// CHECK:STDOUT: !18 = !DILocation(line: 82, column: 3, scope: !4)
+// CHECK:STDOUT: !19 = !DILocation(line: 73, column: 1, scope: !4)
+// CHECK:STDOUT: !20 = distinct !DISubprogram(name: "A", linkageName: "_CA.Main.b88d1103f417c6d4", scope: null, file: !3, line: 31, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !21 = !DILocation(line: 32, column: 3, scope: !20)
+// CHECK:STDOUT: !22 = !DILocation(line: 33, column: 10, scope: !20)
+// CHECK:STDOUT: !23 = !DILocation(line: 33, column: 3, scope: !20)
+// CHECK:STDOUT: !24 = distinct !DISubprogram(name: "A", linkageName: "_CA.Main.66be507887ceee78", scope: null, file: !3, line: 31, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !25 = !DILocation(line: 32, column: 3, scope: !24)
+// CHECK:STDOUT: !26 = !DILocation(line: 33, column: 10, scope: !24)
+// CHECK:STDOUT: !27 = !DILocation(line: 33, column: 3, scope: !24)
+// CHECK:STDOUT: !28 = distinct !DISubprogram(name: "A", linkageName: "_CA.Main.e8193710fd35b608", scope: null, file: !3, line: 31, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !29 = !DILocation(line: 32, column: 3, scope: !28)
+// CHECK:STDOUT: !30 = !DILocation(line: 33, column: 10, scope: !28)
+// CHECK:STDOUT: !31 = !DILocation(line: 33, column: 3, scope: !28)
+// CHECK:STDOUT: !32 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.b88d1103f417c6d4", scope: null, file: !3, line: 36, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !33 = !DILocation(line: 37, column: 3, scope: !32)
+// CHECK:STDOUT: !34 = !DILocation(line: 36, column: 1, scope: !32)
+// CHECK:STDOUT: !35 = distinct !DISubprogram(name: "D", linkageName: "_CD.Main.b88d1103f417c6d4", scope: null, file: !3, line: 47, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !36 = !DILocation(line: 48, column: 7, scope: !35)
+// CHECK:STDOUT: !37 = !DILocation(line: 48, column: 6, scope: !35)
+// CHECK:STDOUT: !38 = !DILocation(line: 49, column: 5, scope: !35)
+// CHECK:STDOUT: !39 = !DILocation(line: 51, column: 7, scope: !35)
+// CHECK:STDOUT: !40 = !DILocation(line: 51, column: 6, scope: !35)
+// CHECK:STDOUT: !41 = !DILocation(line: 52, column: 12, scope: !35)
+// CHECK:STDOUT: !42 = !DILocation(line: 52, column: 5, scope: !35)
+// CHECK:STDOUT: !43 = !DILocation(line: 54, column: 12, scope: !35)
+// CHECK:STDOUT: !44 = !DILocation(line: 54, column: 5, scope: !35)
+// CHECK:STDOUT: !45 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.66be507887ceee78", scope: null, file: !3, line: 36, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !46 = !DILocation(line: 37, column: 3, scope: !45)
+// CHECK:STDOUT: !47 = !DILocation(line: 36, column: 1, scope: !45)
+// CHECK:STDOUT: !48 = distinct !DISubprogram(name: "D", linkageName: "_CD.Main.66be507887ceee78", scope: null, file: !3, line: 47, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !49 = !DILocation(line: 48, column: 7, scope: !48)
+// CHECK:STDOUT: !50 = !DILocation(line: 48, column: 6, scope: !48)
+// CHECK:STDOUT: !51 = !DILocation(line: 49, column: 5, scope: !48)
+// CHECK:STDOUT: !52 = !DILocation(line: 51, column: 7, scope: !48)
+// CHECK:STDOUT: !53 = !DILocation(line: 51, column: 6, scope: !48)
+// CHECK:STDOUT: !54 = !DILocation(line: 52, column: 12, scope: !48)
+// CHECK:STDOUT: !55 = !DILocation(line: 52, column: 5, scope: !48)
+// CHECK:STDOUT: !56 = !DILocation(line: 54, column: 12, scope: !48)
+// CHECK:STDOUT: !57 = !DILocation(line: 54, column: 5, scope: !48)
+// CHECK:STDOUT: !58 = distinct !DISubprogram(name: "B", linkageName: "_CB.Main.e8193710fd35b608", scope: null, file: !3, line: 36, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !59 = !DILocation(line: 37, column: 3, scope: !58)
+// CHECK:STDOUT: !60 = !DILocation(line: 36, column: 1, scope: !58)
+// CHECK:STDOUT: !61 = distinct !DISubprogram(name: "D", linkageName: "_CD.Main.e8193710fd35b608", scope: null, file: !3, line: 47, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !62 = !DILocation(line: 48, column: 7, scope: !61)
+// CHECK:STDOUT: !63 = !DILocation(line: 48, column: 6, scope: !61)
+// CHECK:STDOUT: !64 = !DILocation(line: 49, column: 5, scope: !61)
+// CHECK:STDOUT: !65 = !DILocation(line: 51, column: 7, scope: !61)
+// CHECK:STDOUT: !66 = !DILocation(line: 51, column: 6, scope: !61)
+// CHECK:STDOUT: !67 = !DILocation(line: 52, column: 12, scope: !61)
+// CHECK:STDOUT: !68 = !DILocation(line: 52, column: 5, scope: !61)
+// CHECK:STDOUT: !69 = !DILocation(line: 54, column: 12, scope: !61)
+// CHECK:STDOUT: !70 = !DILocation(line: 54, column: 5, scope: !61)
+// CHECK:STDOUT: !71 = distinct !DISubprogram(name: "C", linkageName: "_CC.Main.b88d1103f417c6d4", scope: null, file: !3, line: 40, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !72 = !DILocation(line: 41, column: 7, scope: !71)
+// CHECK:STDOUT: !73 = !DILocation(line: 41, column: 6, scope: !71)
+// CHECK:STDOUT: !74 = !DILocation(line: 42, column: 5, scope: !71)
+// CHECK:STDOUT: !75 = !DILocation(line: 43, column: 10, scope: !71)
+// CHECK:STDOUT: !76 = !DILocation(line: 43, column: 5, scope: !71)
+// CHECK:STDOUT: !77 = !DILocation(line: 41, column: 3, scope: !71)
+// CHECK:STDOUT: !78 = !DILocation(line: 40, column: 1, scope: !71)
+// CHECK:STDOUT: !79 = distinct !DISubprogram(name: "E", linkageName: "_CE.Main.b88d1103f417c6d4", scope: null, file: !3, line: 60, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !80 = !DILocation(line: 61, column: 10, scope: !79)
+// CHECK:STDOUT: !81 = !DILocation(line: 61, column: 3, scope: !79)
+// CHECK:STDOUT: !82 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.b88d1103f417c6d4", scope: null, file: !3, line: 64, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !83 = !DILocation(line: 65, column: 10, scope: !82)
+// CHECK:STDOUT: !84 = !DILocation(line: 65, column: 3, scope: !82)
+// CHECK:STDOUT: !85 = distinct !DISubprogram(name: "C", linkageName: "_CC.Main.66be507887ceee78", scope: null, file: !3, line: 40, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !86 = !DILocation(line: 41, column: 7, scope: !85)
+// CHECK:STDOUT: !87 = !DILocation(line: 41, column: 6, scope: !85)
+// CHECK:STDOUT: !88 = !DILocation(line: 42, column: 5, scope: !85)
+// CHECK:STDOUT: !89 = !DILocation(line: 43, column: 10, scope: !85)
+// CHECK:STDOUT: !90 = !DILocation(line: 43, column: 5, scope: !85)
+// CHECK:STDOUT: !91 = !DILocation(line: 41, column: 3, scope: !85)
+// CHECK:STDOUT: !92 = !DILocation(line: 40, column: 1, scope: !85)
+// CHECK:STDOUT: !93 = distinct !DISubprogram(name: "E", linkageName: "_CE.Main.66be507887ceee78", scope: null, file: !3, line: 60, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !94 = !DILocation(line: 61, column: 10, scope: !93)
+// CHECK:STDOUT: !95 = !DILocation(line: 61, column: 3, scope: !93)
+// CHECK:STDOUT: !96 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.66be507887ceee78", scope: null, file: !3, line: 64, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !97 = !DILocation(line: 65, column: 10, scope: !96)
+// CHECK:STDOUT: !98 = !DILocation(line: 65, column: 3, scope: !96)
+// CHECK:STDOUT: !99 = distinct !DISubprogram(name: "C", linkageName: "_CC.Main.e8193710fd35b608", scope: null, file: !3, line: 40, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !100 = !DILocation(line: 41, column: 7, scope: !99)
+// CHECK:STDOUT: !101 = !DILocation(line: 41, column: 6, scope: !99)
+// CHECK:STDOUT: !102 = !DILocation(line: 42, column: 5, scope: !99)
+// CHECK:STDOUT: !103 = !DILocation(line: 43, column: 10, scope: !99)
+// CHECK:STDOUT: !104 = !DILocation(line: 43, column: 5, scope: !99)
+// CHECK:STDOUT: !105 = !DILocation(line: 41, column: 3, scope: !99)
+// CHECK:STDOUT: !106 = !DILocation(line: 40, column: 1, scope: !99)
+// CHECK:STDOUT: !107 = distinct !DISubprogram(name: "E", linkageName: "_CE.Main.e8193710fd35b608", scope: null, file: !3, line: 60, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !108 = !DILocation(line: 61, column: 10, scope: !107)
+// CHECK:STDOUT: !109 = !DILocation(line: 61, column: 3, scope: !107)
+// CHECK:STDOUT: !110 = distinct !DISubprogram(name: "F", linkageName: "_CF.Main.e8193710fd35b608", scope: null, file: !3, line: 64, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !111 = !DILocation(line: 65, column: 10, scope: !110)
+// CHECK:STDOUT: !112 = !DILocation(line: 65, column: 3, scope: !110)
+// CHECK:STDOUT: !113 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.b88d1103f417c6d4", scope: null, file: !3, line: 68, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !114 = !DILocation(line: 69, column: 15, scope: !113)
+// CHECK:STDOUT: !115 = !DILocation(line: 69, column: 10, scope: !113)
+// CHECK:STDOUT: !116 = !DILocation(line: 69, column: 3, scope: !113)
+// CHECK:STDOUT: !117 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.66be507887ceee78", scope: null, file: !3, line: 68, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !118 = !DILocation(line: 69, column: 15, scope: !117)
+// CHECK:STDOUT: !119 = !DILocation(line: 69, column: 10, scope: !117)
+// CHECK:STDOUT: !120 = !DILocation(line: 69, column: 3, scope: !117)
+// CHECK:STDOUT: !121 = distinct !DISubprogram(name: "G", linkageName: "_CG.Main.e8193710fd35b608", scope: null, file: !3, line: 68, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !122 = !DILocation(line: 69, column: 15, scope: !121)
+// CHECK:STDOUT: !123 = !DILocation(line: 69, column: 10, scope: !121)
+// CHECK:STDOUT: !124 = !DILocation(line: 69, column: 3, scope: !121)

+ 56 - 54
toolchain/lower/testdata/operators/overloaded.carbon

@@ -2,6 +2,8 @@
 // Exceptions. See /LICENSE for license information.
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
+// INCLUDE-FILE: toolchain/testing/testdata/min_prelude/full.carbon
+//
 // AUTOUPDATE
 // TIP: To test this file alone, run:
 // TIP:   bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/lower/testdata/operators/overloaded.carbon
@@ -33,59 +35,59 @@ fn Calculate(a: Number, b: Number) -> Number {
 // CHECK:STDOUT:
 // CHECK:STDOUT: define void @"_COp.Number.Main:Negate.Core"(ptr sret({ i1 }) %return, ptr %self) !dbg !4 {
 // CHECK:STDOUT: entry:
-// CHECK:STDOUT:   %.loc17_36.1.is_positive = getelementptr inbounds nuw { i1 }, ptr %self, i32 0, i32 0, !dbg !7
-// CHECK:STDOUT:   %.loc17_36.2 = load i1, ptr %.loc17_36.1.is_positive, align 1, !dbg !7
-// CHECK:STDOUT:   %.loc17_28 = xor i1 %.loc17_36.2, true, !dbg !8
-// CHECK:STDOUT:   %.loc17_48.2.is_positive = getelementptr inbounds nuw { i1 }, ptr %return, i32 0, i32 0, !dbg !9
-// CHECK:STDOUT:   store i1 %.loc17_28, ptr %.loc17_48.2.is_positive, align 1, !dbg !9
+// CHECK:STDOUT:   %.loc19_36.1.is_positive = getelementptr inbounds nuw { i1 }, ptr %self, i32 0, i32 0, !dbg !7
+// CHECK:STDOUT:   %.loc19_36.2 = load i1, ptr %.loc19_36.1.is_positive, align 1, !dbg !7
+// CHECK:STDOUT:   %.loc19_28 = xor i1 %.loc19_36.2, true, !dbg !8
+// CHECK:STDOUT:   %.loc19_48.2.is_positive = getelementptr inbounds nuw { i1 }, ptr %return, i32 0, i32 0, !dbg !9
+// CHECK:STDOUT:   store i1 %.loc19_28, ptr %.loc19_48.2.is_positive, align 1, !dbg !9
 // CHECK:STDOUT:   ret void, !dbg !10
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: define void @"_COp.Number.Main:MulWith.Core"(ptr sret({ i1 }) %return, ptr %self, ptr %other) !dbg !11 {
 // CHECK:STDOUT: entry:
-// CHECK:STDOUT:   %.loc22_33.1.is_positive = getelementptr inbounds nuw { i1 }, ptr %self, i32 0, i32 0, !dbg !12
-// CHECK:STDOUT:   %.loc22_33.2 = load i1, ptr %.loc22_33.1.is_positive, align 1, !dbg !12
-// CHECK:STDOUT:   br i1 %.loc22_33.2, label %and.rhs.loc22, label %and.result.loc22, !dbg !12
+// CHECK:STDOUT:   %.loc24_33.1.is_positive = getelementptr inbounds nuw { i1 }, ptr %self, i32 0, i32 0, !dbg !12
+// CHECK:STDOUT:   %.loc24_33.2 = load i1, ptr %.loc24_33.1.is_positive, align 1, !dbg !12
+// CHECK:STDOUT:   br i1 %.loc24_33.2, label %and.rhs.loc24, label %and.result.loc24, !dbg !12
 // CHECK:STDOUT:
-// CHECK:STDOUT: and.rhs.loc22:                                    ; preds = %entry
-// CHECK:STDOUT:   %.loc22_55.1.is_positive = getelementptr inbounds nuw { i1 }, ptr %other, i32 0, i32 0, !dbg !13
-// CHECK:STDOUT:   %.loc22_55.2 = load i1, ptr %.loc22_55.1.is_positive, align 1, !dbg !13
-// CHECK:STDOUT:   br label %and.result.loc22, !dbg !12
+// CHECK:STDOUT: and.rhs.loc24:                                    ; preds = %entry
+// CHECK:STDOUT:   %.loc24_55.1.is_positive = getelementptr inbounds nuw { i1 }, ptr %other, i32 0, i32 0, !dbg !13
+// CHECK:STDOUT:   %.loc24_55.2 = load i1, ptr %.loc24_55.1.is_positive, align 1, !dbg !13
+// CHECK:STDOUT:   br label %and.result.loc24, !dbg !12
 // CHECK:STDOUT:
-// CHECK:STDOUT: and.result.loc22:                                 ; preds = %and.rhs.loc22, %entry
-// CHECK:STDOUT:   %0 = phi i1 [ false, %entry ], [ %.loc22_55.2, %and.rhs.loc22 ]
-// CHECK:STDOUT:   %.loc22_69.1 = xor i1 %0, true, !dbg !14
-// CHECK:STDOUT:   br i1 %.loc22_69.1, label %or.rhs, label %or.result, !dbg !14
+// CHECK:STDOUT: and.result.loc24:                                 ; preds = %and.rhs.loc24, %entry
+// CHECK:STDOUT:   %0 = phi i1 [ false, %entry ], [ %.loc24_55.2, %and.rhs.loc24 ]
+// CHECK:STDOUT:   %.loc24_69.1 = xor i1 %0, true, !dbg !14
+// CHECK:STDOUT:   br i1 %.loc24_69.1, label %or.rhs, label %or.result, !dbg !14
 // CHECK:STDOUT:
-// CHECK:STDOUT: or.rhs:                                           ; preds = %and.result.loc22
-// CHECK:STDOUT:   %.loc23_38.1.is_positive = getelementptr inbounds nuw { i1 }, ptr %self, i32 0, i32 0, !dbg !15
-// CHECK:STDOUT:   %.loc23_38.2 = load i1, ptr %.loc23_38.1.is_positive, align 1, !dbg !15
-// CHECK:STDOUT:   %.loc23_30 = xor i1 %.loc23_38.2, true, !dbg !16
-// CHECK:STDOUT:   br i1 %.loc23_30, label %and.rhs.loc23, label %and.result.loc23, !dbg !16
+// CHECK:STDOUT: or.rhs:                                           ; preds = %and.result.loc24
+// CHECK:STDOUT:   %.loc25_38.1.is_positive = getelementptr inbounds nuw { i1 }, ptr %self, i32 0, i32 0, !dbg !15
+// CHECK:STDOUT:   %.loc25_38.2 = load i1, ptr %.loc25_38.1.is_positive, align 1, !dbg !15
+// CHECK:STDOUT:   %.loc25_30 = xor i1 %.loc25_38.2, true, !dbg !16
+// CHECK:STDOUT:   br i1 %.loc25_30, label %and.rhs.loc25, label %and.result.loc25, !dbg !16
 // CHECK:STDOUT:
-// CHECK:STDOUT: and.rhs.loc23:                                    ; preds = %or.rhs
-// CHECK:STDOUT:   %.loc23_64.1.is_positive = getelementptr inbounds nuw { i1 }, ptr %other, i32 0, i32 0, !dbg !17
-// CHECK:STDOUT:   %.loc23_64.2 = load i1, ptr %.loc23_64.1.is_positive, align 1, !dbg !17
-// CHECK:STDOUT:   %.loc23_55 = xor i1 %.loc23_64.2, true, !dbg !18
-// CHECK:STDOUT:   br label %and.result.loc23, !dbg !16
+// CHECK:STDOUT: and.rhs.loc25:                                    ; preds = %or.rhs
+// CHECK:STDOUT:   %.loc25_64.1.is_positive = getelementptr inbounds nuw { i1 }, ptr %other, i32 0, i32 0, !dbg !17
+// CHECK:STDOUT:   %.loc25_64.2 = load i1, ptr %.loc25_64.1.is_positive, align 1, !dbg !17
+// CHECK:STDOUT:   %.loc25_55 = xor i1 %.loc25_64.2, true, !dbg !18
+// CHECK:STDOUT:   br label %and.result.loc25, !dbg !16
 // CHECK:STDOUT:
-// CHECK:STDOUT: and.result.loc23:                                 ; preds = %and.rhs.loc23, %or.rhs
-// CHECK:STDOUT:   %1 = phi i1 [ false, %or.rhs ], [ %.loc23_55, %and.rhs.loc23 ]
+// CHECK:STDOUT: and.result.loc25:                                 ; preds = %and.rhs.loc25, %or.rhs
+// CHECK:STDOUT:   %1 = phi i1 [ false, %or.rhs ], [ %.loc25_55, %and.rhs.loc25 ]
 // CHECK:STDOUT:   br label %or.result, !dbg !14
 // CHECK:STDOUT:
-// CHECK:STDOUT: or.result:                                        ; preds = %and.result.loc23, %and.result.loc22
-// CHECK:STDOUT:   %2 = phi i1 [ true, %and.result.loc22 ], [ %1, %and.result.loc23 ]
-// CHECK:STDOUT:   %.loc23_77.2.is_positive = getelementptr inbounds nuw { i1 }, ptr %return, i32 0, i32 0, !dbg !19
-// CHECK:STDOUT:   store i1 %2, ptr %.loc23_77.2.is_positive, align 1, !dbg !19
+// CHECK:STDOUT: or.result:                                        ; preds = %and.result.loc25, %and.result.loc24
+// CHECK:STDOUT:   %2 = phi i1 [ true, %and.result.loc24 ], [ %1, %and.result.loc25 ]
+// CHECK:STDOUT:   %.loc25_77.2.is_positive = getelementptr inbounds nuw { i1 }, ptr %return, i32 0, i32 0, !dbg !19
+// CHECK:STDOUT:   store i1 %2, ptr %.loc25_77.2.is_positive, align 1, !dbg !19
 // CHECK:STDOUT:   ret void, !dbg !20
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
 // CHECK:STDOUT: define void @_CCalculate.Main(ptr sret({ i1 }) %return, ptr %a, ptr %b) !dbg !21 {
 // CHECK:STDOUT: entry:
-// CHECK:STDOUT:   %.loc28_10.1.temp = alloca { i1 }, align 8, !dbg !22
-// CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 1, ptr %.loc28_10.1.temp), !dbg !22
-// CHECK:STDOUT:   call void @"_COp.Number.Main:Negate.Core"(ptr %.loc28_10.1.temp, ptr %a), !dbg !22
-// CHECK:STDOUT:   call void @"_COp.Number.Main:MulWith.Core"(ptr %return, ptr %.loc28_10.1.temp, ptr %b), !dbg !22
+// CHECK:STDOUT:   %.loc30_10.1.temp = alloca { i1 }, align 8, !dbg !22
+// CHECK:STDOUT:   call void @llvm.lifetime.start.p0(i64 1, ptr %.loc30_10.1.temp), !dbg !22
+// CHECK:STDOUT:   call void @"_COp.Number.Main:Negate.Core"(ptr %.loc30_10.1.temp, ptr %a), !dbg !22
+// CHECK:STDOUT:   call void @"_COp.Number.Main:MulWith.Core"(ptr %return, ptr %.loc30_10.1.temp, ptr %b), !dbg !22
 // CHECK:STDOUT:   ret void, !dbg !23
 // CHECK:STDOUT: }
 // CHECK:STDOUT:
@@ -101,23 +103,23 @@ fn Calculate(a: Number, b: Number) -> Number {
 // CHECK:STDOUT: !1 = !{i32 2, !"Debug Info Version", i32 3}
 // CHECK:STDOUT: !2 = distinct !DICompileUnit(language: DW_LANG_C, file: !3, producer: "carbon", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug)
 // CHECK:STDOUT: !3 = !DIFile(filename: "overloaded.carbon", directory: "")
-// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "Op", linkageName: "_COp.Number.Main:Negate.Core", scope: null, file: !3, line: 16, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !4 = distinct !DISubprogram(name: "Op", linkageName: "_COp.Number.Main:Negate.Core", scope: null, file: !3, line: 18, type: !5, spFlags: DISPFlagDefinition, unit: !2)
 // CHECK:STDOUT: !5 = !DISubroutineType(types: !6)
 // CHECK:STDOUT: !6 = !{}
-// CHECK:STDOUT: !7 = !DILocation(line: 17, column: 32, scope: !4)
-// CHECK:STDOUT: !8 = !DILocation(line: 17, column: 28, scope: !4)
-// CHECK:STDOUT: !9 = !DILocation(line: 17, column: 12, scope: !4)
-// CHECK:STDOUT: !10 = !DILocation(line: 17, column: 5, scope: !4)
-// CHECK:STDOUT: !11 = distinct !DISubprogram(name: "Op", linkageName: "_COp.Number.Main:MulWith.Core", scope: null, file: !3, line: 21, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !12 = !DILocation(line: 22, column: 29, scope: !11)
-// CHECK:STDOUT: !13 = !DILocation(line: 22, column: 50, scope: !11)
-// CHECK:STDOUT: !14 = !DILocation(line: 22, column: 28, scope: !11)
-// CHECK:STDOUT: !15 = !DILocation(line: 23, column: 34, scope: !11)
-// CHECK:STDOUT: !16 = !DILocation(line: 23, column: 30, scope: !11)
-// CHECK:STDOUT: !17 = !DILocation(line: 23, column: 59, scope: !11)
-// CHECK:STDOUT: !18 = !DILocation(line: 23, column: 55, scope: !11)
-// CHECK:STDOUT: !19 = !DILocation(line: 22, column: 12, scope: !11)
-// CHECK:STDOUT: !20 = !DILocation(line: 22, column: 5, scope: !11)
-// CHECK:STDOUT: !21 = distinct !DISubprogram(name: "Calculate", linkageName: "_CCalculate.Main", scope: null, file: !3, line: 27, type: !5, spFlags: DISPFlagDefinition, unit: !2)
-// CHECK:STDOUT: !22 = !DILocation(line: 28, column: 10, scope: !21)
-// CHECK:STDOUT: !23 = !DILocation(line: 28, column: 3, scope: !21)
+// CHECK:STDOUT: !7 = !DILocation(line: 19, column: 32, scope: !4)
+// CHECK:STDOUT: !8 = !DILocation(line: 19, column: 28, scope: !4)
+// CHECK:STDOUT: !9 = !DILocation(line: 19, column: 12, scope: !4)
+// CHECK:STDOUT: !10 = !DILocation(line: 19, column: 5, scope: !4)
+// CHECK:STDOUT: !11 = distinct !DISubprogram(name: "Op", linkageName: "_COp.Number.Main:MulWith.Core", scope: null, file: !3, line: 23, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !12 = !DILocation(line: 24, column: 29, scope: !11)
+// CHECK:STDOUT: !13 = !DILocation(line: 24, column: 50, scope: !11)
+// CHECK:STDOUT: !14 = !DILocation(line: 24, column: 28, scope: !11)
+// CHECK:STDOUT: !15 = !DILocation(line: 25, column: 34, scope: !11)
+// CHECK:STDOUT: !16 = !DILocation(line: 25, column: 30, scope: !11)
+// CHECK:STDOUT: !17 = !DILocation(line: 25, column: 59, scope: !11)
+// CHECK:STDOUT: !18 = !DILocation(line: 25, column: 55, scope: !11)
+// CHECK:STDOUT: !19 = !DILocation(line: 24, column: 12, scope: !11)
+// CHECK:STDOUT: !20 = !DILocation(line: 24, column: 5, scope: !11)
+// CHECK:STDOUT: !21 = distinct !DISubprogram(name: "Calculate", linkageName: "_CCalculate.Main", scope: null, file: !3, line: 29, type: !5, spFlags: DISPFlagDefinition, unit: !2)
+// CHECK:STDOUT: !22 = !DILocation(line: 30, column: 10, scope: !21)
+// CHECK:STDOUT: !23 = !DILocation(line: 30, column: 3, scope: !21)

+ 3 - 5
toolchain/testing/file_test.cpp

@@ -163,11 +163,9 @@ auto ToolchainFileTest::Run(
       }
     }
     if (!found_prelude_flag) {
-      // TODO: Enable this error when all check/ and lower/ tests include a
-      // prelude choice explicitly.
-      // return Error(
-      //     "Include a prelude from //toolchain/testing/testdata/min_prelude "
-      //     "to specify what should be imported into the test.");
+      return Error(
+          "Include a prelude from //toolchain/testing/testdata/min_prelude "
+          "to specify what should be imported into the test.");
     }
   } else {
     filtered_test_args = test_args;