[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference turris::fortran

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.RTitleUserPersonal
Name
DateLines
1313.1LookingTLE::EKLUNDAlways smiling on the inside!Fri May 23 1997 09:316
    	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.2QUARK::LIONELFree advice is worth every centFri May 23 1997 11:343
A workaround: use F90 to compile this.

			Steve
1313.3FixedTLE::EKLUNDAlways smiling on the inside!Tue Jun 03 1997 17:0912
    	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