From: Jakub Jelinek Date: Wed, 4 Apr 2001 15:14:24 +0000 (+0200) Subject: recog.c (validate_replace_rtx_1): Instead of aborting just make sure the change won... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=347f344069b04a3bd333dc0341de7f1db2714af3;p=gcc.git recog.c (validate_replace_rtx_1): Instead of aborting just make sure the change won't be validated. * recog.c (validate_replace_rtx_1): Instead of aborting just make sure the change won't be validated. * gcc.c-torture/compile/20010326-1.c: New test. From-SVN: r41083 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d99ef4affcb..5f23f3cd694 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-04-04 Jakub Jelinek + + * recog.c (validate_replace_rtx_1): Instead of aborting just make + sure the change won't be validated. + Wed Apr 4 00:45:38 EDT 2001 John Wehle (john@feith.com) * rtl.h (set_noop_p): Declare. diff --git a/gcc/recog.c b/gcc/recog.c index bc7c712de24..bbecd5b719e 100644 --- a/gcc/recog.c +++ b/gcc/recog.c @@ -625,7 +625,13 @@ validate_replace_rtx_1 (loc, from, to, object) inner_mode = SImode; if (GET_MODE_CLASS (mode) != MODE_INT) - abort (); + { + /* Substitute in something that we know won't be + recognized. */ + to = gen_rtx_CLOBBER (GET_MODE (x), const0_rtx); + validate_change (object, loc, to, 1); + return; + } if (BYTES_BIG_ENDIAN || WORDS_BIG_ENDIAN) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c72d2def208..225f9280257 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2001-04-04 Jakub Jelinek + + * gcc.c-torture/compile/20010326-1.c: New test. + 2001-04-03 Alexandre Oliva * g++.old-deja/g++.ext/instantiate1.C: Adjust to accommodate diff --git a/gcc/testsuite/gcc.c-torture/compile/20010326-1.c b/gcc/testsuite/gcc.c-torture/compile/20010326-1.c new file mode 100644 index 00000000000..43acf4588ca --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20010326-1.c @@ -0,0 +1,16 @@ +float d; +int e, f; + +void foo (void) +{ + struct { float u, v; } a = {0.0, 0.0}; + float b; + int c; + + c = e; + if (c == 0) + c = f; + b = d; + if (a.v < b) + a.v = b; +}