Explorar o código

Adjust handling of values in calls and structs (#2824)

Previously, IR for arguments in calls and struct values was separated out. This merges it back in. Additionally, parameters for functions and struct types had their own IR; the block is still there, but there's a TODO to decide what to do with it.

In the LLVM IR, this has the consequence of emitting expressions that are inputs to a call or struct value within the scope of the function, which is pretty much where it should be. Importantly it happens before the call is encountered.

This change also tinkers with the int and real literal lowering. I'm pretty sure both are still wrong, but was having trouble figuring out a "better" way to do it, and this seems like it'll work for now.
Jon Ross-Perkins %!s(int64=3) %!d(string=hai) anos
pai
achega
e73207429f
Modificáronse 76 ficheiros con 303 adicións e 517 borrados
  1. 0 2
      toolchain/driver/testdata/semantics_builtin_nodes.carbon
  2. 1 1
      toolchain/lowering/lowering_context.cpp
  3. 35 26
      toolchain/lowering/lowering_handle.cpp
  4. 8 4
      toolchain/lowering/testdata/struct/member_access.carbon
  5. 4 2
      toolchain/lowering/testdata/struct/one_entry.carbon
  6. 6 2
      toolchain/lowering/testdata/struct/two_entries.carbon
  7. 6 9
      toolchain/semantics/semantics_context.cpp
  8. 4 15
      toolchain/semantics/semantics_context.h
  9. 11 5
      toolchain/semantics/semantics_handle.cpp
  10. 4 5
      toolchain/semantics/semantics_handle_call_expression.cpp
  11. 4 7
      toolchain/semantics/semantics_handle_function.cpp
  12. 8 9
      toolchain/semantics/semantics_handle_struct.cpp
  13. 1 2
      toolchain/semantics/semantics_ir.cpp
  14. 1 25
      toolchain/semantics/semantics_ir.h
  15. 0 1
      toolchain/semantics/semantics_ir_test.cpp
  16. 7 16
      toolchain/semantics/semantics_node.h
  17. 7 0
      toolchain/semantics/semantics_node_stack.cpp
  18. 12 1
      toolchain/semantics/semantics_node_stack.h
  19. 0 2
      toolchain/semantics/testdata/basics/builtin_types.carbon
  20. 0 2
      toolchain/semantics/testdata/basics/empty.carbon
  21. 0 2
      toolchain/semantics/testdata/basics/empty_decl.carbon
  22. 1 3
      toolchain/semantics/testdata/basics/fail_name_lookup.carbon
  23. 0 2
      toolchain/semantics/testdata/designators/fail_unsupported.carbon
  24. 5 10
      toolchain/semantics/testdata/function/call/empty_struct.carbon
  25. 14 22
      toolchain/semantics/testdata/function/call/fail_param_count.carbon
  26. 3 5
      toolchain/semantics/testdata/function/call/fail_param_type.carbon
  27. 3 6
      toolchain/semantics/testdata/function/call/fail_return_type_mismatch.carbon
  28. 5 10
      toolchain/semantics/testdata/function/call/i32.carbon
  29. 5 10
      toolchain/semantics/testdata/function/call/more_param_ir.carbon
  30. 5 10
      toolchain/semantics/testdata/function/call/params_one.carbon
  31. 8 16
      toolchain/semantics/testdata/function/call/params_one_comma.carbon
  32. 5 10
      toolchain/semantics/testdata/function/call/params_two.carbon
  33. 10 18
      toolchain/semantics/testdata/function/call/params_two_comma.carbon
  34. 3 6
      toolchain/semantics/testdata/function/call/params_zero.carbon
  35. 1 3
      toolchain/semantics/testdata/function/definition/fail_param_name_conflict.carbon
  36. 3 5
      toolchain/semantics/testdata/function/definition/order.carbon
  37. 1 3
      toolchain/semantics/testdata/function/definition/params_one.carbon
  38. 1 3
      toolchain/semantics/testdata/function/definition/params_one_comma.carbon
  39. 1 3
      toolchain/semantics/testdata/function/definition/params_two.carbon
  40. 1 3
      toolchain/semantics/testdata/function/definition/params_two_comma.carbon
  41. 1 3
      toolchain/semantics/testdata/function/definition/params_zero.carbon
  42. 2 4
      toolchain/semantics/testdata/function/definition/same_param_name.carbon
  43. 1 3
      toolchain/semantics/testdata/operators/binary_op.carbon
  44. 1 3
      toolchain/semantics/testdata/operators/fail_type_mismatch.carbon
  45. 1 3
      toolchain/semantics/testdata/operators/fail_type_mismatch_once.carbon
  46. 1 3
      toolchain/semantics/testdata/return/fail_type_mismatch.carbon
  47. 1 3
      toolchain/semantics/testdata/return/fail_value_disallowed.carbon
  48. 1 3
      toolchain/semantics/testdata/return/fail_value_missing.carbon
  49. 1 3
      toolchain/semantics/testdata/return/no_value.carbon
  50. 11 17
      toolchain/semantics/testdata/return/struct.carbon
  51. 1 3
      toolchain/semantics/testdata/return/value.carbon
  52. 0 2
      toolchain/semantics/testdata/struct/empty.carbon
  53. 4 8
      toolchain/semantics/testdata/struct/fail_assign_empty.carbon
  54. 4 8
      toolchain/semantics/testdata/struct/fail_assign_to_empty.carbon
  55. 6 12
      toolchain/semantics/testdata/struct/fail_field_name_mismatch.carbon
  56. 6 12
      toolchain/semantics/testdata/struct/fail_field_type_mismatch.carbon
  57. 6 12
      toolchain/semantics/testdata/struct/fail_member_access_type.carbon
  58. 6 12
      toolchain/semantics/testdata/struct/fail_non_member_access.carbon
  59. 7 13
      toolchain/semantics/testdata/struct/fail_too_few_values.carbon
  60. 4 10
      toolchain/semantics/testdata/struct/fail_type_assign.carbon
  61. 6 10
      toolchain/semantics/testdata/struct/fail_value_as_type.carbon
  62. 9 15
      toolchain/semantics/testdata/struct/member_access.carbon
  63. 8 16
      toolchain/semantics/testdata/struct/one_entry.carbon
  64. 12 20
      toolchain/semantics/testdata/struct/two_entries.carbon
  65. 1 3
      toolchain/semantics/testdata/var/decl.carbon
  66. 1 3
      toolchain/semantics/testdata/var/decl_with_init.carbon
  67. 1 3
      toolchain/semantics/testdata/var/fail_duplicate_decl.carbon
  68. 1 3
      toolchain/semantics/testdata/var/fail_init_type_mismatch.carbon
  69. 1 3
      toolchain/semantics/testdata/var/fail_init_with_self.carbon
  70. 1 3
      toolchain/semantics/testdata/var/fail_lookup_outside_scope.carbon
  71. 1 3
      toolchain/semantics/testdata/var/fail_storage_is_literal.carbon
  72. 0 2
      toolchain/semantics/testdata/var/global_decl.carbon
  73. 0 2
      toolchain/semantics/testdata/var/global_decl_with_init.carbon
  74. 0 2
      toolchain/semantics/testdata/var/global_lookup.carbon
  75. 1 3
      toolchain/semantics/testdata/var/global_lookup_in_scope.carbon
  76. 1 3
      toolchain/semantics/testdata/var/lookup.carbon

+ 0 - 2
toolchain/driver/testdata/semantics_builtin_nodes.carbon

@@ -5,8 +5,6 @@
 // RUN: %{carbon} dump semantics-ir --include_builtins %s | \
 // RUN: %{carbon} dump semantics-ir --include_builtins %s | \
 // RUN:   %{FileCheck-strict}
 // RUN:   %{FileCheck-strict}
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [

+ 1 - 1
toolchain/lowering/lowering_context.cpp

@@ -78,7 +78,7 @@ auto LoweringContext::BuildLoweredNodeAsType(SemanticsNodeId node_id)
   auto node = semantics_ir_->GetNode(node_id);
   auto node = semantics_ir_->GetNode(node_id);
   switch (node.kind()) {
   switch (node.kind()) {
     case SemanticsNodeKind::StructType: {
     case SemanticsNodeKind::StructType: {
-      auto refs = semantics_ir_->GetNodeBlock(node.GetAsStructType().second);
+      auto refs = semantics_ir_->GetNodeBlock(node.GetAsStructType());
       llvm::SmallVector<llvm::Type*> subtypes;
       llvm::SmallVector<llvm::Type*> subtypes;
       subtypes.reserve(refs.size());
       subtypes.reserve(refs.size());
       for (auto ref_id : refs) {
       for (auto ref_id : refs) {

+ 35 - 26
toolchain/lowering/lowering_handle.cpp

@@ -113,16 +113,27 @@ auto LoweringHandleFunctionDefinition(LoweringContext& context,
 auto LoweringHandleIntegerLiteral(LoweringContext& context,
 auto LoweringHandleIntegerLiteral(LoweringContext& context,
                                   SemanticsNodeId node_id, SemanticsNode node)
                                   SemanticsNodeId node_id, SemanticsNode node)
     -> void {
     -> void {
-  SemanticsIntegerLiteralId int_id = node.GetAsIntegerLiteral();
-  llvm::APInt i = context.semantics_ir().GetIntegerLiteral(int_id);
-  llvm::Value* v = context.builder().getInt32(i.getLimitedValue());
+  llvm::APInt i =
+      context.semantics_ir().GetIntegerLiteral(node.GetAsIntegerLiteral());
+  // TODO: This won't offer correct semantics, but seems close enough for now.
+  llvm::Value* v =
+      llvm::ConstantInt::get(context.builder().getInt32Ty(), i.getSExtValue());
   context.SetLoweredNodeAsValue(node_id, v);
   context.SetLoweredNodeAsValue(node_id, v);
 }
 }
 
 
-auto LoweringHandleRealLiteral(LoweringContext& /*context*/,
-                               SemanticsNodeId /*node_id*/, SemanticsNode node)
+auto LoweringHandleRealLiteral(LoweringContext& context,
+                               SemanticsNodeId node_id, SemanticsNode node)
     -> void {
     -> void {
-  CARBON_FATAL() << "TODO: Add support: " << node;
+  SemanticsRealLiteral real =
+      context.semantics_ir().GetRealLiteral(node.GetAsRealLiteral());
+  // TODO: This will probably have overflow issues, and should be fixed.
+  double val =
+      real.mantissa.getSExtValue() *
+      std::pow((real.is_decimal ? 10 : 2), real.exponent.getSExtValue());
+  llvm::APFloat llvm_val(val);
+  context.SetLoweredNodeAsValue(
+      node_id,
+      llvm::ConstantFP::get(context.builder().getDoubleTy(), llvm_val));
 }
 }
 
 
 auto LoweringHandleReturn(LoweringContext& context, SemanticsNodeId /*node_id*/,
 auto LoweringHandleReturn(LoweringContext& context, SemanticsNodeId /*node_id*/,
@@ -163,8 +174,8 @@ auto LoweringHandleStructType(LoweringContext& /*context*/,
 
 
 auto LoweringHandleStructTypeField(LoweringContext& /*context*/,
 auto LoweringHandleStructTypeField(LoweringContext& /*context*/,
                                    SemanticsNodeId /*node_id*/,
                                    SemanticsNodeId /*node_id*/,
-                                   SemanticsNode node) -> void {
-  CARBON_FATAL() << "TODO: Add support: " << node;
+                                   SemanticsNode /*node*/) -> void {
+  // No action to take.
 }
 }
 
 
 auto LoweringHandleStructValue(LoweringContext& context,
 auto LoweringHandleStructValue(LoweringContext& context,
@@ -174,30 +185,28 @@ auto LoweringHandleStructValue(LoweringContext& context,
   auto* alloca = context.builder().CreateAlloca(type);
   auto* alloca = context.builder().CreateAlloca(type);
   context.SetLoweredNodeAsValue(node_id, alloca);
   context.SetLoweredNodeAsValue(node_id, alloca);
 
 
-  // TODO: Figure out changes to flow so that values are calculated for store.
-  // Right now, the struct value IR is unevaluated.
-  // auto refs =
-  //     context.semantics_ir().GetNodeBlock(node.GetAsStructValue().second);
-  // for (int i = 0; i < static_cast<int>(refs.size()); ++i) {
-  //   auto* gep = context.builder().CreateStructGEP(type, alloca, i);
-  //   context.builder().CreateStore(context.GetLoweredNodeAsValue(refs[i]),
-  //                                 gep);
-  // }
+  auto refs = context.semantics_ir().GetNodeBlock(node.GetAsStructValue());
+  for (int i = 0; i < static_cast<int>(refs.size()); ++i) {
+    auto* gep = context.builder().CreateStructGEP(type, alloca, i);
+    context.builder().CreateStore(context.GetLoweredNodeAsValue(refs[i]), gep);
+  }
 }
 }
 
 
-auto LoweringHandleStubReference(LoweringContext& /*context*/,
-                                 SemanticsNodeId /*node_id*/,
-                                 SemanticsNode node) -> void {
-  CARBON_FATAL() << "TODO: Add support: " << node;
+auto LoweringHandleStubReference(LoweringContext& context,
+                                 SemanticsNodeId node_id, SemanticsNode node)
+    -> void {
+  context.SetLoweredNodeAsValue(
+      node_id, context.GetLoweredNodeAsValue(node.GetAsStubReference()));
 }
 }
 
 
 auto LoweringHandleVarStorage(LoweringContext& context, SemanticsNodeId node_id,
 auto LoweringHandleVarStorage(LoweringContext& context, SemanticsNodeId node_id,
                               SemanticsNode node) -> void {
                               SemanticsNode node) -> void {
-  // TODO: This doesn't handle globals. Also, LLVM requires globals to have a
-  // name. Do we want to generate a name, which would need to be consistent
-  // across translation units, or use the given name, which requires either
-  // looking ahead for BindName or restructuring semantics, either of which
-  // affects the destructuring due to the difference in storage?
+  // TODO: This doesn't handle globals. Also, LLVM requires globals to have
+  // a name. Do we want to generate a name, which would need to be
+  // consistent across translation units, or use the given name, which
+  // requires either looking ahead for BindName or restructuring semantics,
+  // either of which affects the destructuring due to the difference in
+  // storage?
   auto* alloca = context.builder().CreateAlloca(
   auto* alloca = context.builder().CreateAlloca(
       context.GetLoweredNodeAsType(node.type_id()));
       context.GetLoweredNodeAsType(node.type_id()));
   context.SetLoweredNodeAsValue(node_id, alloca);
   context.SetLoweredNodeAsValue(node_id, alloca);

+ 8 - 4
toolchain/lowering/testdata/struct/member_access.carbon

@@ -13,12 +13,16 @@
 // CHECK:STDOUT: entry:
 // CHECK:STDOUT: entry:
 // CHECK:STDOUT:   %0 = alloca %0, align 8
 // CHECK:STDOUT:   %0 = alloca %0, align 8
 // CHECK:STDOUT:   %1 = alloca %1, align 8
 // CHECK:STDOUT:   %1 = alloca %1, align 8
+// CHECK:STDOUT:   %2 = getelementptr inbounds %1, ptr %1, i32 0, i32 0
+// CHECK:STDOUT:   store double 0.000000e+00, ptr %2, align 8
+// CHECK:STDOUT:   %3 = getelementptr inbounds %1, ptr %1, i32 0, i32 1
+// CHECK:STDOUT:   store i32 1, ptr %3, align 4
 // CHECK:STDOUT:   store ptr %1, ptr %0, align 8
 // CHECK:STDOUT:   store ptr %1, ptr %0, align 8
-// CHECK:STDOUT:   %2 = alloca i32, align 4
-// CHECK:STDOUT:   %3 = getelementptr inbounds %0, ptr %0, i32 0, i32 1
-// CHECK:STDOUT:   store ptr %3, ptr %2, align 8
 // CHECK:STDOUT:   %4 = alloca i32, align 4
 // CHECK:STDOUT:   %4 = alloca i32, align 4
-// CHECK:STDOUT:   store ptr %2, ptr %4, align 8
+// CHECK:STDOUT:   %5 = getelementptr inbounds %0, ptr %0, i32 0, i32 1
+// CHECK:STDOUT:   store ptr %5, ptr %4, align 8
+// CHECK:STDOUT:   %6 = alloca i32, align 4
+// CHECK:STDOUT:   store ptr %4, ptr %6, align 8
 // CHECK:STDOUT:   ret i32 0
 // CHECK:STDOUT:   ret i32 0
 // CHECK:STDOUT: }
 // CHECK:STDOUT: }
 
 

+ 4 - 2
toolchain/lowering/testdata/struct/one_entry.carbon

@@ -14,9 +14,11 @@
 // CHECK:STDOUT: entry:
 // CHECK:STDOUT: entry:
 // CHECK:STDOUT:   %0 = alloca %0, align 8
 // CHECK:STDOUT:   %0 = alloca %0, align 8
 // CHECK:STDOUT:   %1 = alloca %1, align 8
 // CHECK:STDOUT:   %1 = alloca %1, align 8
+// CHECK:STDOUT:   %2 = getelementptr inbounds %1, ptr %1, i32 0, i32 0
+// CHECK:STDOUT:   store i32 4, ptr %2, align 4
 // CHECK:STDOUT:   store ptr %1, ptr %0, align 8
 // CHECK:STDOUT:   store ptr %1, ptr %0, align 8
-// CHECK:STDOUT:   %2 = alloca %2, align 8
-// CHECK:STDOUT:   store ptr %0, ptr %2, align 8
+// CHECK:STDOUT:   %3 = alloca %2, align 8
+// CHECK:STDOUT:   store ptr %0, ptr %3, align 8
 // CHECK:STDOUT:   ret i32 0
 // CHECK:STDOUT:   ret i32 0
 // CHECK:STDOUT: }
 // CHECK:STDOUT: }
 
 

+ 6 - 2
toolchain/lowering/testdata/struct/two_entries.carbon

@@ -14,9 +14,13 @@
 // CHECK:STDOUT: entry:
 // CHECK:STDOUT: entry:
 // CHECK:STDOUT:   %0 = alloca %0, align 8
 // CHECK:STDOUT:   %0 = alloca %0, align 8
 // CHECK:STDOUT:   %1 = alloca %1, align 8
 // CHECK:STDOUT:   %1 = alloca %1, align 8
+// CHECK:STDOUT:   %2 = getelementptr inbounds %1, ptr %1, i32 0, i32 0
+// CHECK:STDOUT:   store i32 1, ptr %2, align 4
+// CHECK:STDOUT:   %3 = getelementptr inbounds %1, ptr %1, i32 0, i32 1
+// CHECK:STDOUT:   store i32 2, ptr %3, align 4
 // CHECK:STDOUT:   store ptr %1, ptr %0, align 8
 // CHECK:STDOUT:   store ptr %1, ptr %0, align 8
-// CHECK:STDOUT:   %2 = alloca %2, align 8
-// CHECK:STDOUT:   store ptr %0, ptr %2, align 8
+// CHECK:STDOUT:   %4 = alloca %2, align 8
+// CHECK:STDOUT:   store ptr %0, ptr %4, align 8
 // CHECK:STDOUT:   ret i32 0
 // CHECK:STDOUT:   ret i32 0
 // CHECK:STDOUT: }
 // CHECK:STDOUT: }
 
 

+ 6 - 9
toolchain/semantics/semantics_context.cpp

@@ -154,8 +154,8 @@ auto SemanticsContext::PopScope() -> void {
 }
 }
 
 
 auto SemanticsContext::ImplicitAsForArgs(
 auto SemanticsContext::ImplicitAsForArgs(
-    SemanticsNodeBlockId /*arg_ir_id*/, SemanticsNodeBlockId arg_refs_id,
-    ParseTree::Node param_parse_node, SemanticsNodeBlockId param_refs_id,
+    SemanticsNodeBlockId arg_refs_id, ParseTree::Node param_parse_node,
+    SemanticsNodeBlockId param_refs_id,
     DiagnosticEmitter<ParseTree::Node>::DiagnosticBuilder* diagnostic) -> bool {
     DiagnosticEmitter<ParseTree::Node>::DiagnosticBuilder* diagnostic) -> bool {
   // If both arguments and parameters are empty, return quickly. Otherwise,
   // If both arguments and parameters are empty, return quickly. Otherwise,
   // we'll fetch both so that errors are consistent.
   // we'll fetch both so that errors are consistent.
@@ -292,10 +292,8 @@ auto SemanticsContext::CanImplicitAsStruct(SemanticsNode value_type,
       as_type.kind() != SemanticsNodeKind::StructType) {
       as_type.kind() != SemanticsNodeKind::StructType) {
     return false;
     return false;
   }
   }
-  auto value_type_refs =
-      semantics_->GetNodeBlock(value_type.GetAsStructType().second);
-  auto as_type_refs =
-      semantics_->GetNodeBlock(as_type.GetAsStructType().second);
+  auto value_type_refs = semantics_->GetNodeBlock(value_type.GetAsStructType());
+  auto as_type_refs = semantics_->GetNodeBlock(as_type.GetAsStructType());
   if (value_type_refs.size() != as_type_refs.size()) {
   if (value_type_refs.size() != as_type_refs.size()) {
     return false;
     return false;
   }
   }
@@ -314,7 +312,6 @@ auto SemanticsContext::CanImplicitAsStruct(SemanticsNode value_type,
 
 
 auto SemanticsContext::ParamOrArgStart() -> void {
 auto SemanticsContext::ParamOrArgStart() -> void {
   params_or_args_stack_.Push();
   params_or_args_stack_.Push();
-  node_block_stack_.Push();
 }
 }
 
 
 auto SemanticsContext::ParamOrArgComma(bool for_args) -> void {
 auto SemanticsContext::ParamOrArgComma(bool for_args) -> void {
@@ -322,11 +319,11 @@ auto SemanticsContext::ParamOrArgComma(bool for_args) -> void {
 }
 }
 
 
 auto SemanticsContext::ParamOrArgEnd(bool for_args, ParseNodeKind start_kind)
 auto SemanticsContext::ParamOrArgEnd(bool for_args, ParseNodeKind start_kind)
-    -> std::pair<SemanticsNodeBlockId, SemanticsNodeBlockId> {
+    -> SemanticsNodeBlockId {
   if (parse_tree_->node_kind(node_stack_.PeekParseNode()) != start_kind) {
   if (parse_tree_->node_kind(node_stack_.PeekParseNode()) != start_kind) {
     ParamOrArgSave(for_args);
     ParamOrArgSave(for_args);
   }
   }
-  return {node_block_stack_.Pop(), params_or_args_stack_.Pop()};
+  return params_or_args_stack_.Pop();
 }
 }
 
 
 auto SemanticsContext::ParamOrArgSave(bool for_args) -> void {
 auto SemanticsContext::ParamOrArgSave(bool for_args) -> void {

+ 4 - 15
toolchain/semantics/semantics_context.h

@@ -75,8 +75,8 @@ class SemanticsContext {
   // future we may want to remember the right implicit conversions to do for
   // future we may want to remember the right implicit conversions to do for
   // valid cases in order to efficiently handle generics.
   // valid cases in order to efficiently handle generics.
   auto ImplicitAsForArgs(
   auto ImplicitAsForArgs(
-      SemanticsNodeBlockId arg_ir_id, SemanticsNodeBlockId arg_refs_id,
-      ParseTree::Node param_parse_node, SemanticsNodeBlockId param_refs_id,
+      SemanticsNodeBlockId arg_refs_id, ParseTree::Node param_parse_node,
+      SemanticsNodeBlockId param_refs_id,
       DiagnosticEmitter<ParseTree::Node>::DiagnosticBuilder* diagnostic)
       DiagnosticEmitter<ParseTree::Node>::DiagnosticBuilder* diagnostic)
       -> bool;
       -> bool;
 
 
@@ -95,9 +95,9 @@ class SemanticsContext {
 
 
   // Detects whether there's an entry to push. On return, the top of
   // Detects whether there's an entry to push. On return, the top of
   // node_stack_ will be start_kind, and the caller should do type-specific
   // node_stack_ will be start_kind, and the caller should do type-specific
-  // processing. Returns a pair of {ir_id, refs_id}.
+  // processing. Returns refs_id.
   auto ParamOrArgEnd(bool for_args, ParseNodeKind start_kind)
   auto ParamOrArgEnd(bool for_args, ParseNodeKind start_kind)
-      -> std::pair<SemanticsNodeBlockId, SemanticsNodeBlockId>;
+      -> SemanticsNodeBlockId;
 
 
   // Saves a parameter from the top block in node_stack_ to the top block in
   // Saves a parameter from the top block in node_stack_ to the top block in
   // params_or_args_stack_. If for_args, adds a StubReference of the previous
   // params_or_args_stack_. If for_args, adds a StubReference of the previous
@@ -127,11 +127,6 @@ class SemanticsContext {
     return args_type_info_stack_;
     return args_type_info_stack_;
   }
   }
 
 
-  auto finished_params_stack() -> llvm::SmallVector<
-      std::pair<SemanticsNodeBlockId, SemanticsNodeBlockId>>& {
-    return finished_params_stack_;
-  }
-
   auto return_scope_stack() -> llvm::SmallVector<SemanticsNodeId>& {
   auto return_scope_stack() -> llvm::SmallVector<SemanticsNodeId>& {
     return return_scope_stack_;
     return return_scope_stack_;
   }
   }
@@ -226,12 +221,6 @@ class SemanticsContext {
   // for a type separate from the literal arguments.
   // for a type separate from the literal arguments.
   SemanticsNodeBlockStack args_type_info_stack_;
   SemanticsNodeBlockStack args_type_info_stack_;
 
 
-  // Completed parameters that are held temporarily on a side-channel for a
-  // function. This can't use node_stack_ because it has space for only one
-  // value, whereas parameters return two values.
-  llvm::SmallVector<std::pair<SemanticsNodeBlockId, SemanticsNodeBlockId>>
-      finished_params_stack_;
-
   // A stack of return scopes; i.e., targets for `return`. Inside a function,
   // A stack of return scopes; i.e., targets for `return`. Inside a function,
   // this will be a FunctionDeclaration.
   // this will be a FunctionDeclaration.
   llvm::SmallVector<SemanticsNodeId> return_scope_stack_;
   llvm::SmallVector<SemanticsNodeId> return_scope_stack_;

+ 11 - 5
toolchain/semantics/semantics_handle.cpp

@@ -79,8 +79,7 @@ auto SemanticsHandleDesignatorExpression(SemanticsContext& context,
 
 
   switch (base_type.kind()) {
   switch (base_type.kind()) {
     case SemanticsNodeKind::StructType: {
     case SemanticsNodeKind::StructType: {
-      auto refs =
-          context.semantics().GetNodeBlock(base_type.GetAsStructType().second);
+      auto refs = context.semantics().GetNodeBlock(base_type.GetAsStructType());
       // TODO: Do we need to optimize this with a lookup table for O(1)?
       // TODO: Do we need to optimize this with a lookup table for O(1)?
       for (int i = 0; i < static_cast<int>(refs.size()); ++i) {
       for (int i = 0; i < static_cast<int>(refs.size()); ++i) {
         auto ref = context.semantics().GetNode(refs[i]);
         auto ref = context.semantics().GetNode(refs[i]);
@@ -307,14 +306,20 @@ auto SemanticsHandleNamedConstraintIntroducer(SemanticsContext& context,
 
 
 auto SemanticsHandleParameterList(SemanticsContext& context,
 auto SemanticsHandleParameterList(SemanticsContext& context,
                                   ParseTree::Node parse_node) -> bool {
                                   ParseTree::Node parse_node) -> bool {
-  auto [ir_id, refs_id] = context.ParamOrArgEnd(
+  auto refs_id = context.ParamOrArgEnd(
       /*for_args=*/false, ParseNodeKind::ParameterListStart);
       /*for_args=*/false, ParseNodeKind::ParameterListStart);
+  // TODO: This contains the IR block for parameters. At present, it's just
+  // loose, but it's not strictly required for parameter refs; we should either
+  // stop constructing it completely or, if it turns out to be needed, store it.
+  // Note, the underlying issue is that the LLVM IR has nowhere clear to emit,
+  // so changing storage would require addressing that problem. For comparison
+  // with function calls, the IR needs to be emitted prior to the call.
+  context.node_block_stack().Pop();
 
 
   context.PopScope();
   context.PopScope();
   context.node_stack().PopAndDiscardSoloParseNode(
   context.node_stack().PopAndDiscardSoloParseNode(
       ParseNodeKind::ParameterListStart);
       ParseNodeKind::ParameterListStart);
-  context.finished_params_stack().push_back({ir_id, refs_id});
-  context.node_stack().Push(parse_node);
+  context.node_stack().Push(parse_node, refs_id);
   return true;
   return true;
 }
 }
 
 
@@ -328,6 +333,7 @@ auto SemanticsHandleParameterListStart(SemanticsContext& context,
                                        ParseTree::Node parse_node) -> bool {
                                        ParseTree::Node parse_node) -> bool {
   context.PushScope();
   context.PushScope();
   context.node_stack().Push(parse_node);
   context.node_stack().Push(parse_node);
+  context.node_block_stack().Push();
   context.ParamOrArgStart();
   context.ParamOrArgStart();
   return true;
   return true;
 }
 }

+ 4 - 5
toolchain/semantics/semantics_handle_call_expression.cpp

@@ -8,7 +8,7 @@ namespace Carbon {
 
 
 auto SemanticsHandleCallExpression(SemanticsContext& context,
 auto SemanticsHandleCallExpression(SemanticsContext& context,
                                    ParseTree::Node parse_node) -> bool {
                                    ParseTree::Node parse_node) -> bool {
-  auto [ir_id, refs_id] = context.ParamOrArgEnd(
+  auto refs_id = context.ParamOrArgEnd(
       /*for_args=*/true, ParseNodeKind::CallExpressionStart);
       /*for_args=*/true, ParseNodeKind::CallExpressionStart);
 
 
   // TODO: Convert to call expression.
   // TODO: Convert to call expression.
@@ -29,21 +29,20 @@ auto SemanticsHandleCallExpression(SemanticsContext& context,
   CARBON_DIAGNOSTIC(NoMatchingCall, Error, "No matching callable was found.");
   CARBON_DIAGNOSTIC(NoMatchingCall, Error, "No matching callable was found.");
   auto diagnostic =
   auto diagnostic =
       context.emitter().Build(call_expr_parse_node, NoMatchingCall);
       context.emitter().Build(call_expr_parse_node, NoMatchingCall);
-  if (!context.ImplicitAsForArgs(ir_id, refs_id, name_node.parse_node(),
+  if (!context.ImplicitAsForArgs(refs_id, name_node.parse_node(),
                                  callable.param_refs_id, &diagnostic)) {
                                  callable.param_refs_id, &diagnostic)) {
     diagnostic.Emit();
     diagnostic.Emit();
     context.node_stack().Push(parse_node, SemanticsNodeId::BuiltinInvalidType);
     context.node_stack().Push(parse_node, SemanticsNodeId::BuiltinInvalidType);
     return true;
     return true;
   }
   }
 
 
-  CARBON_CHECK(context.ImplicitAsForArgs(ir_id, refs_id, name_node.parse_node(),
+  CARBON_CHECK(context.ImplicitAsForArgs(refs_id, name_node.parse_node(),
                                          callable.param_refs_id,
                                          callable.param_refs_id,
                                          /*diagnostic=*/nullptr));
                                          /*diagnostic=*/nullptr));
 
 
-  auto call_id = context.semantics().AddCall({ir_id, refs_id});
   // TODO: Propagate return types from callable.
   // TODO: Propagate return types from callable.
   auto call_node_id = context.AddNode(SemanticsNode::Call::Make(
   auto call_node_id = context.AddNode(SemanticsNode::Call::Make(
-      call_expr_parse_node, callable.return_type_id, call_id, callable_id));
+      call_expr_parse_node, callable.return_type_id, refs_id, callable_id));
 
 
   context.node_stack().Push(parse_node, call_node_id);
   context.node_stack().Push(parse_node, call_node_id);
   return true;
   return true;

+ 4 - 7
toolchain/semantics/semantics_handle_function.cpp

@@ -40,9 +40,8 @@ auto SemanticsHandleFunctionDefinitionStart(SemanticsContext& context,
     return_type_id =
     return_type_id =
         context.node_stack().PopForNodeId(ParseNodeKind::ReturnType);
         context.node_stack().PopForNodeId(ParseNodeKind::ReturnType);
   }
   }
-  context.node_stack().PopForSoloParseNode(ParseNodeKind::ParameterList);
-  auto [param_ir_id, param_refs_id] =
-      context.finished_params_stack().pop_back_val();
+  auto param_refs_id =
+      context.node_stack().PopForNodeBlockId(ParseNodeKind::ParameterList);
   auto name_node =
   auto name_node =
       context.node_stack().PopForSoloParseNode(ParseNodeKind::DeclaredName);
       context.node_stack().PopForSoloParseNode(ParseNodeKind::DeclaredName);
   auto fn_node = context.node_stack().PopForSoloParseNode(
   auto fn_node = context.node_stack().PopForSoloParseNode(
@@ -51,10 +50,8 @@ auto SemanticsHandleFunctionDefinitionStart(SemanticsContext& context,
   auto name_str = context.parse_tree().GetNodeText(name_node);
   auto name_str = context.parse_tree().GetNodeText(name_node);
   auto name_id = context.semantics().AddString(name_str);
   auto name_id = context.semantics().AddString(name_str);
 
 
-  auto callable_id =
-      context.semantics().AddCallable({.param_ir_id = param_ir_id,
-                                       .param_refs_id = param_refs_id,
-                                       .return_type_id = return_type_id});
+  auto callable_id = context.semantics().AddCallable(
+      {.param_refs_id = param_refs_id, .return_type_id = return_type_id});
   auto decl_id = context.AddNode(
   auto decl_id = context.AddNode(
       SemanticsNode::FunctionDeclaration::Make(fn_node, name_id, callable_id));
       SemanticsNode::FunctionDeclaration::Make(fn_node, name_id, callable_id));
   context.AddNameToLookup(name_node, name_id, decl_id);
   context.AddNameToLookup(name_node, name_id, decl_id);

+ 8 - 9
toolchain/semantics/semantics_handle_struct.cpp

@@ -67,7 +67,7 @@ auto SemanticsHandleStructFieldValue(SemanticsContext& context,
 
 
 auto SemanticsHandleStructLiteral(SemanticsContext& context,
 auto SemanticsHandleStructLiteral(SemanticsContext& context,
                                   ParseTree::Node parse_node) -> bool {
                                   ParseTree::Node parse_node) -> bool {
-  auto [ir_id, refs_id] = context.ParamOrArgEnd(
+  auto refs_id = context.ParamOrArgEnd(
       /*for_args=*/true, ParseNodeKind::StructLiteralOrStructTypeLiteralStart);
       /*for_args=*/true, ParseNodeKind::StructLiteralOrStructTypeLiteralStart);
 
 
   context.PopScope();
   context.PopScope();
@@ -81,14 +81,13 @@ auto SemanticsHandleStructLiteral(SemanticsContext& context,
     return true;
     return true;
   }
   }
 
 
-  // Construct a type for the literal. Each field is one node, so ir_id and
-  // refs_id match.
+  // Construct a type for the literal.
   auto refs = context.semantics().GetNodeBlock(refs_id);
   auto refs = context.semantics().GetNodeBlock(refs_id);
-  auto type_id = context.AddNode(SemanticsNode::StructType::Make(
-      parse_node, type_block_id, type_block_id));
+  auto type_id = context.AddNode(
+      SemanticsNode::StructType::Make(parse_node, type_block_id));
 
 
   auto value_id = context.AddNode(
   auto value_id = context.AddNode(
-      SemanticsNode::StructValue::Make(parse_node, type_id, ir_id, refs_id));
+      SemanticsNode::StructValue::Make(parse_node, type_id, refs_id));
   context.node_stack().Push(parse_node, value_id);
   context.node_stack().Push(parse_node, value_id);
   return true;
   return true;
 }
 }
@@ -107,7 +106,7 @@ auto SemanticsHandleStructLiteralOrStructTypeLiteralStart(
 
 
 auto SemanticsHandleStructTypeLiteral(SemanticsContext& context,
 auto SemanticsHandleStructTypeLiteral(SemanticsContext& context,
                                       ParseTree::Node parse_node) -> bool {
                                       ParseTree::Node parse_node) -> bool {
-  auto [ir_id, refs_id] = context.ParamOrArgEnd(
+  auto refs_id = context.ParamOrArgEnd(
       /*for_args=*/false, ParseNodeKind::StructLiteralOrStructTypeLiteralStart);
       /*for_args=*/false, ParseNodeKind::StructLiteralOrStructTypeLiteralStart);
 
 
   context.PopScope();
   context.PopScope();
@@ -119,8 +118,8 @@ auto SemanticsHandleStructTypeLiteral(SemanticsContext& context,
   CARBON_CHECK(refs_id != SemanticsNodeBlockId::Empty)
   CARBON_CHECK(refs_id != SemanticsNodeBlockId::Empty)
       << "{} is handled by StructLiteral.";
       << "{} is handled by StructLiteral.";
 
 
-  auto type_id = context.AddNode(
-      SemanticsNode::StructType::Make(parse_node, ir_id, refs_id));
+  auto type_id =
+      context.AddNode(SemanticsNode::StructType::Make(parse_node, refs_id));
   context.node_stack().Push(parse_node, type_id);
   context.node_stack().Push(parse_node, type_id);
   return true;
   return true;
 }
 }

+ 1 - 2
toolchain/semantics/semantics_ir.cpp

@@ -105,7 +105,6 @@ auto SemanticsIR::Print(llvm::raw_ostream& out, bool include_builtins) const
     -> void {
     -> void {
   out << "cross_reference_irs_size: " << cross_reference_irs_.size() << "\n";
   out << "cross_reference_irs_size: " << cross_reference_irs_.size() << "\n";
 
 
-  PrintList(out, "calls", calls_);
   PrintList(out, "callables", callables_);
   PrintList(out, "callables", callables_);
   PrintList(out, "integer_literals", integer_literals_);
   PrintList(out, "integer_literals", integer_literals_);
   PrintList(out, "real_literals", real_literals_);
   PrintList(out, "real_literals", real_literals_);
@@ -165,7 +164,7 @@ auto SemanticsIR::StringifyNode(SemanticsNodeId node_id) -> std::string {
     auto node = GetNode(step.node_id);
     auto node = GetNode(step.node_id);
     switch (node.kind()) {
     switch (node.kind()) {
       case SemanticsNodeKind::StructType: {
       case SemanticsNodeKind::StructType: {
-        auto refs = GetNodeBlock(node.GetAsStructType().second);
+        auto refs = GetNodeBlock(node.GetAsStructType());
         if (step.index == 0) {
         if (step.index == 0) {
           out << "{";
           out << "{";
         } else if (step.index < static_cast<int>(refs.size())) {
         } else if (step.index < static_cast<int>(refs.size())) {

+ 1 - 25
toolchain/semantics/semantics_ir.h

@@ -12,30 +12,16 @@
 
 
 namespace Carbon {
 namespace Carbon {
 
 
-// A call.
-struct SemanticsCall {
-  auto Print(llvm::raw_ostream& out) const -> void {
-    out << "{arg_ir: " << arg_ir_id << ", arg_refs: " << arg_refs_id << "}";
-  }
-
-  // The full IR for arguments.
-  SemanticsNodeBlockId arg_ir_id;
-  // A block containing a single reference node per argument.
-  SemanticsNodeBlockId arg_refs_id;
-};
-
 // A callable object.
 // A callable object.
 struct SemanticsCallable {
 struct SemanticsCallable {
   auto Print(llvm::raw_ostream& out) const -> void {
   auto Print(llvm::raw_ostream& out) const -> void {
-    out << "{param_ir: " << param_ir_id << ", param_refs: " << param_refs_id;
+    out << "{param_refs: " << param_refs_id;
     if (return_type_id.is_valid()) {
     if (return_type_id.is_valid()) {
       out << ", return_type: " << return_type_id;
       out << ", return_type: " << return_type_id;
     }
     }
     out << "}";
     out << "}";
   }
   }
 
 
-  // The full IR for parameters.
-  SemanticsNodeBlockId param_ir_id;
   // A block containing a single reference node per parameter.
   // A block containing a single reference node per parameter.
   SemanticsNodeBlockId param_refs_id;
   SemanticsNodeBlockId param_refs_id;
   // The return type. This will be invalid if the return type wasn't specified.
   // The return type. This will be invalid if the return type wasn't specified.
@@ -80,13 +66,6 @@ class SemanticsIR {
   }
   }
   auto Print(llvm::raw_ostream& out, bool include_builtins) const -> void;
   auto Print(llvm::raw_ostream& out, bool include_builtins) const -> void;
 
 
-  // Adds a call, returning an ID to reference it.
-  auto AddCall(SemanticsCall call) -> SemanticsCallId {
-    SemanticsCallId id(calls_.size());
-    calls_.push_back(call);
-    return id;
-  }
-
   // Adds a callable, returning an ID to reference it.
   // Adds a callable, returning an ID to reference it.
   auto AddCallable(SemanticsCallable callable) -> SemanticsCallableId {
   auto AddCallable(SemanticsCallable callable) -> SemanticsCallableId {
     SemanticsCallableId id(callables_.size());
     SemanticsCallableId id(callables_.size());
@@ -207,9 +186,6 @@ class SemanticsIR {
 
 
   bool has_errors_ = false;
   bool has_errors_ = false;
 
 
-  // Storage for call objects.
-  llvm::SmallVector<SemanticsCall> calls_;
-
   // Storage for callable objects.
   // Storage for callable objects.
   llvm::SmallVector<SemanticsCallable> callables_;
   llvm::SmallVector<SemanticsCallable> callables_;
 
 

+ 0 - 1
toolchain/semantics/semantics_ir_test.cpp

@@ -50,7 +50,6 @@ TEST(SemanticsIRTest, YAML) {
       Yaml::Value::FromText(print_output),
       Yaml::Value::FromText(print_output),
       ElementsAre(Yaml::Mapping(ElementsAre(
       ElementsAre(Yaml::Mapping(ElementsAre(
           Pair("cross_reference_irs_size", "1"),
           Pair("cross_reference_irs_size", "1"),
-          Pair("calls", Yaml::Sequence(IsEmpty())),
           Pair("callables", Yaml::Sequence(IsEmpty())),
           Pair("callables", Yaml::Sequence(IsEmpty())),
           Pair("integer_literals", Yaml::Sequence(ElementsAre("0"))),
           Pair("integer_literals", Yaml::Sequence(ElementsAre("0"))),
           Pair("real_literals", Yaml::Sequence(IsEmpty())),
           Pair("real_literals", Yaml::Sequence(IsEmpty())),

+ 7 - 16
toolchain/semantics/semantics_node.h

@@ -50,15 +50,6 @@ constexpr SemanticsNodeId SemanticsNodeId::Invalid =
       SemanticsNodeId(SemanticsBuiltinKind::Name.AsInt());
       SemanticsNodeId(SemanticsBuiltinKind::Name.AsInt());
 #include "toolchain/semantics/semantics_builtin_kind.def"
 #include "toolchain/semantics/semantics_builtin_kind.def"
 
 
-// The ID of a call.
-struct SemanticsCallId : public IndexBase {
-  using IndexBase::IndexBase;
-  auto Print(llvm::raw_ostream& out) const -> void {
-    out << "call";
-    IndexBase::Print(out);
-  }
-};
-
 // The ID of a callable, such as a function.
 // The ID of a callable, such as a function.
 struct SemanticsCallableId : public IndexBase {
 struct SemanticsCallableId : public IndexBase {
   using IndexBase::IndexBase;
   using IndexBase::IndexBase;
@@ -256,8 +247,9 @@ class SemanticsNode {
     }
     }
   };
   };
 
 
-  using Call = Factory<SemanticsNodeKind::Call, SemanticsCallId /*call_id*/,
-                       SemanticsCallableId /*callable_id*/>;
+  using Call =
+      Factory<SemanticsNodeKind::Call, SemanticsNodeBlockId /*refs_id*/,
+              SemanticsCallableId /*callable_id*/>;
 
 
   using CodeBlock = FactoryPreTyped<SemanticsNodeKind::CodeBlock,
   using CodeBlock = FactoryPreTyped<SemanticsNodeKind::CodeBlock,
                                     SemanticsNodeId::InvalidIndex,
                                     SemanticsNodeId::InvalidIndex,
@@ -312,16 +304,15 @@ class SemanticsNode {
                                      SemanticsNodeId /*struct_id*/,
                                      SemanticsNodeId /*struct_id*/,
                                      SemanticsMemberIndex /*ref_index*/>;
                                      SemanticsMemberIndex /*ref_index*/>;
 
 
-  using StructType = FactoryPreTyped<
-      SemanticsNodeKind::StructType, SemanticsBuiltinKind::TypeType.AsInt(),
-      SemanticsNodeBlockId /*ir_id*/, SemanticsNodeBlockId /*refs_id*/>;
+  using StructType = FactoryPreTyped<SemanticsNodeKind::StructType,
+                                     SemanticsBuiltinKind::TypeType.AsInt(),
+                                     SemanticsNodeBlockId /*refs_id*/>;
 
 
   using StructTypeField = Factory<SemanticsNodeKind::StructTypeField,
   using StructTypeField = Factory<SemanticsNodeKind::StructTypeField,
                                   SemanticsStringId /*name_id*/>;
                                   SemanticsStringId /*name_id*/>;
 
 
   using StructValue =
   using StructValue =
-      Factory<SemanticsNodeKind::StructValue, SemanticsNodeBlockId /*ir_id*/,
-              SemanticsNodeBlockId /*refs_id*/>;
+      Factory<SemanticsNodeKind::StructValue, SemanticsNodeBlockId /*refs_id*/>;
 
 
   using StubReference =
   using StubReference =
       Factory<SemanticsNodeKind::StubReference, SemanticsNodeId /*node_id*/>;
       Factory<SemanticsNodeKind::StubReference, SemanticsNodeId /*node_id*/>;

+ 7 - 0
toolchain/semantics/semantics_node_stack.cpp

@@ -130,6 +130,13 @@ auto SemanticsNodeStack::PopForParseNodeAndNodeId(ParseNodeKind pop_parse_kind)
   return {back.parse_node, back.node_id};
   return {back.parse_node, back.node_id};
 }
 }
 
 
+auto SemanticsNodeStack::PopForNodeBlockId(ParseNodeKind pop_parse_kind)
+    -> SemanticsNodeBlockId {
+  auto back = PopEntry(pop_parse_kind);
+  RequireValidId(back);
+  return back.node_block_id;
+}
+
 auto SemanticsNodeStack::PopForParseNodeAndNameId(ParseNodeKind pop_parse_kind)
 auto SemanticsNodeStack::PopForParseNodeAndNameId(ParseNodeKind pop_parse_kind)
     -> std::pair<ParseTree::Node, SemanticsStringId> {
     -> std::pair<ParseTree::Node, SemanticsStringId> {
   auto back = PopEntry(pop_parse_kind);
   auto back = PopEntry(pop_parse_kind);

+ 12 - 1
toolchain/semantics/semantics_node_stack.h

@@ -40,11 +40,18 @@ class SemanticsNodeStack {
               DebugLog::None);
               DebugLog::None);
   }
   }
 
 
-  // Pushes a parse tree node onto the stack.
+  // Pushes a parse tree node onto the stack with a semantics node.
   auto Push(ParseTree::Node parse_node, SemanticsNodeId node_id) -> void {
   auto Push(ParseTree::Node parse_node, SemanticsNodeId node_id) -> void {
     PushEntry({.parse_node = parse_node, .node_id = node_id}, DebugLog::NodeId);
     PushEntry({.parse_node = parse_node, .node_id = node_id}, DebugLog::NodeId);
   }
   }
 
 
+  // Pushes a parse tree node onto the stack with a semantics node block.
+  auto Push(ParseTree::Node parse_node, SemanticsNodeBlockId node_block_id)
+      -> void {
+    PushEntry({.parse_node = parse_node, .node_block_id = node_block_id},
+              DebugLog::NodeId);
+  }
+
   // Pushes a parse tree node onto the stack with its name.
   // Pushes a parse tree node onto the stack with its name.
   auto Push(ParseTree::Node parse_node, SemanticsStringId name_id) -> void {
   auto Push(ParseTree::Node parse_node, SemanticsStringId name_id) -> void {
     PushEntry({.parse_node = parse_node, .name_id = name_id}, DebugLog::NameId);
     PushEntry({.parse_node = parse_node, .name_id = name_id}, DebugLog::NameId);
@@ -82,6 +89,9 @@ class SemanticsNodeStack {
   // Pops the top of the stack and returns the node_id.
   // Pops the top of the stack and returns the node_id.
   auto PopForNodeId() -> SemanticsNodeId;
   auto PopForNodeId() -> SemanticsNodeId;
 
 
+  // Pops the top of the stack and returns the node_block_id.
+  auto PopForNodeBlockId(ParseNodeKind pop_parse_kind) -> SemanticsNodeBlockId;
+
   // Pops the top of the stack and returns the parse_node and name_id.
   // Pops the top of the stack and returns the parse_node and name_id.
   auto PopForParseNodeAndNameId(ParseNodeKind pop_parse_kind)
   auto PopForParseNodeAndNameId(ParseNodeKind pop_parse_kind)
       -> std::pair<ParseTree::Node, SemanticsStringId>;
       -> std::pair<ParseTree::Node, SemanticsStringId>;
@@ -112,6 +122,7 @@ class SemanticsNodeStack {
     union {
     union {
       SemanticsNodeId node_id;
       SemanticsNodeId node_id;
       SemanticsStringId name_id;
       SemanticsStringId name_id;
+      SemanticsNodeBlockId node_block_id;
     };
     };
   };
   };
   static_assert(sizeof(Entry) == 8, "Unexpected Entry size");
   static_assert(sizeof(Entry) == 8, "Unexpected Entry size");

+ 0 - 2
toolchain/semantics/testdata/basics/builtin_types.carbon

@@ -4,8 +4,6 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [

+ 0 - 2
toolchain/semantics/testdata/basics/empty.carbon

@@ -4,8 +4,6 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [

+ 0 - 2
toolchain/semantics/testdata/basics/empty_decl.carbon

@@ -4,8 +4,6 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [

+ 1 - 3
toolchain/semantics/testdata/basics/fail_name_lookup.carbon

@@ -4,10 +4,8 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]

+ 0 - 2
toolchain/semantics/testdata/designators/fail_unsupported.carbon

@@ -4,8 +4,6 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [

+ 5 - 10
toolchain/semantics/testdata/function/call/empty_struct.carbon

@@ -4,12 +4,9 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT:   {arg_ir: block4, arg_refs: block5},
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block1, param_refs: block2},
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block2},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
@@ -27,8 +24,8 @@
 // CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+2, arg1: block0},
 // CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+2, arg1: block0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: str2, arg1: callable1},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: str2, arg1: callable1},
 // CHECK:STDOUT:   {kind: StubReference, arg0: nodeEmptyStruct, type: nodeEmptyStructType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: nodeEmptyStruct, type: nodeEmptyStructType},
-// CHECK:STDOUT:   {kind: Call, arg0: call0, arg1: callable0},
-// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+4, arg1: block6},
+// CHECK:STDOUT:   {kind: Call, arg0: block5, arg1: callable0},
+// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+4, arg1: block4},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
@@ -48,13 +45,11 @@
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+5,
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+6,
-// CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 
 
 fn Echo(a: {}) {
 fn Echo(a: {}) {

+ 14 - 22
toolchain/semantics/testdata/function/call/fail_param_count.carbon

@@ -4,13 +4,11 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
-// CHECK:STDOUT:   {param_ir: block2, param_refs: block3},
-// CHECK:STDOUT:   {param_ir: block4, param_refs: block5},
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block3},
+// CHECK:STDOUT:   {param_refs: block5},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,
 // CHECK:STDOUT:   1,
@@ -56,7 +54,7 @@
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+21, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+21, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int5, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int5, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+23, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+23, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+12, arg1: block0},
+// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+12, arg1: block6},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
@@ -91,33 +89,27 @@
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+13,
 // CHECK:STDOUT:     node+13,
 // CHECK:STDOUT:     node+14,
 // CHECK:STDOUT:     node+14,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+14,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+15,
 // CHECK:STDOUT:     node+15,
 // CHECK:STDOUT:     node+16,
 // CHECK:STDOUT:     node+16,
 // CHECK:STDOUT:     node+17,
 // CHECK:STDOUT:     node+17,
 // CHECK:STDOUT:     node+18,
 // CHECK:STDOUT:     node+18,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+16,
-// CHECK:STDOUT:     node+18,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+19,
 // CHECK:STDOUT:     node+19,
 // CHECK:STDOUT:     node+20,
 // CHECK:STDOUT:     node+20,
 // CHECK:STDOUT:     node+21,
 // CHECK:STDOUT:     node+21,
 // CHECK:STDOUT:     node+22,
 // CHECK:STDOUT:     node+22,
+// CHECK:STDOUT:     node+23,
+// CHECK:STDOUT:     node+24,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+20,
-// CHECK:STDOUT:     node+22,
+// CHECK:STDOUT:     node+14,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+23,
-// CHECK:STDOUT:     node+24,
+// CHECK:STDOUT:     node+16,
+// CHECK:STDOUT:     node+18,
+// CHECK:STDOUT:   ],
+// CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+20,
+// CHECK:STDOUT:     node+22,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+24,
 // CHECK:STDOUT:     node+24,

+ 3 - 5
toolchain/semantics/testdata/function/call/fail_param_type.carbon

@@ -4,11 +4,9 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block1, param_refs: block2},
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block2},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
@@ -28,7 +26,7 @@
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: str2, arg1: callable1},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: str2, arg1: callable1},
 // CHECK:STDOUT:   {kind: RealLiteral, arg0: real0, type: nodeFloatingPointType},
 // CHECK:STDOUT:   {kind: RealLiteral, arg0: real0, type: nodeFloatingPointType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+5, type: nodeFloatingPointType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+5, type: nodeFloatingPointType},
-// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+4, arg1: block0},
+// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+4, arg1: block4},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [

+ 3 - 6
toolchain/semantics/testdata/function/call/fail_return_type_mismatch.carbon

@@ -4,12 +4,9 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT:   {arg_ir: block0, arg_refs: block0},
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0, return_type: nodeFloatingPointType},
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0, return_type: nodeFloatingPointType},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
@@ -29,7 +26,7 @@
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: str1, arg1: callable1},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: str1, arg1: callable1},
 // CHECK:STDOUT:   {kind: VarStorage, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: VarStorage, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+5, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+5, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: Call, arg0: call0, arg1: callable0, type: nodeFloatingPointType},
+// CHECK:STDOUT:   {kind: Call, arg0: block0, arg1: callable0, type: nodeFloatingPointType},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+5, arg1: nodeInvalidType, type: nodeInvalidType},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+5, arg1: nodeInvalidType, type: nodeInvalidType},
 // CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+4, arg1: block3},
 // CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+4, arg1: block3},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]

+ 5 - 10
toolchain/semantics/testdata/function/call/i32.carbon

@@ -4,12 +4,9 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT:   {arg_ir: block6, arg_refs: block7},
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block1, param_refs: block2, return_type: nodeIntegerType},
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block2, return_type: nodeIntegerType},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,
 // CHECK:STDOUT:   1,
@@ -35,7 +32,7 @@
 // CHECK:STDOUT:   {kind: BindName, arg0: str3, arg1: node+7, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: BindName, arg0: str3, arg1: node+7, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+9, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+9, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: Call, arg0: call0, arg1: callable0, type: nodeIntegerType},
+// CHECK:STDOUT:   {kind: Call, arg0: block6, arg1: callable0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+7, arg1: node+11, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+7, arg1: node+11, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+6, arg1: block5},
 // CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+6, arg1: block5},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
@@ -62,12 +59,10 @@
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+8,
-// CHECK:STDOUT:     node+11,
-// CHECK:STDOUT:     node+12,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:     node+10,
+// CHECK:STDOUT:     node+11,
+// CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:     node+10,

+ 5 - 10
toolchain/semantics/testdata/function/call/more_param_ir.carbon

@@ -4,12 +4,9 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT:   {arg_ir: block4, arg_refs: block5},
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block1, param_refs: block2},
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block2},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,
 // CHECK:STDOUT:   1,
@@ -50,8 +47,8 @@
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+17, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+17, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int5, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int5, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+19, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+19, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: Call, arg0: call0, arg1: callable0},
-// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+8, arg1: block6},
+// CHECK:STDOUT:   {kind: Call, arg0: block5, arg1: callable0},
+// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+8, arg1: block4},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
@@ -88,15 +85,13 @@
 // CHECK:STDOUT:     node+18,
 // CHECK:STDOUT:     node+18,
 // CHECK:STDOUT:     node+19,
 // CHECK:STDOUT:     node+19,
 // CHECK:STDOUT:     node+20,
 // CHECK:STDOUT:     node+20,
+// CHECK:STDOUT:     node+21,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+14,
 // CHECK:STDOUT:     node+14,
 // CHECK:STDOUT:     node+18,
 // CHECK:STDOUT:     node+18,
 // CHECK:STDOUT:     node+20,
 // CHECK:STDOUT:     node+20,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+21,
-// CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 
 
 fn Foo(a: i32, b: i32, c: i32) {}
 fn Foo(a: i32, b: i32, c: i32) {}

+ 5 - 10
toolchain/semantics/testdata/function/call/params_one.carbon

@@ -4,12 +4,9 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT:   {arg_ir: block4, arg_refs: block5},
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block1, param_refs: block2},
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block2},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,
 // CHECK:STDOUT:   1,
@@ -29,8 +26,8 @@
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: str2, arg1: callable1},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: str2, arg1: callable1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+5, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+5, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: Call, arg0: call0, arg1: callable0},
-// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+4, arg1: block6},
+// CHECK:STDOUT:   {kind: Call, arg0: block5, arg1: callable0},
+// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+4, arg1: block4},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
@@ -51,13 +48,11 @@
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+6,
+// CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+7,
-// CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 
 
 fn Foo(a: i32) {}
 fn Foo(a: i32) {}

+ 8 - 16
toolchain/semantics/testdata/function/call/params_one_comma.carbon

@@ -4,13 +4,9 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT:   {arg_ir: block4, arg_refs: block5},
-// CHECK:STDOUT:   {arg_ir: block7, arg_refs: block8},
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block1, param_refs: block2},
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block2},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,
 // CHECK:STDOUT:   1,
@@ -31,11 +27,11 @@
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: str2, arg1: callable1},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: str2, arg1: callable1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+5, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+5, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: Call, arg0: call0, arg1: callable0},
+// CHECK:STDOUT:   {kind: Call, arg0: block5, arg1: callable0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+8, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+8, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: Call, arg0: call1, arg1: callable0},
-// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+4, arg1: block6},
+// CHECK:STDOUT:   {kind: Call, arg0: block6, arg1: callable0},
+// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+4, arg1: block4},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
@@ -56,17 +52,13 @@
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+6,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+6,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+7,
+// CHECK:STDOUT:     node+8,
+// CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+8,
-// CHECK:STDOUT:     node+9,
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+9,

+ 5 - 10
toolchain/semantics/testdata/function/call/params_two.carbon

@@ -4,12 +4,9 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT:   {arg_ir: block4, arg_refs: block5},
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block1, param_refs: block2},
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block2},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,
 // CHECK:STDOUT:   1,
@@ -35,8 +32,8 @@
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+7, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+7, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+9, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+9, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: Call, arg0: call0, arg1: callable0},
-// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+6, arg1: block6},
+// CHECK:STDOUT:   {kind: Call, arg0: block5, arg1: callable0},
+// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+6, arg1: block4},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
@@ -62,14 +59,12 @@
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:     node+10,
+// CHECK:STDOUT:     node+11,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+11,
-// CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 
 
 fn Foo(a: i32, b: i32) {}
 fn Foo(a: i32, b: i32) {}

+ 10 - 18
toolchain/semantics/testdata/function/call/params_two_comma.carbon

@@ -4,13 +4,9 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT:   {arg_ir: block4, arg_refs: block5},
-// CHECK:STDOUT:   {arg_ir: block7, arg_refs: block8},
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block1, param_refs: block2},
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block2},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,
 // CHECK:STDOUT:   1,
@@ -38,13 +34,13 @@
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+7, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+7, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+9, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+9, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: Call, arg0: call0, arg1: callable0},
+// CHECK:STDOUT:   {kind: Call, arg0: block5, arg1: callable0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int2, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int2, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+12, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+12, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int3, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int3, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+14, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+14, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: Call, arg0: call1, arg1: callable0},
-// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+6, arg1: block6},
+// CHECK:STDOUT:   {kind: Call, arg0: block6, arg1: callable0},
+// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+6, arg1: block4},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
@@ -70,20 +66,16 @@
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:     node+10,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+8,
-// CHECK:STDOUT:     node+10,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+11,
 // CHECK:STDOUT:     node+11,
-// CHECK:STDOUT:     node+16,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:     node+13,
 // CHECK:STDOUT:     node+13,
 // CHECK:STDOUT:     node+14,
 // CHECK:STDOUT:     node+14,
 // CHECK:STDOUT:     node+15,
 // CHECK:STDOUT:     node+15,
+// CHECK:STDOUT:     node+16,
+// CHECK:STDOUT:   ],
+// CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+8,
+// CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+13,
 // CHECK:STDOUT:     node+13,

+ 3 - 6
toolchain/semantics/testdata/function/call/params_zero.carbon

@@ -4,12 +4,9 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT:   {arg_ir: block0, arg_refs: block0},
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
@@ -23,7 +20,7 @@
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: str0, arg1: callable0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: str0, arg1: callable0},
 // CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+0, arg1: block0},
 // CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+0, arg1: block0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: str1, arg1: callable1},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: str1, arg1: callable1},
-// CHECK:STDOUT:   {kind: Call, arg0: call0, arg1: callable0},
+// CHECK:STDOUT:   {kind: Call, arg0: block0, arg1: callable0},
 // CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+2, arg1: block2},
 // CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+2, arg1: block2},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT: node_blocks: [

+ 1 - 3
toolchain/semantics/testdata/function/definition/fail_param_name_conflict.carbon

@@ -4,10 +4,8 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block1, param_refs: block2},
+// CHECK:STDOUT:   {param_refs: block2},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]

+ 3 - 5
toolchain/semantics/testdata/function/definition/order.carbon

@@ -4,12 +4,10 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]

+ 1 - 3
toolchain/semantics/testdata/function/definition/params_one.carbon

@@ -4,10 +4,8 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block1, param_refs: block2},
+// CHECK:STDOUT:   {param_refs: block2},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]

+ 1 - 3
toolchain/semantics/testdata/function/definition/params_one_comma.carbon

@@ -4,10 +4,8 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block1, param_refs: block2},
+// CHECK:STDOUT:   {param_refs: block2},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]

+ 1 - 3
toolchain/semantics/testdata/function/definition/params_two.carbon

@@ -4,10 +4,8 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block1, param_refs: block2},
+// CHECK:STDOUT:   {param_refs: block2},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]

+ 1 - 3
toolchain/semantics/testdata/function/definition/params_two_comma.carbon

@@ -4,10 +4,8 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block1, param_refs: block2},
+// CHECK:STDOUT:   {param_refs: block2},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]

+ 1 - 3
toolchain/semantics/testdata/function/definition/params_zero.carbon

@@ -4,10 +4,8 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]

+ 2 - 4
toolchain/semantics/testdata/function/definition/same_param_name.carbon

@@ -4,11 +4,9 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block1, param_refs: block2},
-// CHECK:STDOUT:   {param_ir: block4, param_refs: block5},
+// CHECK:STDOUT:   {param_refs: block2},
+// CHECK:STDOUT:   {param_refs: block5},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]

+ 1 - 3
toolchain/semantics/testdata/operators/binary_op.carbon

@@ -4,10 +4,8 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0, return_type: nodeIntegerType},
+// CHECK:STDOUT:   {param_refs: block0, return_type: nodeIntegerType},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   12,
 // CHECK:STDOUT:   12,

+ 1 - 3
toolchain/semantics/testdata/operators/fail_type_mismatch.carbon

@@ -4,10 +4,8 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0, return_type: nodeIntegerType},
+// CHECK:STDOUT:   {param_refs: block0, return_type: nodeIntegerType},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   12,
 // CHECK:STDOUT:   12,

+ 1 - 3
toolchain/semantics/testdata/operators/fail_type_mismatch_once.carbon

@@ -4,10 +4,8 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0, return_type: nodeIntegerType},
+// CHECK:STDOUT:   {param_refs: block0, return_type: nodeIntegerType},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   12,
 // CHECK:STDOUT:   12,

+ 1 - 3
toolchain/semantics/testdata/return/fail_type_mismatch.carbon

@@ -4,10 +4,8 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0, return_type: nodeIntegerType},
+// CHECK:STDOUT:   {param_refs: block0, return_type: nodeIntegerType},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]

+ 1 - 3
toolchain/semantics/testdata/return/fail_value_disallowed.carbon

@@ -4,10 +4,8 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   0,
 // CHECK:STDOUT:   0,

+ 1 - 3
toolchain/semantics/testdata/return/fail_value_missing.carbon

@@ -4,10 +4,8 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0, return_type: nodeIntegerType},
+// CHECK:STDOUT:   {param_refs: block0, return_type: nodeIntegerType},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]

+ 1 - 3
toolchain/semantics/testdata/return/no_value.carbon

@@ -4,10 +4,8 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]

+ 11 - 17
toolchain/semantics/testdata/return/struct.carbon

@@ -4,10 +4,8 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0, return_type: node+1},
+// CHECK:STDOUT:   {param_refs: block0, return_type: node+1},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   3,
 // CHECK:STDOUT:   3,
@@ -20,33 +18,34 @@
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block1, arg1: block2, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructType, arg0: block2, type: nodeTypeType},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: str1, arg1: callable0},
 // CHECK:STDOUT:   {kind: FunctionDeclaration, arg0: str1, arg1: callable0},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+3, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+3, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block5, arg1: block5, type: nodeTypeType},
-// CHECK:STDOUT:   {kind: StructValue, arg0: block4, arg1: block6, type: node+6},
+// CHECK:STDOUT:   {kind: StructType, arg0: block4, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructValue, arg0: block5, type: node+6},
 // CHECK:STDOUT:   {kind: ReturnExpression, arg0: node+7, type: node+6},
 // CHECK:STDOUT:   {kind: ReturnExpression, arg0: node+7, type: node+6},
-// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+2, arg1: block7},
+// CHECK:STDOUT:   {kind: FunctionDefinition, arg0: node+2, arg1: block3},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+0,
+// CHECK:STDOUT:   ],
+// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+5,
+// CHECK:STDOUT:     node+6,
+// CHECK:STDOUT:     node+7,
+// CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:     node+4,
@@ -54,11 +53,6 @@
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+6,
-// CHECK:STDOUT:     node+7,
-// CHECK:STDOUT:     node+8,
-// CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 
 
 fn Main() -> {.a: i32} {
 fn Main() -> {.a: i32} {

+ 1 - 3
toolchain/semantics/testdata/return/value.carbon

@@ -4,10 +4,8 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0, return_type: nodeIntegerType},
+// CHECK:STDOUT:   {param_refs: block0, return_type: nodeIntegerType},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   0,
 // CHECK:STDOUT:   0,

+ 0 - 2
toolchain/semantics/testdata/struct/empty.carbon

@@ -4,8 +4,6 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [

+ 4 - 8
toolchain/semantics/testdata/struct/fail_assign_empty.carbon

@@ -4,8 +4,6 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
@@ -18,7 +16,7 @@
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block1, arg1: block2, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructType, arg0: block2, type: nodeTypeType},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+1},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+1},
 // CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+2, type: node+1},
 // CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+2, type: node+1},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: nodeInvalidType, type: nodeInvalidType},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: nodeInvalidType, type: nodeInvalidType},
@@ -28,16 +26,14 @@
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
+// CHECK:STDOUT:   [
+// CHECK:STDOUT:     node+0,
+// CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 
 
 // CHECK:STDERR: fail_assign_empty.carbon:[[@LINE+1]]:22: Cannot implicitly convert from `{} as Type` to `{.a: i32}`.
 // CHECK:STDERR: fail_assign_empty.carbon:[[@LINE+1]]:22: Cannot implicitly convert from `{} as Type` to `{.a: i32}`.

+ 4 - 8
toolchain/semantics/testdata/struct/fail_assign_to_empty.carbon

@@ -4,8 +4,6 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
@@ -23,8 +21,8 @@
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str1, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str1, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+2, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+2, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block3, arg1: block3, type: nodeTypeType},
-// CHECK:STDOUT:   {kind: StructValue, arg0: block2, arg1: block4, type: node+5},
+// CHECK:STDOUT:   {kind: StructType, arg0: block2, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructValue, arg0: block3, type: node+5},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+0, arg1: nodeInvalidType, type: nodeInvalidType},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+0, arg1: nodeInvalidType, type: nodeInvalidType},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT: node_blocks: [
@@ -33,15 +31,13 @@
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+1,
+// CHECK:STDOUT:     node+2,
+// CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+2,
-// CHECK:STDOUT:     node+4,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [

+ 6 - 12
toolchain/semantics/testdata/struct/fail_field_name_mismatch.carbon

@@ -4,8 +4,6 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
@@ -20,14 +18,14 @@
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block1, arg1: block2, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructType, arg0: block2, type: nodeTypeType},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+1},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+1},
 // CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+2, type: node+1},
 // CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+2, type: node+1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str2, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str2, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+4, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+4, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block5, arg1: block5, type: nodeTypeType},
-// CHECK:STDOUT:   {kind: StructValue, arg0: block4, arg1: block6, type: node+7},
+// CHECK:STDOUT:   {kind: StructType, arg0: block3, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructValue, arg0: block4, type: node+7},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: nodeInvalidType, type: nodeInvalidType},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: nodeInvalidType, type: nodeInvalidType},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT: node_blocks: [
@@ -35,21 +33,17 @@
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+3,
+// CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+4,
-// CHECK:STDOUT:     node+6,
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+5,

+ 6 - 12
toolchain/semantics/testdata/struct/fail_field_type_mismatch.carbon

@@ -4,8 +4,6 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
@@ -20,14 +18,14 @@
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block1, arg1: block2, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructType, arg0: block2, type: nodeTypeType},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+1},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+1},
 // CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+2, type: node+1},
 // CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+2, type: node+1},
 // CHECK:STDOUT:   {kind: RealLiteral, arg0: real0, type: nodeFloatingPointType},
 // CHECK:STDOUT:   {kind: RealLiteral, arg0: real0, type: nodeFloatingPointType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str2, type: nodeFloatingPointType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str2, type: nodeFloatingPointType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+4, type: nodeFloatingPointType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+4, type: nodeFloatingPointType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block5, arg1: block5, type: nodeTypeType},
-// CHECK:STDOUT:   {kind: StructValue, arg0: block4, arg1: block6, type: node+7},
+// CHECK:STDOUT:   {kind: StructType, arg0: block3, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructValue, arg0: block4, type: node+7},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: nodeInvalidType, type: nodeInvalidType},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: nodeInvalidType, type: nodeInvalidType},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT: node_blocks: [
@@ -35,21 +33,17 @@
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+3,
+// CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+4,
-// CHECK:STDOUT:     node+6,
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+5,

+ 6 - 12
toolchain/semantics/testdata/struct/fail_member_access_type.carbon

@@ -4,8 +4,6 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
@@ -21,14 +19,14 @@
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeFloatingPointType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeFloatingPointType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block1, arg1: block2, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructType, arg0: block2, type: nodeTypeType},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+1},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+1},
 // CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+2, type: node+1},
 // CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+2, type: node+1},
 // CHECK:STDOUT:   {kind: RealLiteral, arg0: real0, type: nodeFloatingPointType},
 // CHECK:STDOUT:   {kind: RealLiteral, arg0: real0, type: nodeFloatingPointType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeFloatingPointType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeFloatingPointType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+4, type: nodeFloatingPointType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+4, type: nodeFloatingPointType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block5, arg1: block5, type: nodeTypeType},
-// CHECK:STDOUT:   {kind: StructValue, arg0: block4, arg1: block6, type: node+7},
+// CHECK:STDOUT:   {kind: StructType, arg0: block3, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructValue, arg0: block4, type: node+7},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: node+8, type: node+7},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: node+8, type: node+7},
 // CHECK:STDOUT:   {kind: VarStorage, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: VarStorage, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+10, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+10, type: nodeIntegerType},
@@ -39,14 +37,11 @@
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+3,
+// CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+9,
@@ -55,8 +50,7 @@
 // CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+4,
-// CHECK:STDOUT:     node+6,
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+5,

+ 6 - 12
toolchain/semantics/testdata/struct/fail_non_member_access.carbon

@@ -4,8 +4,6 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
@@ -21,14 +19,14 @@
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block1, arg1: block2, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructType, arg0: block2, type: nodeTypeType},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+1},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+1},
 // CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+2, type: node+1},
 // CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+2, type: node+1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+4, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+4, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block5, arg1: block5, type: nodeTypeType},
