From b908c6e274a418952b0a8e9e5ce2dd44469e22b2 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Fri, 23 Jun 2023 08:36:13 -0700 Subject: [PATCH] Track the list of blocks that form the body of a function. (#2941) Use that list for lowering in lexical order, instead of rediscovering the list based on which blocks are referenced as branch targets. --- toolchain/lowering/BUILD | 1 - toolchain/lowering/lowering_block_worklist.h | 52 ------------------- toolchain/lowering/lowering_context.cpp | 22 ++++---- .../lowering/lowering_function_context.cpp | 2 - .../lowering/lowering_function_context.h | 5 -- .../testdata/if_expression/empty_block.carbon | 42 +++++++-------- toolchain/semantics/semantics_context.cpp | 13 +++++ toolchain/semantics/semantics_context.h | 3 ++ toolchain/semantics/semantics_handle.cpp | 2 + .../semantics/semantics_handle_function.cpp | 2 +- toolchain/semantics/semantics_handle_if.cpp | 3 ++ .../semantics_handle_if_expression.cpp | 3 ++ toolchain/semantics/semantics_ir.h | 15 ++++-- .../testdata/basics/fail_name_lookup.carbon | 2 +- .../function/call/empty_struct.carbon | 4 +- .../function/call/fail_param_count.carbon | 8 +-- .../function/call/fail_param_type.carbon | 4 +- .../call/fail_return_type_mismatch.carbon | 4 +- .../testdata/function/call/i32.carbon | 4 +- .../function/call/more_param_ir.carbon | 4 +- .../testdata/function/call/params_one.carbon | 4 +- .../function/call/params_one_comma.carbon | 4 +- .../testdata/function/call/params_two.carbon | 4 +- .../function/call/params_two_comma.carbon | 4 +- .../testdata/function/call/params_zero.carbon | 4 +- .../fail_param_name_conflict.carbon | 2 +- .../testdata/function/definition/order.carbon | 6 +-- .../function/definition/params_one.carbon | 2 +- .../definition/params_one_comma.carbon | 2 +- .../function/definition/params_two.carbon | 2 +- .../definition/params_two_comma.carbon | 2 +- .../function/definition/params_zero.carbon | 2 +- .../definition/same_param_name.carbon | 4 +- toolchain/semantics/testdata/if/else.carbon | 8 +-- .../semantics/testdata/if/fail_scope.carbon | 2 +- .../semantics/testdata/if/no_else.carbon | 6 +-- .../testdata/if_expression/basic.carbon | 2 +- .../if_expression/constant_condition.carbon | 8 +-- .../if_expression/control_flow.carbon | 6 +-- .../testdata/if_expression/nested.carbon | 2 +- .../semantics/testdata/operators/and.carbon | 6 +-- .../testdata/operators/binary_op.carbon | 2 +- .../operators/fail_type_mismatch.carbon | 2 +- .../operators/fail_type_mismatch_once.carbon | 2 +- .../semantics/testdata/operators/or.carbon | 6 +-- .../testdata/operators/unary_op.carbon | 2 +- .../testdata/return/fail_type_mismatch.carbon | 2 +- .../return/fail_value_disallowed.carbon | 2 +- .../testdata/return/fail_value_missing.carbon | 2 +- .../semantics/testdata/return/no_value.carbon | 2 +- .../semantics/testdata/return/struct.carbon | 2 +- .../semantics/testdata/return/value.carbon | 2 +- toolchain/semantics/testdata/var/decl.carbon | 2 +- .../testdata/var/decl_with_init.carbon | 2 +- .../testdata/var/fail_duplicate_decl.carbon | 2 +- .../var/fail_init_type_mismatch.carbon | 2 +- .../testdata/var/fail_init_with_self.carbon | 2 +- .../var/fail_lookup_outside_scope.carbon | 2 +- .../var/fail_storage_is_literal.carbon | 2 +- .../var/global_lookup_in_scope.carbon | 2 +- .../semantics/testdata/var/lookup.carbon | 2 +- 61 files changed, 145 insertions(+), 176 deletions(-) delete mode 100644 toolchain/lowering/lowering_block_worklist.h diff --git a/toolchain/lowering/BUILD b/toolchain/lowering/BUILD index c21983f81ea9..29af8767c534 100644 --- a/toolchain/lowering/BUILD +++ b/toolchain/lowering/BUILD @@ -27,7 +27,6 @@ cc_library( "lowering_handle.cpp", ], hdrs = [ - "lowering_block_worklist.h", "lowering_context.h", "lowering_function_context.h", ], diff --git a/toolchain/lowering/lowering_block_worklist.h b/toolchain/lowering/lowering_block_worklist.h deleted file mode 100644 index cfb734dd7709..000000000000 --- a/toolchain/lowering/lowering_block_worklist.h +++ /dev/null @@ -1,52 +0,0 @@ -// Part of the Carbon Language project, under the Apache License v2.0 with LLVM -// Exceptions. See /LICENSE for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception - -#ifndef CARBON_TOOLCHAIN_LOWERING_LOWERING_BLOCK_WORKLIST_H_ -#define CARBON_TOOLCHAIN_LOWERING_LOWERING_BLOCK_WORKLIST_H_ - -#include "llvm/ADT/DenseSet.h" -#include "llvm/ADT/SmallVector.h" -#include "toolchain/semantics/semantics_node.h" - -namespace Carbon { - -// A worklist for blocks that need to be lowered. -// -// The blocks form a tree, where the sequence of blocks that are pushed -// following a `Pop` that returned block B are the children of B. Blocks are -// popped in a preorder depth-first traversal over this tree, where blocks that -// are children of the same block are popped in the same order in which they -// were pushed. -// -// This traversal order is intended to produce readable IR: -// -// - In the absence of control flow back-edges, branches will typically branch -// to blocks emitted later, although this is not guaranteed. -// - A branch and the blocks that it branches to will typically be placed close -// together. -class LoweringBlockWorklist { - public: - // Add a block to the work list. - auto Push(SemanticsNodeBlockId id) -> void { worklist_.push_back(id); } - - // Pop the next block to lower. - auto Pop() -> SemanticsNodeBlockId { - // Reverse the order of the blocks added since the last `Pop`, so that we - // pop them in the order that they were `Pushed` in. - std::reverse(worklist_.begin() + size_after_last_pop_, worklist_.end()); - SemanticsNodeBlockId result = worklist_.pop_back_val(); - size_after_last_pop_ = worklist_.size(); - return result; - } - - auto empty() -> bool { return worklist_.empty(); } - - private: - llvm::SmallVector worklist_; - int size_after_last_pop_ = 0; -}; - -} // namespace Carbon - -#endif // CARBON_TOOLCHAIN_LOWERING_LOWERING_BLOCK_WORKLIST_H_ diff --git a/toolchain/lowering/lowering_context.cpp b/toolchain/lowering/lowering_context.cpp index b92d58342bf5..30e337910ec1 100644 --- a/toolchain/lowering/lowering_context.cpp +++ b/toolchain/lowering/lowering_context.cpp @@ -86,8 +86,8 @@ auto LoweringContext::BuildFunctionDeclaration(SemanticsFunctionId function_id) auto LoweringContext::BuildFunctionDefinition(SemanticsFunctionId function_id) -> void { auto function = semantics_ir().GetFunction(function_id); - auto body_id = function.body_id; - if (!body_id.is_valid()) { + const auto& body_block_ids = function.body_block_ids; + if (body_block_ids.empty()) { // Function is probably defined in another file; not an error. return; } @@ -103,15 +103,15 @@ auto LoweringContext::BuildFunctionDefinition(SemanticsFunctionId function_id) function_lowering.SetLocal(param_storage, llvm_function->getArg(i)); } - // Add the entry block to the worklist. - function_lowering.GetBlock(function.body_id); - - while (!function_lowering.block_worklist().empty()) { - SemanticsNodeBlockId block = function_lowering.block_worklist().Pop(); - CARBON_VLOG() << "Lowering " << block << "\n"; - function_lowering.builder().SetInsertPoint( - function_lowering.GetBlock(block)); - for (const auto& node_id : semantics_ir().GetNodeBlock(block)) { + // Lower all blocks. + // TODO: Determine the set of reachable blocks, and only lower those ones. + for (auto block_id : body_block_ids) { + CARBON_VLOG() << "Lowering " << block_id << "\n"; + auto* llvm_block = function_lowering.GetBlock(block_id); + // Keep the LLVM blocks in lexical order. + llvm_block->moveBefore(llvm_function->end()); + function_lowering.builder().SetInsertPoint(llvm_block); + for (const auto& node_id : semantics_ir().GetNodeBlock(block_id)) { auto node = semantics_ir().GetNode(node_id); CARBON_VLOG() << "Lowering " << node_id << ": " << node << "\n"; switch (node.kind()) { diff --git a/toolchain/lowering/lowering_function_context.cpp b/toolchain/lowering/lowering_function_context.cpp index e9a04150f2ad..d863b642fa3e 100644 --- a/toolchain/lowering/lowering_function_context.cpp +++ b/toolchain/lowering/lowering_function_context.cpp @@ -21,7 +21,6 @@ auto LoweringFunctionContext::GetBlock(SemanticsNodeBlockId block_id) llvm::BasicBlock*& entry = blocks_[block_id]; if (!entry) { entry = llvm::BasicBlock::Create(llvm_context(), "", function_); - block_worklist().Push(block_id); } return entry; } @@ -31,7 +30,6 @@ auto LoweringFunctionContext::TryToReuseBlock(SemanticsNodeBlockId block_id, if (!blocks_.insert({block_id, block}).second) { return false; } - block_worklist().Push(block_id); if (block == synthetic_block_) { synthetic_block_ = nullptr; } diff --git a/toolchain/lowering/lowering_function_context.h b/toolchain/lowering/lowering_function_context.h index 8f688a3e2fc8..f52b0223b3c9 100644 --- a/toolchain/lowering/lowering_function_context.h +++ b/toolchain/lowering/lowering_function_context.h @@ -10,7 +10,6 @@ #include "llvm/IR/IRBuilder.h" #include "llvm/IR/LLVMContext.h" #include "llvm/IR/Module.h" -#include "toolchain/lowering/lowering_block_worklist.h" #include "toolchain/lowering/lowering_context.h" #include "toolchain/semantics/semantics_ir.h" #include "toolchain/semantics/semantics_node.h" @@ -84,7 +83,6 @@ class LoweringFunctionContext { return lowering_context_->llvm_module(); } auto builder() -> llvm::IRBuilder<>& { return builder_; } - auto block_worklist() -> LoweringBlockWorklist& { return block_worklist_; } auto semantics_ir() -> const SemanticsIR& { return lowering_context_->semantics_ir(); } @@ -98,9 +96,6 @@ class LoweringFunctionContext { llvm::IRBuilder<> builder_; - // A worklist for blocks we need to lower. - LoweringBlockWorklist block_worklist_; - // Maps a function's SemanticsIR blocks to lowered blocks. llvm::DenseMap blocks_; diff --git a/toolchain/lowering/testdata/if_expression/empty_block.carbon b/toolchain/lowering/testdata/if_expression/empty_block.carbon index db2dc4e3d414..957dea69d545 100644 --- a/toolchain/lowering/testdata/if_expression/empty_block.carbon +++ b/toolchain/lowering/testdata/if_expression/empty_block.carbon @@ -7,37 +7,37 @@ // CHECK:STDOUT: source_filename = "empty_block.carbon" // CHECK:STDOUT: // CHECK:STDOUT: define i32 @Select(i1 %b, i1 %c, i1 %d) { -// CHECK:STDOUT: br i1 %b, label %1, label %2 +// CHECK:STDOUT: br i1 %b, label %1, label %6 // CHECK:STDOUT: // CHECK:STDOUT: 1: ; preds = %0 -// CHECK:STDOUT: br i1 %c, label %3, label %4 +// CHECK:STDOUT: br i1 %c, label %2, label %3 // CHECK:STDOUT: -// CHECK:STDOUT: 2: ; preds = %0 -// CHECK:STDOUT: br i1 %d, label %9, label %10 +// CHECK:STDOUT: 2: ; preds = %1 +// CHECK:STDOUT: br label %4 // CHECK:STDOUT: // CHECK:STDOUT: 3: ; preds = %1 -// CHECK:STDOUT: br label %5 +// CHECK:STDOUT: br label %4 // CHECK:STDOUT: -// CHECK:STDOUT: 4: ; preds = %1 -// CHECK:STDOUT: br label %5 -// CHECK:STDOUT: -// CHECK:STDOUT: 5: ; preds = %4, %3 -// CHECK:STDOUT: %6 = phi i32 [ 1, %3 ], [ 2, %4 ] -// CHECK:STDOUT: br label %7 -// CHECK:STDOUT: -// CHECK:STDOUT: 7: ; preds = %11, %5 -// CHECK:STDOUT: %8 = phi i32 [ %6, %5 ], [ %12, %11 ] -// CHECK:STDOUT: ret i32 %8 -// CHECK:STDOUT: -// CHECK:STDOUT: 9: ; preds = %2 +// CHECK:STDOUT: 4: ; preds = %3, %2 +// CHECK:STDOUT: %5 = phi i32 [ 1, %2 ], [ 2, %3 ] // CHECK:STDOUT: br label %11 // CHECK:STDOUT: -// CHECK:STDOUT: 10: ; preds = %2 +// CHECK:STDOUT: 6: ; preds = %0 +// CHECK:STDOUT: br i1 %d, label %7, label %8 +// CHECK:STDOUT: +// CHECK:STDOUT: 7: ; preds = %6 +// CHECK:STDOUT: br label %9 +// CHECK:STDOUT: +// CHECK:STDOUT: 8: ; preds = %6 +// CHECK:STDOUT: br label %9 +// CHECK:STDOUT: +// CHECK:STDOUT: 9: ; preds = %8, %7 +// CHECK:STDOUT: %10 = phi i32 [ 3, %7 ], [ 4, %8 ] // CHECK:STDOUT: br label %11 // CHECK:STDOUT: -// CHECK:STDOUT: 11: ; preds = %10, %9 -// CHECK:STDOUT: %12 = phi i32 [ 3, %9 ], [ 4, %10 ] -// CHECK:STDOUT: br label %7 +// CHECK:STDOUT: 11: ; preds = %9, %4 +// CHECK:STDOUT: %12 = phi i32 [ %5, %4 ], [ %10, %9 ] +// CHECK:STDOUT: ret i32 %12 // CHECK:STDOUT: } fn Select(b: bool, c: bool, d: bool) -> i32 { diff --git a/toolchain/semantics/semantics_context.cpp b/toolchain/semantics/semantics_context.cpp index 98eeabbb1401..8d6b6e969fcd 100644 --- a/toolchain/semantics/semantics_context.cpp +++ b/toolchain/semantics/semantics_context.cpp @@ -130,6 +130,19 @@ auto SemanticsContext::PopScope() -> void { } } +// Add the current code block to the enclosing function. +auto SemanticsContext::AddCurrentCodeBlockToFunction() -> void { + CARBON_CHECK(!node_block_stack().empty()) << "no current code block"; + CARBON_CHECK(!return_scope_stack().empty()) << "no current function"; + + auto function_id = semantics_ir() + .GetNode(return_scope_stack().back()) + .GetAsFunctionDeclaration(); + semantics_ir() + .GetFunction(function_id) + .body_block_ids.push_back(node_block_stack().PeekForAdd()); +} + auto SemanticsContext::ImplicitAsForArgs( SemanticsNodeBlockId arg_refs_id, ParseTree::Node param_parse_node, SemanticsNodeBlockId param_refs_id, diff --git a/toolchain/semantics/semantics_context.h b/toolchain/semantics/semantics_context.h index b7af66d610c2..922c907cd003 100644 --- a/toolchain/semantics/semantics_context.h +++ b/toolchain/semantics/semantics_context.h @@ -57,6 +57,9 @@ class SemanticsContext { // Pops the top scope from scope_stack_, cleaning up names from name_lookup_. auto PopScope() -> void; + // Add the current code block to the enclosing function. + auto AddCurrentCodeBlockToFunction() -> void; + // Runs ImplicitAsImpl for a set of arguments and parameters. // // This will eventually need to support checking against multiple possible diff --git a/toolchain/semantics/semantics_handle.cpp b/toolchain/semantics/semantics_handle.cpp index e43d48c7eec0..2acaa11ad1aa 100644 --- a/toolchain/semantics/semantics_handle.cpp +++ b/toolchain/semantics/semantics_handle.cpp @@ -184,6 +184,7 @@ auto SemanticsHandleInfixOperator(SemanticsContext& context, context.AddNodeToBlock(rhs_block_id, SemanticsNode::BranchWithArg::Make( parse_node, resume_block_id, rhs_id)); + context.AddCurrentCodeBlockToFunction(); // Collect the result from either the first or second operand. context.AddNodeAndPush( @@ -539,6 +540,7 @@ auto SemanticsHandleShortCircuitOperand(SemanticsContext& context, context.AddNodeToBlock( lhs_block_id, SemanticsNode::BranchWithArg::Make( parse_node, end_block_id, short_circuit_result_id)); + context.AddCurrentCodeBlockToFunction(); // Put the condition back on the stack for SemanticsHandleInfixOperator. context.node_stack().Push(parse_node, cond_value_id); diff --git a/toolchain/semantics/semantics_handle_function.cpp b/toolchain/semantics/semantics_handle_function.cpp index 1d3734a3e7a1..d8f392701d08 100644 --- a/toolchain/semantics/semantics_handle_function.cpp +++ b/toolchain/semantics/semantics_handle_function.cpp @@ -49,7 +49,7 @@ auto SemanticsHandleFunctionDefinitionStart(SemanticsContext& context, {.name_id = name_id, .param_refs_id = param_refs_id, .return_type_id = return_type_id, - .body_id = context.node_block_stack().PeekForAdd()}); + .body_block_ids = {context.node_block_stack().PeekForAdd()}}); auto decl_id = context.AddNodeToBlock( outer_block, SemanticsNode::FunctionDeclaration::Make(fn_node, function_id)); diff --git a/toolchain/semantics/semantics_handle_if.cpp b/toolchain/semantics/semantics_handle_if.cpp index 1404e3c5b6f6..d0c5ebcf27e6 100644 --- a/toolchain/semantics/semantics_handle_if.cpp +++ b/toolchain/semantics/semantics_handle_if.cpp @@ -31,6 +31,7 @@ auto SemanticsHandleIfCondition(SemanticsContext& context, SemanticsNode::BranchIf::Make(parse_node, then_block_id, cond_value_id)); context.AddNodeToBlock( if_block_id, SemanticsNode::Branch::Make(parse_node, else_block_id)); + context.AddCurrentCodeBlockToFunction(); context.node_stack().Push(parse_node); return true; @@ -43,6 +44,7 @@ auto SemanticsHandleIfStatementElse(SemanticsContext& context, // Switch to emitting the else block. auto then_block_id = context.node_block_stack().PopForAdd(); context.node_stack().Push(parse_node, then_block_id); + context.AddCurrentCodeBlockToFunction(); return true; } @@ -82,6 +84,7 @@ auto SemanticsHandleIfStatement(SemanticsContext& context, } } + context.AddCurrentCodeBlockToFunction(); return true; } diff --git a/toolchain/semantics/semantics_handle_if_expression.cpp b/toolchain/semantics/semantics_handle_if_expression.cpp index db6b32e8b522..a86dcbf9d4aa 100644 --- a/toolchain/semantics/semantics_handle_if_expression.cpp +++ b/toolchain/semantics/semantics_handle_if_expression.cpp @@ -30,12 +30,14 @@ auto SemanticsHandleIfExpressionIf(SemanticsContext& context, SemanticsNode::BranchIf::Make(if_node, then_block_id, cond_value_id)); context.AddNodeToBlock(if_block_id, SemanticsNode::Branch::Make(if_node, else_block_id)); + context.AddCurrentCodeBlockToFunction(); return true; } auto SemanticsHandleIfExpressionThen(SemanticsContext& context, ParseTree::Node then_node) -> bool { context.node_stack().Push(then_node, context.node_block_stack().Pop()); + context.AddCurrentCodeBlockToFunction(); return true; } @@ -65,6 +67,7 @@ auto SemanticsHandleIfExpressionElse(SemanticsContext& context, context.AddNodeToBlock(else_end_block_id, SemanticsNode::BranchWithArg::Make( else_node, resume_block_id, else_value_id)); + context.AddCurrentCodeBlockToFunction(); // Obtain the value in the resumption block and push it. context.AddNodeAndPush( diff --git a/toolchain/semantics/semantics_ir.h b/toolchain/semantics/semantics_ir.h index 83654ed8a983..95f41e04605a 100644 --- a/toolchain/semantics/semantics_ir.h +++ b/toolchain/semantics/semantics_ir.h @@ -7,6 +7,8 @@ #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringMap.h" +#include "llvm/ADT/iterator_range.h" +#include "llvm/Support/FormatVariadic.h" #include "toolchain/parser/parse_tree.h" #include "toolchain/semantics/semantics_node.h" @@ -20,8 +22,10 @@ struct SemanticsFunction { if (return_type_id.is_valid()) { out << ", return_type: " << return_type_id; } - if (body_id.is_valid()) { - out << ", body: " << body_id; + if (!body_block_ids.empty()) { + out << llvm::formatv( + ", body: {{{0}}}", + llvm::make_range(body_block_ids.begin(), body_block_ids.end())); } out << "}"; } @@ -32,9 +36,10 @@ struct SemanticsFunction { SemanticsNodeBlockId param_refs_id; // The return type. This will be invalid if the return type wasn't specified. SemanticsTypeId return_type_id; - // The body. This will be invalid for declarations which don't have a visible - // definition. - SemanticsNodeBlockId body_id; + // A list of the code blocks in the body of the function, in lexical order. + // The first block is the entry block. This will be empty for declarations + // that don't have a visible definition. + llvm::SmallVector body_block_ids; }; struct SemanticsRealLiteral { diff --git a/toolchain/semantics/testdata/basics/fail_name_lookup.carbon b/toolchain/semantics/testdata/basics/fail_name_lookup.carbon index 439b679f61fa..41db925fdc7a 100644 --- a/toolchain/semantics/testdata/basics/fail_name_lookup.carbon +++ b/toolchain/semantics/testdata/basics/fail_name_lookup.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, body: block2}, +// CHECK:STDOUT: {name: str0, param_refs: block0, body: {block2}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/call/empty_struct.carbon b/toolchain/semantics/testdata/function/call/empty_struct.carbon index d82e0438ccdc..ca60e0850c1c 100644 --- a/toolchain/semantics/testdata/function/call/empty_struct.carbon +++ b/toolchain/semantics/testdata/function/call/empty_struct.carbon @@ -5,8 +5,8 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block2, return_type: type0, body: block4}, -// CHECK:STDOUT: {name: str2, param_refs: block0, body: block5}, +// CHECK:STDOUT: {name: str0, param_refs: block2, return_type: type0, body: {block4}}}, +// CHECK:STDOUT: {name: str2, param_refs: block0, body: {block5}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/call/fail_param_count.carbon b/toolchain/semantics/testdata/function/call/fail_param_count.carbon index c1a06c7e6437..e2360cd86be2 100644 --- a/toolchain/semantics/testdata/function/call/fail_param_count.carbon +++ b/toolchain/semantics/testdata/function/call/fail_param_count.carbon @@ -5,10 +5,10 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, body: block2}, -// CHECK:STDOUT: {name: str1, param_refs: block4, body: block5}, -// CHECK:STDOUT: {name: str3, param_refs: block7, body: block8}, -// CHECK:STDOUT: {name: str5, param_refs: block0, body: block9}, +// CHECK:STDOUT: {name: str0, param_refs: block0, body: {block2}}}, +// CHECK:STDOUT: {name: str1, param_refs: block4, body: {block5}}}, +// CHECK:STDOUT: {name: str3, param_refs: block7, body: {block8}}}, +// CHECK:STDOUT: {name: str5, param_refs: block0, body: {block9}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 1, diff --git a/toolchain/semantics/testdata/function/call/fail_param_type.carbon b/toolchain/semantics/testdata/function/call/fail_param_type.carbon index fc6492de2907..c04184a2e185 100644 --- a/toolchain/semantics/testdata/function/call/fail_param_type.carbon +++ b/toolchain/semantics/testdata/function/call/fail_param_type.carbon @@ -5,8 +5,8 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block2, body: block4}, -// CHECK:STDOUT: {name: str2, param_refs: block0, body: block5}, +// CHECK:STDOUT: {name: str0, param_refs: block2, body: {block4}}}, +// CHECK:STDOUT: {name: str2, param_refs: block0, body: {block5}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/call/fail_return_type_mismatch.carbon b/toolchain/semantics/testdata/function/call/fail_return_type_mismatch.carbon index 9890eb292431..aab17229aa68 100644 --- a/toolchain/semantics/testdata/function/call/fail_return_type_mismatch.carbon +++ b/toolchain/semantics/testdata/function/call/fail_return_type_mismatch.carbon @@ -5,8 +5,8 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, return_type: type0, body: block2}, -// CHECK:STDOUT: {name: str1, param_refs: block0, body: block3}, +// CHECK:STDOUT: {name: str0, param_refs: block0, return_type: type0, body: {block2}}}, +// CHECK:STDOUT: {name: str1, param_refs: block0, body: {block3}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/call/i32.carbon b/toolchain/semantics/testdata/function/call/i32.carbon index 524411247651..3769769f9291 100644 --- a/toolchain/semantics/testdata/function/call/i32.carbon +++ b/toolchain/semantics/testdata/function/call/i32.carbon @@ -5,8 +5,8 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block2, return_type: type0, body: block4}, -// CHECK:STDOUT: {name: str2, param_refs: block0, body: block5}, +// CHECK:STDOUT: {name: str0, param_refs: block2, return_type: type0, body: {block4}}}, +// CHECK:STDOUT: {name: str2, param_refs: block0, body: {block5}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 1, diff --git a/toolchain/semantics/testdata/function/call/more_param_ir.carbon b/toolchain/semantics/testdata/function/call/more_param_ir.carbon index 0a2c7b391870..4004509f4426 100644 --- a/toolchain/semantics/testdata/function/call/more_param_ir.carbon +++ b/toolchain/semantics/testdata/function/call/more_param_ir.carbon @@ -5,8 +5,8 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block2, body: block4}, -// CHECK:STDOUT: {name: str4, param_refs: block0, body: block5}, +// CHECK:STDOUT: {name: str0, param_refs: block2, body: {block4}}}, +// CHECK:STDOUT: {name: str4, param_refs: block0, body: {block5}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 1, diff --git a/toolchain/semantics/testdata/function/call/params_one.carbon b/toolchain/semantics/testdata/function/call/params_one.carbon index 1c077afe27e7..634b3c8f36b6 100644 --- a/toolchain/semantics/testdata/function/call/params_one.carbon +++ b/toolchain/semantics/testdata/function/call/params_one.carbon @@ -5,8 +5,8 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block2, body: block4}, -// CHECK:STDOUT: {name: str2, param_refs: block0, body: block5}, +// CHECK:STDOUT: {name: str0, param_refs: block2, body: {block4}}}, +// CHECK:STDOUT: {name: str2, param_refs: block0, body: {block5}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 1, diff --git a/toolchain/semantics/testdata/function/call/params_one_comma.carbon b/toolchain/semantics/testdata/function/call/params_one_comma.carbon index 1cd2f7fb1f1e..c0f01e6830e3 100644 --- a/toolchain/semantics/testdata/function/call/params_one_comma.carbon +++ b/toolchain/semantics/testdata/function/call/params_one_comma.carbon @@ -5,8 +5,8 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block2, body: block4}, -// CHECK:STDOUT: {name: str2, param_refs: block0, body: block5}, +// CHECK:STDOUT: {name: str0, param_refs: block2, body: {block4}}}, +// CHECK:STDOUT: {name: str2, param_refs: block0, body: {block5}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 1, diff --git a/toolchain/semantics/testdata/function/call/params_two.carbon b/toolchain/semantics/testdata/function/call/params_two.carbon index c0f55463017c..893f1db00758 100644 --- a/toolchain/semantics/testdata/function/call/params_two.carbon +++ b/toolchain/semantics/testdata/function/call/params_two.carbon @@ -5,8 +5,8 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block2, body: block4}, -// CHECK:STDOUT: {name: str3, param_refs: block0, body: block5}, +// CHECK:STDOUT: {name: str0, param_refs: block2, body: {block4}}}, +// CHECK:STDOUT: {name: str3, param_refs: block0, body: {block5}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 1, diff --git a/toolchain/semantics/testdata/function/call/params_two_comma.carbon b/toolchain/semantics/testdata/function/call/params_two_comma.carbon index 112fd71f50b9..52082dde2a39 100644 --- a/toolchain/semantics/testdata/function/call/params_two_comma.carbon +++ b/toolchain/semantics/testdata/function/call/params_two_comma.carbon @@ -5,8 +5,8 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block2, body: block4}, -// CHECK:STDOUT: {name: str3, param_refs: block0, body: block5}, +// CHECK:STDOUT: {name: str0, param_refs: block2, body: {block4}}}, +// CHECK:STDOUT: {name: str3, param_refs: block0, body: {block5}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 1, diff --git a/toolchain/semantics/testdata/function/call/params_zero.carbon b/toolchain/semantics/testdata/function/call/params_zero.carbon index 111e132ebaa5..ba47b6cf0223 100644 --- a/toolchain/semantics/testdata/function/call/params_zero.carbon +++ b/toolchain/semantics/testdata/function/call/params_zero.carbon @@ -5,8 +5,8 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, body: block2}, -// CHECK:STDOUT: {name: str1, param_refs: block0, body: block3}, +// CHECK:STDOUT: {name: str0, param_refs: block0, body: {block2}}}, +// CHECK:STDOUT: {name: str1, param_refs: block0, body: {block3}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/definition/fail_param_name_conflict.carbon b/toolchain/semantics/testdata/function/definition/fail_param_name_conflict.carbon index 04e108cb0d45..2691ad495b3d 100644 --- a/toolchain/semantics/testdata/function/definition/fail_param_name_conflict.carbon +++ b/toolchain/semantics/testdata/function/definition/fail_param_name_conflict.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block2, body: block4}, +// CHECK:STDOUT: {name: str0, param_refs: block2, body: {block4}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/definition/order.carbon b/toolchain/semantics/testdata/function/definition/order.carbon index 6b25ef48edd3..b0d4a7c33673 100644 --- a/toolchain/semantics/testdata/function/definition/order.carbon +++ b/toolchain/semantics/testdata/function/definition/order.carbon @@ -5,9 +5,9 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, body: block2}, -// CHECK:STDOUT: {name: str1, param_refs: block0, body: block3}, -// CHECK:STDOUT: {name: str2, param_refs: block0, body: block4}, +// CHECK:STDOUT: {name: str0, param_refs: block0, body: {block2}}}, +// CHECK:STDOUT: {name: str1, param_refs: block0, body: {block3}}}, +// CHECK:STDOUT: {name: str2, param_refs: block0, body: {block4}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/definition/params_one.carbon b/toolchain/semantics/testdata/function/definition/params_one.carbon index 15832dfdb66a..ec93f6453d61 100644 --- a/toolchain/semantics/testdata/function/definition/params_one.carbon +++ b/toolchain/semantics/testdata/function/definition/params_one.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block2, body: block4}, +// CHECK:STDOUT: {name: str0, param_refs: block2, body: {block4}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/definition/params_one_comma.carbon b/toolchain/semantics/testdata/function/definition/params_one_comma.carbon index c50b6c797284..d703aa47c1d8 100644 --- a/toolchain/semantics/testdata/function/definition/params_one_comma.carbon +++ b/toolchain/semantics/testdata/function/definition/params_one_comma.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block2, body: block4}, +// CHECK:STDOUT: {name: str0, param_refs: block2, body: {block4}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/definition/params_two.carbon b/toolchain/semantics/testdata/function/definition/params_two.carbon index 2fa5221e39cc..f4e84cdb3aa1 100644 --- a/toolchain/semantics/testdata/function/definition/params_two.carbon +++ b/toolchain/semantics/testdata/function/definition/params_two.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block2, body: block4}, +// CHECK:STDOUT: {name: str0, param_refs: block2, body: {block4}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/definition/params_two_comma.carbon b/toolchain/semantics/testdata/function/definition/params_two_comma.carbon index f61da4bfb711..2a876e6953fb 100644 --- a/toolchain/semantics/testdata/function/definition/params_two_comma.carbon +++ b/toolchain/semantics/testdata/function/definition/params_two_comma.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block2, body: block4}, +// CHECK:STDOUT: {name: str0, param_refs: block2, body: {block4}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/definition/params_zero.carbon b/toolchain/semantics/testdata/function/definition/params_zero.carbon index 2d1be58c2a47..93d9c47a51c8 100644 --- a/toolchain/semantics/testdata/function/definition/params_zero.carbon +++ b/toolchain/semantics/testdata/function/definition/params_zero.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, body: block2}, +// CHECK:STDOUT: {name: str0, param_refs: block0, body: {block2}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/definition/same_param_name.carbon b/toolchain/semantics/testdata/function/definition/same_param_name.carbon index ffa08efc5a4f..a6463c5bf990 100644 --- a/toolchain/semantics/testdata/function/definition/same_param_name.carbon +++ b/toolchain/semantics/testdata/function/definition/same_param_name.carbon @@ -5,8 +5,8 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block2, body: block4}, -// CHECK:STDOUT: {name: str2, param_refs: block6, body: block7}, +// CHECK:STDOUT: {name: str0, param_refs: block2, body: {block4}}}, +// CHECK:STDOUT: {name: str2, param_refs: block6, body: {block7}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/if/else.carbon b/toolchain/semantics/testdata/if/else.carbon index 6b87b1810e26..78fdd85b6426 100644 --- a/toolchain/semantics/testdata/if/else.carbon +++ b/toolchain/semantics/testdata/if/else.carbon @@ -5,10 +5,10 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, body: block2}, -// CHECK:STDOUT: {name: str1, param_refs: block0, body: block3}, -// CHECK:STDOUT: {name: str2, param_refs: block0, body: block4}, -// CHECK:STDOUT: {name: str3, param_refs: block6, body: block7}, +// CHECK:STDOUT: {name: str0, param_refs: block0, body: {block2}}}, +// CHECK:STDOUT: {name: str1, param_refs: block0, body: {block3}}}, +// CHECK:STDOUT: {name: str2, param_refs: block0, body: {block4}}}, +// CHECK:STDOUT: {name: str3, param_refs: block6, body: {block7, block9, block8, block10}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/if/fail_scope.carbon b/toolchain/semantics/testdata/if/fail_scope.carbon index 9d79385ac031..668e4ac5adf0 100644 --- a/toolchain/semantics/testdata/if/fail_scope.carbon +++ b/toolchain/semantics/testdata/if/fail_scope.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block2, return_type: type1, body: block4}, +// CHECK:STDOUT: {name: str0, param_refs: block2, return_type: type1, body: {block4, block6, block5}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 2, diff --git a/toolchain/semantics/testdata/if/no_else.carbon b/toolchain/semantics/testdata/if/no_else.carbon index 88accc1b0ac1..1c72ed43418b 100644 --- a/toolchain/semantics/testdata/if/no_else.carbon +++ b/toolchain/semantics/testdata/if/no_else.carbon @@ -5,9 +5,9 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, body: block2}, -// CHECK:STDOUT: {name: str1, param_refs: block0, body: block3}, -// CHECK:STDOUT: {name: str2, param_refs: block5, body: block6}, +// CHECK:STDOUT: {name: str0, param_refs: block0, body: {block2}}}, +// CHECK:STDOUT: {name: str1, param_refs: block0, body: {block3}}}, +// CHECK:STDOUT: {name: str2, param_refs: block5, body: {block6, block8, block7}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/if_expression/basic.carbon b/toolchain/semantics/testdata/if_expression/basic.carbon index d25ae5c8a66c..d06fe0908f2f 100644 --- a/toolchain/semantics/testdata/if_expression/basic.carbon +++ b/toolchain/semantics/testdata/if_expression/basic.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block2, return_type: type1, body: block4}, +// CHECK:STDOUT: {name: str0, param_refs: block2, return_type: type1, body: {block4, block6, block5, block7}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/if_expression/constant_condition.carbon b/toolchain/semantics/testdata/if_expression/constant_condition.carbon index dd3e735bebd1..399ea351e142 100644 --- a/toolchain/semantics/testdata/if_expression/constant_condition.carbon +++ b/toolchain/semantics/testdata/if_expression/constant_condition.carbon @@ -5,10 +5,10 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, return_type: type0, body: block2}, -// CHECK:STDOUT: {name: str1, param_refs: block0, return_type: type0, body: block3}, -// CHECK:STDOUT: {name: str2, param_refs: block0, return_type: type0, body: block4}, -// CHECK:STDOUT: {name: str3, param_refs: block0, return_type: type0, body: block8}, +// CHECK:STDOUT: {name: str0, param_refs: block0, return_type: type0, body: {block2}}}, +// CHECK:STDOUT: {name: str1, param_refs: block0, return_type: type0, body: {block3}}}, +// CHECK:STDOUT: {name: str2, param_refs: block0, return_type: type0, body: {block4, block6, block5, block7}}}, +// CHECK:STDOUT: {name: str3, param_refs: block0, return_type: type0, body: {block8, block10, block9, block11}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 1, diff --git a/toolchain/semantics/testdata/if_expression/control_flow.carbon b/toolchain/semantics/testdata/if_expression/control_flow.carbon index 2dcd3353f099..3e1812e05318 100644 --- a/toolchain/semantics/testdata/if_expression/control_flow.carbon +++ b/toolchain/semantics/testdata/if_expression/control_flow.carbon @@ -5,9 +5,9 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, return_type: type0, body: block2}, -// CHECK:STDOUT: {name: str1, param_refs: block0, return_type: type0, body: block3}, -// CHECK:STDOUT: {name: str2, param_refs: block5, return_type: type0, body: block6}, +// CHECK:STDOUT: {name: str0, param_refs: block0, return_type: type0, body: {block2}}}, +// CHECK:STDOUT: {name: str1, param_refs: block0, return_type: type0, body: {block3}}}, +// CHECK:STDOUT: {name: str2, param_refs: block5, return_type: type0, body: {block6, block8, block7, block9}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 1, diff --git a/toolchain/semantics/testdata/if_expression/nested.carbon b/toolchain/semantics/testdata/if_expression/nested.carbon index 56b11c5f4576..22c88841bb07 100644 --- a/toolchain/semantics/testdata/if_expression/nested.carbon +++ b/toolchain/semantics/testdata/if_expression/nested.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block2, return_type: type1, body: block4}, +// CHECK:STDOUT: {name: str0, param_refs: block2, return_type: type1, body: {block4, block6, block8, block7, block9, block5, block11, block10, block12, block13}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 1, diff --git a/toolchain/semantics/testdata/operators/and.carbon b/toolchain/semantics/testdata/operators/and.carbon index a7156511aae2..babe1564c4d1 100644 --- a/toolchain/semantics/testdata/operators/and.carbon +++ b/toolchain/semantics/testdata/operators/and.carbon @@ -5,9 +5,9 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, return_type: type0, body: block2}, -// CHECK:STDOUT: {name: str1, param_refs: block0, return_type: type0, body: block3}, -// CHECK:STDOUT: {name: str2, param_refs: block0, return_type: type0, body: block4}, +// CHECK:STDOUT: {name: str0, param_refs: block0, return_type: type0, body: {block2}}}, +// CHECK:STDOUT: {name: str1, param_refs: block0, return_type: type0, body: {block3}}}, +// CHECK:STDOUT: {name: str2, param_refs: block0, return_type: type0, body: {block4, block6, block5}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/operators/binary_op.carbon b/toolchain/semantics/testdata/operators/binary_op.carbon index d8396bced031..410b6fcd7bf8 100644 --- a/toolchain/semantics/testdata/operators/binary_op.carbon +++ b/toolchain/semantics/testdata/operators/binary_op.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, return_type: type0, body: block2}, +// CHECK:STDOUT: {name: str0, param_refs: block0, return_type: type0, body: {block2}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 12, diff --git a/toolchain/semantics/testdata/operators/fail_type_mismatch.carbon b/toolchain/semantics/testdata/operators/fail_type_mismatch.carbon index b484ba7b6613..cd488d5de806 100644 --- a/toolchain/semantics/testdata/operators/fail_type_mismatch.carbon +++ b/toolchain/semantics/testdata/operators/fail_type_mismatch.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, return_type: type0, body: block2}, +// CHECK:STDOUT: {name: str0, param_refs: block0, return_type: type0, body: {block2}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 12, diff --git a/toolchain/semantics/testdata/operators/fail_type_mismatch_once.carbon b/toolchain/semantics/testdata/operators/fail_type_mismatch_once.carbon index aad7ae8ec70a..84320fcf0fc8 100644 --- a/toolchain/semantics/testdata/operators/fail_type_mismatch_once.carbon +++ b/toolchain/semantics/testdata/operators/fail_type_mismatch_once.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, return_type: type0, body: block2}, +// CHECK:STDOUT: {name: str0, param_refs: block0, return_type: type0, body: {block2}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 12, diff --git a/toolchain/semantics/testdata/operators/or.carbon b/toolchain/semantics/testdata/operators/or.carbon index fd5106c974df..8b64ffa3946b 100644 --- a/toolchain/semantics/testdata/operators/or.carbon +++ b/toolchain/semantics/testdata/operators/or.carbon @@ -5,9 +5,9 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, return_type: type0, body: block2}, -// CHECK:STDOUT: {name: str1, param_refs: block0, return_type: type0, body: block3}, -// CHECK:STDOUT: {name: str2, param_refs: block0, return_type: type0, body: block4}, +// CHECK:STDOUT: {name: str0, param_refs: block0, return_type: type0, body: {block2}}}, +// CHECK:STDOUT: {name: str1, param_refs: block0, return_type: type0, body: {block3}}}, +// CHECK:STDOUT: {name: str2, param_refs: block0, return_type: type0, body: {block4, block6, block5}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/operators/unary_op.carbon b/toolchain/semantics/testdata/operators/unary_op.carbon index e954aeafc62e..1e094eac6a6c 100644 --- a/toolchain/semantics/testdata/operators/unary_op.carbon +++ b/toolchain/semantics/testdata/operators/unary_op.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block2, return_type: type0, body: block4}, +// CHECK:STDOUT: {name: str0, param_refs: block2, return_type: type0, body: {block4}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/return/fail_type_mismatch.carbon b/toolchain/semantics/testdata/return/fail_type_mismatch.carbon index bcc74893131a..6ec2be50512c 100644 --- a/toolchain/semantics/testdata/return/fail_type_mismatch.carbon +++ b/toolchain/semantics/testdata/return/fail_type_mismatch.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, return_type: type0, body: block2}, +// CHECK:STDOUT: {name: str0, param_refs: block0, return_type: type0, body: {block2}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/return/fail_value_disallowed.carbon b/toolchain/semantics/testdata/return/fail_value_disallowed.carbon index 41fe1437b5ea..19de1448accc 100644 --- a/toolchain/semantics/testdata/return/fail_value_disallowed.carbon +++ b/toolchain/semantics/testdata/return/fail_value_disallowed.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, body: block2}, +// CHECK:STDOUT: {name: str0, param_refs: block0, body: {block2}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 0, diff --git a/toolchain/semantics/testdata/return/fail_value_missing.carbon b/toolchain/semantics/testdata/return/fail_value_missing.carbon index a652039f0835..fb8e5008a88d 100644 --- a/toolchain/semantics/testdata/return/fail_value_missing.carbon +++ b/toolchain/semantics/testdata/return/fail_value_missing.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, return_type: type0, body: block2}, +// CHECK:STDOUT: {name: str0, param_refs: block0, return_type: type0, body: {block2}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/return/no_value.carbon b/toolchain/semantics/testdata/return/no_value.carbon index e5e170534e8b..82006dcf99e6 100644 --- a/toolchain/semantics/testdata/return/no_value.carbon +++ b/toolchain/semantics/testdata/return/no_value.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, body: block2}, +// CHECK:STDOUT: {name: str0, param_refs: block0, body: {block2}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/return/struct.carbon b/toolchain/semantics/testdata/return/struct.carbon index 65fac5637c49..572c3d14c4d6 100644 --- a/toolchain/semantics/testdata/return/struct.carbon +++ b/toolchain/semantics/testdata/return/struct.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, return_type: type1, body: block3}, +// CHECK:STDOUT: {name: str0, param_refs: block0, return_type: type1, body: {block3}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 3, diff --git a/toolchain/semantics/testdata/return/value.carbon b/toolchain/semantics/testdata/return/value.carbon index 0ff6a508e770..2c9794371bd5 100644 --- a/toolchain/semantics/testdata/return/value.carbon +++ b/toolchain/semantics/testdata/return/value.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, return_type: type0, body: block2}, +// CHECK:STDOUT: {name: str0, param_refs: block0, return_type: type0, body: {block2}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 0, diff --git a/toolchain/semantics/testdata/var/decl.carbon b/toolchain/semantics/testdata/var/decl.carbon index 0c53f2358ddf..abce74aa048a 100644 --- a/toolchain/semantics/testdata/var/decl.carbon +++ b/toolchain/semantics/testdata/var/decl.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, body: block2}, +// CHECK:STDOUT: {name: str0, param_refs: block0, body: {block2}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/var/decl_with_init.carbon b/toolchain/semantics/testdata/var/decl_with_init.carbon index 11ce995185dc..3d304fd7f423 100644 --- a/toolchain/semantics/testdata/var/decl_with_init.carbon +++ b/toolchain/semantics/testdata/var/decl_with_init.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, body: block2}, +// CHECK:STDOUT: {name: str0, param_refs: block0, body: {block2}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 0, diff --git a/toolchain/semantics/testdata/var/fail_duplicate_decl.carbon b/toolchain/semantics/testdata/var/fail_duplicate_decl.carbon index 8bffb7594543..4e798a595443 100644 --- a/toolchain/semantics/testdata/var/fail_duplicate_decl.carbon +++ b/toolchain/semantics/testdata/var/fail_duplicate_decl.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, body: block2}, +// CHECK:STDOUT: {name: str0, param_refs: block0, body: {block2}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 0, diff --git a/toolchain/semantics/testdata/var/fail_init_type_mismatch.carbon b/toolchain/semantics/testdata/var/fail_init_type_mismatch.carbon index 271d841c7cb0..84085dbda003 100644 --- a/toolchain/semantics/testdata/var/fail_init_type_mismatch.carbon +++ b/toolchain/semantics/testdata/var/fail_init_type_mismatch.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, body: block2}, +// CHECK:STDOUT: {name: str0, param_refs: block0, body: {block2}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/var/fail_init_with_self.carbon b/toolchain/semantics/testdata/var/fail_init_with_self.carbon index 735ee05bfcb5..e412dae4b5a0 100644 --- a/toolchain/semantics/testdata/var/fail_init_with_self.carbon +++ b/toolchain/semantics/testdata/var/fail_init_with_self.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, body: block2}, +// CHECK:STDOUT: {name: str0, param_refs: block0, body: {block2}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/var/fail_lookup_outside_scope.carbon b/toolchain/semantics/testdata/var/fail_lookup_outside_scope.carbon index 5601a4c60677..d2627d2a83a7 100644 --- a/toolchain/semantics/testdata/var/fail_lookup_outside_scope.carbon +++ b/toolchain/semantics/testdata/var/fail_lookup_outside_scope.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, body: block2}, +// CHECK:STDOUT: {name: str0, param_refs: block0, body: {block2}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/var/fail_storage_is_literal.carbon b/toolchain/semantics/testdata/var/fail_storage_is_literal.carbon index 7e9abccc736b..6319595e33c5 100644 --- a/toolchain/semantics/testdata/var/fail_storage_is_literal.carbon +++ b/toolchain/semantics/testdata/var/fail_storage_is_literal.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, body: block2}, +// CHECK:STDOUT: {name: str0, param_refs: block0, body: {block2}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 1, diff --git a/toolchain/semantics/testdata/var/global_lookup_in_scope.carbon b/toolchain/semantics/testdata/var/global_lookup_in_scope.carbon index 85fb16803896..567752b4fbb5 100644 --- a/toolchain/semantics/testdata/var/global_lookup_in_scope.carbon +++ b/toolchain/semantics/testdata/var/global_lookup_in_scope.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str1, param_refs: block0, body: block2}, +// CHECK:STDOUT: {name: str1, param_refs: block0, body: {block2}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 0, diff --git a/toolchain/semantics/testdata/var/lookup.carbon b/toolchain/semantics/testdata/var/lookup.carbon index f629107e8b3a..8b14ffab2d69 100644 --- a/toolchain/semantics/testdata/var/lookup.carbon +++ b/toolchain/semantics/testdata/var/lookup.carbon @@ -5,7 +5,7 @@ // AUTOUPDATE // CHECK:STDOUT: cross_reference_irs_size: 1 // CHECK:STDOUT: functions: [ -// CHECK:STDOUT: {name: str0, param_refs: block0, body: block2}, +// CHECK:STDOUT: {name: str0, param_refs: block0, body: {block2}}}, // CHECK:STDOUT: ] // CHECK:STDOUT: integer_literals: [ // CHECK:STDOUT: 0,