rs6000.c (rs6000_legitimize_address, [...]): Make sure an rtx is a SYMBOL_REF before...
authorSteven Bosscher <stevenb.gcc@gmail.com>
Fri, 30 May 2008 18:21:31 +0000 (18:21 +0000)
committerDavid Edelsohn <dje@gcc.gnu.org>
Fri, 30 May 2008 18:21:31 +0000 (14:21 -0400)
2008-05-30  Steven Bosscher  <stevenb.gcc@gmail.com>

        * config/rs6000/rs6000.c (rs6000_legitimize_address,
        rs6000_legitimize_reload_address, rs6000_emit_move): Make sure an
        rtx is a SYMBOL_REF before calling get_pool_constant.

From-SVN: r136216

gcc/ChangeLog
gcc/config/rs6000/rs6000.c

index 82d24789424a46437cc15fcbc009890541d93a1d..1a76fd3e7beb8b2eb2219f90f8bf3b452f665066 100644 (file)
@@ -1,3 +1,9 @@
+2008-05-30  Steven Bosscher  <stevenb.gcc@gmail.com>
+
+       * config/rs6000/rs6000.c (rs6000_legitimize_address,
+       rs6000_legitimize_reload_address, rs6000_emit_move): Make sure an
+       rtx is a SYMBOL_REF before calling get_pool_constant.
+
 2008-05-30  Eric Botcazou  <ebotcazou@adacore.com>
 
        * fold-const.c (fold_unary) <CASE_CONVERT>: Add ??? comment.
index 1eafc999fde43acdf2096bc73a8cb66450f46db6..f91225fe1c8ca73d2f598f733b646a8993e99cb8 100644 (file)
@@ -3746,6 +3746,7 @@ rs6000_legitimize_address (rtx x, rtx oldx ATTRIBUTE_UNUSED,
       return gen_rtx_LO_SUM (Pmode, reg, x);
     }
   else if (TARGET_TOC
+          && GET_CODE (x) == SYMBOL_REF
           && constant_pool_expr_p (x)
           && ASM_OUTPUT_SPECIAL_POOL_ENTRY_P (get_pool_constant (x), Pmode))
     {
@@ -4191,6 +4192,7 @@ rs6000_legitimize_reload_address (rtx x, enum machine_mode mode,
     }
 
   if (TARGET_TOC
+      && GET_CODE (x) == SYMBOL_REF
       && constant_pool_expr_p (x)
       && ASM_OUTPUT_SPECIAL_POOL_ENTRY_P (get_pool_constant (x), mode))
     {
@@ -5041,6 +5043,7 @@ rs6000_emit_move (rtx dest, rtx source, enum machine_mode mode)
          operands[1] = force_const_mem (mode, operands[1]);
 
          if (TARGET_TOC
+             && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF
              && constant_pool_expr_p (XEXP (operands[1], 0))
              && ASM_OUTPUT_SPECIAL_POOL_ENTRY_P (
                        get_pool_constant (XEXP (operands[1], 0)),
@@ -12359,6 +12362,7 @@ print_operand_address (FILE *file, rtx x)
 
          minus = XEXP (contains_minus, 0);
          symref = XEXP (minus, 0);
+         gcc_assert (GET_CODE (XEXP (minus, 1)) == SYMBOL_REF);
          XEXP (contains_minus, 0) = symref;
          if (TARGET_ELF)
            {