Re: nvtpx: error: array subscript -1 is below array bounds of 'short int [2][16]'

2021-09-17 Thread Martin Sebor via Gcc

On 9/4/21 1:10 PM, Jan-Benedict Glaw wrote:

Hi!

Running automated tests again, I found that when building current
(2fcfc03459a907c0237ea6e2c6e4ce4871034bed) GCC with a recent GCC, a
build (make all-gcc) when ./configure'ed for -target=nvptx-none
--enable-werror-always --enable-languages=all --disable-gcov
--disable-shared --disable-threads --without-headers fails with:


I was able to reproduce the warning.  The IL that triggers it is
below:

   [local count: 64737]:
  _1504 = MEM[(const struct rtx_def *)dreg_1461].u.reg.regno;
  dregno_1505 = (int) _1504;
  _1506 = (long unsigned int) dregno_1505;
  _1507 = _1506 * 2;
  _1508 = reg_renumber.845_1499 + _1507;
  _1509 = default_target_ira.x_ira_class_hard_regs[dclass.380_1481][0];

dclass.380_1481 is an SSA_NAME in the range int [-INF, -1], so
the warning is working as designed.

dclass' type is enum reg_class which is defined like so:

  emum enum reg_class { NO_REGS, ALL_REGS, LIM_REG_CLASSES };

GCC treats it as signed despite it having no negative enumerators,
and somehow infers its range as negative.  Since (if) none of its
values can be negative as I suspect, defining it as unsigned should
help:

  emum enum reg_class: unsigned { NO_REGS, ALL_REGS, LIM_REG_CLASSES };

And, in fact, it does avoid the warning.  I haven't done any other
testing with this change but I'd expect it to also improve codegen
by letting GCC eliminate what's probably unreachable code (which
the warning might then be issued for).

You didn't say what you're looking for but I would suggest to start
by opening a bug in Bugzilla, attaching the preprocessed translation
unit for lra-constraints.c, and referencing this discussion.  To get
it fixed quickly I'd try testing (and, if successful, submitting)
the enum change above.  Another, more targeted solution, the change
above isn't safe, is to add asserting above the uses of the dclass
and sclass variables as indices that they're not negative, e.g.,
like so:

  if (dclass < 0)
gcc_unreachable ();

Martin



[all 2021-09-04 16:33:59] /usr/lib/gcc-snapshot/bin/g++  -fno-PIE -c   -g -O2 
-DIN_GCC  -DCROSS_DIRECTORY_STRUCTURE   -fno-exceptions -fno-rtti 
-fasynchronous-unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings 
-Wcast-qual -Wno-error=format-diag -Wmissing-format-attribute 
-Woverloaded-virtual -pedantic -Wno-long-long -Wno-variadic-macros 
-Wno-overlength-strings -Werror -fno-common  -DHAVE_CONFIG_H -I. -I. 
-I../../gcc/gcc -I../../gcc/gcc/. -I../../gcc/gcc/../include 
-I../../gcc/gcc/../libcpp/include -I../../gcc/gcc/../libcody  
-I../../gcc/gcc/../libdecnumber -I../../gcc/gcc/../libdecnumber/dpd 
-I../libdecnumber -I../../gcc/gcc/../libbacktrace   -o lra-constraints.o -MT 
lra-constraints.o -MMD -MP -MF ./.deps/lra-constraints.TPo 
../../gcc/gcc/lra-constraints.c
[all 2021-09-04 16:34:07] In function 'bool check_and_process_move(bool*, 
bool*)',
[all 2021-09-04 16:34:07] inlined from 'bool curr_insn_transform(bool)' at 
../../gcc/gcc/lra-constraints.c:4092:33:
[all 2021-09-04 16:34:07] ../../gcc/gcc/lra-constraints.c:1317:56: error: array 
subscript -1 is below array bounds of 'short int [2][16]' [-Werror=array-bounds]
[all 2021-09-04 16:34:07]  1317 |   reg_renumber[dregno] = 
ira_class_hard_regs[dclass][0];
[all 2021-09-04 16:34:07] In file included from 
../../gcc/gcc/lra-constraints.c:123:
[all 2021-09-04 16:34:07] ../../gcc/gcc/ira.h: In function 'bool 
curr_insn_transform(bool)':
[all 2021-09-04 16:34:07] ../../gcc/gcc/ira.h:85:9: note: while referencing 
'target_ira::x_ira_class_hard_regs'
[all 2021-09-04 16:34:07]85 |   short 
x_ira_class_hard_regs[N_REG_CLASSES][FIRST_PSEUDO_REGISTER];
[all 2021-09-04 16:34:07]   | ^
[all 2021-09-04 16:34:07] In function 'bool check_and_process_move(bool*, 
bool*)',
[all 2021-09-04 16:34:07] inlined from 'bool curr_insn_transform(bool)' at 
../../gcc/gcc/lra-constraints.c:4092:33:
[all 2021-09-04 16:34:07] ../../gcc/gcc/lra-constraints.c:1324:56: error: array 
subscript -1 is below array bounds of 'short int [2][16]' [-Werror=array-bounds]
[all 2021-09-04 16:34:07]  1324 |   reg_renumber[sregno] = 
ira_class_hard_regs[sclass][0];
[all 2021-09-04 16:34:07] In file included from 
../../gcc/gcc/lra-constraints.c:123:
[all 2021-09-04 16:34:07] ../../gcc/gcc/ira.h: In function 'bool 
curr_insn_transform(bool)':
[all 2021-09-04 16:34:07] ../../gcc/gcc/ira.h:85:9: note: while referencing 
'target_ira::x_ira_class_hard_regs'
[all 2021-09-04 16:34:07]85 |   short 
x_ira_class_hard_regs[N_REG_CLASSES][FIRST_PSEUDO_REGISTER];
[all 2021-09-04 16:34:07]   | ^
[all 2021-09-04 16:34:13] cc1plus: all warnings being treated as errors
[all 2021-09-04 16:34:13] make[1]: *** [Makefile:1142: lra-constraints.o] Error 
1
[all 2021-09-04 16:34:13] make[1]: Leaving directory 
'/var/lib/laminar/run/gcc-nvptx-none/5/toolchain-build/gcc'
[all 2021-09-04 16:34:13] make: *** [Makefile:4407: all-gcc] Error 2

