Search code examples
gccfortrancompiler-warningsgfortrancompiler-flags

Unable to suppress bound checking


Firstly, I wasn't aware that bound checking was automatic when using gfortran. With the following code:

gfortran -Wno-array-bounds initial_parameters.f08 derrived_types.f08 lin_alg.f08 constitutive_models.f08 input_subs.f08 Subprograms.f08 mainprog.f08 

I still receive the compile time warnings:

Warning: Array reference at (1) is out of bounds (3 > 2) in dimension 2

I am probably being silly here but from reading this, I thought that -Wno-array-bounds was supposed to suppress this warning? Compiling with -w successfully inhibits all warnings.

I don't know if it's relevant but the source of these warning are "Subprograms.f08" and "constitutive_models.f08" which are both modules containing subroutines and are used in the main program.

The same behaviour occurs if I attempt to compile an individual module with

gfortran -Wno-array-bounds -c constitutive_models.f08 

Solution

  • I can confirm that compile warning with gfortran (4.4) with this simple code:

     integer,parameter::dim=3
     integer :: x(2)
     if(dim.eq.1)write(*,*)x(dim)
     end
    

    Warning: Array reference at (1) is out of bounds (3 > 2) in dimension 2

    this could arguably be considered a bug since one would expect the compiler to optimize out the whole if statement. Note ifort compiles this just fine.

    a very simple workaround fixes this example:

     integer,parameter::dim=3
     integer :: x(2),dimx=dim
     if(dim.eq.1)write(*,*)x(dimx)
     end
    

    of course since its just a warning, and you know its not a problem, you can choose to ignore it too !

    note the use of the parameter in the logical, in case the compiler feels like optimizing it later.