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]

Patch for regression PR target/28490 (IA64 ICE)


I am not 100% sure of this patch.  It just gets rid of the ICE by
removing the gcc_assert.  The code that it generates after the assert is
removed looks good though and it appears to match what we were doing
before the assert was added.

The assert was added as part of a TLS ICE fixed by Richard Henderson for
PR 21412 (added at svn version 99596), perhaps he could expound on where
or when the offset should be handled if the assert is actually valid.

It passed regression testing (but then we never hit the assertion during
a bootstrap and test anyway) so I don't know if that proves much.

OK to checkin?  Comments on the validity of the assert?

Steve Ellcey
sje@cup.hp.com


2006-07-28  Steve Ellcey  <sje@cup.hp.com>

	PR target/28490
	* config/ia64/ia64.c (ia64_expand_move): Remove assert.

Index: config/ia64/ia64.c
===================================================================
--- config/ia64/ia64.c	(revision 115849)
+++ config/ia64/ia64.c	(working copy)
@@ -1084,8 +1084,6 @@ ia64_expand_move (rtx op0, rtx op1)
 
       if (reload_completed)
 	{
-	  /* We really should have taken care of this offset earlier.  */
-	  gcc_assert (addend == 0);
 	  if (ia64_expand_load_address (op0, op1))
 	    return NULL_RTX;
 	}


2006-07-28  Steve Ellcey  <sje@cup.hp.com>

	PR target/28490
	* gcc.target/ia64/pr28490.c: New test.
Index: testsuite/gcc.target/ia64/pr28490.c
===================================================================
--- testsuite/gcc.target/ia64/pr28490.c	(revision 0)
+++ testsuite/gcc.target/ia64/pr28490.c	(revision 0)
@@ -0,0 +1,23 @@
+/* Verify that this test case does not ICE on compilation. */
+
+/* { dg-do compile } */
+/* { dg-options "-O1" } */
+
+typedef union cl_lispunion *cl_object;
+union cl_lispunion { cl_object cons; };
+typedef union { cl_object data; } cl_symbol_initializer;
+extern cl_symbol_initializer cl_symbols[];
+extern void cl_funcall (cl_object);
+extern int _setjmp();
+void LC67traverse (cl_object *lex0)
+{
+  cl_object T0;
+  cl_funcall ((cl_object) (cl_symbols + 1));
+  if (_setjmp ())
+        ;
+  if (lex0[0] == (cl_object) cl_symbols)
+        goto L791;
+  T0 = ((cl_object) (cl_symbols + 1));
+L791:;
+  cl_funcall (T0);
+}


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