-// CHECK:STDOUT:   {kind: StructValue, arg0: block4, arg1: block6, type: node+7},
+// CHECK:STDOUT:   {kind: StructType, arg0: block3, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructValue, arg0: block4, type: node+7},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: node+8, type: node+7},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: node+8, type: node+7},
 // CHECK:STDOUT:   {kind: VarStorage, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: VarStorage, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+10, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+10, type: nodeIntegerType},
@@ -39,14 +37,11 @@
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+3,
+// CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+9,
@@ -55,8 +50,7 @@
 // CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+4,
-// CHECK:STDOUT:     node+6,
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+5,

+ 7 - 13
toolchain/semantics/testdata/struct/fail_too_few_values.carbon

@@ -4,8 +4,6 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
@@ -21,14 +19,14 @@
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str1, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str1, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block1, arg1: block2, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructType, arg0: block2, type: nodeTypeType},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+2},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+2},
 // CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+3, type: node+2},
 // CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+3, type: node+2},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+5, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+5, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block5, arg1: block5, type: nodeTypeType},
-// CHECK:STDOUT:   {kind: StructValue, arg0: block4, arg1: block6, type: node+8},
+// CHECK:STDOUT:   {kind: StructType, arg0: block3, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructValue, arg0: block4, type: node+8},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+3, arg1: nodeInvalidType, type: nodeInvalidType},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+3, arg1: nodeInvalidType, type: nodeInvalidType},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT: node_blocks: [
@@ -37,22 +35,18 @@
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+1,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:     node+1,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+5,
+// CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+5,
-// CHECK:STDOUT:     node+7,
+// CHECK:STDOUT:     node+0,
+// CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+6,

