I'm using Visual Fortran Compiler XE 12.0.4.196 [IA-32]. Following code gives me error #7836 for the last 3 calls in ARTEST which shows me that my ALIASes don't work. Is that correct?
MODULE INTARWRI_MOD
INTERFACE INTARWRI
MODULE PROCEDURE INTARWRI_INT
MODULE PROCEDURE INTARWRI_REAL
MODULE PROCEDURE INTARWRI_DBLE
SUBROUTINE INTARWRI_INTS(IAR,IPOS,IVAL,NWORTE,ISW)
!DEC$ ATTRIBUTES DECORATE,ALIAS:"INTARWRI_INT" ::INTARWRI_INTS
INTEGER ,INTENT(INOUT),ALLOCATABLE:: IAR(:)
INTEGER ,INTENT(IN) :: IPOS
INTEGER ,INTENT(IN) :: IVAL
INTEGER ,INTENT(IN) :: NWORTE
INTEGER ,INTENT(OUT) :: ISW
ENDSUBROUTINE INTARWRI_INTS
SUBROUTINE INTARWRI_DBLES(IAR,IPOS,DVAL,NWORTE,ISW)
!DEC$ ATTRIBUTES DECORATE,ALIAS:"INTARWRI_DBLE" ::INTARWRI_DBLES
INTEGER ,INTENT(INOUT),ALLOCATABLE:: IAR(:)
INTEGER ,INTENT(IN) :: IPOS
DOUBLE PRECISION,INTENT(IN) :: DVAL
INTEGER ,INTENT(IN) :: NWORTE
INTEGER ,INTENT(OUT) :: ISW
ENDSUBROUTINE INTARWRI_DBLES
SUBROUTINE INTARWRI_REALS(IAR,IPOS,RVAL,NWORTE,ISW)
!DEC$ ATTRIBUTES DECORATE,ALIAS:"INTARWRI_REAL" ::INTARWRI_REALS
INTEGER ,INTENT(INOUT),ALLOCATABLE:: IAR(:)
INTEGER ,INTENT(IN) :: IPOS
REAL ,INTENT(IN) :: RVAL
INTEGER ,INTENT(IN) :: NWORTE
INTEGER ,INTENT(OUT) :: ISW
ENDSUBROUTINE INTARWRI_REALS
ENDINTERFACE INTARWRI
CONTAINS
SUBROUTINE INTARWRI_ANY(IAR,IPOS,IVAL,NWORTE,ISW)
INTEGER ,INTENT(INOUT),ALLOCATABLE:: IAR(:)
INTEGER ,INTENT(IN) :: IPOS
INTEGER ,INTENT(IN) :: IVAL(*)
!DEC$ ATTRIBUTES NO_ARG_CHECK::IVAL
INTEGER ,INTENT(IN) :: NWORTE
INTEGER ,INTENT(OUT) :: ISW
INTEGER,ALLOCATABLE::IHILF(:)
INTEGER IDIMNEU
INTEGER IEPOS
IEPOS=IPOS+NWORTE-1
IF(ALLOCATED(IAR)) THEN
IF(IEPOS>=UBOUND(IAR,1)) THEN
IDIMNEU=IEPOS*3/2
ALLOCATE(IHILF(LBOUND(IAR,1):IDIMNEU),STAT=ISW)
IF(ISW/=0) THEN
CALL MSGBOX(33001,"Not enough Memory","Error",ISW)
ISW=0
RETURN
ENDIF
IHILF(LBOUND(IAR,1):UBOUND(IAR,1))=IAR
CALL MOVE_ALLOC(IHILF,IAR)
ENDIF
ELSE
IDIMNEU=5000
IF(IEPOS>IDIMNEU) IDIMNEU=IEPOS*3/2
ALLOCATE(IAR(IDIMNEU))
ENDIF
IAR(IPOS:IEPOS)=IVAL(1:NWORTE)
ISW=1
ENDSUBROUTINE INTARWRI_ANY
SUBROUTINE INTARWRI_INT(IAR,IPOS,IVAL,NWORTE,ISW)
INTEGER ,INTENT(INOUT),ALLOCATABLE:: IAR(:)
INTEGER ,INTENT(IN) :: IPOS
INTEGER ,INTENT(IN) :: IVAL(*)
INTEGER ,INTENT(IN) :: NWORTE
INTEGER ,INTENT(OUT) :: ISW
CALL INTARWRI_ANY(IAR,IPOS,IVAL,NWORTE,ISW)
ENDSUBROUTINE INTARWRI_INT
SUBROUTINE INTARWRI_REAL(IAR,IPOS,RVAL,NWORTE,ISW)
INTEGER ,INTENT(INOUT),ALLOCATABLE:: IAR(:)
INTEGER ,INTENT(IN) :: IPOS
REAL ,INTENT(IN) :: RVAL(*)
INTEGER ,INTENT(IN) :: NWORTE
INTEGER ,INTENT(OUT) :: ISW
CALL INTARWRI_ANY(IAR,IPOS,RVAL,NWORTE,ISW)
ENDSUBROUTINE INTARWRI_REAL
SUBROUTINE INTARWRI_DBLE(IAR,IPOS,DVAL,NWORTE,ISW)
INTEGER ,INTENT(INOUT),ALLOCATABLE:: IAR(:)
INTEGER ,INTENT(IN) :: IPOS
DOUBLE PRECISION,INTENT(IN) :: DVAL(*)
INTEGER ,INTENT(IN) :: NWORTE
INTEGER ,INTENT(OUT) :: ISW
CALL INTARWRI_ANY(IAR,IPOS,DVAL,NWORTE*2,ISW)
ENDSUBROUTINE INTARWRI_DBLE
SUBROUTINE INTARWRI_CHAR(IAR,IPOS,CVAL,NCHAR,ISW)
INTEGER ,INTENT(INOUT),ALLOCATABLE:: IAR(:)
INTEGER ,INTENT(IN) :: IPOS
CHARACTER(*) ,INTENT(IN) :: CVAL
INTEGER ,INTENT(IN) :: NCHAR
INTEGER ,INTENT(OUT) :: ISW
INTEGER IHILF((NCHAR+3)/4)
CALL CARA4(CVAL,NCHAR,IHILF)
CALL INTARWRI_ANY(IAR,IPOS,IHILF,(NCHAR+3)/4,ISW)
ENDSUBROUTINE INTARWRI_CHAR
ENDMODULE INTARWRI_MOD
SUBROUTINE ARTEST
USE INTARWRI_MOD
INTEGER ,ALLOCATABLE:: IAR(:)
INTEGER IV,IA(3)
REAL RV,RA(3)
DOUBLE PRECISION DV,DA(3)
INTEGER ISW
EQUIVALENCE (IV,RV,DV)
CALL INTARWRI(IAR,1,IA,3,ISW)
CALL INTARWRI(IAR,1,RA,3,ISW)
CALL INTARWRI(IAR,1,DA,3,ISW)
CALL INTARWRI_INT(IAR,1,IA,3,ISW)
CALL INTARWRI_REAL(IAR,1,RA,3,ISW)
CALL INTARWRI_DBLE(IAR,1,DA,3,ISW)
CALL INTARWRI(IAR,1,IV,1,ISW)
CALL INTARWRI(IAR,1,RV,1,ISW)
CALL INTARWRI(IAR,1,DV,1,ISW)
CALL INTARWRI_INT(IAR,1,IV,1,ISW)
CALL INTARWRI_REAL(IAR,1,RV,1,ISW)
CALL INTARWRI_DBLE(IAR,1,DV,1,ISW)
ENDSUBROUTINE ARTEST
Annoying is also remark # 7712 for IV,RV and DV which only appears when error #7836 occurs and the EQUIVALENCE is present.
I also get an internal compiler error when removing the statement USE INTARWRI_MOD.