3.4.0 20040303 generates ICE. But 3.4.0 20040227 work fine. Environment: System: Linux namsh 2.6.4-rc2 #63 Thu Mar 4 21:18:27 KST 2004 i686 athlon i386 GNU/Linux Architecture: i686 host: i686-pc-linux-gnu build: i686-pc-linux-gnu target: m6811-unknown-none configured with: ../configure --disable-nls --target=m6811-elf --prefix=/usr/GNUHCS --program-prefix=m6811-elf- --with-gnu-ld --with-gnu-as --disable-shared --enable-languages=c,c++ --without-headers --with-newlib How-To-Repeat: Just do 'm6811-elf-g++ -o tmp.o -c t.cpp -m68hc12'. The t.ii is: # 1 "t.cpp" # 1 "<built-in>" # 1 "<command line>" # 1 "t.cpp" class CKMCLink { public: void LinkDelete(CKMCLink**); private: CKMCLink *m_prev; }; void CKMCLink::LinkDelete(CKMCLink **head) { if (m_prev == this) { *head = 0; } }
Fix: If I do 'm6811-elf-g++ -o tmp.o -c t.cpp -m68hc11'. No ICE. If I use m6811-elf-g++ 3.4.0 20040227 with -m68hc12, No ICE.
m6811-elf can never be considered critical.
Andrew didn't say that, but this must indeed be a target specific thing. It doesn't ICE on a compiler targeted for an x86 linux box. W.
I test this with new m6811-elf-gcc 3.4.0 20040318. And ICE occured. I didn't add ICE message for gcc 20040303. Here it is generated by gcc 20040318. $ m6811-elf-g++ -o tmp.o -c t.cpp -m68hc12 t.cpp: In member function `void CKMCLink::LinkDelete(CKMCLink**)': t.cpp:15: internal compiler error: in change_address_1, at emit-rtl.c:1886 Please submit a full bug report, with preprocessed source if appropriate. See <URL:http://gcc.gnu.org/bugs.html> for instructions.
Confirmed a regression caused by: 2004-03-07 Stephane Carrez <stcarrez@nerim.fr> * config/m68hc11/m68hc11.md ("*lshrsi3_const"): Disable for 68HC12. ("*lshrsi3"): Also accept an immediate for 68HC12. ("*ashrsi3_const"): Likewise. ("*ashrsi3"): Likewise. ("*ashlsi3_const"): Likewise. ("*ashlsi3"): Likewise. ("cmphi_1_hc12"): Compare two hard register by pushing them and comparing with a pop; don't use a split for that. ("cmphi split"): Disable compare split for 68HC12. * config/m68hc11/m68hc11.c (m68hc11_notice_update_cc): Invalidate the status operands if they have side effects.
Or this one: 2004-03-06 Stephane Carrez <stcarrez@nerim.fr> * config/m68hc11/m68hc11.c (m68hc11_gen_movhi): Use 2,-sp to push the stack register. (expand_prologue): Don't make an interrupt or a trap handler a far symbol. (m68hc11_initial_elimination_offset): Likewise.
Stephane -- Are you working on a fix for this problem? -- Mark
Going to work on a fix
*** Bug 14628 has been marked as a duplicate of this bug. ***
Subject: Bug 14457 CVSROOT: /cvs/gcc Module name: gcc Branch: gcc-3_4-branch Changes by: ciceron@gcc.gnu.org 2004-06-06 13:50:28 Modified files: gcc : ChangeLog gcc/config/m68hc11: m68hc11.c m68hc11-protos.h m68hc11.h m68hc11.md Log message: PR target/14457 * config/m68hc11/m68hc11.c (splitable_operand): New predicate. * config/m68hc11/m68hc11-protos.h (splitable_operand): Declare. * config/m68hc11/m68hc11.h (PREDICATE_CODES): Register it. (inhibit_libc): Must define. * config/m68hc11/m68hc11.md ("movhi_const0"): Use splitable_operand. ("*andhi3_gen", "iorhi3", "*iorhi3_gen"): Likewise. ("xorhi3"): Likewise. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=2.2326.2.468&r2=2.2326.2.469 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/m68hc11/m68hc11.c.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.91.6.5&r2=1.91.6.6 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/m68hc11/m68hc11-protos.h.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.30&r2=1.30.6.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/m68hc11/m68hc11.h.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.81.4.1&r2=1.81.4.2 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/m68hc11/m68hc11.md.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.54.10.5&r2=1.54.10.6
Subject: Bug 14457 CVSROOT: /cvs/gcc Module name: gcc Changes by: ciceron@gcc.gnu.org 2004-06-06 13:56:33 Modified files: gcc : ChangeLog gcc/config/m68hc11: m68hc11.c m68hc11-protos.h m68hc11.h m68hc11.md Log message: PR target/14457 * config/m68hc11/m68hc11.c (splitable_operand): New predicate. * config/m68hc11/m68hc11-protos.h (splitable_operand): Declare. * config/m68hc11/m68hc11.h (PREDICATE_CODES): Register it. (inhibit_libc): Must define. * config/m68hc11/m68hc11.md ("movhi_const0"): Use splitable_operand. ("*andhi3_gen", "iorhi3", "*iorhi3_gen"): Likewise. ("xorhi3"): Likewise. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&r1=2.3852&r2=2.3853 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/m68hc11/m68hc11.c.diff?cvsroot=gcc&r1=1.103&r2=1.104 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/m68hc11/m68hc11-protos.h.diff?cvsroot=gcc&r1=1.31&r2=1.32 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/m68hc11/m68hc11.h.diff?cvsroot=gcc&r1=1.86&r2=1.87 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/m68hc11/m68hc11.md.diff?cvsroot=gcc&r1=1.64&r2=1.65
The bug was caused by a (MEM:HI (MEM:HI reg)) operand that must be split in two part to access the low and high byte. Such split is not possible as there is no (MEM:HI (PLUS:HI (MEM:HI reg) (const_int 1))). Fixed (see patches).