+ 4 - 10
toolchain/semantics/testdata/struct/fail_type_assign.carbon

@@ -4,8 +4,6 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
@@ -18,11 +16,11 @@
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block1, arg1: block2, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructType, arg0: block2, type: nodeTypeType},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+1},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+1},
 // CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+2, type: node+1},
 // CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+2, type: node+1},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block4, arg1: block5, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructType, arg0: block3, type: nodeTypeType},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: nodeInvalidType, type: nodeInvalidType},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: nodeInvalidType, type: nodeInvalidType},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: node_blocks: [
 // CHECK:STDOUT: node_blocks: [
@@ -30,19 +28,15 @@
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+3,
+// CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:     node+4,

+ 6 - 10
toolchain/semantics/testdata/struct/fail_value_as_type.carbon

@@ -4,8 +4,6 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
@@ -21,8 +19,8 @@
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+0, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block2, arg1: block2, type: nodeTypeType},
-// CHECK:STDOUT:   {kind: StructValue, arg0: block1, arg1: block3, type: node+3},
+// CHECK:STDOUT:   {kind: StructType, arg0: block2, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructValue, arg0: block3, type: node+3},
 // CHECK:STDOUT:   {kind: VarStorage, type: nodeInvalidType},
 // CHECK:STDOUT:   {kind: VarStorage, type: nodeInvalidType},
 // CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+5, type: nodeInvalidType},
 // CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+5, type: nodeInvalidType},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
