https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68756

            Bug ID: 68756
           Summary: [6 Regression] ICE w/ -O1 -floop-nest-optimize and isl
                    0.15: isl-0.15/isl_id.c:213: unable to find id
           Product: gcc
           Version: 6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: asolokha at gmx dot com
  Target Milestone: ---

1. At least gcc-6.0.0-alpha20151129 and gcc-6.0.0-alpha20151206 snapshots hang
when compiling the following reduced snippet w/ -O1 -floop-nest-optimize:

unsigned int z4, pz;
int nn[2];

static unsigned int
xq(unsigned int dj)
{
  return dj > 1 ? z4 : z4 | dj;
}

void
la(void)
{
  int hd, dl;
  unsigned int hn = 0;
  for (hd = 0; hd < 2; ++hd) {
    for (dl = 0; dl < 2; ++dl)
      nn[dl] = 0;
    --hn;
    pz = xq(hn);
  }
}

GDB produces rather uninformative (incomplete) backtrace for cc1 for this case:

Program received signal SIGSEGV, Segmentation fault.
0x000003fff728b2d9 in malloc_consolidate () from /lib64/libc.so.6
(gdb) where
#0  0x000003fff728b2d9 in malloc_consolidate () from /lib64/libc.so.6
#1  0x000003fff728d0eb in _int_malloc () from /lib64/libc.so.6
#2  0x000003fff728f96f in calloc () from /lib64/libc.so.6
#3  0x000000000132a9d1 in xcalloc ()
#4  0x0000000000c6b200 in ?? ()
#5  0x0000000000a5b86b in execute_one_pass(opt_pass*) ()
#6  0x0000000000a5be98 in ?? ()
#7  0x0000000000a5beaa in ?? ()
#8  0x0000000000a5beaa in ?? ()
#9  0x0000000000a5beaa in ?? ()
#10 0x0000000000a5bef5 in execute_pass_list(function*, opt_pass*) ()
#11 0x0000000000764547 in cgraph_node::expand() ()
#12 0x0000000000765eb7 in ?? ()
#13 0x0000000000768713 in symbol_table::finalize_compilation_unit() ()
#14 0x0000000000b273a2 in ?? ()
#15 0x00000000005cff3a in toplev::main(int, char**) ()
#16 0x00000000005d2147 in main ()

Valgrind, surprisingly, produce a different one:

