Print

Print


> Thanks for the replys to my previous mail. One advice was to introduce the
> PRIVATE statement inside the B module. This seems to be a quite sensible
> thing to do. But the following example, compiled with Visual Fortran 5.0,
> seems to show that this doesn't work. 
> 
> output from the program:
> 
>  a=        1234
>  b=        6912
> 
> -------------------------------------------------------------------------------
> 
> The behaviour I would expect was that the variable a would not be recognized
> and that a compilation error would result. 

Digital Fortran 90 for OpenVMS Alpha gives the `expected' behaviour:

$  TYPE TEST.F90
module amod
      implicit none
      private
      integer, public :: a
      public :: inita
contains
      subroutine inita
      a        = 1234
      end subroutine inita
end module amod

module bmod
      use amod
      implicit none
      private
      integer, public :: b
      public :: initb
contains
      subroutine initb
      call inita
      b        = a+5678
      end subroutine initb
end module bmod
program testmod
use bmod
implicit none

call initb

write (*,*) 'a=', a
write (*,*) 'b=', b

end program testmod

$  ON ERROR THEN GOTO OK
$  F90 TEST

write (*,*) 'a=', a
..................^
%F90-E-ERROR, This name does not have a type, and must have an explicit type.   [A]
at line number 30 in file DISK$SCRATCH:[HELBIG]TEST.F90;1
$  OK: 
$  SET NOVERIFY

So does Digital UNIX:

fire.palmod.uni-bremen.de> cat > dec
f90 test.f90
./a.out
fire.palmod.uni-bremen.de> source dec
f90: Error: test.f90, line 30: This name does not have a type, and must 
have an]
write (*,*) 'a=', a
------------------^
./a.out: Command not found.
fire.palmod.uni-bremen.de>

So does IBM's xlf90:

geo> cat  > aix
xlf90 test.f
./a.out
geo> source aix
** amod   === End of Compilation 1 ===
** bmod   === End of Compilation 2 ===
"test.f", 1516-036 (S) Variable a has undefined type.
** testmod   === End of Compilation 3 ===
1501-511  Compilation failed for file test.f.
./a.out: Command not found.
geo>

So does the SUN f90 compiler:

ceres_67_% source sun

write (*,*) 'a=', a
                  ^
cf90-113 f90comp: ERROR TESTMOD, File = test.f90, Line = 30, Column = 19
  IMPLICIT NONE is specified in the local scope, therefore an explicit 
type must
 be specified for data object "A".

f90: SunSoft F90 Version 1.0.1.0  (16039279) Tue Dec  9, 1997  08:41:43
f90: COMPILE TIME 0.190000 SECONDS
f90: MAXIMUM FIELD LENGTH 2929214 DECIMAL WORDS
f90: 34 SOURCE LINES
f90: 1 ERRORS, 0 WARNINGS, 0 OTHER MESSAGES, 0 ANSI
f90: CODE: 41 WORDS, DATA: 4 WORDS
./a.out: Command not found.
ceres_68_%

> My understanding from the F90 documentation I have read so far is that
> the PRIVATE statement in the bmod module concerns all enteties
> accessible in the bmod module, and this includes the variable a and the
> subroutine inita from the amod module. Is my understanding of this
> wrong? 

I also asked about this yesterday, if this fix (using PRIVATE) is 
guaranteed to work in a platform-independent way.  I'm sure we'll see 
some replies from the experts today.


--
Phillip Helbig                          Email .......... [log in to unmask]
Nuffield Radio Astronomy Laboratories   Tel. ..... +44 1477 571 321 (ext. 297)
Jodrell Bank                            Fax ................. +44 1477 571 618
Macclesfield                            Telex ................. 36149 JODREL G
UK-Cheshire SK11 9DL                    Web .... http://www.jb.man.ac.uk/~pjh/

My opinions are not necessarily those of NRAL or the University of Manchester.



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%