@@ -32,6 +30,10 @@
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+2,
+// CHECK:STDOUT:     node+3,
+// CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+5,
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+1,
@@ -39,12 +41,6 @@
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+3,
-// CHECK:STDOUT:     node+4,
-// CHECK:STDOUT:     node+5,
-// CHECK:STDOUT:     node+6,
-// CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 
 
 // CHECK:STDERR: fail_value_as_type.carbon:[[@LINE+1]]:15: Cannot implicitly convert from `{.a: i32}` to `Type`.
 // CHECK:STDERR: fail_value_as_type.carbon:[[@LINE+1]]:15: Cannot implicitly convert from `{.a: i32}` to `Type`.

+ 9 - 15
toolchain/semantics/testdata/struct/member_access.carbon

@@ -4,8 +4,6 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
@@ -24,7 +22,7 @@
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeFloatingPointType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeFloatingPointType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str1, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str1, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block1, arg1: block2, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructType, arg0: block2, type: nodeTypeType},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+2},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+2},
 // CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+3, type: node+2},
 // CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+3, type: node+2},
 // CHECK:STDOUT:   {kind: RealLiteral, arg0: real0, type: nodeFloatingPointType},
 // CHECK:STDOUT:   {kind: RealLiteral, arg0: real0, type: nodeFloatingPointType},
