[Info-vax] VMS Software Q1 '23 Update
Arne Vajhøj
arne at vajhoej.dk
Wed Jan 25 18:50:16 EST 2023
On 1/25/2023 5:55 PM, John Reagan wrote:
> G2L recurses down the symbol table and converts the static variables in each block as it finds
> them. The difference is that GEM frontends can record the desired offset into the PSECT in
> any order. We sort by offset in each block, but we need to hoist all the static variables out in
> another pass, sort them, and do them all at the module level. PSECTs are created by the linker.
> They exist outside the control of the compiler.
>
> Here's a nasty Fortran program where each subroutine initializes and reinitializes parts of the
> same common block in a particular order.
>
> subroutine print_common
> common /mypsect/ i1,i2
> integer*4 :: i1,i2
> write (*,10) i1,i2
> 10 format (' ',Z8,' ',Z8)
> return
> end
>
> subroutine update_longwords
> common /mypsect/ i1,i2
> c start with putting hex AAAAAAAA into both longwords
> integer*4 :: i1='AAAAAAAA'X,i2='AAAAAAAA'X
> return
> end
>
> subroutine update_words
> c and update bottom words with BBBB
> common /mypsect/ w1,w2,w3,w4
> integer*2 :: w1,w2='BBBB'X,w3,w4='BBBB'X
> return
> end
>
> subroutine update_bytes
> c and update bottom bytes with CC
> common /mypsect/ b1,b2,b3,b4,b5,b6,b7,b8
> integer*1 :: b1,b2,b3,b4='CC'X,b5,b6,b7,b8='CC'X
> return
> end
>
> program main
> c by now, the two longwords in the common should be
> c CCBBAAAA CCBBAAAA
> call print_common
> end
That is horrible code IMHO.
Initializing the same common block in multiple subroutines
is not something I would ever do.
I would expect either an error or undefined result due to
order of processing being undefined.
But then I don't know what the Fortran standard and the
VMS Fortran documentation says on the topic.
Someone is actually using such constructs?
Arne
More information about the Info-vax
mailing list