|
|
1.1 ! root 1: SUBROUTINE UNSAFE ! 2: C ! 3: C ROUTINE READS IN ALL DIRECT AND INDIRECT REFS FOR THE CURRENT ! 4: C PGM-UNIT; CHECKS FOR THE 3 UNSAFE REFS ! 5: C ! 6: LOGICAL IBR ! 7: INTEGER PLAT, PDSA, DSA, SYMLEN, PREF, REF, INREF, FINDCM ! 8: COMMON /CREF/ LREF, PREF, REF(100) ! 9: COMMON /GRAPH/ LLAT, PLAT, LAT(6000) ! 10: COMMON /FACTS/ NAME, I1, I2, IASF ! 11: COMMON /PARAMS/ I3, I4, I5, SYMLEN, I6, I7, I8 ! 12: COMMON /CTABL/ LDSA, PDSA, DSA(5000) ! 13: 10 IF (INREF(I7).LE.0) RETURN ! 14: C CHECK FOR REF WITHOUT ARGS ! 15: I = REF(1) ! 16: IF (I.EQ.0) GO TO 10 ! 17: LL = REF(2) ! 18: L = LL + SYMLEN + 1 ! 19: L = LAT(L) ! 20: C ! 21: C LPOINTS TO DUMMY ARGUMENT IN LAT ! 22: C ! 23: DO 70 K=1,I,2 ! 24: J = 4 + K ! 25: IF (REF(J).EQ.0) GO TO 20 ! 26: N = IGATT1(REF(J),8) ! 27: IF (N.EQ.10 .OR. N.EQ.4) GO TO 30 ! 28: GO TO 60 ! 29: C ! 30: C LOOK FOR EXPRESSION BEING MATCHED TO AN ARG WHICH ! 31: C IS SET; TYPE 1 UNSAFE REF ! 32: C ! 33: 20 IF (IGATT2(L,5).EQ.0) GO TO 60 ! 34: CALL ERROR2( ! 35: * 56H EXPRESSION MATCHED TO POSSIBLY SET ARG IN REFERENCE TO , ! 36: * 56, LAT(LL), 1, 1, 0) ! 37: CALL ERROR2(24H TYPE 1 UNSAFE REFERENCE, 24, REF(3), -1, 0, 1) ! 38: GO TO 60 ! 39: C ! 40: C CHECK FOR ACTUAL ARG IN COMMON BEING SENT DOWN WHERE RTNE ! 41: C BENEATH CHANGES ARG OR COMMON REGION ! 42: C TYPE 3 UNSAFE REFERENCE ! 43: C ! 44: 30 N = IGATT1(REF(J),2) ! 45: IF (N.NE.1) GO TO 40 ! 46: C ! 47: C SEE IF ACTUAL IS AN ARRAY ! 48: C ! 49: N = IGATT2(L,7) ! 50: IF (N.NE.0) GO TO 40 ! 51: N = REF(J) + 2 ! 52: N = DSA(N) ! 53: N = DSA(N+1) + 4 ! 54: N = FINDCM(DSA(N)) ! 55: NN = LL + SYMLEN + 2 ! 56: NN = MATCH(LAT(NN),2,N) ! 57: IF (NN.EQ.0) GO TO 40 ! 58: N = IGATT2(L,5) ! 59: IF (N.EQ.0 .AND. LAT(NN+1).EQ.0) GO TO 40 ! 60: CALL ERROR2(42H ARG OR COMMON MAY BE SET BY REFERENCE TO , 42, ! 61: * LAT(LL), 1, 1, 0) ! 62: CALL ERROR2(24H TYPE 3 UNSAFE REFERENCE, 24, REF(3), -1, 0, 1) ! 63: C ! 64: C CHECK FOR DO CONTROL VAR OR LIMIT MATCHED ! 65: C TO DUMMY ARG POSSIBLY SET ! 66: C ! 67: 40 NN = IGATT2(L,5) ! 68: IF (NN.EQ.0) GO TO 60 ! 69: NN = REF(J+1)/32 ! 70: IF (NN.NE.1) GO TO 50 ! 71: CALL ERROR2( ! 72: * 51H DO CONTROL VARIABLE OR LIMIT CAN BE SET IN REF TO , 51, ! 73: * LAT(LL), 1, 1, 0) ! 74: CALL ERROR2(1H1, 0, REF(3), -1, 0, 1) ! 75: C ! 76: C CHECK FOR ADJUSTIBLE DIMENSION VARIABLE MATCHED TO DUMMY ! 77: C ARG POSSIBLY SET ! 78: C ! 79: 50 NN = REF(J+1)/64 ! 80: IF (NN.NE.1) GO TO 60 ! 81: CALL ERROR2( ! 82: * 52H ADJUSTIBLE DIMENSION VARIABLE CAN BE SET IN REF TO , ! 83: * 52, LAT(LL), 1, 1, 0) ! 84: CALL ERROR2(1H1, 0, REF(3), -1, 0, 1) ! 85: 60 L = LAT(L+3) ! 86: 70 CONTINUE ! 87: C ! 88: C CHECK FOR SAME ACTUAL ARG SENT DOWN FOR DIFFERENT DUMMY-ARGS ! 89: C AND ONE OF DUMMIES MAY BE SET ! 90: C ! 91: C TYPE 2 UNSAFE REFERENCE ! 92: IF (REF(1).LE.2) GO TO 130 ! 93: LR = LL + SYMLEN + 1 ! 94: LR = LAT(LR) ! 95: C ! 96: C OUTER LOOP GOES TO NEXT TO LAST ARG ! 97: C ! 98: I = REF(1) + 3 ! 99: II = I - 2 ! 100: DO 120 K=5,II,2 ! 101: J = REF(K) ! 102: IF (J.EQ.0) GO TO 110 ! 103: JBR = IGATT1(J,8) ! 104: IF (JBR.NE.10 .AND. JBR.NE.4) GO TO 110 ! 105: L = LAT(LR+3) ! 106: MM = K + 2 ! 107: DO 100 M=MM,I,2 ! 108: IF (REF(M).NE.J) GO TO 90 ! 109: C ! 110: C HAVE TWO ACTUALS MAPPED ONTO DIFFERENT DUMMIES ! 111: C ! 112: C IF BOTH DUMMIES ARE ARRAYS OR BOTH ARE UNSET, NO UNSAFE ! 113: IF( IGATT2(L,7).NE.0 .AND. IGATT2(LR,7).NE.0 ) GOTO 90 ! 114: IF( IGATT2(L,5).EQ.0 .AND. IGATT2(LR,5).EQ.0 ) GOTO 90 ! 115: 80 CALL ERROR2(64 ! 116: *H ACTUAL ARG ASSOCIATED WITH 2 DUMMY ARGS POSSIBLY SET IN REF TO ! 117: *, 64, LAT(LL), 1, 1, 0) ! 118: CALL ERROR2(24H TYPE 2 UNSAFE REFERENCE, 24, REF(3), -1, 0, 1) ! 119: 90 L = LAT(L+3) ! 120: 100 CONTINUE ! 121: 110 LR = LAT(LR+3) ! 122: 120 CONTINUE ! 123: C ! 124: C CHECK FOR EXTERNAL FCNS WITHIN ASF-DEFS WHICH CONTAIN ! 125: C ASF-DUMMIES AND WHICH SET THEIR ARGS ! 126: C ! 127: 130 IF (REF(4).NE.1) GO TO 10 ! 128: II = REF(1) + 3 ! 129: IBR = .FALSE. ! 130: DO 140 K=5,II,2 ! 131: J = REF(K) ! 132: IF (J.EQ.0) GO TO 140 ! 133: IF (IGATT1(J,8).EQ.1) IBR = .TRUE. ! 134: 140 CONTINUE ! 135: IF (.NOT.IBR) GO TO 10 ! 136: C ! 137: C SEE IF EXTERNAL FCN SETS ANY OF ITS ARGS ! 138: C ! 139: K = LL + SYMLEN + 1 ! 140: K = LAT(K) ! 141: II = REF(1)/2 ! 142: DO 150 L=1,II ! 143: IF (IGATT2(K,8).EQ.10 .AND. IGATT2(K,5).EQ.1) IBR = .FALSE. ! 144: 150 CONTINUE ! 145: IF (IBR) GO TO 10 ! 146: CALL ERROR2(37H ILLEGAL USAGE OF ASF-DUMMY IN REF TO, 37, ! 147: * LAT(LL), 1, 1, 0) ! 148: CALL ERROR2(1H , 0, REF(3), -1 ,0, 1) ! 149: GO TO 10 ! 150: END
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.