@@ -33,8 +31,8 @@
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str1, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str1, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+8, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+8, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block5, arg1: block5, type: nodeTypeType},
-// CHECK:STDOUT:   {kind: StructValue, arg0: block4, arg1: block6, type: node+11},
+// CHECK:STDOUT:   {kind: StructType, arg0: block3, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructValue, arg0: block4, type: node+11},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+3, arg1: node+12, type: node+11},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+3, arg1: node+12, type: node+11},
 // CHECK:STDOUT:   {kind: VarStorage, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: VarStorage, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: BindName, arg0: str3, arg1: node+14, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: BindName, arg0: str3, arg1: node+14, type: nodeIntegerType},
@@ -50,15 +48,13 @@
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+1,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:     node+1,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+5,
+// CHECK:STDOUT:     node+7,
+// CHECK:STDOUT:     node+8,
+// CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:     node+11,
 // CHECK:STDOUT:     node+11,
 // CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:     node+13,
 // CHECK:STDOUT:     node+13,
@@ -71,10 +67,8 @@
 // CHECK:STDOUT:     node+20,
 // CHECK:STDOUT:     node+20,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+5,
-// CHECK:STDOUT:     node+7,
-// CHECK:STDOUT:     node+8,
-// CHECK:STDOUT:     node+10,
+// CHECK:STDOUT:     node+0,
+// CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+6,

