OSDN Git Service

2008-10-14 Andrew Haley <aph@redhat.com>
authoraph <aph@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 15 Oct 2008 12:16:35 +0000 (12:16 +0000)
committeraph <aph@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 15 Oct 2008 12:16:35 +0000 (12:16 +0000)
        * constants.c (build_constant_data_ref): Make sure we only build
        one copy of the decl for the constant pool.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@141133 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/java/ChangeLog
gcc/java/constants.c

index 0e59b21..d987bbe 100644 (file)
@@ -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
index 265557e..526d9c7 100644 (file)
@@ -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;
     }