diff options
author | Philip Herron <philip.herron@embecosm.com> | 2022-05-02 10:53:14 +0100 |
---|---|---|
committer | Philip Herron <philip.herron@embecosm.com> | 2022-05-02 10:53:14 +0100 |
commit | cf9d65a913640ecb4f839fbe2e7683ee00dc07f3 (patch) | |
tree | 9560ca20fc0aa6c946ec84e057b6601b20dde6e4 | |
parent | f38bf60c3ac7f039db5ff5c7c0587325097892c8 (diff) | |
download | gcc-cf9d65a913640ecb4f839fbe2e7683ee00dc07f3.zip gcc-cf9d65a913640ecb4f839fbe2e7683ee00dc07f3.tar.gz gcc-cf9d65a913640ecb4f839fbe2e7683ee00dc07f3.tar.bz2 |
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.
-rw-r--r-- | gcc/rust/backend/rust-compile-base.cc | 8 | ||||
-rw-r--r-- | 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 b969b7a..49f31fc 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 c09c562..f12913c 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); |