+ 8 - 16
toolchain/semantics/testdata/struct/one_entry.carbon

@@ -4,8 +4,6 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
@@ -20,17 +18,17 @@
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block1, arg1: block2, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructType, arg0: block2, type: nodeTypeType},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+1},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+1},
 // CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+2, type: node+1},
 // CHECK:STDOUT:   {kind: BindName, arg0: str1, arg1: node+2, type: node+1},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+4, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+4, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block5, arg1: block5, type: nodeTypeType},
-// CHECK:STDOUT:   {kind: StructValue, arg0: block4, arg1: block6, type: node+7},
+// CHECK:STDOUT:   {kind: StructType, arg0: block3, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructValue, arg0: block4, type: node+7},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: node+8, type: node+7},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+2, arg1: node+8, type: node+7},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block7, arg1: block8, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructType, arg0: block5, type: nodeTypeType},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+11},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+11},
 // CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+12, type: node+11},
 // CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+12, type: node+11},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+12, arg1: node+2, type: node+1},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+12, arg1: node+2, type: node+1},
@@ -40,25 +38,22 @@
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+3,
+// CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+7,
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+8,
 // CHECK:STDOUT:     node+9,
 // CHECK:STDOUT:     node+9,
+// CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:     node+11,
 // CHECK:STDOUT:     node+11,
 // CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:     node+13,
 // CHECK:STDOUT:     node+13,
 // CHECK:STDOUT:     node+14,
 // CHECK:STDOUT:     node+14,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+4,
