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

--- Comment #4 from Martin Liška <marxin at gcc dot gnu.org> ---
(In reply to Steve Kargl from comment #3)
> On Tue, Oct 22, 2019 at 02:14:55PM +0000, marxin at gcc dot gnu.org wrote:
> > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92174
> > 
> > --- Comment #2 from Martin Liška <marxin at gcc dot gnu.org> ---
> > (In reply to kargl from comment #1)
> > > (In reply to Martin Liška from comment #0)
> > > > Happens with UBSAN build in:
> > > > 
> > > > $ ./xgcc -B.
> > > > /home/marxin/Programming/gcc/gcc/testsuite/gfortran.dg/pr91802.f90
> > > > -fcoarray=single
> > > > ../../gcc/fortran/array.c:867:36: runtime error: index 15 out of bounds 
> > > > for
> > > > type 'gfc_expr *[15]'
> > > 
> > > 
> > > What are you doing?  pr91802.f90 is a compile time test.
> > > It cannot generate a runtime error.
> > 
> > It's a runtime error of the GCC compiler that compiles the test-case ;)
> > The error message is a bit misleading.
> > 
> 
> So, what does your tool do?  gfortran correctly diagnosis
> that rank+corank > 15, issues an error, and exits.  What is
> the problem?

Problem is that the compiler invokes an undefined behaviour for the source
file.
You can see the same with the following patch:

diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c
index 427110bee74..166caca8347 100644
--- a/gcc/fortran/array.c
+++ b/gcc/fortran/array.c
@@ -864,6 +864,7 @@ gfc_set_array_spec (gfc_symbol *sym, gfc_array_spec *as,
locus *error_loc)
       sym->as->corank = as->corank;
       for (i = 0; i < as->corank; i++)
        {
+         gcc_assert (sym->as->rank + i < GFC_MAX_DIMENSIONS);
          sym->as->lower[sym->as->rank + i] = as->lower[i];
          sym->as->upper[sym->as->rank + i] = as->upper[i];
        }

$ ./xgcc -B. /home/marxin/Programming/gcc/gcc/testsuite/gfortran.dg/pr91802.f90
-fcoarray=single
f951: internal compiler error: in gfc_set_array_spec, at fortran/array.c:867
0x880e62 gfc_set_array_spec(gfc_symbol*, gfc_array_spec*, locus*)
        /home/marxin/Programming/gcc/gcc/fortran/array.c:867
0x8b3f6d attr_decl1
        /home/marxin/Programming/gcc/gcc/fortran/decl.c:8521
0x8b4114 attr_decl
        /home/marxin/Programming/gcc/gcc/fortran/decl.c:8582
0x8b46f0 gfc_match_codimension()
        /home/marxin/Programming/gcc/gcc/fortran/decl.c:8855
0x93dd54 match_word
        /home/marxin/Programming/gcc/gcc/fortran/parse.c:65
0x93efcb decode_statement
        /home/marxin/Programming/gcc/gcc/fortran/parse.c:464
0x944185 next_free
        /home/marxin/Programming/gcc/gcc/fortran/parse.c:1272
0x944727 next_statement
        /home/marxin/Programming/gcc/gcc/fortran/parse.c:1504
0x947bf0 parse_spec
        /home/marxin/Programming/gcc/gcc/fortran/parse.c:3902
0x94b747 parse_module
        /home/marxin/Programming/gcc/gcc/fortran/parse.c:6085
0x94c15b gfc_parse_file()
        /home/marxin/Programming/gcc/gcc/fortran/parse.c:6390
0x9ad167 gfc_be_parse_file
        /home/marxin/Programming/gcc/gcc/fortran/f95-lang.c:208
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.

Note that sym->as->lower is defined as:
  struct gfc_expr *lower[GFC_MAX_DIMENSIONS], *upper[GFC_MAX_DIMENSIONS];

Hope it's clear now? Thanks.

Reply via email to