[Search for users]
[Overall Top Noters]
[List of all Conferences]
[Download this site]
Title: | Digital Fortran |
Notice: | Read notes 1.* for important information |
Moderator: | QUARK::LIONEL |
|
Created: | Thu Jun 01 1995 |
Last Modified: | Fri Jun 06 1997 |
Last Successful Update: | Fri Jun 06 1997 |
Number of topics: | 1333 |
Total number of notes: | 6734 |
1313.0. "Accvio V7.1 alpha using recursive switch." by KERNEL::BIRKINSHAW (Press Enter to Exit) Fri May 23 1997 07:10
The following program causes Alpha Fortran V7.1 to crash when compiled
/RECURSIVE and /NOOPT: The customer is YEZERSKI ROPER LTD
--------------------------------- CRASH.FOR ------------------------------------
SUBROUTINE COMPILER_CRASH
IMPLICIT NONE
INTEGER I,X
STRUCTURE /NAVDAT_REC/
INTEGER*2 PANELMAP(100)
END STRUCTURE
RECORD /NAVDAT_REC/ NAVDAT
POINTER (PNAVDAT,NAVDAT)
! Statement function to get key value for position I in panel map
!
INTEGER KEYVAL
KEYVAL(I) = NAVDAT.PANELMAP(I)
!-------------------------------------------------------------------------------
X = KEYVAL(I)
END
------------------------------------ END ---------------------------------------
The commmand line was:
$ fortran /noopt/recursive crash
which produces:
%SYSTEM-F-ACCVIO, access violation, reason mask=00, virtual address=000000000000
7FFF, PC=000000000037A640, PS=0000001B
Improperly handled condition, image exit forced.
Signal arguments: Number = 0000000000000005
Name = 000000000000000C
0000000000010000
0000000000007FFF
000000000037A640
000000000000001B
Register dump:
R0 = 0000000000127744 R1 = 00000000009C000B R2 = 000000000003D8B0
R3 = 0000000000542710 R4 = 0000000000542710 R5 = 0000000000007FFF
R6 = FFFFFFFF80000018 R7 = 0000000000000008 R8 = 0000000000000028
R9 = 0000000000000000 R10 = 0000000000000000 R11 = 0000000000554090
R12 = 000000007FFFFFF0 R13 = 000000007B00A1E0 R14 = FFFFFFFF8119AC40
R15 = 00000000009B4A2D R16 = 0000000000000000 R17 = 0000000000000040
R18 = 0000000000000000 R19 = FFFFFFFF80000018 R20 = 0000000000000008
R21 = 0000000000554038 R22 = 0000000000542710 R23 = 0000000000000040
R24 = 0000000000000000 R25 = 000000000000008C R26 = 000000000037A640
R27 = 000000000003D780 R28 = 0000000000379960 R29 = 000000007AF1B7A0
SP = 000000007AF1B7A0 PC = 000000000037A640 PS = 200000000000001B
Although the crash program doesn't do very much, it is cut from a piece of code
which does perform some useful function! The crux of the problem seems to
be using a 'pointee' (NAVDAT) in a statement function, when the /RECURSIVE
qualifier is in use.
T.R | Title | User | Personal Name | Date | Lines |
---|
1313.1 | Looking | TLE::EKLUND | Always smiling on the inside! | Fri May 23 1997 09:31 | 6 |
| Thank you for the very concise example. I can reproduce this
problem, so we will take a look at how to fix it.
Cheers!
Dave Eklund
|
1313.2 | | QUARK::LIONEL | Free advice is worth every cent | Fri May 23 1997 11:34 | 3 |
| A workaround: use F90 to compile this.
Steve
|
1313.3 | Fixed | TLE::EKLUND | Always smiling on the inside! | Tue Jun 03 1997 17:09 | 12 |
| Fixed by edit 4-135 to the f77 compiler. The problem is exactly as
you described it - you need a reference to a pointee within a statement
function (or VFE), and perhaps a particular switch setting (like /REC).
This was strictly an internal problem, and any time a pointee was used
within a statement function, you could be at some risk. Usually the
compiler would die (we saw several different deaths in our testing).
Thank you once again for such a concise example!
Cheers!
Dave Eklund
|