[Bug middle-end/81724] ICE in expand_stack_vars
tschwinge at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Aug 30 19:25:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81724
Thomas Schwinge <tschwinge at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2017-08-30
CC| |tschwinge at gcc dot gnu.org
Ever confirmed|0 |1
--- Comment #2 from Thomas Schwinge <tschwinge at gcc dot gnu.org> ---
I once (months ago, and only very briefly) looked into this; here are my notes,
if that's helpful -- probably not too much. ;-)
If I'm now reading my notes correctly, this appeared with trunk r238432
"Allocate constant size dynamic stack space in the prologue",
<http://mid.mail-archive.com/20151125125610.GA19687@linux.vnet.ibm.com>.
$ build-gcc/gcc/xgcc -Bbuild-gcc/gcc/
source-gcc/gcc/testsuite/gcc.dg/stack-layout-dynamic-1.c
-fno-diagnostics-show-caret -fdiagnostics-color=never
--sysroot=install/nvptx-none -O0 -fomit-frame-pointer -DSTACK_SIZE=8192
-DNO_TRAMPOLINES -DNO_LABEL_VALUES -DSIGNAL_SUPPRESS -S -isystem
build-gcc/nvptx-none/./newlib/targ-include -isystem
source-gcc/newlib/libc/include -o stack-layout-dynamic-1.s
$ build-gcc/gcc/xgcc -Bbuild-gcc/gcc/
source-gcc/gcc/testsuite/gcc.dg/stack-layout-dynamic-1.c -O0
-fomit-frame-pointer -S
[...]/source-gcc/gcc/testsuite/gcc.dg/stack-layout-dynamic-1.c: In function
'foo':
[...]/source-gcc/gcc/testsuite/gcc.dg/stack-layout-dynamic-1.c:7:6:
internal compiler error: RTL check: expected code 'const_int', have 'reg' in
expand_stack_vars, at cfgexpand.c:1196
0xaa7607 rtl_check_failed_code1(rtx_def const*, rtx_code, char const*, int,
char const*)
[...]/source-gcc/gcc/rtl.c:811
0x6a2c42 expand_stack_vars
[...]/source-gcc/gcc/cfgexpand.c:1196
0x6b1146 expand_used_vars
[...]/source-gcc/gcc/cfgexpand.c:2251
0x6b2a60 execute
[...]/source-gcc/gcc/cfgexpand.c:6237
$ build-gcc-offload-nvptx-none/gcc/xgcc -Bbuild-gcc-offload-nvptx-none/gcc/
source-gcc/gcc/testsuite/gcc.dg/stack-layout-dynamic-1.c -O0
-fomit-frame-pointer -S
#0 internal_error (gmsgid=gmsgid@entry=0x1219800 "RTL check: expected code
'%s', have '%s' in %s, at %s:%d") at [...]/source-gcc/gcc/diagnostic.c:1335
#1 0x0000000000abfb48 in rtl_check_failed_code1 (r=r@entry=0x7ffff69c9ac8,
code=<optimized out>, code@entry=CONST_INT, file=<optimized out>,
file@entry=0x11b6a58 "[...]/source-gcc/gcc/cfgexpand.c", line=<optimized out>,
line@entry=1198, func=<optimized out>, func@entry=0x11b85b0
<expand_stack_vars(bool (*)(unsigned long), stack_vars_data*)::__FUNCTION__>
"expand_stack_vars") at [...]/source-gcc/gcc/rtl.c:811
#2 0x00000000006b6bc2 in expand_stack_vars (pred=pred@entry=0x0,
data=data@entry=0x7fffffffcb50) at [...]/source-gcc/gcc/cfgexpand.c:1198
#3 0x00000000006c5cf7 in expand_used_vars () at
[...]/source-gcc/gcc/cfgexpand.c:2253
#4 0x00000000006c6252 in (anonymous namespace)::pass_expand::execute
(this=0x16d3be0, fun=0x7ffff6982b28) at [...]/source-gcc/gcc/cfgexpand.c:6239
#5 0x0000000000a4942d in execute_one_pass (pass=pass@entry=0x16d3be0) at
[...]/source-gcc/gcc/passes.c:2344
#6 0x0000000000a49a48 in execute_pass_list_1 (pass=0x16d3be0) at
[...]/source-gcc/gcc/passes.c:2428
#7 0x0000000000a49aa5 in execute_pass_list (fn=0x7ffff6982b28,
pass=<optimized out>) at [...]/source-gcc/gcc/passes.c:2439
#8 0x000000000070283d in cgraph_node::expand
(this=this@entry=0x7ffff69c6000) at [...]/source-gcc/gcc/cgraphunit.c:1983
#9 0x0000000000704274 in expand_all_functions () at
[...]/source-gcc/gcc/cgraphunit.c:2119
#10 symbol_table::compile (this=this@entry=0x7ffff68d2000) at
[...]/source-gcc/gcc/cgraphunit.c:2477
#11 0x000000000070646a in symbol_table::finalize_compilation_unit
(this=0x7ffff68d2000) at [...]/source-gcc/gcc/cgraphunit.c:2567
#12 0x0000000000b12fcd in compile_file () at
[...]/source-gcc/gcc/toplev.c:490
#13 0x000000000055074b in do_compile () at
[...]/source-gcc/gcc/toplev.c:1998
#14 toplev::main (this=this@entry=0x7fffffffcf20, argc=argc@entry=20,
argv=argv@entry=0x7fffffffd028) at [...]/source-gcc/gcc/toplev.c:2132
#15 0x0000000000552407 in main (argc=20, argv=0x7fffffffd028) at
[...]/source-gcc/gcc/main.c:39
(gdb) frame 2
#2 0x00000000006b6bc2 in expand_stack_vars (pred=pred@entry=0x0,
data=data@entry=0x7fffffffcb50) at [...]/source-gcc/gcc/cfgexpand.c:1198
1198 (INTVAL (large_allocsize),
(gdb) list
1193 rtx large_allocsize;
1194
1195 large_allocsize = GEN_INT (large_size);
1196 get_dynamic_stack_size (&large_allocsize, 0,
large_align, NULL);
1197 loffset = alloc_stack_frame_space
1198 (INTVAL (large_allocsize),
1199 PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT);
1200 large_base = get_dynamic_stack_base (loffset,
large_align);
1201 large_allocation_done = true;
1202 }
(gdb) print large_allocsize
$1 = (rtx) 0x7ffff69c9ac8
(gdb) call debug_rtx(large_allocsize)
(reg:DI 26)
(gdb) print large_size
$2 = 66048
Restart with...
Breakpoint 2, get_dynamic_stack_size (psize=psize@entry=0x7fffffffcaa0,
size_align=size_align@entry=0, required_align=required_align@entry=524288,
pstack_usage_size=pstack_usage_size@entry=0x0) at
[...]/source-gcc/gcc/explow.c:1192
1192 {
(gdb) print *psize
$1 = (rtx) 0x7ffff69afb00
(gdb) call debug_rtx(*psize)
(const_int 66048 [0x10200])
Later, in gcc/explow.c:get_dynamic_stack_size, gcc/explow.c:round_push is
called, which turns the "const_int" into "reg:DI".
This is avoided if removing the MAX_STACK_ALIGNMENT definition from
gcc/config/nvptx/nvptx.h (which seems a bit random indeed; TODO: look up
details), but while removing a bunch of internal compiler errors, that also
causes a bunch of "sorry, unimplemented: target cannot support alloca"
regressions all over the place:
[-PASS:-]{+FAIL:+} gcc.c-torture/execute/pr65369.c -O0 (test for excess
errors)
[-PASS:-]{+UNRESOLVED:+} gcc.c-torture/execute/pr65369.c -O0 [-execution
test-]
[-PASS:-]{+compilation failed to produce executable+}
{+FAIL:+} gcc.c-torture/execute/pr65369.c -O1 (test for excess errors)
[-PASS:-]{+UNRESOLVED:+} gcc.c-torture/execute/pr65369.c -O1 [-execution
test-]
[-PASS:-]{+compilation failed to produce executable+}
{+FAIL:+} gcc.c-torture/execute/pr65369.c -O2 (test for excess errors)
[-PASS:-]{+UNRESOLVED:+} gcc.c-torture/execute/pr65369.c -O2 [-execution
test-]
[-PASS:-]{+compilation failed to produce executable+}
{+FAIL:+} gcc.c-torture/execute/pr65369.c -O3 -g (test for excess
errors)
[-PASS:-]{+UNRESOLVED:+} gcc.c-torture/execute/pr65369.c -O3 -g
[-execution test-]
[-PASS:-]{+compilation failed to produce executable+}
{+FAIL:+} gcc.c-torture/execute/pr65369.c -Os (test for excess errors)
[-PASS:-]{+UNRESOLVED:+} gcc.c-torture/execute/pr65369.c -Os [-execution
test-]{+compilation failed to produce executable+}
Running
/scratch/tschwing/nvidiak20-2/openacc/nvptx-trunk-light-work/source-gcc/gcc/testsuite/gcc.dg/compat/struct-layout-1.exp
...
PASS: tmpdir-gcc.dg-struct-layout-1/t001 c_compat_main_tst.o compile
[-PASS:-]{+FAIL:+} tmpdir-gcc.dg-struct-layout-1/t001 c_compat_x_tst.o
compile
[-PASS:-]{+FAIL:+} tmpdir-gcc.dg-struct-layout-1/t001 c_compat_y_tst.o
compile
[-PASS:-]{+UNRESOLVED:+} tmpdir-gcc.dg-struct-layout-1/t001
c_compat_x_tst.o-c_compat_y_tst.o link
[-PASS:-]{+UNRESOLVED:+} tmpdir-gcc.dg-struct-layout-1/t001
c_compat_x_tst.o-c_compat_y_tst.o execute
[...]
[-PASS:-]{+FAIL:+} gcc.dg/pr32293.c (test for excess errors)
[-PASS:-]{+FAIL:+} gcc.dg/graphite/pr29581-1.c (test for excess errors)
[-PASS:-]{+UNRESOLVED:+} gcc.dg/graphite/pr29581-1.c [-execution
test-]{+compilation failed to produce executable+}
[-PASS:-]{+FAIL:+} gcc.dg/graphite/pr29581-3.c (test for excess errors)
[-PASS:-]{+UNRESOLVED:+} gcc.dg/graphite/pr29581-3.c [-execution
test-]{+compilation failed to produce executable+}
[-PASS:-]{+FAIL:+} gcc.dg/graphite/pr29581-4.c (test for excess errors)
[-PASS:-]{+UNRESOLVED:+} gcc.dg/graphite/pr29581-4.c [-execution
test-]{+compilation failed to produce executable+}
Running
/scratch/tschwing/nvidiak20-2/openacc/nvptx-trunk-light-work/source-gcc/gcc/testsuite/g++.dg/compat/struct-layout-1.exp
...
PASS: tmpdir-g++.dg-struct-layout-1/t001 cp_compat_main_tst.o compile
[-PASS:-]{+FAIL:+} tmpdir-g++.dg-struct-layout-1/t001 cp_compat_x_tst.o
compile
[-PASS:-]{+FAIL:+} tmpdir-g++.dg-struct-layout-1/t001 cp_compat_y_tst.o
compile
[-FAIL:-]{+UNRESOLVED:+} tmpdir-g++.dg-struct-layout-1/t001
cp_compat_x_tst.o-cp_compat_y_tst.o link
{+UNRESOLVED: tmpdir-g++.dg-struct-layout-1/t001
cp_compat_x_tst.o-cp_compat_y_tst.o execute+}
[...]
UNSUPPORTED: g++.dg/cpp0x/gen-attrs-52.C -std=c++98
[-PASS:-]{+FAIL:+} g++.dg/cpp0x/gen-attrs-52.C -std=c++11 (test for excess
errors)
[-PASS:-]{+FAIL:+} g++.dg/cpp0x/gen-attrs-52.C -std=c++14 (test for excess
errors)
[-PASS:-]{+FAIL:+} g++.dg/opt/20050511-1.C -std=gnu++98 (test for excess
errors)
[-PASS:-]{+UNRESOLVED:+} g++.dg/opt/20050511-1.C -std=gnu++98 [-execution
test-]
[-PASS:-]{+compilation failed to produce executable+}
{+FAIL:+} g++.dg/opt/20050511-1.C -std=gnu++11 (test for excess errors)
[-PASS:-]{+UNRESOLVED:+} g++.dg/opt/20050511-1.C -std=gnu++11 [-execution
test-]
[-PASS:-]{+compilation failed to produce executable+}
{+FAIL:+} g++.dg/opt/20050511-1.C -std=gnu++14 (test for excess errors)
[-PASS:-]{+UNRESOLVED:+} g++.dg/opt/20050511-1.C -std=gnu++14 [-execution
test-]{+compilation failed to produce executable+}
[-PASS:-]{+FAIL:+} g++.dg/torture/pr36444.C -O0 (test for excess errors)
[-PASS:-]{+FAIL:+} g++.dg/torture/pr36444.C -O1 (test for excess errors)
[-PASS:-]{+FAIL:+} g++.dg/torture/pr36444.C -O2 (test for excess errors)
[-PASS:-]{+FAIL:+} g++.dg/torture/pr36444.C -O3 -g (test for excess
errors)
[-PASS:-]{+FAIL:+} g++.dg/torture/pr36444.C -Os (test for excess errors)
[-PASS:-]{+FAIL:+} g++.dg/torture/pr36445.C -O0 (test for excess errors)
[-PASS:-]{+FAIL:+} g++.dg/torture/pr36445.C -O1 (test for excess errors)
[-PASS:-]{+FAIL:+} g++.dg/torture/pr36445.C -O2 (test for excess errors)
[-PASS:-]{+FAIL:+} g++.dg/torture/pr36445.C -O3 -g (test for excess
errors)
[-PASS:-]{+FAIL:+} g++.dg/torture/pr36445.C -Os (test for excess errors)
More information about the Gcc-bugs
mailing list