From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1643) id 96686386CE55; Wed, 8 Jun 2022 12:41:46 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 96686386CE55 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Thomas Schwinge To: gcc-cvs@gcc.gnu.org Subject: [gcc/devel/rust/master] Generic functions should not be TREE_PUBLIC X-Act-Checkin: gcc X-Git-Author: Philip Herron X-Git-Refname: refs/heads/devel/rust/master X-Git-Oldrev: f38bf60c3ac7f039db5ff5c7c0587325097892c8 X-Git-Newrev: cf9d65a913640ecb4f839fbe2e7683ee00dc07f3 Message-Id: <20220608124146.96686386CE55@sourceware.org> Date: Wed, 8 Jun 2022 12:41:46 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jun 2022 12:41:46 -0000 https://gcc.gnu.org/g:cf9d65a913640ecb4f839fbe2e7683ee00dc07f3 commit cf9d65a913640ecb4f839fbe2e7683ee00dc07f3 Author: Philip Herron Date: Mon May 2 10:53:14 2022 +0100 Generic functions should not be TREE_PUBLIC Generic functions cannot be public since the symbols could overlap in linking other crates reusing the same generic. The other benifit here is that when optimizations are turned on we can eliminate more code since the symbol does not _need_ to be public. Diff: --- gcc/rust/backend/rust-compile-base.cc | 8 +++++--- gcc/rust/backend/rust-compile-base.h | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/gcc/rust/backend/rust-compile-base.cc b/gcc/rust/backend/rust-compile-base.cc index b969b7a6efc..49f31fca233 100644 --- a/gcc/rust/backend/rust-compile-base.cc +++ b/gcc/rust/backend/rust-compile-base.cc @@ -38,14 +38,14 @@ bool inline should_mangle_item (const tree fndecl) void HIRCompileBase::setup_fndecl (tree fndecl, bool is_main_entry_point, - HIR::Visibility &visibility, + bool is_generic_fn, HIR::Visibility &visibility, const HIR::FunctionQualifiers &qualifiers, const AST::AttrVec &attrs) { // if its the main fn or pub visibility mark its as DECL_PUBLIC // please see https://github.com/Rust-GCC/gccrs/pull/137 bool is_pub = visibility.get_vis_type () == HIR::Visibility::VisType::PUBLIC; - if (is_main_entry_point || is_pub) + if (is_main_entry_point || (is_pub && !is_generic_fn)) { TREE_PUBLIC (fndecl) = 1; } @@ -427,7 +427,9 @@ HIRCompileBase::compile_function ( unsigned int flags = 0; tree fndecl = ctx->get_backend ()->function (compiled_fn_type, ir_symbol_name, "" /* asm_name */, flags, locus); - setup_fndecl (fndecl, is_main_fn, visibility, qualifiers, outer_attrs); + + setup_fndecl (fndecl, is_main_fn, fntype->has_subsititions_defined (), + visibility, qualifiers, outer_attrs); setup_abi_options (fndecl, fntype->get_abi ()); // conditionally mangle the function name diff --git a/gcc/rust/backend/rust-compile-base.h b/gcc/rust/backend/rust-compile-base.h index c09c5620e53..f12913ce970 100644 --- a/gcc/rust/backend/rust-compile-base.h +++ b/gcc/rust/backend/rust-compile-base.h @@ -76,7 +76,7 @@ protected: tree expression, Location locus); static void setup_fndecl (tree fndecl, bool is_main_entry_point, - HIR::Visibility &visibility, + bool is_generic_fn, HIR::Visibility &visibility, const HIR::FunctionQualifiers &qualifiers, const AST::AttrVec &attrs);