--------8<--------
==17739== Invalid read of size 8
==17739==    at 0x4ADA070: isl_id_free (in /usr/lib64/libisl.so.15.0.0)
==17739==    by 0x4B88BE4: isl_space_free (in /usr/lib64/libisl.so.15.0.0)
==17739==    by 0x4AFCC77: isl_map_free (in /usr/lib64/libisl.so.15.0.0)
==17739==    by 0x4A95F3D: ??? (in /usr/lib64/libisl.so.15.0.0)
==17739==    by 0x4B2AC7C: isl_hash_table_foreach (in
/usr/lib64/libisl.so.15.0.0)
==17739==    by 0x4A96ACC: isl_union_map_free (in /usr/lib64/libisl.so.15.0.0)
==17739==    by 0x11F548A: free_scop(scop*) (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==17739==    by 0x11EA70F: graphite_transform_loops() (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==17739==    by 0x11EAC20: ??? (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==17739==    by 0xA5B86A: execute_one_pass(opt_pass*) (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==17739==    by 0xA5BE97: ??? (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==17739==    by 0xA5BEA9: ??? (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==17739==  Address 0x5aacdb8 is 8 bytes inside a block of size 48 free'd
==17739==    at 0x402BCBF: free (in
/usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==17739==    by 0x4ADA0B0: isl_id_free (in /usr/lib64/libisl.so.15.0.0)
==17739==    by 0x4B88BDB: isl_space_free (in /usr/lib64/libisl.so.15.0.0)
==17739==    by 0x4AFCC77: isl_map_free (in /usr/lib64/libisl.so.15.0.0)
==17739==    by 0x4A95F3D: ??? (in /usr/lib64/libisl.so.15.0.0)
==17739==    by 0x4B2AC7C: isl_hash_table_foreach (in
/usr/lib64/libisl.so.15.0.0)
==17739==    by 0x4A96ACC: isl_union_map_free (in /usr/lib64/libisl.so.15.0.0)
==17739==    by 0x11F548A: free_scop(scop*) (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==17739==    by 0x11EA70F: graphite_transform_loops() (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==17739==    by 0x11EAC20: ??? (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==17739==    by 0xA5B86A: execute_one_pass(opt_pass*) (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==17739==    by 0xA5BE97: ??? (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==17739==  Block was alloc'd at
==17739==    at 0x402CC93: calloc (in
/usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==17739==    by 0x4B221DD: isl_calloc_or_die (in /usr/lib64/libisl.so.15.0.0)
==17739==    by 0x4ADA28A: isl_id_alloc (in /usr/lib64/libisl.so.15.0.0)
==17739==    by 0x11FEA85: build_poly_scop(scop*) (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==17739==    by 0x11EA67A: graphite_transform_loops() (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==17739==    by 0x11EAC20: ??? (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==17739==    by 0xA5B86A: execute_one_pass(opt_pass*) (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==17739==    by 0xA5BE97: ??? (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==17739==    by 0xA5BEA9: ??? (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==17739==    by 0xA5BEA9: ??? (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==17739==    by 0xA5BEA9: ??? (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==17739==    by 0xA5BEF4: execute_pass_list(function*, opt_pass*) (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==17739== 
/var/tmp/portage/dev-libs/isl-0.15/work/isl-0.15/isl_id.c:213: unable to find
id
--17739-- REDIR: 0x53a21d0 (libc.so.6:__GI_stpcpy) redirected to 0x40316c0
(__GI_stpcpy)
wjdkwo0v.i: In function 'la':
--17739-- REDIR: 0x53a1180 (libc.so.6:memchr) redirected to 0x402f840 (memchr)
wjdkwo0v.i:11:1: internal compiler error: Aborted
 la(void)
 ^~
-------->8--------


2. After replacing "bitwise or" w/ "plus" in xq(), driver propagates ICE to the
user:

% gcc-6.0.0-alpha20151206 -c -std=c99 -Wall -Wextra -Wpedantic -O1
-floop-nest-optimize wjdkwo0v.c    
wjdkwo0v.c: In function 'la':
wjdkwo0v.c:11:1: internal compiler error: Segmentation fault
 la(void)
 ^~

After this change GDB and Valgrind start to agree on the backtrace, but the
backtrace itself is now different:

==25869== Invalid read of size 2
==25869==    at 0x1280E7D: ??? (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==25869==    by 0x1281832: sese_insert_phis_for_liveouts(sese_info_t*,
basic_block_def*, edge_def*, edge_def*) (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==25869==    by 0x11F3732: graphite_regenerate_ast_isl(scop*) (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==25869==    by 0x11EA695: graphite_transform_loops() (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==25869==    by 0x11EAC20: ??? (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==25869==    by 0xA5B86A: execute_one_pass(opt_pass*) (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==25869==    by 0xA5BE97: ??? (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==25869==    by 0xA5BEA9: ??? (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==25869==    by 0xA5BEA9: ??? (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==25869==    by 0xA5BEA9: ??? (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==25869==    by 0xA5BEF4: execute_pass_list(function*, opt_pass*) (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==25869==    by 0x764546: cgraph_node::expand() (in
/usr/libexec/gcc/x86_64-pc-linux-gnu/6.0.0-alpha20151206/cc1)
==25869==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==25869== 
--25869-- REDIR: 0x53a21d0 (libc.so.6:__GI_stpcpy) redirected to 0x40316c0
(__GI_stpcpy)
wjdkwo0v.c: In function 'la':
--25869-- REDIR: 0x53a1180 (libc.so.6:memchr) redirected to 0x402f840 (memchr)
wjdkwo0v.c:11:1: internal compiler error: Segmentation fault
 la(void)
 ^~

Reply via email to