This started to fail on August 25, 2007. Executing on host: /home/dave/gnu/gcc-4.3/objdir/./gcc/g++ -shared-libgcc -B/hom e/dave/gnu/gcc-4.3/objdir/./gcc -nostdinc++ -L/home/dave/gnu/gcc-4.3/objdir/hppa -linux/libstdc++-v3/src -L/home/dave/gnu/gcc-4.3/objdir/hppa-linux/libstdc++-v3/ src/.libs -B/home/dave/opt/gnu/gcc/gcc-4.3.0/hppa-linux/bin/ -B/home/dave/opt/gn u/gcc/gcc-4.3.0/hppa-linux/lib/ -isystem /home/dave/opt/gnu/gcc/gcc-4.3.0/hppa-l inux/include -isystem /home/dave/opt/gnu/gcc/gcc-4.3.0/hppa-linux/sys-include -g -O2 -D_GLIBCXX_ASSERT -ffunction-sections -fdata-sections -fmessage-length=0 -g -O2 -D_GNU_SOURCE -DLOCALEDIR="." -nostdinc++ -I/home/dave/gnu/gcc-4.3/objdir/h ppa-linux/libstdc++-v3/include/hppa-linux -I/home/dave/gnu/gcc-4.3/objdir/hppa-l inux/libstdc++-v3/include -I/home/dave/gnu/gcc-4.3/gcc/libstdc++-v3/libsupc++ -I /home/dave/gnu/gcc-4.3/gcc/libstdc++-v3/include/backward -I/home/dave/gnu/gcc-4. 3/gcc/libstdc++-v3/testsuite/util -Wl,--gc-sections /home/dave/gnu/gcc-4.3/gcc/l ibstdc++-v3/testsuite/27_io/basic_istream/ignore/char/1.cc -include bits/stdc ++.h ./libtestc++.a -lm -o ./1.exe (timeout = 600) /home/dave/gnu/gcc-4.3/gcc/libstdc++-v3/testsuite/27_io/basic_istream/ignore/cha r/1.cc: In function 'void test01()': /home/dave/gnu/gcc-4.3/gcc/libstdc++-v3/testsuite/27_io/basic_istream/ignore/cha r/1.cc:73: error: unrecognizable insn: (insn 273 272 274 39 /home/dave/gnu/gcc-4.3/gcc/libstdc++-v3/testsuite/27_io/bas ic_istream/ignore/char/1.cc:48 (parallel [ (set (mem/s/c:QI (reg:SI 206) [69 carray+8 S1 A32]) (const_int 0 [0x0])) (clobber (reg:SI 207)) (clobber (reg:SI 208)) (use (const_int 52 [0x34])) (use (const_int 4 [0x4])) ]) -1 (nil)) /home/dave/gnu/gcc-4.3/gcc/libstdc++-v3/testsuite/27_io/basic_istream/ignore/char/1.cc:73: internal compiler error: in extract_insn, at recog.c:1990 This looks like a target bug but it was obviously introduced by the following change: 2007-08-24 Sandra Loosemore <sandra@codesourcery.com> Nigel Stephens <nigel@mips.com> PR target/11787 * doc/tm.texi (SET_RATIO, SET_BY_PIECES_P): Document new macros. (STORE_BY_PIECES_P): No longer applies to __builtin_memset. ...
Breakpoint 1, gen_setmemsi (operand0=0x402a02a0, operand1=0x60175290, operand2=0x601751d0, operand3=0x601751e0) at ../../gcc/gcc/config/pa/pa.md:3744 3744 (gdb) p debug_rtx (operand0) (mem/s/c:QI (plus:SI (reg/f:SI 90 virtual-stack-vars) (const_int 108 [0x6c])) [69 carray+8 S1 A32]) $1 = void (gdb) bt #0 gen_setmemsi (operand0=0x402a02a0, operand1=0x60175290, operand2=0x601751d0, operand3=0x601751e0) at ../../gcc/gcc/config/pa/pa.md:3744 #1 0x002dd69c in set_storage_via_setmem (object=0x402a02a0, size=0x60175290, val=0x0, align=<value optimized out>, expected_align=32, expected_size=1076494832) at ../../gcc/gcc/expr.c:2732 #2 0x002df198 in clear_storage_hints (object=0x402a02a0, size=0x60175290, method=BLOCK_OP_NORMAL, expected_align=0, expected_size=0) at ../../gcc/gcc/expr.c:2566 #3 0x002df2dc in clear_storage (object=0x402a02a0, size=0x60175290, method=1612141008) at ../../gcc/gcc/expr.c:2579 #4 0x002e092c in store_expr (exp=<value optimized out>, target=0x402a01f0, call_param_p=0, nontemporal=<value optimized out>) at ../../gcc/gcc/expr.c:4526 #5 0x002e300c in expand_assignment (to=0x40123240, from=0x400973e0, nontemporal=0 '\0') at ../../gcc/gcc/expr.c:4213 #6 0x002c8dac in expand_expr_real_1 (exp=0x4008c6a0, target=0x0, tmode=VOIDmode, modifier=EXPAND_NORMAL, alt_rtl=0x0) at ../../gcc/gcc/expr.c:8986 #7 0x002da92c in expand_expr_real (exp=0x4008c6a0, target=0x601751d0, tmode=VOIDmode, modifier=EXPAND_NORMAL, alt_rtl=0x0) at ../../gcc/gcc/expr.c:6961 #8 0x0043f368 in expand_expr_stmt (exp=0x402a02a0) at ../../gcc/gcc/expr.h:514 ... md.texi says the first operand of the setmem instruction pattern should be a mem:BLK.
Unfortunately I have no pa machine here for testing this myself. Off the top of my head, I would suggest looking at the part of the patch discussed here, which was the only part that I thought would change behavior on anything other than MIPS. http://gcc.gnu.org/ml/gcc-patches/2007-08/msg01397.html
Sorry Sandra, I see looking at the backtrace in more detail that the ICE arises from the new code added here: 2007-08-24 Jakub Jelinek <jakub@redhat.com> * expr.c (store_expr): Optimize initialization of an array with STRING_CST. It looks like the problem is here: + dest_mem = target; + + dest_mem = store_by_pieces (dest_mem, + str_copy_len, builtin_strncpy_read_str, + (void *) TREE_STRING_POINTER (exp), + MEM_ALIGN (target), + exp_len > str_copy_len ? 1 : 0); The memory pointer returned by store_by_pieces is QImode.
*** Bug 33332 has been marked as a duplicate of this bug. ***
Patch here: http://gcc.gnu.org/ml/gcc-patches/2007-09/msg00084.html
Subject: Bug 33273 Author: danglin Date: Mon Sep 17 02:13:23 2007 New Revision: 128537 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=128537 Log: PR middle-end/33273 * expr.c (store_expr): Call adjust_address to change mode of dest_mem to BLKmode. Modified: trunk/gcc/ChangeLog trunk/gcc/expr.c
Fixed.