aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2022-05-02 19:38:51 +0000
committerGitHub <noreply@github.com>2022-05-02 19:38:51 +0000
commit694114ea9567d1d7bc96b3d5ce287daede11b941 (patch)
tree4fc4f47dcd5b4268c5161ddd6747f36ec7456049 /gcc
parentfb136314f9584744ccc7b09ace3cea99129b7cf4 (diff)
parentcf9d65a913640ecb4f839fbe2e7683ee00dc07f3 (diff)
downloadgcc-694114ea9567d1d7bc96b3d5ce287daede11b941.zip
gcc-694114ea9567d1d7bc96b3d5ce287daede11b941.tar.gz
gcc-694114ea9567d1d7bc96b3d5ce287daede11b941.tar.bz2
Merge #1201
1201: Generic functions should not be TREE_PUBLIC r=philberty a=philberty Generic functions cannot be public since the symbols could overlap in linking other crates reusing the same generic. The other benefit here is that when optimizations are turned on we can eliminate more code since the symbol does not _need_ to be public. Co-authored-by: Philip Herron <philip.herron@embecosm.com>
Diffstat (limited to 'gcc')
-rw-r--r--gcc/rust/backend/rust-compile-base.cc8
-rw-r--r--gcc/rust/backend/rust-compile-base.h2
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);