From 32e8fee4ad826f1f1d1e391c5c8a760e1a4dd0d2 Mon Sep 17 00:00:00 2001 From: Jon Ross-Perkins Date: Tue, 28 Feb 2023 11:30:20 -0800 Subject: [PATCH] Add initial lowering of a trivial function (#2640) This is starting to build out actual lowering logic, for a really simple `fn Main() -> i32 { return 0; }` Notes for achieving this: - In semantics, currently function names are bound separate from the signature. When emitting IR, this turns out to be inconvenient because we want to know the name when we process the declaration and the definition. This change addresses that by merging the name into the FunctionDeclaration node, which is also accessible from the definition. It removes the separate BindName. This should be the cause of all the test changes in semantics, because the IR generated changes. - Add a "Lowering" class which I'm using to hold the llvm builder state. This class now has minimal support for the SemanticsIR generated by the above example. - In the "Lowering", values from expressions are stored in a DenseMap. I'll keep thinking about whether there's a cleaner way to achieve this, and I'd call it a temporary solution for now. However, this is how the `0` in `return 0` gets properly associated across SemanticsIR instructions, and it'll frequently be an issue in less trivial cases. --- toolchain/driver/driver.cpp | 6 + toolchain/lowering/BUILD | 17 +- toolchain/lowering/lower_to_llvm.cpp | 8 +- toolchain/lowering/lower_to_llvm.h | 1 - toolchain/lowering/lowering.cpp | 156 ++++++++++++++++++ toolchain/lowering/lowering.h | 79 +++++++++ .../testdata/basics/fail_in_semantics.carbon | 10 ++ .../lowering/testdata/basics/zero.carbon | 17 ++ toolchain/semantics/semantics_ir.h | 48 ++++-- toolchain/semantics/semantics_node.h | 12 +- .../semantics_parse_tree_handler.cpp | 49 +++--- .../semantics/semantics_parse_tree_handler.h | 8 +- .../testdata/basics/fail_name_lookup.carbon | 4 +- .../semantics/testdata/basics/verbose.carbon | 2 +- .../function/call/fail_param_count.carbon | 82 +++++---- .../function/call/fail_param_type.carbon | 14 +- .../function/call/more_param_ir.carbon | 30 ++-- .../testdata/function/call/params_one.carbon | 26 ++- .../function/call/params_one_comma.carbon | 30 ++-- .../testdata/function/call/params_two.carbon | 24 ++- .../function/call/params_two_comma.carbon | 30 ++-- .../testdata/function/call/params_zero.carbon | 12 +- .../fail_param_name_conflict.carbon | 4 +- .../testdata/function/definition/order.carbon | 16 +- .../function/definition/params_one.carbon | 4 +- .../definition/params_one_comma.carbon | 4 +- .../function/definition/params_two.carbon | 4 +- .../definition/params_two_comma.carbon | 4 +- .../function/definition/params_zero.carbon | 4 +- .../definition/same_param_name.carbon | 22 +-- .../testdata/operators/binary_op.carbon | 12 +- .../operators/fail_type_mismatch.carbon | 12 +- .../operators/fail_type_mismatch_once.carbon | 14 +- .../testdata/return/fail_type_mismatch.carbon | 10 +- .../return/fail_value_disallowed.carbon | 10 +- .../testdata/return/fail_value_missing.carbon | 8 +- .../semantics/testdata/return/no_value.carbon | 8 +- .../semantics/testdata/return/value.carbon | 10 +- toolchain/semantics/testdata/var/decl.carbon | 10 +- .../testdata/var/decl_with_init.carbon | 12 +- .../testdata/var/fail_duplicate_decl.carbon | 16 +- .../var/fail_init_type_mismatch.carbon | 12 +- .../testdata/var/fail_init_with_self.carbon | 12 +- .../var/fail_lookup_outside_scope.carbon | 14 +- .../var/global_lookup_in_scope.carbon | 12 +- .../semantics/testdata/var/lookup.carbon | 12 +- 46 files changed, 570 insertions(+), 341 deletions(-) create mode 100644 toolchain/lowering/lowering.cpp create mode 100644 toolchain/lowering/lowering.h create mode 100644 toolchain/lowering/testdata/basics/fail_in_semantics.carbon create mode 100644 toolchain/lowering/testdata/basics/zero.carbon diff --git a/toolchain/driver/driver.cpp b/toolchain/driver/driver.cpp index e7ab7b22742c..5e444491a3e7 100644 --- a/toolchain/driver/driver.cpp +++ b/toolchain/driver/driver.cpp @@ -209,6 +209,12 @@ auto Driver::RunDumpSubcommand(DiagnosticConsumer& consumer, } CARBON_VLOG() << "semantics_ir: " << semantics_ir; + // Unlike previous steps, errors block further progress. + if (has_errors) { + CARBON_VLOG() << "Unable to dump llvm-ir due to prior errors."; + return false; + } + CARBON_VLOG() << "*** LowerToLLVM ***\n"; llvm::LLVMContext llvm_context; const std::unique_ptr module = diff --git a/toolchain/lowering/BUILD b/toolchain/lowering/BUILD index 4d8a70f96d70..feb011966ad6 100644 --- a/toolchain/lowering/BUILD +++ b/toolchain/lowering/BUILD @@ -9,10 +9,23 @@ cc_library( srcs = ["lower_to_llvm.cpp"], hdrs = ["lower_to_llvm.h"], deps = [ - "//common:check", - "//common:ostream", + ":lowering", "//toolchain/semantics:semantics_ir", "@llvm-project//llvm:Core", "@llvm-project//llvm:Support", ], ) + +cc_library( + name = "lowering", + srcs = ["lowering.cpp"], + hdrs = ["lowering.h"], + deps = [ + "//common:check", + "//toolchain/semantics:semantics_ir", + "//toolchain/semantics:semantics_node", + "//toolchain/semantics:semantics_node_kind", + "@llvm-project//llvm:Core", + "@llvm-project//llvm:Support", + ], +) diff --git a/toolchain/lowering/lower_to_llvm.cpp b/toolchain/lowering/lower_to_llvm.cpp index 294140e4a84f..f2bae57b9e4e 100644 --- a/toolchain/lowering/lower_to_llvm.cpp +++ b/toolchain/lowering/lower_to_llvm.cpp @@ -4,13 +4,15 @@ #include "toolchain/lowering/lower_to_llvm.h" +#include "toolchain/lowering/lowering.h" + namespace Carbon { auto LowerToLLVM(llvm::LLVMContext& llvm_context, llvm::StringRef module_name, - const SemanticsIR& /*semantics_ir*/) + const SemanticsIR& semantics_ir) -> std::unique_ptr { - auto result = std::make_unique(module_name, llvm_context); - return result; + Lowering lowering(llvm_context, module_name, semantics_ir); + return lowering.Run(); } } // namespace Carbon diff --git a/toolchain/lowering/lower_to_llvm.h b/toolchain/lowering/lower_to_llvm.h index 1c02ff6a7c18..57b63abe02fc 100644 --- a/toolchain/lowering/lower_to_llvm.h +++ b/toolchain/lowering/lower_to_llvm.h @@ -5,7 +5,6 @@ #ifndef CARBON_TOOLCHAIN_LOWERING_LOWER_TO_LLVM_H_ #define CARBON_TOOLCHAIN_LOWERING_LOWER_TO_LLVM_H_ -#include "common/ostream.h" #include "llvm/IR/LLVMContext.h" #include "llvm/IR/Module.h" #include "toolchain/semantics/semantics_ir.h" diff --git a/toolchain/lowering/lowering.cpp b/toolchain/lowering/lowering.cpp new file mode 100644 index 000000000000..8446bc1e8247 --- /dev/null +++ b/toolchain/lowering/lowering.cpp @@ -0,0 +1,156 @@ +// 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 + +#include "toolchain/lowering/lowering.h" + +#include "toolchain/semantics/semantics_ir.h" + +namespace Carbon { + +Lowering::Lowering(llvm::LLVMContext& llvm_context, llvm::StringRef module_name, + const SemanticsIR& semantics_ir) + : llvm_context_(&llvm_context), + llvm_module_(std::make_unique(module_name, llvm_context)), + builder_(llvm_context), + semantics_ir_(&semantics_ir) { + CARBON_CHECK(!semantics_ir.has_errors()) + << "Generating LLVM IR from invalid SemanticsIR is unsupported."; +} + +auto Lowering::Run() -> std::unique_ptr { + CARBON_CHECK(llvm_module_) << "Run can only be called once."; + + LowerBlock(semantics_ir_->top_node_block_id()); + + while (!todo_blocks_.empty()) { + auto [llvm_block, block_id] = todo_blocks_.pop_back_val(); + builder_.SetInsertPoint(llvm_block); + LowerBlock(block_id); + } + + return std::move(llvm_module_); +} + +auto Lowering::LowerBlock(SemanticsNodeBlockId block_id) -> void { + for (const auto& node_id : semantics_ir_->GetNodeBlock(block_id)) { + auto node = semantics_ir_->GetNode(node_id); + switch (node.kind()) { +#define CARBON_SEMANTICS_NODE_KIND(Name) \ + case SemanticsNodeKind::Name: \ + Handle##Name##Node(node_id, node); \ + break; +#include "toolchain/semantics/semantics_node_kind.def" + } + } +} + +auto Lowering::HandleInvalidNode(SemanticsNodeId /*node_id*/, + SemanticsNode /*node*/) -> void { + llvm_unreachable("never in actual IR"); +} + +auto Lowering::HandleCrossReferenceNode(SemanticsNodeId /*node_id*/, + SemanticsNode node) -> void { + CARBON_FATAL() << "TODO: Add support: " << node; +} + +auto Lowering::HandleAssignNode(SemanticsNodeId /*node_id*/, SemanticsNode node) + -> void { + CARBON_FATAL() << "TODO: Add support: " << node; +} + +auto Lowering::HandleBinaryOperatorAddNode(SemanticsNodeId /*node_id*/, + SemanticsNode node) -> void { + CARBON_FATAL() << "TODO: Add support: " << node; +} + +auto Lowering::HandleBindNameNode(SemanticsNodeId /*node_id*/, + SemanticsNode node) -> void { + CARBON_FATAL() << "TODO: Add support: " << node; +} + +auto Lowering::HandleBuiltinNode(SemanticsNodeId /*node_id*/, + SemanticsNode node) -> void { + CARBON_FATAL() << "TODO: Add support: " << node; +} + +auto Lowering::HandleCallNode(SemanticsNodeId /*node_id*/, SemanticsNode node) + -> void { + CARBON_FATAL() << "TODO: Add support: " << node; +} + +auto Lowering::HandleCodeBlockNode(SemanticsNodeId /*node_id*/, + SemanticsNode node) -> void { + CARBON_FATAL() << "TODO: Add support: " << node; +} + +auto Lowering::HandleFunctionDeclarationNode(SemanticsNodeId /*node_id*/, + SemanticsNode node) -> void { + auto [name_id, callable_id] = node.GetAsFunctionDeclaration(); + auto callable = semantics_ir_->GetCallable(callable_id); + llvm::SmallVector args; + // Note, when handling non-empty parameters, we'll also want to set names. + CARBON_CHECK(callable.param_refs_id == SemanticsNodeBlockId::Empty) + << "TODO: Handle non-empty parameters."; + CARBON_CHECK(callable.return_type_id == SemanticsNodeId::BuiltinIntegerType) + << "TODO: Handle non-i32 return types."; + llvm::Type* return_type = builder_.getInt32Ty(); + llvm::FunctionType* function_type = + llvm::FunctionType::get(return_type, args, /*isVarArg=*/false); + llvm::Function::Create(function_type, llvm::Function::ExternalLinkage, + semantics_ir_->GetString(name_id), llvm_module_.get()); + // TODO: Name arguments. +} + +auto Lowering::HandleFunctionDefinitionNode(SemanticsNodeId /*node_id*/, + SemanticsNode node) -> void { + auto [declaration_id, body_block_id] = node.GetAsFunctionDefinition(); + auto [name_id, callable_id] = + semantics_ir_->GetNode(declaration_id).GetAsFunctionDeclaration(); + + llvm::Function* function = + llvm_module_->getFunction(semantics_ir_->GetString(name_id)); + + // Create a new basic block to start insertion into. + llvm::BasicBlock* body = + llvm::BasicBlock::Create(*llvm_context_, "entry", function); + todo_blocks_.push_back({body, body_block_id}); +} + +auto Lowering::HandleIntegerLiteralNode(SemanticsNodeId node_id, + SemanticsNode node) -> void { + SemanticsIntegerLiteralId int_id = node.GetAsIntegerLiteral(); + llvm::APInt i = semantics_ir_->GetIntegerLiteral(int_id); + llvm::Value* v = + llvm::ConstantInt::get(builder_.getInt32Ty(), i.getLimitedValue()); + node_values_[node_id] = v; +} + +auto Lowering::HandleRealLiteralNode(SemanticsNodeId /*node_id*/, + SemanticsNode node) -> void { + CARBON_FATAL() << "TODO: Add support: " << node; +} + +auto Lowering::HandleReturnNode(SemanticsNodeId /*node_id*/, SemanticsNode node) + -> void { + CARBON_FATAL() << "TODO: Add support: " << node; +} + +auto Lowering::HandleReturnExpressionNode(SemanticsNodeId /*node_id*/, + SemanticsNode node) -> void { + SemanticsNodeId expr_id = node.GetAsReturnExpression(); + builder_.CreateRet(node_values_[expr_id]); +} + +auto Lowering::HandleStringLiteralNode(SemanticsNodeId /*node_id*/, + SemanticsNode node) -> void { + CARBON_FATAL() << "TODO: Add support: " << node; +} + +auto Lowering::HandleVarStorageNode(SemanticsNodeId /*node_id*/, + SemanticsNode node) -> void { + CARBON_FATAL() << "TODO: Add support: " << node; +} + +} // namespace Carbon diff --git a/toolchain/lowering/lowering.h b/toolchain/lowering/lowering.h new file mode 100644 index 000000000000..9f1822e8300b --- /dev/null +++ b/toolchain/lowering/lowering.h @@ -0,0 +1,79 @@ +// 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_H_ +#define CARBON_TOOLCHAIN_LOWERING_LOWERING_H_ + +#include "llvm/IR/IRBuilder.h" +#include "llvm/IR/LLVMContext.h" +#include "llvm/IR/Module.h" +#include "toolchain/semantics/semantics_ir.h" +#include "toolchain/semantics/semantics_node.h" + +namespace Carbon { + +// Use LowerToLLVM rather than calling this directly. +// +// This carries state for lowering. `Run()` should only be called once, and +// handles the main execution. +class Lowering { + public: + explicit Lowering(llvm::LLVMContext& llvm_context, + llvm::StringRef module_name, + const SemanticsIR& semantics_ir); + + // Lowers the SemanticsIR to LLVM IR. + auto Run() -> std::unique_ptr; + + private: + // Provides DenseMapInfo for SemanticsNodeId. + struct SemanticsNodeIdMapInfo { + static inline auto getEmptyKey() -> SemanticsNodeId { + return SemanticsNodeId(llvm::DenseMapInfo::getEmptyKey()); + } + static inline auto getTombstoneKey() -> SemanticsNodeId { + return SemanticsNodeId(llvm::DenseMapInfo::getTombstoneKey()); + } + + static auto getHashValue(const SemanticsNodeId& val) -> unsigned { + return llvm::DenseMapInfo::getHashValue(val.index); + } + + static auto isEqual(const SemanticsNodeId& lhs, const SemanticsNodeId& rhs) + -> bool { + return lhs == rhs; + } + }; + + // Declare handlers for each SemanticsIR node. +#define CARBON_SEMANTICS_NODE_KIND(Name) \ + auto Handle##Name##Node(SemanticsNodeId node_id, SemanticsNode node)->void; +#include "toolchain/semantics/semantics_node_kind.def" + + // Runs lowering for a block. + auto LowerBlock(SemanticsNodeBlockId block_id) -> void; + + // State for building the LLVM IR. + llvm::LLVMContext* llvm_context_; + std::unique_ptr llvm_module_; + llvm::IRBuilder<> builder_; + + // The input Semantics IR. + const SemanticsIR* const semantics_ir_; + + // Blocks which we've observed and need to lower. + llvm::SmallVector> + todo_blocks_; + + // A mapping of nodes to designated values. + // TODO: It might be worth considering other approaches, or at least if we + // stick with this we'll probably want to clean up nodes as they leave scope. + // However, for now, it's handy to make things work. + llvm::DenseMap + node_values_; +}; + +} // namespace Carbon + +#endif // CARBON_TOOLCHAIN_LOWERING_LOWERING_H_ diff --git a/toolchain/lowering/testdata/basics/fail_in_semantics.carbon b/toolchain/lowering/testdata/basics/fail_in_semantics.carbon new file mode 100644 index 000000000000..09341a1deb86 --- /dev/null +++ b/toolchain/lowering/testdata/basics/fail_in_semantics.carbon @@ -0,0 +1,10 @@ +// 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 +// +// This validates that earlier errors prevent lowering, without crashing. +// AUTOUPDATE +// RUN: %{not} %{carbon-run-lowering} + +// CHECK:STDERR: {{.*}}/toolchain/lowering/testdata/basics/fail_in_semantics.carbon:[[@LINE+1]]:17: Type mismatch: lhs is node2, rhs is node3 +var x: i32 = 1.0; diff --git a/toolchain/lowering/testdata/basics/zero.carbon b/toolchain/lowering/testdata/basics/zero.carbon new file mode 100644 index 000000000000..26ad83f6bce5 --- /dev/null +++ b/toolchain/lowering/testdata/basics/zero.carbon @@ -0,0 +1,17 @@ +// 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 +// +// AUTOUPDATE +// RUN: %{carbon-run-lowering} +// CHECK:STDOUT: ; ModuleID = '{{.*}}/toolchain/lowering/testdata/basics/zero.carbon' +// CHECK:STDOUT: source_filename = "{{.*}}/toolchain/lowering/testdata/basics/zero.carbon" +// CHECK-EMPTY: +// CHECK:STDOUT: define i32 @Main() { +// CHECK:STDOUT: entry: +// CHECK:STDOUT: ret i32 0 +// CHECK:STDOUT: } + +fn Main() -> i32 { + return 0; +} diff --git a/toolchain/semantics/semantics_ir.h b/toolchain/semantics/semantics_ir.h index 5e5457145e01..0cc6eae15ae1 100644 --- a/toolchain/semantics/semantics_ir.h +++ b/toolchain/semantics/semantics_ir.h @@ -77,6 +77,37 @@ class SemanticsIR { // Prints the full IR. auto Print(llvm::raw_ostream& out) const -> void; + // Returns the requested callable. + auto GetCallable(SemanticsCallableId callable_id) const -> SemanticsCallable { + return callables_[callable_id.index]; + } + + // Returns the requested integer literal. + auto GetIntegerLiteral(SemanticsIntegerLiteralId int_id) const + -> const llvm::APInt& { + return integer_literals_[int_id.index]; + } + + // Returns the requested node. + auto GetNode(SemanticsNodeId node_id) const -> SemanticsNode { + return nodes_[node_id.index]; + } + + // Returns the requested node block. + auto GetNodeBlock(SemanticsNodeBlockId block_id) const + -> const llvm::SmallVector& { + return node_blocks_[block_id.index]; + } + + // Returns the requested string. + auto GetString(SemanticsStringId string_id) const -> llvm::StringRef { + return strings_[string_id.index]; + } + + auto top_node_block_id() const -> SemanticsNodeBlockId { + return top_node_block_id_; + } + // Returns true if there were errors creating the semantics IR. auto has_errors() const -> bool { return has_errors_; } @@ -103,11 +134,6 @@ class SemanticsIR { return id; } - // Returns the requested callable. - auto GetCallable(SemanticsCallableId callable_id) -> SemanticsCallable { - return callables_[callable_id.index]; - } - // Adds an integer literal, returning an ID to reference it. auto AddIntegerLiteral(llvm::APInt integer_literal) -> SemanticsIntegerLiteralId { @@ -125,11 +151,6 @@ class SemanticsIR { return node_id; } - // Returns the requested node. - auto GetNode(SemanticsNodeId node_id) const -> const SemanticsNode& { - return nodes_[node_id.index]; - } - // Returns the type of the requested node. auto GetType(SemanticsNodeId node_id) -> SemanticsNodeId { return GetNode(node_id).type(); @@ -159,7 +180,7 @@ class SemanticsIR { // Adds an string, returning an ID to reference it. auto AddString(llvm::StringRef str) -> SemanticsStringId { // If the string has already been stored, return the corresponding ID. - if (auto existing_id = GetString(str)) { + if (auto existing_id = GetStringID(str)) { return *existing_id; } @@ -171,7 +192,7 @@ class SemanticsIR { } // Returns an ID for the string if it's previously been stored. - auto GetString(llvm::StringRef str) -> std::optional { + auto GetStringID(llvm::StringRef str) -> std::optional { auto str_find = string_to_id_.find(str); if (str_find != string_to_id_.end()) { return str_find->second; @@ -209,6 +230,9 @@ class SemanticsIR { // Storage for blocks within the IR. These reference entries in nodes_. llvm::SmallVector> node_blocks_; + + // The top node block ID. + SemanticsNodeBlockId top_node_block_id_ = SemanticsNodeBlockId::Invalid; }; } // namespace Carbon diff --git a/toolchain/semantics/semantics_node.h b/toolchain/semantics/semantics_node.h index 252f5333253f..78bfc6ece5ef 100644 --- a/toolchain/semantics/semantics_node.h +++ b/toolchain/semantics/semantics_node.h @@ -203,16 +203,18 @@ class SemanticsNode { return {SemanticsCrossReferenceIRId(arg0_), SemanticsNodeId(arg1_)}; } - // TODO: The signature should be added as a parameter. static auto MakeFunctionDeclaration(ParseTree::Node parse_node, - SemanticsCallableId signature) + SemanticsStringId name_id, + SemanticsCallableId signature_id) -> SemanticsNode { return SemanticsNode(parse_node, SemanticsNodeKind::FunctionDeclaration, - SemanticsNodeId::Invalid, signature.index); + SemanticsNodeId::Invalid, name_id.index, + signature_id.index); } - auto GetAsFunctionDeclaration() const -> SemanticsCallableId { + auto GetAsFunctionDeclaration() const + -> std::pair { CARBON_CHECK(kind_ == SemanticsNodeKind::FunctionDeclaration); - return {SemanticsCallableId(arg0_)}; + return {SemanticsStringId(arg0_), SemanticsCallableId(arg1_)}; } static auto MakeFunctionDefinition(ParseTree::Node parse_node, diff --git a/toolchain/semantics/semantics_parse_tree_handler.cpp b/toolchain/semantics/semantics_parse_tree_handler.cpp index 6f65c2599601..53b958a5aba4 100644 --- a/toolchain/semantics/semantics_parse_tree_handler.cpp +++ b/toolchain/semantics/semantics_parse_tree_handler.cpp @@ -62,7 +62,7 @@ auto SemanticsParseTreeHandler::Build() -> void { } // Pop information for the file-level scope. - node_block_stack_.Pop(); + semantics_->top_node_block_id_ = node_block_stack_.Pop(); PopScope(); // Information in all the various context objects should be cleaned up as @@ -87,16 +87,10 @@ auto SemanticsParseTreeHandler::AddNodeAndPush(ParseTree::Node parse_node, node_stack_.Push(parse_node, node_id); } -auto SemanticsParseTreeHandler::BindName(ParseTree::Node name_node, - SemanticsNodeId type_id, - SemanticsNodeId target_id) - -> SemanticsStringId { - CARBON_CHECK(parse_tree_->node_kind(name_node) == ParseNodeKind::DeclaredName) - << parse_tree_->node_kind(name_node); - auto name_str = parse_tree_->GetNodeText(name_node); - auto name_id = semantics_->AddString(name_str); - - AddNode(SemanticsNode::MakeBindName(name_node, type_id, name_id, target_id)); +auto SemanticsParseTreeHandler::AddNameToLookup(ParseTree::Node name_node, + SemanticsStringId name_id, + SemanticsNodeId target_id) + -> void { auto [it, inserted] = current_scope().names.insert(name_id); if (inserted) { name_lookup_[name_id].push_back(target_id); @@ -107,10 +101,23 @@ auto SemanticsParseTreeHandler::BindName(ParseTree::Node name_node, auto prev_def_id = name_lookup_[name_id].back(); auto prev_def = semantics_->GetNode(prev_def_id); - emitter_->Build(name_node, NameRedefined, name_str) + emitter_->Build(name_node, NameRedefined, semantics_->GetString(name_id)) .Note(prev_def.parse_node(), PreviousDefinition) .Emit(); } +} + +auto SemanticsParseTreeHandler::BindName(ParseTree::Node name_node, + SemanticsNodeId type_id, + SemanticsNodeId target_id) + -> SemanticsStringId { + CARBON_CHECK(parse_tree_->node_kind(name_node) == ParseNodeKind::DeclaredName) + << parse_tree_->node_kind(name_node); + auto name_str = parse_tree_->GetNodeText(name_node); + auto name_id = semantics_->AddString(name_str); + + AddNode(SemanticsNode::MakeBindName(name_node, type_id, name_id, target_id)); + AddNameToLookup(name_node, name_id, target_id); return name_id; } @@ -319,7 +326,7 @@ auto SemanticsParseTreeHandler::HandleCallExpression(ParseTree::Node parse_node) return true; } - auto callable_id = name_node.GetAsFunctionDeclaration(); + auto [_, callable_id] = name_node.GetAsFunctionDeclaration(); auto callable = semantics_->GetCallable(callable_id); if (!TryTypeConversionOnArgs(call_expr_parse_node, ir_id, refs_id, @@ -496,14 +503,16 @@ auto SemanticsParseTreeHandler::HandleFunctionDefinitionStart( auto fn_node = node_stack_.PopForSoloParseNode(ParseNodeKind::FunctionIntroducer); + auto name_str = parse_tree_->GetNodeText(name_node); + auto name_id = semantics_->AddString(name_str); + auto callable_id = semantics_->AddCallable({.param_ir_id = param_ir_id, .param_refs_id = param_refs_id, .return_type_id = return_type_id}); - auto decl_id = - AddNode(SemanticsNode::MakeFunctionDeclaration(fn_node, callable_id)); - // TODO: Propagate the type of the function. - BindName(name_node, SemanticsNodeId::Invalid, decl_id); + auto decl_id = AddNode( + SemanticsNode::MakeFunctionDeclaration(fn_node, name_id, callable_id)); + AddNameToLookup(name_node, name_id, decl_id); node_block_stack_.Push(); PushScope(); @@ -657,7 +666,7 @@ auto SemanticsParseTreeHandler::HandleNameReference(ParseTree::Node parse_node) node_stack_.Push(parse_node, SemanticsNodeId::BuiltinInvalidType); }; - auto name_id = semantics_->GetString(name_str); + auto name_id = semantics_->GetStringID(name_str); if (!name_id) { name_not_found(); return true; @@ -784,7 +793,7 @@ auto SemanticsParseTreeHandler::HandleReturnStatement( CARBON_CHECK(!return_scope_stack_.empty()); const auto& fn_node = semantics_->GetNode(return_scope_stack_.back()); const auto callable = - semantics_->GetCallable(fn_node.GetAsFunctionDeclaration()); + semantics_->GetCallable(fn_node.GetAsFunctionDeclaration().second); if (parse_tree_->node_kind(node_stack_.PeekParseNode()) == ParseNodeKind::ReturnStatementStart) { @@ -937,7 +946,7 @@ auto SemanticsParseTreeHandler::HandleVariableDeclaration( auto binding = node_stack_.PopForParseNodeAndNameId(); // Restore the name now that the initializer is complete. - AddNameToLookup(binding.second, storage_id); + ReaddNameToLookup(binding.second, storage_id); auto storage_type = TryTypeConversion(parse_node, storage_id, last_child.second, diff --git a/toolchain/semantics/semantics_parse_tree_handler.h b/toolchain/semantics/semantics_parse_tree_handler.h index f007b2b261a7..20b0ed73488b 100644 --- a/toolchain/semantics/semantics_parse_tree_handler.h +++ b/toolchain/semantics/semantics_parse_tree_handler.h @@ -79,9 +79,13 @@ class SemanticsParseTreeHandler { // result. auto AddNodeAndPush(ParseTree::Node parse_node, SemanticsNode node) -> void; - // Adds a name to name lookup. This is typically done through BindName, but + // Adds a name to name lookup. + auto AddNameToLookup(ParseTree::Node name_node, SemanticsStringId name_id, + SemanticsNodeId target_id) -> void; + + // Re-adds a name to name lookup. This is typically done through BindName, but // can also be used to restore removed names. - auto AddNameToLookup(SemanticsStringId name_id, SemanticsNodeId storage_id) + auto ReaddNameToLookup(SemanticsStringId name_id, SemanticsNodeId storage_id) -> void { name_lookup_[name_id].push_back(storage_id); } diff --git a/toolchain/semantics/testdata/basics/fail_name_lookup.carbon b/toolchain/semantics/testdata/basics/fail_name_lookup.carbon index d128345ddd1a..2bd74150409f 100644 --- a/toolchain/semantics/testdata/basics/fail_name_lookup.carbon +++ b/toolchain/semantics/testdata/basics/fail_name_lookup.carbon @@ -25,8 +25,7 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node5, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block0}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ @@ -35,7 +34,6 @@ // CHECK:STDOUT: [ // CHECK:STDOUT: node7, // CHECK:STDOUT: node8, -// CHECK:STDOUT: node9, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/basics/verbose.carbon b/toolchain/semantics/testdata/basics/verbose.carbon index 8fdbef83c6f8..13dd078e5804 100644 --- a/toolchain/semantics/testdata/basics/verbose.carbon +++ b/toolchain/semantics/testdata/basics/verbose.carbon @@ -7,7 +7,7 @@ // // Only checks a couple statements in order to minimize manual update churn. // CHECK:STDERR: Node Push 0: FunctionIntroducer -> -// CHECK:STDERR: AddNode block{{[0-9]+}}: {kind: BindName, arg0: str{{[0-9]+}}, arg1: node{{[0-9]+}}} +// CHECK:STDERR: AddNode block{{[0-9]+}}: {kind: FunctionDeclaration, arg0: str{{[0-9]+}}, arg1: callable{{[0-9]+}}} fn Foo() { return; diff --git a/toolchain/semantics/testdata/function/call/fail_param_count.carbon b/toolchain/semantics/testdata/function/call/fail_param_count.carbon index 11b3ea1dcd96..bc571f33a600 100644 --- a/toolchain/semantics/testdata/function/call/fail_param_count.carbon +++ b/toolchain/semantics/testdata/function/call/fail_param_count.carbon @@ -39,30 +39,26 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node5, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block0}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node10, type: node2}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1}, -// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node12}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node12, arg1: block0}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9, type: node2}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable1}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block0}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node15, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node13, type: node2}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str3, arg1: node17, type: node2}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable2}, -// CHECK:STDOUT: {kind: BindName, arg0: str4, arg1: node19}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node19, arg1: block0}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable3}, -// CHECK:STDOUT: {kind: BindName, arg0: str5, arg1: node22}, +// CHECK:STDOUT: {kind: BindName, arg0: str3, arg1: node15, type: node2}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str4, arg1: callable2}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node17, arg1: block0}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str5, arg1: callable3}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int1, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int2, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int3, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int4, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int5, type: node2}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node22, arg1: block0}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node19, arg1: block0}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -70,61 +66,57 @@ // CHECK:STDOUT: [ // CHECK:STDOUT: node7, // CHECK:STDOUT: node8, -// CHECK:STDOUT: node9, +// CHECK:STDOUT: node11, // CHECK:STDOUT: node12, -// CHECK:STDOUT: node13, -// CHECK:STDOUT: node14, +// CHECK:STDOUT: node17, +// CHECK:STDOUT: node18, // CHECK:STDOUT: node19, -// CHECK:STDOUT: node20, -// CHECK:STDOUT: node21, -// CHECK:STDOUT: node22, -// CHECK:STDOUT: node23, -// CHECK:STDOUT: node30, +// CHECK:STDOUT: node26, +// CHECK:STDOUT: ], +// CHECK:STDOUT: [ +// CHECK:STDOUT: node9, +// CHECK:STDOUT: node10, // CHECK:STDOUT: ], // CHECK:STDOUT: [ // CHECK:STDOUT: node10, -// CHECK:STDOUT: node11, -// CHECK:STDOUT: ], -// CHECK:STDOUT: [ -// CHECK:STDOUT: node11, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// CHECK:STDOUT: node13, +// CHECK:STDOUT: node14, // CHECK:STDOUT: node15, // CHECK:STDOUT: node16, -// CHECK:STDOUT: node17, -// CHECK:STDOUT: node18, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// CHECK:STDOUT: node14, // CHECK:STDOUT: node16, -// CHECK:STDOUT: node18, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// CHECK:STDOUT: node20, +// CHECK:STDOUT: ], +// CHECK:STDOUT: [ +// CHECK:STDOUT: node20, +// CHECK:STDOUT: ], +// CHECK:STDOUT: [ +// CHECK:STDOUT: node21, +// CHECK:STDOUT: node22, +// CHECK:STDOUT: ], +// CHECK:STDOUT: [ +// CHECK:STDOUT: node21, +// CHECK:STDOUT: node22, +// CHECK:STDOUT: ], +// CHECK:STDOUT: [ +// CHECK:STDOUT: node23, // CHECK:STDOUT: node24, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// CHECK:STDOUT: node23, // CHECK:STDOUT: node24, // CHECK:STDOUT: ], // CHECK:STDOUT: [ // CHECK:STDOUT: node25, -// CHECK:STDOUT: node26, // CHECK:STDOUT: ], // CHECK:STDOUT: [ // CHECK:STDOUT: node25, -// CHECK:STDOUT: node26, -// CHECK:STDOUT: ], -// CHECK:STDOUT: [ -// CHECK:STDOUT: node27, -// CHECK:STDOUT: node28, -// CHECK:STDOUT: ], -// CHECK:STDOUT: [ -// CHECK:STDOUT: node27, -// CHECK:STDOUT: node28, -// CHECK:STDOUT: ], -// CHECK:STDOUT: [ -// CHECK:STDOUT: node29, -// CHECK:STDOUT: ], -// CHECK:STDOUT: [ -// CHECK:STDOUT: node29, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/call/fail_param_type.carbon b/toolchain/semantics/testdata/function/call/fail_param_type.carbon index 34a3ae929b3b..62d51b88e6fc 100644 --- a/toolchain/semantics/testdata/function/call/fail_param_type.carbon +++ b/toolchain/semantics/testdata/function/call/fail_param_type.carbon @@ -31,13 +31,11 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable0}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block0}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1}, -// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node12}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable1}, // CHECK:STDOUT: {kind: RealLiteral, arg0: real0, type: node3}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node12, arg1: block0}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block0}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -53,15 +51,13 @@ // CHECK:STDOUT: node9, // CHECK:STDOUT: node10, // CHECK:STDOUT: node11, -// CHECK:STDOUT: node12, // CHECK:STDOUT: node13, -// CHECK:STDOUT: node15, // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node14, +// CHECK:STDOUT: node12, // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node14, +// CHECK:STDOUT: node12, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/call/more_param_ir.carbon b/toolchain/semantics/testdata/function/call/more_param_ir.carbon index e42e68481f7d..1fb3da24f1f0 100644 --- a/toolchain/semantics/testdata/function/call/more_param_ir.carbon +++ b/toolchain/semantics/testdata/function/call/more_param_ir.carbon @@ -43,22 +43,20 @@ // CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9, type: node2}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, // CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node11, type: node2}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str3, arg1: node13}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str3, arg1: callable0}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node13, arg1: block0}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1}, -// CHECK:STDOUT: {kind: BindName, arg0: str4, arg1: node16}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str4, arg1: callable1}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int1, type: node2}, -// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node18, arg1: node19, type: node2}, +// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node16, arg1: node17, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int2, type: node2}, -// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node20, arg1: node21, type: node2}, +// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node18, arg1: node19, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int3, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int4, type: node2}, -// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node23, arg1: node24, type: node2}, +// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node21, arg1: node22, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int5, type: node2}, // CHECK:STDOUT: {kind: Call, arg0: call0, arg1: callable0, type: node6}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node16, arg1: block6}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node15, arg1: block6}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -80,11 +78,11 @@ // CHECK:STDOUT: node13, // CHECK:STDOUT: node14, // CHECK:STDOUT: node15, -// CHECK:STDOUT: node16, -// CHECK:STDOUT: node17, -// CHECK:STDOUT: node28, +// CHECK:STDOUT: node26, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// CHECK:STDOUT: node16, +// CHECK:STDOUT: node17, // CHECK:STDOUT: node18, // CHECK:STDOUT: node19, // CHECK:STDOUT: node20, @@ -92,16 +90,14 @@ // CHECK:STDOUT: node22, // CHECK:STDOUT: node23, // CHECK:STDOUT: node24, -// CHECK:STDOUT: node25, -// CHECK:STDOUT: node26, // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node22, -// CHECK:STDOUT: node25, -// CHECK:STDOUT: node26, +// CHECK:STDOUT: node20, +// CHECK:STDOUT: node23, +// CHECK:STDOUT: node24, // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node27, +// CHECK:STDOUT: node25, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/call/params_one.carbon b/toolchain/semantics/testdata/function/call/params_one.carbon index f5f91cd2c955..0eac29c1ad83 100644 --- a/toolchain/semantics/testdata/function/call/params_one.carbon +++ b/toolchain/semantics/testdata/function/call/params_one.carbon @@ -32,14 +32,12 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable0}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block0}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1}, -// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node12}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable1}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, // CHECK:STDOUT: {kind: Call, arg0: call0, arg1: callable0, type: node6}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node12, arg1: block6}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block6}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -55,18 +53,16 @@ // CHECK:STDOUT: node9, // CHECK:STDOUT: node10, // CHECK:STDOUT: node11, +// CHECK:STDOUT: node14, +// CHECK:STDOUT: ], +// CHECK:STDOUT: [ // CHECK:STDOUT: node12, +// CHECK:STDOUT: ], +// CHECK:STDOUT: [ +// CHECK:STDOUT: node12, +// CHECK:STDOUT: ], +// CHECK:STDOUT: [ // CHECK:STDOUT: node13, -// CHECK:STDOUT: node16, -// CHECK:STDOUT: ], -// CHECK:STDOUT: [ -// CHECK:STDOUT: node14, -// CHECK:STDOUT: ], -// CHECK:STDOUT: [ -// CHECK:STDOUT: node14, -// CHECK:STDOUT: ], -// CHECK:STDOUT: [ -// CHECK:STDOUT: node15, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/call/params_one_comma.carbon b/toolchain/semantics/testdata/function/call/params_one_comma.carbon index 0029b90ff012..9bd27db8ed10 100644 --- a/toolchain/semantics/testdata/function/call/params_one_comma.carbon +++ b/toolchain/semantics/testdata/function/call/params_one_comma.carbon @@ -34,16 +34,14 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable0}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block0}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1}, -// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node12}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable1}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, // CHECK:STDOUT: {kind: Call, arg0: call0, arg1: callable0, type: node6}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int1, type: node2}, // CHECK:STDOUT: {kind: Call, arg0: call1, arg1: callable0, type: node6}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node12, arg1: block6}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block6}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -59,25 +57,23 @@ // CHECK:STDOUT: node9, // CHECK:STDOUT: node10, // CHECK:STDOUT: node11, +// CHECK:STDOUT: node16, +// CHECK:STDOUT: ], +// CHECK:STDOUT: [ // CHECK:STDOUT: node12, +// CHECK:STDOUT: ], +// CHECK:STDOUT: [ +// CHECK:STDOUT: node12, +// CHECK:STDOUT: ], +// CHECK:STDOUT: [ // CHECK:STDOUT: node13, -// CHECK:STDOUT: node18, -// CHECK:STDOUT: ], -// CHECK:STDOUT: [ -// CHECK:STDOUT: node14, -// CHECK:STDOUT: ], -// CHECK:STDOUT: [ -// CHECK:STDOUT: node14, -// CHECK:STDOUT: ], -// CHECK:STDOUT: [ // CHECK:STDOUT: node15, -// CHECK:STDOUT: node17, // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node16, +// CHECK:STDOUT: node14, // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node16, +// CHECK:STDOUT: node14, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/call/params_two.carbon b/toolchain/semantics/testdata/function/call/params_two.carbon index ec5083df1463..e0f0e33b6beb 100644 --- a/toolchain/semantics/testdata/function/call/params_two.carbon +++ b/toolchain/semantics/testdata/function/call/params_two.carbon @@ -36,15 +36,13 @@ // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, // CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9, type: node2}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node11}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable0}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block0}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1}, -// CHECK:STDOUT: {kind: BindName, arg0: str3, arg1: node14}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str3, arg1: callable1}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int1, type: node2}, // CHECK:STDOUT: {kind: Call, arg0: call0, arg1: callable0, type: node6}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node14, arg1: block6}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node13, arg1: block6}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -63,20 +61,18 @@ // CHECK:STDOUT: node11, // CHECK:STDOUT: node12, // CHECK:STDOUT: node13, +// CHECK:STDOUT: node17, +// CHECK:STDOUT: ], +// CHECK:STDOUT: [ +// CHECK:STDOUT: node14, +// CHECK:STDOUT: node15, +// CHECK:STDOUT: ], +// CHECK:STDOUT: [ // CHECK:STDOUT: node14, // CHECK:STDOUT: node15, -// CHECK:STDOUT: node19, // CHECK:STDOUT: ], // CHECK:STDOUT: [ // CHECK:STDOUT: node16, -// CHECK:STDOUT: node17, -// CHECK:STDOUT: ], -// CHECK:STDOUT: [ -// CHECK:STDOUT: node16, -// CHECK:STDOUT: node17, -// CHECK:STDOUT: ], -// CHECK:STDOUT: [ -// CHECK:STDOUT: node18, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/call/params_two_comma.carbon b/toolchain/semantics/testdata/function/call/params_two_comma.carbon index 5cbf1743ac7a..c8459cbfdbd0 100644 --- a/toolchain/semantics/testdata/function/call/params_two_comma.carbon +++ b/toolchain/semantics/testdata/function/call/params_two_comma.carbon @@ -39,18 +39,16 @@ // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, // CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9, type: node2}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node11}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable0}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block0}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1}, -// CHECK:STDOUT: {kind: BindName, arg0: str3, arg1: node14}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str3, arg1: callable1}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int1, type: node2}, // CHECK:STDOUT: {kind: Call, arg0: call0, arg1: callable0, type: node6}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int2, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int3, type: node2}, // CHECK:STDOUT: {kind: Call, arg0: call1, arg1: callable0, type: node6}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node14, arg1: block6}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node13, arg1: block6}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -69,29 +67,27 @@ // CHECK:STDOUT: node11, // CHECK:STDOUT: node12, // CHECK:STDOUT: node13, +// CHECK:STDOUT: node20, +// CHECK:STDOUT: ], +// CHECK:STDOUT: [ +// CHECK:STDOUT: node14, +// CHECK:STDOUT: node15, +// CHECK:STDOUT: ], +// CHECK:STDOUT: [ // CHECK:STDOUT: node14, // CHECK:STDOUT: node15, -// CHECK:STDOUT: node22, // CHECK:STDOUT: ], // CHECK:STDOUT: [ // CHECK:STDOUT: node16, -// CHECK:STDOUT: node17, +// CHECK:STDOUT: node19, // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node16, // CHECK:STDOUT: node17, -// CHECK:STDOUT: ], -// CHECK:STDOUT: [ // CHECK:STDOUT: node18, -// CHECK:STDOUT: node21, // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node19, -// CHECK:STDOUT: node20, -// CHECK:STDOUT: ], -// CHECK:STDOUT: [ -// CHECK:STDOUT: node19, -// CHECK:STDOUT: node20, +// CHECK:STDOUT: node17, +// CHECK:STDOUT: node18, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/call/params_zero.carbon b/toolchain/semantics/testdata/function/call/params_zero.carbon index 3e5bb14df208..3d7fc10ad97d 100644 --- a/toolchain/semantics/testdata/function/call/params_zero.carbon +++ b/toolchain/semantics/testdata/function/call/params_zero.carbon @@ -28,13 +28,11 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node5, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block0}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node10}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable1}, // CHECK:STDOUT: {kind: Call, arg0: call0, arg1: callable0, type: node6}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node10, arg1: block2}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -43,12 +41,10 @@ // CHECK:STDOUT: node7, // CHECK:STDOUT: node8, // CHECK:STDOUT: node9, -// CHECK:STDOUT: node10, // CHECK:STDOUT: node11, -// CHECK:STDOUT: node13, // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node12, +// CHECK:STDOUT: node10, // CHECK:STDOUT: ], // 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 e1181da7d0c7..ce084b913299 100644 --- a/toolchain/semantics/testdata/function/definition/fail_param_name_conflict.carbon +++ b/toolchain/semantics/testdata/function/definition/fail_param_name_conflict.carbon @@ -30,8 +30,7 @@ // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node9, type: node2}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node11}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable0}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block0}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ @@ -50,7 +49,6 @@ // CHECK:STDOUT: [ // CHECK:STDOUT: node11, // CHECK:STDOUT: node12, -// CHECK:STDOUT: node13, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/definition/order.carbon b/toolchain/semantics/testdata/function/definition/order.carbon index 6dc6f29e0556..15a25cddb9f3 100644 --- a/toolchain/semantics/testdata/function/definition/order.carbon +++ b/toolchain/semantics/testdata/function/definition/order.carbon @@ -29,15 +29,12 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node5, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block0}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node10}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node10, arg1: block0}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable2}, -// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node13}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node13, arg1: block0}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable1}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block0}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable2}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block0}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -49,9 +46,6 @@ // CHECK:STDOUT: node10, // CHECK:STDOUT: node11, // CHECK:STDOUT: node12, -// CHECK:STDOUT: node13, -// CHECK:STDOUT: node14, -// CHECK:STDOUT: node15, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/definition/params_one.carbon b/toolchain/semantics/testdata/function/definition/params_one.carbon index 7f8924ef8d9c..ba16a42056cc 100644 --- a/toolchain/semantics/testdata/function/definition/params_one.carbon +++ b/toolchain/semantics/testdata/function/definition/params_one.carbon @@ -28,8 +28,7 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable0}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block0}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ @@ -45,7 +44,6 @@ // CHECK:STDOUT: [ // CHECK:STDOUT: node9, // CHECK:STDOUT: node10, -// CHECK:STDOUT: node11, // CHECK:STDOUT: ], // 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 9f37fbdce19a..c24653ca5f40 100644 --- a/toolchain/semantics/testdata/function/definition/params_one_comma.carbon +++ b/toolchain/semantics/testdata/function/definition/params_one_comma.carbon @@ -28,8 +28,7 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable0}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block0}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ @@ -45,7 +44,6 @@ // CHECK:STDOUT: [ // CHECK:STDOUT: node9, // CHECK:STDOUT: node10, -// CHECK:STDOUT: node11, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/definition/params_two.carbon b/toolchain/semantics/testdata/function/definition/params_two.carbon index be37d39d5813..bec066959655 100644 --- a/toolchain/semantics/testdata/function/definition/params_two.carbon +++ b/toolchain/semantics/testdata/function/definition/params_two.carbon @@ -31,8 +31,7 @@ // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, // CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9, type: node2}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node11}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable0}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block0}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ @@ -51,7 +50,6 @@ // CHECK:STDOUT: [ // CHECK:STDOUT: node11, // CHECK:STDOUT: node12, -// CHECK:STDOUT: node13, // CHECK:STDOUT: ], // 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 3515aa5ffa1c..f3bd53c4ea95 100644 --- a/toolchain/semantics/testdata/function/definition/params_two_comma.carbon +++ b/toolchain/semantics/testdata/function/definition/params_two_comma.carbon @@ -31,8 +31,7 @@ // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, // CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9, type: node2}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node11}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable0}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block0}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ @@ -51,7 +50,6 @@ // CHECK:STDOUT: [ // CHECK:STDOUT: node11, // CHECK:STDOUT: node12, -// CHECK:STDOUT: node13, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/function/definition/params_zero.carbon b/toolchain/semantics/testdata/function/definition/params_zero.carbon index 4ee21729d3ce..5f9dd9c0c18b 100644 --- a/toolchain/semantics/testdata/function/definition/params_zero.carbon +++ b/toolchain/semantics/testdata/function/definition/params_zero.carbon @@ -25,8 +25,7 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node5, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block0}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ @@ -35,7 +34,6 @@ // CHECK:STDOUT: [ // CHECK:STDOUT: node7, // CHECK:STDOUT: node8, -// CHECK:STDOUT: node9, // CHECK:STDOUT: ], // 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 51c6570199ee..b4d1f54209ca 100644 --- a/toolchain/semantics/testdata/function/definition/same_param_name.carbon +++ b/toolchain/semantics/testdata/function/definition/same_param_name.carbon @@ -30,14 +30,12 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable0}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node9, arg1: block0}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node12, type: node2}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable1}, -// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node14}, -// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node14, arg1: block0}, +// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node11, type: node2}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str2, arg1: callable1}, +// CHECK:STDOUT: {kind: FunctionDefinition, arg0: node13, arg1: block0}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ @@ -52,17 +50,15 @@ // CHECK:STDOUT: [ // CHECK:STDOUT: node9, // CHECK:STDOUT: node10, -// CHECK:STDOUT: node11, +// CHECK:STDOUT: node13, // CHECK:STDOUT: node14, -// CHECK:STDOUT: node15, -// CHECK:STDOUT: node16, +// CHECK:STDOUT: ], +// CHECK:STDOUT: [ +// CHECK:STDOUT: node11, +// CHECK:STDOUT: node12, // CHECK:STDOUT: ], // CHECK:STDOUT: [ // CHECK:STDOUT: node12, -// CHECK:STDOUT: node13, -// CHECK:STDOUT: ], -// CHECK:STDOUT: [ -// CHECK:STDOUT: node13, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/operators/binary_op.carbon b/toolchain/semantics/testdata/operators/binary_op.carbon index 302886f8659b..14a8f7c6c07a 100644 --- a/toolchain/semantics/testdata/operators/binary_op.carbon +++ b/toolchain/semantics/testdata/operators/binary_op.carbon @@ -27,12 +27,11 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node5, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int1, type: node2}, -// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node9, arg1: node10, type: node2}, -// CHECK:STDOUT: {kind: ReturnExpression, arg0: node11, type: node2}, +// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node8, arg1: node9, type: node2}, +// CHECK:STDOUT: {kind: ReturnExpression, arg0: node10, type: node2}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ @@ -40,14 +39,13 @@ // CHECK:STDOUT: ], // CHECK:STDOUT: [ // CHECK:STDOUT: node7, -// CHECK:STDOUT: node8, -// CHECK:STDOUT: node13, +// CHECK:STDOUT: node12, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// 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/operators/fail_type_mismatch.carbon b/toolchain/semantics/testdata/operators/fail_type_mismatch.carbon index a031b830dc12..846c5ba82ba5 100644 --- a/toolchain/semantics/testdata/operators/fail_type_mismatch.carbon +++ b/toolchain/semantics/testdata/operators/fail_type_mismatch.carbon @@ -27,12 +27,11 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node5, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, // CHECK:STDOUT: {kind: RealLiteral, arg0: real0, type: node3}, -// 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: node7, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ @@ -40,14 +39,13 @@ // CHECK:STDOUT: ], // CHECK:STDOUT: [ // CHECK:STDOUT: node7, -// CHECK:STDOUT: node8, -// CHECK:STDOUT: node13, +// CHECK:STDOUT: node12, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// 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/operators/fail_type_mismatch_once.carbon b/toolchain/semantics/testdata/operators/fail_type_mismatch_once.carbon index a6c985504c73..1501fd73cda9 100644 --- a/toolchain/semantics/testdata/operators/fail_type_mismatch_once.carbon +++ b/toolchain/semantics/testdata/operators/fail_type_mismatch_once.carbon @@ -28,14 +28,13 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node5, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, // CHECK:STDOUT: {kind: RealLiteral, arg0: real0, type: node3}, -// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node9, arg1: node10, type: node1}, +// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node8, arg1: node9, type: node1}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int1, type: node2}, -// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node11, arg1: node12, type: node1}, -// CHECK:STDOUT: {kind: ReturnExpression, arg0: node13, type: node1}, +// CHECK:STDOUT: {kind: BinaryOperatorAdd, arg0: node10, arg1: node11, type: node1}, +// CHECK:STDOUT: {kind: ReturnExpression, arg0: node12, type: node1}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ @@ -43,16 +42,15 @@ // CHECK:STDOUT: ], // CHECK:STDOUT: [ // CHECK:STDOUT: node7, -// CHECK:STDOUT: node8, -// CHECK:STDOUT: node15, +// CHECK:STDOUT: node14, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// CHECK:STDOUT: node8, // CHECK:STDOUT: node9, // CHECK:STDOUT: node10, // CHECK:STDOUT: node11, // CHECK:STDOUT: node12, // CHECK:STDOUT: node13, -// CHECK:STDOUT: node14, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/return/fail_type_mismatch.carbon b/toolchain/semantics/testdata/return/fail_type_mismatch.carbon index 938b0b5a8648..2a6ad8900e19 100644 --- a/toolchain/semantics/testdata/return/fail_type_mismatch.carbon +++ b/toolchain/semantics/testdata/return/fail_type_mismatch.carbon @@ -26,10 +26,9 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node5, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0}, // CHECK:STDOUT: {kind: RealLiteral, arg0: real0, type: node3}, -// CHECK:STDOUT: {kind: ReturnExpression, arg0: node9}, +// CHECK:STDOUT: {kind: ReturnExpression, arg0: node8}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ @@ -37,12 +36,11 @@ // CHECK:STDOUT: ], // CHECK:STDOUT: [ // CHECK:STDOUT: node7, -// CHECK:STDOUT: node8, -// CHECK:STDOUT: node11, +// CHECK:STDOUT: node10, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// CHECK:STDOUT: node8, // CHECK:STDOUT: node9, -// CHECK:STDOUT: node10, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/return/fail_value_disallowed.carbon b/toolchain/semantics/testdata/return/fail_value_disallowed.carbon index 441080d13334..4a47f4845ffd 100644 --- a/toolchain/semantics/testdata/return/fail_value_disallowed.carbon +++ b/toolchain/semantics/testdata/return/fail_value_disallowed.carbon @@ -26,10 +26,9 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node5, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, -// CHECK:STDOUT: {kind: ReturnExpression, arg0: node9, type: node2}, +// CHECK:STDOUT: {kind: ReturnExpression, arg0: node8, type: node2}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ @@ -37,12 +36,11 @@ // CHECK:STDOUT: ], // CHECK:STDOUT: [ // CHECK:STDOUT: node7, -// CHECK:STDOUT: node8, -// CHECK:STDOUT: node11, +// CHECK:STDOUT: node10, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// CHECK:STDOUT: node8, // CHECK:STDOUT: node9, -// CHECK:STDOUT: node10, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/return/fail_value_missing.carbon b/toolchain/semantics/testdata/return/fail_value_missing.carbon index 82154a3a9a50..d63d0d108fc1 100644 --- a/toolchain/semantics/testdata/return/fail_value_missing.carbon +++ b/toolchain/semantics/testdata/return/fail_value_missing.carbon @@ -25,8 +25,7 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node5, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0}, // CHECK:STDOUT: {kind: Return}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block2}, // CHECK:STDOUT: ] @@ -35,11 +34,10 @@ // CHECK:STDOUT: ], // CHECK:STDOUT: [ // CHECK:STDOUT: node7, -// CHECK:STDOUT: node8, -// CHECK:STDOUT: node10, +// CHECK:STDOUT: node9, // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node9, +// CHECK:STDOUT: node8, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/return/no_value.carbon b/toolchain/semantics/testdata/return/no_value.carbon index 6f12061e2141..ebf6d2823d68 100644 --- a/toolchain/semantics/testdata/return/no_value.carbon +++ b/toolchain/semantics/testdata/return/no_value.carbon @@ -25,8 +25,7 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node5, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0}, // CHECK:STDOUT: {kind: Return}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block2}, // CHECK:STDOUT: ] @@ -35,11 +34,10 @@ // CHECK:STDOUT: ], // CHECK:STDOUT: [ // CHECK:STDOUT: node7, -// CHECK:STDOUT: node8, -// CHECK:STDOUT: node10, +// CHECK:STDOUT: node9, // CHECK:STDOUT: ], // CHECK:STDOUT: [ -// CHECK:STDOUT: node9, +// CHECK:STDOUT: node8, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/return/value.carbon b/toolchain/semantics/testdata/return/value.carbon index af072dbcbf47..9eb046fcb81e 100644 --- a/toolchain/semantics/testdata/return/value.carbon +++ b/toolchain/semantics/testdata/return/value.carbon @@ -26,10 +26,9 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node5, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, -// CHECK:STDOUT: {kind: ReturnExpression, arg0: node9, type: node2}, +// CHECK:STDOUT: {kind: ReturnExpression, arg0: node8, type: node2}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ @@ -37,12 +36,11 @@ // CHECK:STDOUT: ], // CHECK:STDOUT: [ // CHECK:STDOUT: node7, -// CHECK:STDOUT: node8, -// CHECK:STDOUT: node11, +// CHECK:STDOUT: node10, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// CHECK:STDOUT: node8, // CHECK:STDOUT: node9, -// CHECK:STDOUT: node10, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/var/decl.carbon b/toolchain/semantics/testdata/var/decl.carbon index 8cdba32ffc43..9a9ee691aef7 100644 --- a/toolchain/semantics/testdata/var/decl.carbon +++ b/toolchain/semantics/testdata/var/decl.carbon @@ -26,10 +26,9 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node5, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node8, type: node2}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ @@ -37,12 +36,11 @@ // CHECK:STDOUT: ], // CHECK:STDOUT: [ // CHECK:STDOUT: node7, -// CHECK:STDOUT: node8, -// CHECK:STDOUT: node11, +// CHECK:STDOUT: node10, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// CHECK:STDOUT: node8, // CHECK:STDOUT: node9, -// CHECK:STDOUT: node10, // 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 f49e5e895ec2..17b0a4708fec 100644 --- a/toolchain/semantics/testdata/var/decl_with_init.carbon +++ b/toolchain/semantics/testdata/var/decl_with_init.carbon @@ -27,12 +27,11 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node5, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node8, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, -// CHECK:STDOUT: {kind: Assign, arg0: node9, arg1: node11, type: node2}, +// CHECK:STDOUT: {kind: Assign, arg0: node8, arg1: node10, type: node2}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ @@ -40,14 +39,13 @@ // CHECK:STDOUT: ], // CHECK:STDOUT: [ // CHECK:STDOUT: node7, -// CHECK:STDOUT: node8, -// CHECK:STDOUT: node13, +// CHECK:STDOUT: node12, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// 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/var/fail_duplicate_decl.carbon b/toolchain/semantics/testdata/var/fail_duplicate_decl.carbon index d8db652310b7..10e68ce0ca4d 100644 --- a/toolchain/semantics/testdata/var/fail_duplicate_decl.carbon +++ b/toolchain/semantics/testdata/var/fail_duplicate_decl.carbon @@ -28,16 +28,15 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node5, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node8, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, -// CHECK:STDOUT: {kind: Assign, arg0: node9, arg1: node11, type: node2}, +// CHECK:STDOUT: {kind: Assign, arg0: node8, arg1: node10, type: node2}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node13, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node12, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int1, type: node2}, -// CHECK:STDOUT: {kind: Assign, arg0: node9, arg1: node15, type: node2}, +// CHECK:STDOUT: {kind: Assign, arg0: node8, arg1: node14, type: node2}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ @@ -45,10 +44,10 @@ // CHECK:STDOUT: ], // CHECK:STDOUT: [ // CHECK:STDOUT: node7, -// CHECK:STDOUT: node8, -// CHECK:STDOUT: node17, +// CHECK:STDOUT: node16, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// CHECK:STDOUT: node8, // CHECK:STDOUT: node9, // CHECK:STDOUT: node10, // CHECK:STDOUT: node11, @@ -56,7 +55,6 @@ // CHECK:STDOUT: node13, // CHECK:STDOUT: node14, // CHECK:STDOUT: node15, -// CHECK:STDOUT: node16, // 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 2ff6b45864b2..cb8cdbab9674 100644 --- a/toolchain/semantics/testdata/var/fail_init_type_mismatch.carbon +++ b/toolchain/semantics/testdata/var/fail_init_type_mismatch.carbon @@ -27,12 +27,11 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node5, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node8, type: node2}, // CHECK:STDOUT: {kind: RealLiteral, arg0: real0, type: node3}, -// CHECK:STDOUT: {kind: Assign, arg0: node9, arg1: node11, type: node1}, +// CHECK:STDOUT: {kind: Assign, arg0: node8, arg1: node10, type: node1}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ @@ -40,14 +39,13 @@ // CHECK:STDOUT: ], // CHECK:STDOUT: [ // CHECK:STDOUT: node7, -// CHECK:STDOUT: node8, -// CHECK:STDOUT: node13, +// CHECK:STDOUT: node12, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// 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/var/fail_init_with_self.carbon b/toolchain/semantics/testdata/var/fail_init_with_self.carbon index b2b50f58d3ad..e4a8994b89b7 100644 --- a/toolchain/semantics/testdata/var/fail_init_with_self.carbon +++ b/toolchain/semantics/testdata/var/fail_init_with_self.carbon @@ -26,11 +26,10 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node5, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9, type: node2}, -// CHECK:STDOUT: {kind: Assign, arg0: node9, arg1: node1, type: node1}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node8, type: node2}, +// CHECK:STDOUT: {kind: Assign, arg0: node8, arg1: node1, type: node1}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ @@ -38,13 +37,12 @@ // CHECK:STDOUT: ], // CHECK:STDOUT: [ // CHECK:STDOUT: node7, -// CHECK:STDOUT: node8, -// CHECK:STDOUT: node12, +// CHECK:STDOUT: node11, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// CHECK:STDOUT: node8, // CHECK:STDOUT: node9, // CHECK:STDOUT: node10, -// CHECK:STDOUT: node11, // 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 700233513b07..102c184b8b3d 100644 --- a/toolchain/semantics/testdata/var/fail_lookup_outside_scope.carbon +++ b/toolchain/semantics/testdata/var/fail_lookup_outside_scope.carbon @@ -27,29 +27,27 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node5, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node8, type: node2}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block2}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node12, type: node2}, -// CHECK:STDOUT: {kind: Assign, arg0: node12, arg1: node1, type: node1}, +// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node11, type: node2}, +// CHECK:STDOUT: {kind: Assign, arg0: node11, arg1: node1, type: node1}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ // CHECK:STDOUT: [ // CHECK:STDOUT: ], // CHECK:STDOUT: [ // CHECK:STDOUT: node7, -// CHECK:STDOUT: node8, +// CHECK:STDOUT: node10, // CHECK:STDOUT: node11, // CHECK:STDOUT: node12, // CHECK:STDOUT: node13, -// CHECK:STDOUT: node14, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// CHECK:STDOUT: node8, // CHECK:STDOUT: node9, -// CHECK:STDOUT: node10, // 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 93ca1d5dd021..7a0025f3bd6d 100644 --- a/toolchain/semantics/testdata/var/global_lookup_in_scope.carbon +++ b/toolchain/semantics/testdata/var/global_lookup_in_scope.carbon @@ -32,11 +32,10 @@ // CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, // CHECK:STDOUT: {kind: Assign, arg0: node7, arg1: node9, type: node2}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node11}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str1, arg1: callable0}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node13, type: node2}, -// CHECK:STDOUT: {kind: Assign, arg0: node13, arg1: node7, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str2, arg1: node12, type: node2}, +// CHECK:STDOUT: {kind: Assign, arg0: node12, arg1: node7, type: node2}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node11, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ @@ -48,13 +47,12 @@ // CHECK:STDOUT: node9, // CHECK:STDOUT: node10, // CHECK:STDOUT: node11, -// CHECK:STDOUT: node12, -// CHECK:STDOUT: node16, +// CHECK:STDOUT: node15, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// CHECK:STDOUT: node12, // CHECK:STDOUT: node13, // CHECK:STDOUT: node14, -// CHECK:STDOUT: node15, // CHECK:STDOUT: ], // CHECK:STDOUT: ] diff --git a/toolchain/semantics/testdata/var/lookup.carbon b/toolchain/semantics/testdata/var/lookup.carbon index 0d0104b27149..ad23a6145514 100644 --- a/toolchain/semantics/testdata/var/lookup.carbon +++ b/toolchain/semantics/testdata/var/lookup.carbon @@ -27,12 +27,11 @@ // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node4, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node5, type: node0}, // CHECK:STDOUT: {kind: CrossReference, arg0: ir0, arg1: node6, type: node5}, -// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: callable0}, -// CHECK:STDOUT: {kind: BindName, arg0: str0, arg1: node7}, +// CHECK:STDOUT: {kind: FunctionDeclaration, arg0: str0, arg1: callable0}, // CHECK:STDOUT: {kind: VarStorage, type: node2}, -// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node9, type: node2}, +// CHECK:STDOUT: {kind: BindName, arg0: str1, arg1: node8, type: node2}, // CHECK:STDOUT: {kind: IntegerLiteral, arg0: int0, type: node2}, -// CHECK:STDOUT: {kind: Assign, arg0: node9, arg1: node11, type: node2}, +// CHECK:STDOUT: {kind: Assign, arg0: node8, arg1: node10, type: node2}, // CHECK:STDOUT: {kind: FunctionDefinition, arg0: node7, arg1: block2}, // CHECK:STDOUT: ] // CHECK:STDOUT: node_blocks: [ @@ -40,14 +39,13 @@ // CHECK:STDOUT: ], // CHECK:STDOUT: [ // CHECK:STDOUT: node7, -// CHECK:STDOUT: node8, -// CHECK:STDOUT: node13, +// CHECK:STDOUT: node12, // CHECK:STDOUT: ], // CHECK:STDOUT: [ +// CHECK:STDOUT: node8, // CHECK:STDOUT: node9, // CHECK:STDOUT: node10, // CHECK:STDOUT: node11, -// CHECK:STDOUT: node12, // CHECK:STDOUT: ], // CHECK:STDOUT: ]