------- Comment #4 from burnus at gcc dot gnu dot org  2008-05-24 11:02 -------
CONFIRM. Due to the missing checking it works with openSUSE's 4.1, 4.2, 4.3;
however, if one studies the source code, it is also wrong in other 4.x besides
4.4. The current test case fails only on systems where c_intptr_t == 8, but it
can easily be modified to show the same problem on c_intptr_t == 4 systems by
changing in

  INTEGER       :: global_length,local_start,local_end,nchnks
END TYPE distributed_vector

INTEGER into INTEGER(8) (which in turn fixes the program in -m64 systems).


The original dump shows the problem:

caininad_scale_distvec ()
    integer(kind=8) D.1027;
    integer(kind=4) D.1026;
    integer(kind=4) D.1025;
    D.1023 = &pvazg;
    D.1025 = D.1023->local_start;
    D.1026 = D.1023->local_end;
    D.1027 = D.1026 - D.1025;  // which is integer(8) = integer(4) - integer(4)


D.1023->local_start; and D.1023->local_end; are used in:

  REAL, DIMENSION(handle1%local_start:handle1%local_end) ::multiply_dv_dv


-- 

burnus at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever Confirmed|0                           |1
           Keywords|                            |ice-on-valid-code
      Known to fail|                            |4.4.0
   Last reconfirmed|0000-00-00 00:00:00         |2008-05-24 11:02:06
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36316

Reply via email to