This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[ARM] fix PR target/48637


For a long time now the compiler has permitted printing a symbol with
the %c operator, but for some reason we've never permitted
symbol+offset.  This patch fixes this omission and also makes the
compiler slightly more friendly to users of ASM statements by not
generating an ICE when it can't handle an expression.  Tested on
arm-eabi and installed on trunk.

This is not a regression, so I don't propose to back-port it to older
compilers (though doing so would most-likely be trivial).

R.

2011-06-27  Richard Earnshaw  <rearnsha@arm.com>

        PR target/48637
        * arm.c (arm_print_operand): Allow sym+offset.  Don't abort on
	invalid asm operands.

diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index efffcf8..8b9cb25 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -16242,8 +16242,17 @@ arm_print_operand (FILE *stream, rtx x, int code)
 	  output_addr_const (stream, x);
 	  break;
 
+	case CONST:
+	  if (GET_CODE (XEXP (x, 0)) == PLUS
+	      && GET_CODE (XEXP (XEXP (x, 0), 0)) == SYMBOL_REF)
+	    {
+	      output_addr_const (stream, x);
+	      break;
+	    }
+	  /* Fall through.  */
+
 	default:
-	  gcc_unreachable ();
+	  output_operand_lossage ("Unsupported operand for code '%c'", code);
 	}
       return;
 

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]