alpha.c (alpha_legitimate_constant_p): Reject CONST constants referencing TLS symbols.
authorUros Bizjak <uros@gcc.gnu.org>
Mon, 3 Aug 2009 15:58:55 +0000 (17:58 +0200)
committerUros Bizjak <uros@gcc.gnu.org>
Mon, 3 Aug 2009 15:58:55 +0000 (17:58 +0200)
* config/alpha/alpha.c (alpha_legitimate_constant_p): Reject CONST
constants referencing TLS symbols.

From-SVN: r150372

gcc/ChangeLog
gcc/config/alpha/alpha.c

index 965beac..04816e3 100644 (file)
@@ -1,3 +1,8 @@
+2009-08-03  Uros Bizjak  <ubizjak@gmail.com>
+
+       * config/alpha/alpha.c (alpha_legitimate_constant_p): Reject CONST
+       constants referencing TLS symbols.
+
 2009-08-03  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
 
        * config/sh/linux-atomic.asm (ATOMIC_COMPARE_AND_SWAP): Rename
@@ -29,8 +34,7 @@
 
 2009-08-03  Andreas Krebbel  <krebbel1@de.ibm.com>
 
-       * explow.c (promote_mode): Mark TYPE and PUNSIGNEDP as
-          possibly unused.
+       * explow.c (promote_mode): Mark TYPE and PUNSIGNEDP as possibly unused.
 
 2009-08-02  John David Anglin  <dave.anglin@nrc-cnrc.gc.ca>
 
index f250e14..fe515d4 100644 (file)
@@ -2062,11 +2062,22 @@ alpha_legitimate_constant_p (rtx x)
 
   switch (GET_CODE (x))
     {
-    case CONST:
     case LABEL_REF:
     case HIGH:
       return true;
 
+    case CONST:
+      if (GET_CODE (XEXP (x, 0)) == PLUS
+         && GET_CODE (XEXP (XEXP (x, 0), 1)) == CONST_INT)
+       x = XEXP (XEXP (x, 0), 0);
+      else
+       return true;
+
+      if (GET_CODE (x) != SYMBOL_REF)
+       return true;
+
+      /* FALLTHRU */
+
     case SYMBOL_REF:
       /* TLS symbols are never valid.  */
       return SYMBOL_REF_TLS_MODEL (x) == 0;