Hi,
i get an ICE with this reduced testcase:
-------------------------------------------
typedef struct _Parameters Parameters;
typedef double real_T;
typedef struct _BlockIO {
real_T bio1;
real_T bio2;
real_T bio3;
real_T bio4;
real_T bio5;
real_T bio6;
real_T bio7;
real_T bio8;
real_T bio9;
} BlockIO;
struct _Parameters {
real_T par1;
real_T par2;
real_T par3;
real_T par4;
real_T par5;
real_T par6;
real_T par7;
};
Parameters rtP;
BlockIO rtB;
void error_func(void)
{
if (0.0 >= rtP.par1) {
// rtB.bio2 = 0.0;
} else {
rtB.bio2 = rtB.bio1;
}
if (0.0 >= rtP.par2) {
rtB.bio3 = 0.0;
} else {
rtB.bio3 = 0.0;
}
rtB.bio4 = rtB.bio3 * rtP.par3;
if (0.0 >= rtP.par4) {
rtB.bio5 = 0.0;
} else {
rtB.bio5 = rtB.bio4;
}
rtB.bio6 = rtB.bio5 * rtP.par5;
if (0.0 >= rtP.par6) {
// rtB.bio8 = 0.0;
} else {
rtB.bio8 = rtB.bio7;
}
rtB.bio9 = rtB.bio5 * rtP.par7;
}
--------------------------------------------
GCC command line and output:
/opt/gcc-3.3.5/bin/gcc -v -c gcc_ice.i -o gcc_ice.o -O1
-fexpensive-optimizations -fcse-follow-jumps -frerun-cse-after-loop -fgcse
-march=pentium4 -mfpmath=sse -ffast-math
Reading specs from /opt/gcc-3.3.5/lib/gcc-lib/i686-pc-linux-gnu/3.3.5/specs
Configured with: ./configure --prefix=/opt/gcc-3.3.5
Thread model: posix
gcc version 3.3.5
/opt/gcc-3.3.5/lib/gcc-lib/i686-pc-linux-gnu/3.3.5/cc1 -fpreprocessed gcc_ice.i
-quiet -dumpbase gcc_ice.i -march=pentium4 -mfpmath=sse -auxbase-strip gcc_ice.o
-O1 -version -fexpensive-optimizations -fcse-follow-jumps -frerun-cse-after-loop
-fgcse -ffast-math -o /tmp/ccsHtO1S.s
GNU C version 3.3.5 (i686-pc-linux-gnu)
compiled by GNU C version 3.2.1.
GGC heuristics: --param ggc-min-expand=64 --param ggc-min-heapsize=64529
gcc_ice.i: In function `error_func':
gcc_ice.i:69: internal compiler error: in gen_split_1204, at insn-emit.c:17860
The optimization flags are a subset of "-O2 -march=pentium4 -mfpmath=sse
-ffast-math" and I was able to trigger exactly the same ICE with a larger
testcase and these flags. Unfortunately the testcase shown here, does not crash
with "-O2 -march=pentium4 -mfpmath=sse -ffast-math".
I got the same ICE with GCC 3.3.3 and 3.3.1.
GCC 3.2.1, GCC 3.4.0 and newer versions do not show this bug.
The testcase seems fairly minimal, that is, I cannot remove a single statement
or command line flag without loosing the ICE.
--
Summary: [3.3 regression] ICE in in gen_split_1204 on i686-pc-
linux-gnu target
Product: gcc
Version: 3.3.5
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: target
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: rgrosseboerger at dspace dot de
CC: gcc-bugs at gcc dot gnu dot org
GCC build triplet: i686-pc-linux-gnu
GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18402