Quantcast
Channel: Intel® Software - Intel® Visual Fortran Compiler for Windows*
Viewing all articles
Browse latest Browse all 5691

Alias not valid for module procedures

$
0
0

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.

 


Viewing all articles
Browse latest Browse all 5691

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>