aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/alpha/alpha.c
diff options
context:
space:
mode:
authorUros Bizjak <uros@gcc.gnu.org>2009-08-03 17:58:55 +0200
committerUros Bizjak <uros@gcc.gnu.org>2009-08-03 17:58:55 +0200
commit42a9ba1d7e12ecd8a58b0c32801601e09de7a30b (patch)
treee42053ec9d3d71df749b5f77cfa7e11223f7772e /gcc/config/alpha/alpha.c
parent9f774cb03aa6d4d020fb1bb711a84f987bd5e42b (diff)
downloadgcc-42a9ba1d7e12ecd8a58b0c32801601e09de7a30b.zip
gcc-42a9ba1d7e12ecd8a58b0c32801601e09de7a30b.tar.gz
gcc-42a9ba1d7e12ecd8a58b0c32801601e09de7a30b.tar.bz2
alpha.c (alpha_legitimate_constant_p): Reject CONST constants referencing TLS symbols.
* config/alpha/alpha.c (alpha_legitimate_constant_p): Reject CONST constants referencing TLS symbols. From-SVN: r150372
Diffstat (limited to 'gcc/config/alpha/alpha.c')
-rw-r--r--gcc/config/alpha/alpha.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c
index f250e14..fe515d4 100644
--- a/gcc/config/alpha/alpha.c
+++ b/gcc/config/alpha/alpha.c
@@ -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;