> On 8/13/14 23:10, Michael Eager wrote: >> On 07/06/14 03:26, Chen Gang wrote: >>> >>> * microblaze/mocroblaze.md (call_value_intern): Use 'SI' instead of >>> 'VOID' for operand 1, just like 'call_internal1' has done. >>> >>> The related warning: >>> >>> ../../gcc/gcc/config/microblaze/microblaze.md:2172: warning: operand 1 >>> missing mode? >>> >>> >>> Signed-off-by: Chen Gang <gang.chen.5...@gmail.com> >>> --- >>> gcc/config/microblaze/microblaze.md | 2 +- >>> 1 file changed, 1 insertion(+), 1 deletion(-) >>> >>> diff --git a/gcc/config/microblaze/microblaze.md >>> b/gcc/config/microblaze/microblaze.md >>> index 2bd5d72..9580221 100644 >>> --- a/gcc/config/microblaze/microblaze.md >>> +++ b/gcc/config/microblaze/microblaze.md >>> @@ -2171,7 +2171,7 @@ >>> >>> (define_insn "call_value_intern" >>> [(set (match_operand:VOID 0 "register_operand" "=d") >>> - (call (mem (match_operand:VOID 1 "call_insn_operand" "ri")) >>> + (call (mem (match_operand:SI 1 "call_insn_operand" "ri")) >>> (match_operand:SI 2 "" "i"))) >>> (clobber (match_operand:SI 3 "register_operand" "=d"))] >>> "" >> >> This patch causes a test suite regression: >> >> Executing on host: mb-gcc -fno-diagnostics-show-caret >> -fdiagnostics-color=never -O0 -w -c -mno-xl-soft-mul -mxl-barrel-shift >> -mcpu=v6.00.a -o calls.o testsuite/gcc.c-torture/compile/calls.c >> (timeout = 60) >> pid is 24832 -24832 >> testsuite/gcc.c-torture/compile/calls.c: In function 'f1': >> testsuite/gcc.c-torture/compile/calls.c:6:1: error: unrecognizable insn: >> (call_insn 5 2 8 2 (parallel [ >> (set (reg:SI 3 r3) >> (call (mem:SI (const_int 0 [0]) [0 MEM[(void * (*<T29e>) >> (void))0B] S4 A32]) >> (const_int 24 [0x18]))) >> (clobber (reg:SI 15 r15)) >> ]) testsuite/gcc.c-torture/compile/calls.c:5 -1 >> (nil) >> (nil)) >> testsuite/gcc.c-torture/compile/calls.c:6:1: internal compiler error: in >> extract_insn, at recog.c:2204 >> 0x983018 _fatal_insn(char const*, rtx_def const*, char const*, int, char >> const*) >> /store/Xilinx/repo/fsf/gcc/gcc/rtl-error.c:109 >> 0x983041 _fatal_insn_not_found(rtx_def const*, char const*, int, char const*) >> /store/Xilinx/repo/fsf/gcc/gcc/rtl-error.c:117 >> 0x9539cd extract_insn(rtx_def*) >> /store/Xilinx/repo/fsf/gcc/gcc/recog.c:2204 >> 0x7a5b59 instantiate_virtual_regs_in_insn >> /store/Xilinx/repo/fsf/gcc/gcc/function.c:1561 >> 0x7aaa78 instantiate_virtual_regs >> /store/Xilinx/repo/fsf/gcc/gcc/function.c:1932 >>
It is really this patch to cause this issue. After add this patch, it will be fail for compiling the below C code: typedef void (*T)(void); f1 () { ((T) 0)(); } And I guess, the original compiling warning is still useful for us: for the almost same code, the original gcc (no this patch) also report the same error: f1 () { ((void (*)(void))0)(); } The related command is "./cc1 call.c -o /tmp/test.s" ('call.c' has the contents above). And I shall continue analysing it (I shall try to finish within this month). And also welcome any ideas, suggestions or completions. Thanks. -- Chen Gang Open share and attitude like air water and life which God blessed