-// CHECK:STDOUT:     node+6,
+// CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+5,
 // CHECK:STDOUT:     node+5,
@@ -69,9 +64,6 @@
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+10,
-// CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 
 
 var x: {.a: i32} = {.a = 4};
 var x: {.a: i32} = {.a = 4};

+ 12 - 20
toolchain/semantics/testdata/struct/two_entries.carbon

@@ -4,8 +4,6 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
@@ -23,7 +21,7 @@
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT: nodes: [
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str1, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str1, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block1, arg1: block2, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructType, arg0: block2, type: nodeTypeType},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+2},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+2},
 // CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+3, type: node+2},
 // CHECK:STDOUT:   {kind: BindName, arg0: str2, arg1: node+3, type: node+2},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int0, type: nodeIntegerType},
@@ -32,12 +30,12 @@
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: IntegerLiteral, arg0: int1, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str1, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str1, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+8, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StubReference, arg0: node+8, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block5, arg1: block5, type: nodeTypeType},
-// CHECK:STDOUT:   {kind: StructValue, arg0: block4, arg1: block6, type: node+11},
+// CHECK:STDOUT:   {kind: StructType, arg0: block3, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructValue, arg0: block4, type: node+11},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+3, arg1: node+12, type: node+11},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+3, arg1: node+12, type: node+11},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str0, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str1, type: nodeIntegerType},
 // CHECK:STDOUT:   {kind: StructTypeField, arg0: str1, type: nodeIntegerType},
