aboutsummaryrefslogtreecommitdiff
path: root/gcc/java
diff options
context:
space:
mode:
authorAndrew Haley <aph@redhat.com>2008-10-15 12:16:35 +0000
committerAndrew Haley <aph@gcc.gnu.org>2008-10-15 12:16:35 +0000
commit307233c206c8853cb277f7e62b14c99fb695b6be (patch)
tree4f79aea342c28fb6ef07a45e173852a15ae1d31e /gcc/java
parentf6e6e9904cd32cc78873a33f0a3839812b0d0f57 (diff)
downloadgcc-307233c206c8853cb277f7e62b14c99fb695b6be.zip
gcc-307233c206c8853cb277f7e62b14c99fb695b6be.tar.gz
gcc-307233c206c8853cb277f7e62b14c99fb695b6be.tar.bz2
constants.c (build_constant_data_ref): Make sure we only build one copy of the decl for the constant pool.
2008-10-14 Andrew Haley <aph@redhat.com> * constants.c (build_constant_data_ref): Make sure we only build one copy of the decl for the constant pool. From-SVN: r141133
Diffstat (limited to 'gcc/java')
-rw-r--r--gcc/java/ChangeLog5
-rw-r--r--gcc/java/constants.c30
2 files changed, 22 insertions, 13 deletions
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index 0e59b21..d987bbe 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -1,3 +1,8 @@
+2008-10-14 Andrew Haley <aph@redhat.com>
+
+ * constants.c (build_constant_data_ref): Make sure we only build
+ one copy of the decl for the constant pool.
+
2008-09-22 Andrew Haley <aph@redhat.com>
* expr.c (rules): Add new rule for
diff --git a/gcc/java/constants.c b/gcc/java/constants.c
index 265557e..526d9c7 100644
--- a/gcc/java/constants.c
+++ b/gcc/java/constants.c
@@ -448,21 +448,25 @@ build_constant_data_ref (bool indirect)
}
else
{
- tree type, decl;
tree decl_name = mangled_classname ("_CD_", output_class);
+ tree decl = IDENTIFIER_GLOBAL_VALUE (decl_name);
- /* Build a type with unspecified bounds. The will make sure
- that targets do the right thing with whatever size we end
- up with at the end. Using bounds that are too small risks
- assuming the data is in the small data section. */
- type = build_array_type (ptr_type_node, NULL_TREE);
-
- /* We need to lay out the type ourselves, since build_array_type
- thinks the type is incomplete. */
- layout_type (type);
-
- decl = build_decl (VAR_DECL, decl_name, type);
- TREE_STATIC (decl) = 1;
+ if (! decl)
+ {
+ /* Build a type with unspecified bounds. The will make sure
+ that targets do the right thing with whatever size we end
+ up with at the end. Using bounds that are too small risks
+ assuming the data is in the small data section. */
+ tree type = build_array_type (ptr_type_node, NULL_TREE);
+
+ /* We need to lay out the type ourselves, since build_array_type
+ thinks the type is incomplete. */
+ layout_type (type);
+
+ decl = build_decl (VAR_DECL, decl_name, type);
+ TREE_STATIC (decl) = 1;
+ IDENTIFIER_GLOBAL_VALUE (decl_name) = decl;
+ }
return decl;
}