From f992d4d960bf5a059cb431bd60ef52d9c4319698 Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Wed, 5 Jul 2023 15:09:50 -0700 Subject: [PATCH] Don't return SemanticsFunction by value. (#2968) It contains a vector, so it's not cheap to copy. Return by const reference instead. Thanks to @fasiddique for spotting this! --- toolchain/semantics/semantics_handle_call_expression.cpp | 2 +- toolchain/semantics/semantics_handle_statement.cpp | 2 +- toolchain/semantics/semantics_ir.h | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/toolchain/semantics/semantics_handle_call_expression.cpp b/toolchain/semantics/semantics_handle_call_expression.cpp index feccd1e62950..a25a6c766c80 100644 --- a/toolchain/semantics/semantics_handle_call_expression.cpp +++ b/toolchain/semantics/semantics_handle_call_expression.cpp @@ -24,7 +24,7 @@ auto SemanticsHandleCallExpression(SemanticsContext& context, } auto function_id = name_node.GetAsFunctionDeclaration(); - auto callable = context.semantics_ir().GetFunction(function_id); + const auto& callable = context.semantics_ir().GetFunction(function_id); CARBON_DIAGNOSTIC(NoMatchingCall, Error, "No matching callable was found."); auto diagnostic = diff --git a/toolchain/semantics/semantics_handle_statement.cpp b/toolchain/semantics/semantics_handle_statement.cpp index 2dfe35010c37..2811e7680122 100644 --- a/toolchain/semantics/semantics_handle_statement.cpp +++ b/toolchain/semantics/semantics_handle_statement.cpp @@ -22,7 +22,7 @@ auto SemanticsHandleReturnStatement(SemanticsContext& context, CARBON_CHECK(!context.return_scope_stack().empty()); const auto& fn_node = context.semantics_ir().GetNode(context.return_scope_stack().back()); - const auto callable = + const auto& callable = context.semantics_ir().GetFunction(fn_node.GetAsFunctionDeclaration()); if (context.parse_tree().node_kind(context.node_stack().PeekParseNode()) == diff --git a/toolchain/semantics/semantics_ir.h b/toolchain/semantics/semantics_ir.h index d7ec44f4f56d..6902fa687911 100644 --- a/toolchain/semantics/semantics_ir.h +++ b/toolchain/semantics/semantics_ir.h @@ -90,7 +90,8 @@ class SemanticsIR { } // Returns the requested callable. - auto GetFunction(SemanticsFunctionId function_id) const -> SemanticsFunction { + auto GetFunction(SemanticsFunctionId function_id) const + -> const SemanticsFunction& { return functions_[function_id.index]; }