-// CHECK:STDOUT:   {kind: StructType, arg0: block7, arg1: block8, type: nodeTypeType},
+// CHECK:STDOUT:   {kind: StructType, arg0: block5, type: nodeTypeType},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+16},
 // CHECK:STDOUT:   {kind: VarStorage, type: node+16},
 // CHECK:STDOUT:   {kind: BindName, arg0: str3, arg1: node+17, type: node+16},
 // CHECK:STDOUT:   {kind: BindName, arg0: str3, arg1: node+17, type: node+16},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+17, arg1: node+3, type: node+2},
 // CHECK:STDOUT:   {kind: Assign, arg0: node+17, arg1: node+3, type: node+2},
@@ -48,28 +46,26 @@
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+0,
 // CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:     node+1,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+0,
-// CHECK:STDOUT:     node+1,
-// CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+2,
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+3,
 // CHECK:STDOUT:     node+4,
 // CHECK:STDOUT:     node+4,
+// CHECK:STDOUT:     node+5,
+// CHECK:STDOUT:     node+7,
+// CHECK:STDOUT:     node+8,
+// CHECK:STDOUT:     node+10,
 // CHECK:STDOUT:     node+11,
 // CHECK:STDOUT:     node+11,
 // CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:     node+12,
 // CHECK:STDOUT:     node+13,
 // CHECK:STDOUT:     node+13,
+// CHECK:STDOUT:     node+14,
+// CHECK:STDOUT:     node+15,
 // CHECK:STDOUT:     node+16,
 // CHECK:STDOUT:     node+16,
 // CHECK:STDOUT:     node+17,
 // CHECK:STDOUT:     node+17,
 // CHECK:STDOUT:     node+18,
 // CHECK:STDOUT:     node+18,
 // CHECK:STDOUT:     node+19,
 // CHECK:STDOUT:     node+19,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+5,
-// CHECK:STDOUT:     node+7,
-// CHECK:STDOUT:     node+8,
-// CHECK:STDOUT:     node+10,
+// CHECK:STDOUT:     node+0,
+// CHECK:STDOUT:     node+1,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:   [
 // CHECK:STDOUT:     node+6,
 // CHECK:STDOUT:     node+6,
@@ -83,10 +79,6 @@
 // CHECK:STDOUT:     node+14,
 // CHECK:STDOUT:     node+14,
 // CHECK:STDOUT:     node+15,
 // CHECK:STDOUT:     node+15,
 // CHECK:STDOUT:   ],
 // CHECK:STDOUT:   ],
-// CHECK:STDOUT:   [
-// CHECK:STDOUT:     node+14,
-// CHECK:STDOUT:     node+15,
-// CHECK:STDOUT:   ],
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 
 
 var x: {.a: i32, .b: i32} = {.a = 1, .b = 2};
 var x: {.a: i32, .b: i32} = {.a = 1, .b = 2};

+ 1 - 3
toolchain/semantics/testdata/var/decl.carbon

@@ -4,10 +4,8 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]

+ 1 - 3
toolchain/semantics/testdata/var/decl_with_init.carbon

@@ -4,10 +4,8 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   0,
 // CHECK:STDOUT:   0,

+ 1 - 3
toolchain/semantics/testdata/var/fail_duplicate_decl.carbon

@@ -4,10 +4,8 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   0,
 // CHECK:STDOUT:   0,

+ 1 - 3
toolchain/semantics/testdata/var/fail_init_type_mismatch.carbon

@@ -4,10 +4,8 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]

+ 1 - 3
toolchain/semantics/testdata/var/fail_init_with_self.carbon

@@ -4,10 +4,8 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]

+ 1 - 3
toolchain/semantics/testdata/var/fail_lookup_outside_scope.carbon

@@ -4,10 +4,8 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]

+ 1 - 3
toolchain/semantics/testdata/var/fail_storage_is_literal.carbon

@@ -4,10 +4,8 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   1,
 // CHECK:STDOUT:   1,

+ 0 - 2
toolchain/semantics/testdata/var/global_decl.carbon

@@ -4,8 +4,6 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [

+ 0 - 2
toolchain/semantics/testdata/var/global_decl_with_init.carbon

@@ -4,8 +4,6 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [

+ 0 - 2
toolchain/semantics/testdata/var/global_lookup.carbon

@@ -4,8 +4,6 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [

+ 1 - 3
toolchain/semantics/testdata/var/global_lookup_in_scope.carbon

@@ -4,10 +4,8 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   0,
 // CHECK:STDOUT:   0,

+ 1 - 3
toolchain/semantics/testdata/var/lookup.carbon

@@ -4,10 +4,8 @@
 //
 //
 // AUTOUPDATE
 // AUTOUPDATE
 // CHECK:STDOUT: cross_reference_irs_size: 1
 // CHECK:STDOUT: cross_reference_irs_size: 1
-// CHECK:STDOUT: calls: [
-// CHECK:STDOUT: ]
 // CHECK:STDOUT: callables: [
 // CHECK:STDOUT: callables: [
-// CHECK:STDOUT:   {param_ir: block0, param_refs: block0},
+// CHECK:STDOUT:   {param_refs: block0},
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: ]
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT: integer_literals: [
 // CHECK:STDOUT:   0,
 // CHECK:STDOUT:   0,