From 94cbb9d9173b57cfaf23c245377b516e89f4233e Mon Sep 17 00:00:00 2001 From: Jon Ross-Perkins Date: Fri, 27 Jan 2023 11:46:12 -0800 Subject: [PATCH] Make function definitions allocate the body more lazily. (#2557) Lazy allocation means that we can use a single node block for _all_ empty node blocks. The change in timing for when the definition node is emitted shouldn't affect semantic correctness; the signature is already present for recursive calls. --- .../semantics/semantics_node_block_stack.cpp | 12 ------------ .../semantics/semantics_node_block_stack.h | 4 ---- .../semantics/semantics_parse_tree_handler.cpp | 17 ++++++----------- .../testdata/basics/fail_name_lookup.carbon | 4 +--- .../semantics/testdata/function/basic.carbon | 4 +--- .../semantics/testdata/function/order.carbon | 12 +++--------- .../testdata/function/params_one.carbon | 4 +--- .../testdata/function/params_one_comma.carbon | 4 +--- .../testdata/function/params_two.carbon | 4 +--- .../testdata/function/params_two_comma.carbon | 4 +--- .../testdata/operators/binary_op.carbon | 10 +++++----- .../operators/fail_type_mismatch.carbon | 10 +++++----- .../operators/fail_type_mismatch_once.carbon | 12 ++++++------ .../semantics/testdata/return/literal.carbon | 8 ++++---- .../semantics/testdata/return/trivial.carbon | 6 +++--- toolchain/semantics/testdata/var/decl.carbon | 8 ++++---- .../testdata/var/decl_with_init.carbon | 10 +++++----- .../testdata/var/fail_duplicate_decl.carbon | 14 +++++++------- .../testdata/var/fail_init_type_mismatch.carbon | 10 +++++----- .../testdata/var/fail_init_with_self.carbon | 10 +++++----- .../var/fail_lookup_outside_scope.carbon | 8 ++++---- .../testdata/var/global_lookup_in_scope.carbon | 10 +++++----- toolchain/semantics/testdata/var/lookup.carbon | 10 +++++----- 23 files changed, 78 insertions(+), 117 deletions(-) diff --git a/toolchain/semantics/semantics_node_block_stack.cpp b/toolchain/semantics/semantics_node_block_stack.cpp index 0c681d066bb5..065cea06c4c1 100644 --- a/toolchain/semantics/semantics_node_block_stack.cpp +++ b/toolchain/semantics/semantics_node_block_stack.cpp @@ -16,18 +16,6 @@ auto SemanticsNodeBlockStack::Push() -> void { stack_.push_back(SemanticsNodeBlockId::Invalid); } -auto SemanticsNodeBlockStack::PushWithUnconditionalAlloc() - -> SemanticsNodeBlockId { - SemanticsNodeBlockId block_id(node_blocks_->size()); - CARBON_VLOG() << "NodeBlock Push " << stack_.size() << ": " << block_id - << "\n"; - CARBON_CHECK(stack_.size() < (1 << 20)) - << "Excessive stack size: likely infinite loop"; - node_blocks_->resize(block_id.index + 1); - stack_.push_back(block_id); - return block_id; -} - auto SemanticsNodeBlockStack::PeekForAdd() -> SemanticsNodeBlockId { auto& back = stack_.back(); if (!back.is_valid()) { diff --git a/toolchain/semantics/semantics_node_block_stack.h b/toolchain/semantics/semantics_node_block_stack.h index 6ea5a81f4723..47faca91c580 100644 --- a/toolchain/semantics/semantics_node_block_stack.h +++ b/toolchain/semantics/semantics_node_block_stack.h @@ -27,10 +27,6 @@ class SemanticsNodeBlockStack { // order to support lazy allocation. auto Push() -> void; - // Pushes a new node block. - // TODO: Try to remove this in favor of the lazy alloc in Push. - auto PushWithUnconditionalAlloc() -> SemanticsNodeBlockId; - // Peeks at the top node block. This does not trigger lazy allocation, so the // returned node block may be invalid. auto Peek() -> SemanticsNodeBlockId { return stack_.back(); } diff --git a/toolchain/semantics/semantics_parse_tree_handler.cpp b/toolchain/semantics/semantics_parse_tree_handler.cpp index 187428dac7db..b0d8522baf5c 100644 --- a/toolchain/semantics/semantics_parse_tree_handler.cpp +++ b/toolchain/semantics/semantics_parse_tree_handler.cpp @@ -306,10 +306,12 @@ auto SemanticsParseTreeHandler::HandleFunctionDefinition( ParseNodeKind::FunctionDefinitionStart) { node_stack_.PopAndIgnore(); } - node_stack_.PopAndIgnore(); + auto decl_id = + node_stack_.PopForNodeId(ParseNodeKind::FunctionDefinitionStart); PopScope(); - node_block_stack_.Pop(); + auto block_id = node_block_stack_.Pop(); + AddNode(SemanticsNode::MakeFunctionDefinition(parse_node, decl_id, block_id)); node_stack_.Push(parse_node); return true; @@ -332,16 +334,9 @@ auto SemanticsParseTreeHandler::HandleFunctionDefinitionStart( // TODO: Propagate the type of the function. BindName(name_node, SemanticsNodeId::MakeInvalid(), decl_id); - // TODO: Consider approaches that allow lazy creation of the definition block. - auto outer_block = node_block_stack_.PeekForAdd(); - auto def_block = node_block_stack_.PushWithUnconditionalAlloc(); - auto node = - SemanticsNode::MakeFunctionDefinition(parse_node, decl_id, def_block); - CARBON_VLOG() << "AddNode " << outer_block << ": " << node << "\n"; - semantics_->AddNode(outer_block, node); - + node_block_stack_.Push(); PushScope(); - node_stack_.Push(parse_node); + node_stack_.Push(parse_node, decl_id); return true; } diff --git a/toolchain/semantics/testdata/basics/fail_name_lookup.carbon b/toolchain/semantics/testdata/basics/fail_name_lookup.carbon index 81c818fc8a4a..35343e75b74b 100644 --- a/toolchain/semantics/testdata/basics/fail_name_lookup.carbon +++ b/toolchain/semantics/testdata/basics/fail_name_lookup.carbon @@ -20,7 +20,7 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: block3, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block0}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -30,8 +30,6 @@ // CHECK:STDOUT: node5, // CHECK:STDOUT: node6, // CHECK:STDOUT: ], -// CHECK:STDOUT: [ -// CHECK:STDOUT: ], // CHECK:STDOUT: ] fn Main() { diff --git a/toolchain/semantics/testdata/function/basic.carbon b/toolchain/semantics/testdata/function/basic.carbon index 4f2fc3260d87..f9d509720d6d 100644 --- a/toolchain/semantics/testdata/function/basic.carbon +++ b/toolchain/semantics/testdata/function/basic.carbon @@ -20,7 +20,7 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: block3, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block0}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -30,8 +30,6 @@ // CHECK:STDOUT: node5, // CHECK:STDOUT: node6, // CHECK:STDOUT: ], -// CHECK:STDOUT: [ -// CHECK:STDOUT: ], // CHECK:STDOUT: ] fn Foo() {} diff --git a/toolchain/semantics/testdata/function/order.carbon b/toolchain/semantics/testdata/function/order.carbon index da3c12efc682..b1f859911462 100644 --- a/toolchain/semantics/testdata/function/order.carbon +++ b/toolchain/semantics/testdata/function/order.carbon @@ -24,13 +24,13 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: block3, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1}, // CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node7}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block3}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable2}, // CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node10}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node10, arg1: block4}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node10, arg1: block0}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -46,12 +46,6 @@ // CHECK:STDOUT: node11, // CHECK:STDOUT: node12, // CHECK:STDOUT: ], -// CHECK:STDOUT: [ -// CHECK:STDOUT: ], -// CHECK:STDOUT: [ -// CHECK:STDOUT: ], -// CHECK:STDOUT: [ -// CHECK:STDOUT: ], // CHECK:STDOUT: ] fn Foo() {} diff --git a/toolchain/semantics/testdata/function/params_one.carbon b/toolchain/semantics/testdata/function/params_one.carbon index d7297b79451d..514452536f6a 100644 --- a/toolchain/semantics/testdata/function/params_one.carbon +++ b/toolchain/semantics/testdata/function/params_one.carbon @@ -23,7 +23,7 @@ // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4, type: node2}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, // CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node6}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node6, arg1: block4}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node6, arg1: block0}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -40,8 +40,6 @@ // CHECK:STDOUT: node7, // CHECK:STDOUT: node8, // CHECK:STDOUT: ], -// CHECK:STDOUT: [ -// CHECK:STDOUT: ], // CHECK:STDOUT: ] fn Foo(a: i32) {} diff --git a/toolchain/semantics/testdata/function/params_one_comma.carbon b/toolchain/semantics/testdata/function/params_one_comma.carbon index 755180d27c23..50ee09c292c8 100644 --- a/toolchain/semantics/testdata/function/params_one_comma.carbon +++ b/toolchain/semantics/testdata/function/params_one_comma.carbon @@ -23,7 +23,7 @@ // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4, type: node2}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, // CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node6}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node6, arg1: block4}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node6, arg1: block0}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -40,8 +40,6 @@ // CHECK:STDOUT: node7, // CHECK:STDOUT: node8, // CHECK:STDOUT: ], -// CHECK:STDOUT: [ -// CHECK:STDOUT: ], // CHECK:STDOUT: ] fn Foo(a: i32,) {} diff --git a/toolchain/semantics/testdata/function/params_two.carbon b/toolchain/semantics/testdata/function/params_two.carbon index b25f1c896207..1258b476d80b 100644 --- a/toolchain/semantics/testdata/function/params_two.carbon +++ b/toolchain/semantics/testdata/function/params_two.carbon @@ -26,7 +26,7 @@ // CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node6, type: node2}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, // CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node8}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node8, arg1: block4}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node8, arg1: block0}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -46,8 +46,6 @@ // CHECK:STDOUT: node9, // CHECK:STDOUT: node10, // CHECK:STDOUT: ], -// CHECK:STDOUT: [ -// CHECK:STDOUT: ], // CHECK:STDOUT: ] fn Foo(a: i32, b: i32) {} diff --git a/toolchain/semantics/testdata/function/params_two_comma.carbon b/toolchain/semantics/testdata/function/params_two_comma.carbon index c2184a7a93ed..14a989f0fd98 100644 --- a/toolchain/semantics/testdata/function/params_two_comma.carbon +++ b/toolchain/semantics/testdata/function/params_two_comma.carbon @@ -26,7 +26,7 @@ // CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node6, type: node2}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, // CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node8}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node8, arg1: block4}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node8, arg1: block0}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -46,8 +46,6 @@ // CHECK:STDOUT: node9, // CHECK:STDOUT: node10, // CHECK:STDOUT: ], -// CHECK:STDOUT: [ -// CHECK:STDOUT: ], // CHECK:STDOUT: ] fn Foo(a: i32, b: i32,) {} diff --git a/toolchain/semantics/testdata/operators/binary_op.carbon b/toolchain/semantics/testdata/operators/binary_op.carbon index 6a4a5a5baaf3..4988e99087b7 100644 --- a/toolchain/semantics/testdata/operators/binary_op.carbon +++ b/toolchain/semantics/testdata/operators/binary_op.carbon @@ -22,11 +22,11 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: block3, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int1, type: node2}, -// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node7, arg1: node8, type: node2}, -// CHECK:STDOUT: {kind: ReturnExpression, arg0: node9, type: node2}, +// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node6, arg1: node7, type: node2}, +// CHECK:STDOUT: {kind: ReturnExpression, arg0: node8, type: node2}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -34,13 +34,13 @@ // CHECK:STDOUT: [ // CHECK:STDOUT: node4, // CHECK:STDOUT: node5, -// CHECK:STDOUT: node6, +// CHECK:STDOUT: node10, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// CHECK:STDOUT: node6, // CHECK:STDOUT: node7, // CHECK:STDOUT: node8, // CHECK:STDOUT: node9, -// CHECK:STDOUT: node10, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/operators/fail_type_mismatch.carbon b/toolchain/semantics/testdata/operators/fail_type_mismatch.carbon index 9e062a73a1d6..611ea0b4b3f9 100644 --- a/toolchain/semantics/testdata/operators/fail_type_mismatch.carbon +++ b/toolchain/semantics/testdata/operators/fail_type_mismatch.carbon @@ -21,11 +21,11 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: block3, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, // CHECK:STDOUT: {kind: RealLiteral, type: node3}, -// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node7, arg1: node8, type: node1}, -// CHECK:STDOUT: {kind: ReturnExpression, arg0: node9, type: node1}, +// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node6, arg1: node7, type: node1}, +// CHECK:STDOUT: {kind: ReturnExpression, arg0: node8, type: node1}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -33,13 +33,13 @@ // CHECK:STDOUT: [ // CHECK:STDOUT: node4, // CHECK:STDOUT: node5, -// CHECK:STDOUT: node6, +// CHECK:STDOUT: node10, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// CHECK:STDOUT: node6, // CHECK:STDOUT: node7, // CHECK:STDOUT: node8, // CHECK:STDOUT: node9, -// CHECK:STDOUT: node10, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/operators/fail_type_mismatch_once.carbon b/toolchain/semantics/testdata/operators/fail_type_mismatch_once.carbon index ced8a124b8e5..cd8df7d6c2b2 100644 --- a/toolchain/semantics/testdata/operators/fail_type_mismatch_once.carbon +++ b/toolchain/semantics/testdata/operators/fail_type_mismatch_once.carbon @@ -22,13 +22,13 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: block3, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, // CHECK:STDOUT: {kind: RealLiteral, type: node3}, -// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node7, arg1: node8, type: node1}, +// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node6, arg1: node7, type: node1}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int1, type: node2}, -// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node9, arg1: node10, type: node1}, -// CHECK:STDOUT: {kind: ReturnExpression, arg0: node11, type: node1}, +// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node8, arg1: node9, type: node1}, +// CHECK:STDOUT: {kind: ReturnExpression, arg0: node10, type: node1}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -36,15 +36,15 @@ // CHECK:STDOUT: [ // CHECK:STDOUT: node4, // CHECK:STDOUT: node5, -// CHECK:STDOUT: node6, +// CHECK:STDOUT: node12, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// CHECK:STDOUT: node6, // CHECK:STDOUT: node7, // CHECK:STDOUT: node8, // CHECK:STDOUT: node9, // CHECK:STDOUT: node10, // CHECK:STDOUT: node11, -// CHECK:STDOUT: node12, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/return/literal.carbon b/toolchain/semantics/testdata/return/literal.carbon index e4533ac08693..7e3bad511916 100644 --- a/toolchain/semantics/testdata/return/literal.carbon +++ b/toolchain/semantics/testdata/return/literal.carbon @@ -21,9 +21,9 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: block3, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, -// CHECK:STDOUT: {kind: ReturnExpression, arg0: node7, type: node2}, +// CHECK:STDOUT: {kind: ReturnExpression, arg0: node6, type: node2}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -31,11 +31,11 @@ // CHECK:STDOUT: [ // CHECK:STDOUT: node4, // CHECK:STDOUT: node5, -// CHECK:STDOUT: node6, +// CHECK:STDOUT: node8, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// CHECK:STDOUT: node6, // CHECK:STDOUT: node7, -// CHECK:STDOUT: node8, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/return/trivial.carbon b/toolchain/semantics/testdata/return/trivial.carbon index dd6bc37b57cf..88e8b0035286 100644 --- a/toolchain/semantics/testdata/return/trivial.carbon +++ b/toolchain/semantics/testdata/return/trivial.carbon @@ -20,8 +20,8 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: block3, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, // CHECK:STDOUT: {kind: Return}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -29,10 +29,10 @@ // CHECK:STDOUT: [ // CHECK:STDOUT: node4, // CHECK:STDOUT: node5, -// CHECK:STDOUT: node6, +// CHECK:STDOUT: node7, // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node7, +// CHECK:STDOUT: node6, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/var/decl.carbon b/toolchain/semantics/testdata/var/decl.carbon index 66d1e6839ab7..ff400b8955dd 100644 --- a/toolchain/semantics/testdata/var/decl.carbon +++ b/toolchain/semantics/testdata/var/decl.carbon @@ -21,9 +21,9 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: block3, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node7, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node6, type: node2}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -31,11 +31,11 @@ // CHECK:STDOUT: [ // CHECK:STDOUT: node4, // CHECK:STDOUT: node5, -// CHECK:STDOUT: node6, +// CHECK:STDOUT: node8, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// CHECK:STDOUT: node6, // CHECK:STDOUT: node7, -// CHECK:STDOUT: node8, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/var/decl_with_init.carbon b/toolchain/semantics/testdata/var/decl_with_init.carbon index 6908c8a4faae..dbb781a3cb0d 100644 --- a/toolchain/semantics/testdata/var/decl_with_init.carbon +++ b/toolchain/semantics/testdata/var/decl_with_init.carbon @@ -22,11 +22,11 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: block3, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node7, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node6, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, -// CHECK:STDOUT: {kind: Assign, arg0: node7, arg1: node9, type: node2}, +// CHECK:STDOUT: {kind: Assign, arg0: node6, arg1: node8, type: node2}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -34,13 +34,13 @@ // CHECK:STDOUT: [ // CHECK:STDOUT: node4, // CHECK:STDOUT: node5, -// CHECK:STDOUT: node6, +// CHECK:STDOUT: node10, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// CHECK:STDOUT: node6, // CHECK:STDOUT: node7, // CHECK:STDOUT: node8, // CHECK:STDOUT: node9, -// CHECK:STDOUT: node10, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/var/fail_duplicate_decl.carbon b/toolchain/semantics/testdata/var/fail_duplicate_decl.carbon index 5bcdb3e13d20..d981268e7e00 100644 --- a/toolchain/semantics/testdata/var/fail_duplicate_decl.carbon +++ b/toolchain/semantics/testdata/var/fail_duplicate_decl.carbon @@ -23,15 +23,15 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: block3, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node7, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node6, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, -// CHECK:STDOUT: {kind: Assign, arg0: node7, arg1: node9, type: node2}, +// CHECK:STDOUT: {kind: Assign, arg0: node6, arg1: node8, type: node2}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node11, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node10, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int1, type: node2}, -// CHECK:STDOUT: {kind: Assign, arg0: node7, arg1: node13, type: node2}, +// CHECK:STDOUT: {kind: Assign, arg0: node6, arg1: node12, type: node2}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -39,9 +39,10 @@ // CHECK:STDOUT: [ // CHECK:STDOUT: node4, // CHECK:STDOUT: node5, -// CHECK:STDOUT: node6, +// CHECK:STDOUT: node14, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// CHECK:STDOUT: node6, // CHECK:STDOUT: node7, // CHECK:STDOUT: node8, // CHECK:STDOUT: node9, @@ -49,7 +50,6 @@ // CHECK:STDOUT: node11, // CHECK:STDOUT: node12, // CHECK:STDOUT: node13, -// CHECK:STDOUT: node14, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/var/fail_init_type_mismatch.carbon b/toolchain/semantics/testdata/var/fail_init_type_mismatch.carbon index ba84a916be47..3170715c90c9 100644 --- a/toolchain/semantics/testdata/var/fail_init_type_mismatch.carbon +++ b/toolchain/semantics/testdata/var/fail_init_type_mismatch.carbon @@ -21,11 +21,11 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: block3, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node7, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node6, type: node2}, // CHECK:STDOUT: {kind: RealLiteral, type: node3}, -// CHECK:STDOUT: {kind: Assign, arg0: node7, arg1: node9, type: node1}, +// CHECK:STDOUT: {kind: Assign, arg0: node6, arg1: node8, type: node1}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -33,13 +33,13 @@ // CHECK:STDOUT: [ // CHECK:STDOUT: node4, // CHECK:STDOUT: node5, -// CHECK:STDOUT: node6, +// CHECK:STDOUT: node10, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// CHECK:STDOUT: node6, // CHECK:STDOUT: node7, // CHECK:STDOUT: node8, // CHECK:STDOUT: node9, -// CHECK:STDOUT: node10, // CHECK:STDOUT: ], // 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 8db9d0b946a9..0cafed732e45 100644 --- a/toolchain/semantics/testdata/var/fail_init_with_self.carbon +++ b/toolchain/semantics/testdata/var/fail_init_with_self.carbon @@ -21,10 +21,10 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: block3, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node7, type: node2}, -// CHECK:STDOUT: {kind: Assign, arg0: node7, arg1: node1, type: node1}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node6, type: node2}, +// CHECK:STDOUT: {kind: Assign, arg0: node6, arg1: node1, type: node1}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -32,12 +32,12 @@ // CHECK:STDOUT: [ // CHECK:STDOUT: node4, // CHECK:STDOUT: node5, -// CHECK:STDOUT: node6, +// CHECK:STDOUT: node9, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// CHECK:STDOUT: node6, // CHECK:STDOUT: node7, // CHECK:STDOUT: node8, -// CHECK:STDOUT: node9, // CHECK:STDOUT: ], // 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 27948ec26b26..4790e3a905cd 100644 --- a/toolchain/semantics/testdata/var/fail_lookup_outside_scope.carbon +++ b/toolchain/semantics/testdata/var/fail_lookup_outside_scope.carbon @@ -22,9 +22,9 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: block3, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node7, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node6, type: node2}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, // CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node9, type: node2}, // CHECK:STDOUT: {kind: Assign, arg0: node9, arg1: node1, type: node1}, @@ -35,14 +35,14 @@ // CHECK:STDOUT: [ // CHECK:STDOUT: node4, // CHECK:STDOUT: node5, -// CHECK:STDOUT: node6, +// CHECK:STDOUT: node8, // CHECK:STDOUT: node9, // CHECK:STDOUT: node10, // CHECK:STDOUT: node11, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// CHECK:STDOUT: node6, // CHECK:STDOUT: node7, -// CHECK:STDOUT: node8, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/var/global_lookup_in_scope.carbon b/toolchain/semantics/testdata/var/global_lookup_in_scope.carbon index 0642b0710a62..38d52750b5e6 100644 --- a/toolchain/semantics/testdata/var/global_lookup_in_scope.carbon +++ b/toolchain/semantics/testdata/var/global_lookup_in_scope.carbon @@ -27,10 +27,10 @@ // CHECK:STDOUT: {kind: Assign, arg0: node4, arg1: node6, type: node2}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, // CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node8}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node8, arg1: block2}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node11, type: node2}, -// CHECK:STDOUT: {kind: Assign, arg0: node11, arg1: node4, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node10, type: node2}, +// CHECK:STDOUT: {kind: Assign, arg0: node10, arg1: node4, type: node2}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node8, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -42,12 +42,12 @@ // CHECK:STDOUT: node7, // CHECK:STDOUT: node8, // CHECK:STDOUT: node9, -// CHECK:STDOUT: node10, +// CHECK:STDOUT: node13, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// CHECK:STDOUT: node10, // CHECK:STDOUT: node11, // CHECK:STDOUT: node12, -// CHECK:STDOUT: node13, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/var/lookup.carbon b/toolchain/semantics/testdata/var/lookup.carbon index 1233b7758546..ec95c9701b7f 100644 --- a/toolchain/semantics/testdata/var/lookup.carbon +++ b/toolchain/semantics/testdata/var/lookup.carbon @@ -22,11 +22,11 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: block3, type: node0}, // CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node4}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node7, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node6, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, -// CHECK:STDOUT: {kind: Assign, arg0: node7, arg1: node9, type: node2}, +// CHECK:STDOUT: {kind: Assign, arg0: node6, arg1: node8, type: node2}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node4, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -34,13 +34,13 @@ // CHECK:STDOUT: [ // CHECK:STDOUT: node4, // CHECK:STDOUT: node5, -// CHECK:STDOUT: node6, +// CHECK:STDOUT: node10, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// CHECK:STDOUT: node6, // CHECK:STDOUT: node7, // CHECK:STDOUT: node8, // CHECK:STDOUT: node9, -// CHECK:STDOUT: node10, // CHECK:STDOUT: ], // CHECK:STDOUT: ]