Thanks,
   

nvtpx: error: array subscript -1 is below array bounds of 'short int [2][16]'

2021-09-04 Thread Jan-Benedict Glaw
Hi!

Running automated tests again, I found that when building current
(2fcfc03459a907c0237ea6e2c6e4ce4871034bed) GCC with a recent GCC, a
build (make all-gcc) when ./configure'ed for -target=nvptx-none
--enable-werror-always --enable-languages=all --disable-gcov
--disable-shared --disable-threads --without-headers fails with:

[all 2021-09-04 16:33:59] /usr/lib/gcc-snapshot/bin/g++  -fno-PIE -c   -g -O2 
-DIN_GCC  -DCROSS_DIRECTORY_STRUCTURE   -fno-exceptions -fno-rtti 
-fasynchronous-unwind-tables -W -Wall -Wno-narrowing -Wwrite-strings 
-Wcast-qual -Wno-error=format-diag -Wmissing-format-attribute 
-Woverloaded-virtual -pedantic -Wno-long-long -Wno-variadic-macros 
-Wno-overlength-strings -Werror -fno-common  -DHAVE_CONFIG_H -I. -I. 
-I../../gcc/gcc -I../../gcc/gcc/. -I../../gcc/gcc/../include 
-I../../gcc/gcc/../libcpp/include -I../../gcc/gcc/../libcody  
-I../../gcc/gcc/../libdecnumber -I../../gcc/gcc/../libdecnumber/dpd 
-I../libdecnumber -I../../gcc/gcc/../libbacktrace   -o lra-constraints.o -MT 
lra-constraints.o -MMD -MP -MF ./.deps/lra-constraints.TPo 
../../gcc/gcc/lra-constraints.c
[all 2021-09-04 16:34:07] In function 'bool check_and_process_move(bool*, 
bool*)',
[all 2021-09-04 16:34:07] inlined from 'bool curr_insn_transform(bool)' at 
../../gcc/gcc/lra-constraints.c:4092:33:
[all 2021-09-04 16:34:07] ../../gcc/gcc/lra-constraints.c:1317:56: error: array 
subscript -1 is below array bounds of 'short int [2][16]' [-Werror=array-bounds]
[all 2021-09-04 16:34:07]  1317 |   reg_renumber[dregno] = 
ira_class_hard_regs[dclass][0];
[all 2021-09-04 16:34:07] In file included from 
../../gcc/gcc/lra-constraints.c:123:
[all 2021-09-04 16:34:07] ../../gcc/gcc/ira.h: In function 'bool 
curr_insn_transform(bool)':
[all 2021-09-04 16:34:07] ../../gcc/gcc/ira.h:85:9: note: while referencing 
'target_ira::x_ira_class_hard_regs'
[all 2021-09-04 16:34:07]85 |   short 
x_ira_class_hard_regs[N_REG_CLASSES][FIRST_PSEUDO_REGISTER];
[all 2021-09-04 16:34:07]   | ^
[all 2021-09-04 16:34:07] In function 'bool check_and_process_move(bool*, 
bool*)',
[all 2021-09-04 16:34:07] inlined from 'bool curr_insn_transform(bool)' at 
../../gcc/gcc/lra-constraints.c:4092:33:
[all 2021-09-04 16:34:07] ../../gcc/gcc/lra-constraints.c:1324:56: error: array 
subscript -1 is below array bounds of 'short int [2][16]' [-Werror=array-bounds]
[all 2021-09-04 16:34:07]  1324 |   reg_renumber[sregno] = 
ira_class_hard_regs[sclass][0];
[all 2021-09-04 16:34:07] In file included from 
../../gcc/gcc/lra-constraints.c:123:
[all 2021-09-04 16:34:07] ../../gcc/gcc/ira.h: In function 'bool 
curr_insn_transform(bool)':
[all 2021-09-04 16:34:07] ../../gcc/gcc/ira.h:85:9: note: while referencing 
'target_ira::x_ira_class_hard_regs'
[all 2021-09-04 16:34:07]85 |   short 
x_ira_class_hard_regs[N_REG_CLASSES][FIRST_PSEUDO_REGISTER];
[all 2021-09-04 16:34:07]   | ^
[all 2021-09-04 16:34:13] cc1plus: all warnings being treated as errors
[all 2021-09-04 16:34:13] make[1]: *** [Makefile:1142: lra-constraints.o] Error 
1
[all 2021-09-04 16:34:13] make[1]: Leaving directory 
'/var/lib/laminar/run/gcc-nvptx-none/5/toolchain-build/gcc'
[all 2021-09-04 16:34:13] make: *** [Makefile:4407: all-gcc] Error 2

Thanks,
  Jan-Benedict

-- 


signature.asc
Description: PGP signature