[Bug tree-optimization/70392] New: [openacc] inconsistent line numbers in uninitialised warnings for if clause

vries at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu Mar 24 10:33:00 GMT 2016


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

            Bug ID: 70392
           Summary: [openacc] inconsistent line numbers in uninitialised
                    warnings for if clause
           Product: gcc
           Version: 6.0
            Status: UNCONFIRMED
          Severity: minor
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: vries at gcc dot gnu.org
  Target Milestone: ---

I. uninitialized warning, regular

1. In fortran, the line number for the uninitialized warning is the one for the
use:
...
$ cat -n uninit.f95 
     1  subroutine foo
     2  
     3    integer :: i
     4  
     5    i = i + 1
     6  
     7  end subroutine foo
$ gfortran -Wuninitialized uninit.f95 -S
uninit.f95:5:0:

   i = i + 1

Warning: ‘i’ is used uninitialized in this function [-Wuninitialized]
....

2. In C, that's the same:
...
$ cat -n uninit.c
     1  void
     2  foo (void)
     3  {
     4    int i;
     5  
     6    i++;
     7  }
$ gcc -Wuninitialized uninit.c -S
uninit.c: In function ‘foo’:
uninit.c:6:4: warning: ‘i’ is used uninitialized in this function
[-Wuninitialized]
   i++;
   ~^~
...

3. And in C++, still the same:
...
$ g++ -Wuninitialized uninit.c -S
uninit.c: In function ‘void foo()’:
uninit.c:6:6: warning: ‘i’ is used uninitialized in this function
[-Wuninitialized]
   i++;
      ^
...


II. uninitialized warning, openacc if-clause

1. Again, in Fortran, the line number for the uninitialized warning is the one
for the use:
...
$ cat -n uninit-if.f95
     1  
     2  program test
     3    implicit none
     4    logical :: b, b2, b3, b4
     5    integer :: data, data2
     6  
     7    !$acc parallel if(b)
     8    !$acc end parallel
     9  
    10    !$acc kernels if(b2)
    11    !$acc end kernels
    12  
    13    !$acc data if(b3)
    14    !$acc end data
    15  
    16    !$acc update if(b4) self(data2)
    17  
    18  end program test
$ gfortran -Wuninitialized uninit-if.f95 -S -fopenacc
uninit-if.f95:7:0:

   !$acc parallel if(b)

Warning: ‘b’ is used uninitialized in this function [-Wuninitialized]
uninit-if.f95:10:0:

   !$acc kernels if(b2)

Warning: ‘b2’ is used uninitialized in this function [-Wuninitialized]
uninit-if.f95:13:0:

   !$acc data if(b3)

Warning: ‘b3’ is used uninitialized in this function [-Wuninitialized]
uninit-if.f95:16:0:

   !$acc update if(b4) self(data2)

Warning: ‘b4’ is used uninitialized in this function [-Wuninitialized]
...

2. In C, that's the same:
...
$ cat -n uninit-if.c
     1  #include <stdbool.h>
     2  
     3  int
     4  main (void)
     5  {
     6    int i, i2, i3, i4;
     7    bool b, b2, b3, b4;
     8    int data, data2;
     9  
    10    #pragma acc parallel if(i)
    11    ;
    12  
    13    #pragma acc parallel if(b)
    14    ;
    15  
    16    #pragma acc kernels if(i2)
    17    ;
    18  
    19    #pragma acc kernels if(b2)
    20    ;
    21  
    22    #pragma acc data if(i3)
    23    ;
    24  
    25    #pragma acc data if(b3)
    26    ;
    27  
    28    #pragma acc update if(i4) self(data)
    29    ;
    30  
    31    #pragma acc update if(b4) self(data2)
    32    ;
    33  
    34  }
$ ./lean/install/bin/gcc -Wuninitialized uninit-if.c -S -fopenacc
uninit-if.c: In function ‘main’:
uninit-if.c:10:27: warning: ‘i’ is used uninitialized in this function
[-Wuninitialized]
   #pragma acc parallel if(i)
                           ^
uninit-if.c:13:27: warning: ‘b’ is used uninitialized in this function
[-Wuninitialized]
   #pragma acc parallel if(b)
                           ^
uninit-if.c:16:26: warning: ‘i2’ is used uninitialized in this function
[-Wuninitialized]
   #pragma acc kernels if(i2)
                          ^~
uninit-if.c:19:26: warning: ‘b2’ is used uninitialized in this function
[-Wuninitialized]
   #pragma acc kernels if(b2)
                          ^~
uninit-if.c:22:23: warning: ‘i3’ is used uninitialized in this function
[-Wuninitialized]
   #pragma acc data if(i3)
                       ^~
uninit-if.c:25:23: warning: ‘b3’ is used uninitialized in this function
[-Wuninitialized]
   #pragma acc data if(b3)
                       ^~
uninit-if.c:28:25: warning: ‘i4’ is used uninitialized in this function
[-Wuninitialized]
   #pragma acc update if(i4) self(data)
                         ^~
uninit-if.c:31:25: warning: ‘b4’ is used uninitialized in this function
[-Wuninitialized]
   #pragma acc update if(b4) self(data2)
                         ^~
...

3. For C++ however, for the bool variables, we get the line number of the
declaration:
...
$ ./lean/install/bin/g++ -Wuninitialized uninit-if.c -S -fopenacc
uninit-if.c: In function ‘int main()’:
uninit-if.c:10:29: warning: ‘i’ is used uninitialized in this function
[-Wuninitialized]
   #pragma acc parallel if(i)
                             ^
uninit-if.c:7:8: warning: ‘b’ is used uninitialized in this function
[-Wuninitialized]
   bool b, b2, b3, b4;
        ^
uninit-if.c:16:29: warning: ‘i2’ is used uninitialized in this function
[-Wuninitialized]
   #pragma acc kernels if(i2)
                             ^
uninit-if.c:7:11: warning: ‘b2’ is used uninitialized in this function
[-Wuninitialized]
   bool b, b2, b3, b4;
           ^~
uninit-if.c:22:26: warning: ‘i3’ is used uninitialized in this function
[-Wuninitialized]
   #pragma acc data if(i3)
                          ^
uninit-if.c:7:15: warning: ‘b3’ is used uninitialized in this function
[-Wuninitialized]
   bool b, b2, b3, b4;
               ^~
uninit-if.c:28:39: warning: ‘i4’ is used uninitialized in this function
[-Wuninitialized]
   #pragma acc update if(i4) self(data)
                                       ^
uninit-if.c:7:19: warning: ‘b4’ is used uninitialized in this function
[-Wuninitialized]
   bool b, b2, b3, b4;
                   ^~
...


More information about the Gcc-bugs mailing list