aboutsummaryrefslogtreecommitdiff
path: root/gcc/go/go-gcc.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/go/go-gcc.cc')
-rw-r--r--gcc/go/go-gcc.cc20
1 files changed, 9 insertions, 11 deletions
diff --git a/gcc/go/go-gcc.cc b/gcc/go/go-gcc.cc
index 50dbb3128f1..025bb2bdca0 100644
--- a/gcc/go/go-gcc.cc
+++ b/gcc/go/go-gcc.cc
@@ -1475,8 +1475,8 @@ Gcc_backend::temporary_variable(Bfunction* function, Bblock* bblock,
// Create a named immutable initialized data structure.
Bvariable*
-Gcc_backend::immutable_struct(const std::string& name, bool, bool,
- Btype* btype, Location location)
+Gcc_backend::immutable_struct(const std::string& name, bool is_hidden,
+ bool, Btype* btype, Location location)
{
tree type_tree = btype->get_tree();
if (type_tree == error_mark_node)
@@ -1490,6 +1490,8 @@ Gcc_backend::immutable_struct(const std::string& name, bool, bool,
TREE_CONSTANT(decl) = 1;
TREE_USED(decl) = 1;
DECL_ARTIFICIAL(decl) = 1;
+ if (!is_hidden)
+ TREE_PUBLIC(decl) = 1;
// We don't call rest_of_decl_compilation until we have the
// initializer.
@@ -1503,8 +1505,7 @@ Gcc_backend::immutable_struct(const std::string& name, bool, bool,
void
Gcc_backend::immutable_struct_set_init(Bvariable* var, const std::string&,
- bool is_hidden, bool is_common, Btype*,
- Location,
+ bool, bool is_common, Btype*, Location,
Bexpression* initializer)
{
tree decl = var->get_tree();
@@ -1515,17 +1516,14 @@ Gcc_backend::immutable_struct_set_init(Bvariable* var, const std::string&,
DECL_INITIAL(decl) = init_tree;
// We can't call make_decl_one_only until we set DECL_INITIAL.
- if (!is_common)
- {
- if (!is_hidden)
- TREE_PUBLIC(decl) = 1;
- }
- else
+ if (is_common)
make_decl_one_only(decl, DECL_ASSEMBLER_NAME(decl));
// These variables are often unneeded in the final program, so put
// them in their own section so that linker GC can discard them.
- resolve_unique_section(decl, 1, 1);
+ resolve_unique_section(decl,
+ compute_reloc_for_constant (init_tree),
+ 1);
rest_of_decl_compilation(decl, 1, 0);
}