* [PATCH] Fix PR55684
@ 2012-12-14 11:55 Richard Biener
0 siblings, 0 replies; only message in thread
From: Richard Biener @ 2012-12-14 11:55 UTC (permalink / raw)
To: gcc-patches; +Cc: Jan Hubicka
Honza left an ICE when we cannot compute number_of_iterations_exit
in remove_redundant_iv_tests, but that can for sure happen by design
(see bugzilla).
The following patch fixes it, bootstrap and regtest pending on
x86_64-unknown-linux-gnu.
Richard.
2012-12-14 Richard Biener <rguenther@suse.de>
PR tree-optimization/55684
* tree-ssa-loop-ivcanon.c (remove_redundant_iv_tests): Handle
gracefully the case where we cannot compute the number of
iterations at an exit.
* gcc.dg/torture/pr55684.c: New testcase.
Index: gcc/tree-ssa-loop-ivcanon.c
===================================================================
*** gcc/tree-ssa-loop-ivcanon.c (revision 194496)
--- gcc/tree-ssa-loop-ivcanon.c (working copy)
*************** remove_redundant_iv_tests (struct loop *
*** 555,563 ****
/* Only when we know the actual number of iterations, not
just a bound, we can remove the exit. */
if (!number_of_iterations_exit (loop, exit_edge,
! &niter, false, false))
! gcc_unreachable ();
! if (!integer_onep (niter.assumptions)
|| !integer_zerop (niter.may_be_zero)
|| !niter.niter
|| TREE_CODE (niter.niter) != INTEGER_CST
--- 555,562 ----
/* Only when we know the actual number of iterations, not
just a bound, we can remove the exit. */
if (!number_of_iterations_exit (loop, exit_edge,
! &niter, false, false)
! || !integer_onep (niter.assumptions)
|| !integer_zerop (niter.may_be_zero)
|| !niter.niter
|| TREE_CODE (niter.niter) != INTEGER_CST
Index: gcc/testsuite/gcc.dg/torture/pr55684.c
===================================================================
*** gcc/testsuite/gcc.dg/torture/pr55684.c (revision 0)
--- gcc/testsuite/gcc.dg/torture/pr55684.c (working copy)
***************
*** 0 ****
--- 1,33 ----
+ /* { dg-do compile } */
+
+ typedef struct _IO_FILE FILE;
+ unsigned long int strtoul(const char *, char **, int);
+ char *fgets(char *, int, FILE *);
+ struct ihexrec {
+ unsigned char reclen;
+ unsigned char data[256];
+ };
+ static void srec_readrec(struct ihexrec * srec, char * rec)
+ {
+ int i, j;
+ char buf[8];
+ int offset = 0, len;
+ char * e;
+ for (i=0; j<srec->reclen; j++)
+ {
+ if (offset+2 > len)
+ return;
+ for (i=0; i<2; i++)
+ buf[i] = rec[offset++];
+ srec->data[j] = strtoul(buf, &e, 16);
+ }
+ for (i=0; i<2; i++)
+ buf[i] = rec[offset++];
+ }
+ void srec2b(FILE *inf)
+ {
+ char buffer[256];
+ struct ihexrec srec;
+ while (fgets(buffer,256,inf)!=(void *)0)
+ srec_readrec(&srec, buffer);
+ }
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2012-12-14 11:55 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-12-14 11:55 [PATCH] Fix PR55684 Richard Biener
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).