OSDN Git Service

* varasm.c (record_constant_1): Record the CODE_LABEL when
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 28 Apr 2000 20:25:38 +0000 (20:25 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 28 Apr 2000 20:25:38 +0000 (20:25 +0000)
        taking the address of a LABEL_REF.

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

gcc/ChangeLog
gcc/varasm.c

index 7db2bc0..3b4e73d 100644 (file)
@@ -1,4 +1,9 @@
 2000-04-28  Richard Henderson  <rth@cygnus.com>
+
+       * varasm.c (record_constant_1): Record the CODE_LABEL when
+       taking the address of a LABEL_REF.
+
+2000-04-28  Richard Henderson  <rth@cygnus.com>
            Jan Hubicka  <jh@suse.cz>
 
        * calls.c (combine_pending_stack_adjustment_and_call): Return the
index 5224284..0c68220 100644 (file)
@@ -2867,9 +2867,24 @@ record_constant_1 (exp)
        /* Record the offset.  */
        obstack_grow (&permanent_obstack,
                      (char *) &value.offset, sizeof value.offset);
-       /* Record the symbol name.  */
-       obstack_grow (&permanent_obstack, XSTR (value.base, 0),
-                     strlen (XSTR (value.base, 0)) + 1);
+
+       switch (GET_CODE (value.base))
+         {
+         case SYMBOL_REF:
+           /* Record the symbol name.  */
+           obstack_grow (&permanent_obstack, XSTR (value.base, 0),
+                         strlen (XSTR (value.base, 0)) + 1);
+           break;
+         case LABEL_REF:
+           /* Record the address of the CODE_LABEL.  It may not have
+              been emitted yet, so it's UID may be zero.  But pointer
+              identity is good enough.  */
+           obstack_grow (&permanent_obstack, &XEXP (value.base, 0),
+                         sizeof (rtx));
+           break;
+         default:
+           abort ();
+         }
       }
       return;