internal procedure acts weird on initialized variable

I have pgf95 version 6.0

% pgf95 -V

pgf95 6.0-8 32-bit target on x86 Linux
Copyright 1989-2000, The Portland Group, Inc. All Rights Reserved.
Copyright 2000-2005, STMicroelectronics, Inc. All Rights Reserved.
%

Here is my sample code, test.f90:

program test
  implicit none
  logical :: l = .false.
  integer :: i = -99
  call set
  if (l) print*,'is true'
  if (i==10) print*,'is 10'

  contains

  subroutine set
  implicit none
    l=.true.
    i=10
  end subroutine
end program

If I compiled without any flag, I got expected output of “is true”, “is 10”. But if I compiled with -O2, I dont get anything.

There are a couple of workarounds which appears to make the code to “work” (e.g. do not initialize at initialization, print the value) but I want rather be confident that it will always work.

Is this a bug in compiler? If so is there a patch for this?

Hi YosukeK,

This does appear to be an issue with the 6.0 32-bit compilers that was resolved with the 6.1 release.

Hope this helps,
Mat

% pgf90 test.f90 -O0 -V6.0
% a.out
 is true
 is 10
% pgf90 test.f90 -O2 -V6.0
% a.out
% pgf90 test.f90 -O2 -V6.1
% a.out
 is true
 is 10