OSDN Git Service

* dbxout.c (dbxout_symbol_location): Do not output references
authoruweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 10 Mar 2004 15:12:10 +0000 (15:12 +0000)
committeruweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 10 Mar 2004 15:12:10 +0000 (15:12 +0000)
to optimized-out constant pool symbols.

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

gcc/ChangeLog
gcc/dbxout.c

index a42379a..48f98f2 100644 (file)
@@ -1,3 +1,8 @@
+2004-03-10  Ulrich Weigand  <uweigand@de.ibm.com>
+
+       * dbxout.c (dbxout_symbol_location): Do not output references
+       to optimized-out constant pool symbols.
+
 2004-03-10  Andreas Schwab  <schwab@suse.de>
 
        * config/ia64/ia64.md (divsi3, udivsi3): Remove unused variable
index 482470a..2e7c1eb 100644 (file)
@@ -2503,11 +2503,27 @@ dbxout_symbol_location (tree decl, tree type, const char *suffix, rtx home)
              if (GET_CODE (current_sym_addr) == SYMBOL_REF
                  && CONSTANT_POOL_ADDRESS_P (current_sym_addr))
                {
-                 rtx tmp = get_pool_constant (current_sym_addr);
+                 bool marked;
+                 rtx tmp = get_pool_constant_mark (current_sym_addr, &marked);
 
-                 if (GET_CODE (tmp) == SYMBOL_REF
-                     || GET_CODE (tmp) == LABEL_REF)
-                   current_sym_addr = tmp;
+                 if (GET_CODE (tmp) == SYMBOL_REF)
+                   {
+                     current_sym_addr = tmp;
+                     if (CONSTANT_POOL_ADDRESS_P (current_sym_addr))
+                       get_pool_constant_mark (current_sym_addr, &marked);
+                     else
+                       marked = true;
+                   }
+                 else if (GET_CODE (tmp) == LABEL_REF)
+                   {
+                     current_sym_addr = tmp;
+                     marked = true;
+                   }
+
+                  /* If all references to the constant pool were optimized
+                     out, we just ignore the symbol.  */
+                 if (!marked)
+                   return 0;
                }
 
              /* Ultrix `as' seems to need this.  */