- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I have the following code in a single source file:
When I compile it using:
I get the following output on Windows:
If I change the implementation of SUB1 to:
It compiles without error. For what it's worth I observe the same behavior with IVF 11.1 on Linux as well:
Am I doing something wrong? Should I be able to use an EXTERNAL via a module the way I am?
Thanks,
Brady
[fortran]MODULE MOD1 EXTERNAL :: H_UMAT POINTER(P_UMAT, H_UMAT) END MODULE MOD1 SUBROUTINE SUB1() USE MOD1 CALL H_UMAT() RETURN END SUBROUTINE SUB1[/fortran]
When I compile it using:
[bash]ifort -c compiler_error.f90[/bash]
I get the following output on Windows:
[bash]Intel Visual Fortran Intel 64 Compiler Professional for applications running on Intel 64, Version 11.1 Build 20090903 Package ID: w_cprof_p_11.1.046 Copyright (C) 1985-2009 Intel Corporation. All rights reserved. fortcom: Fatal: There has been an internal compiler error (C0000005). compilation aborted for compiler_error.f90 (code 1)[/bash]
If I change the implementation of SUB1 to:
[fortran]SUBROUTINE SUB1() USE MOD1, ONLY : P_UMAT EXTERNAL :: H_UMAT POINTER(PX, H_UMAT) PX = P_UMAT CALL H_UMAT() RETURN END SUBROUTINE SUB1[/fortran]
It compiles without error. For what it's worth I observe the same behavior with IVF 11.1 on Linux as well:
[bash]: catastrophic error: **Internal compiler error: segmentation violation signal raised** Please report this error along with the circumstances in which it occurred in a Software Problem Report. Note: File and line given may not be explicit cause of this error. compilation aborted for compiler_error.f90 (code 3)[/bash]
Am I doing something wrong? Should I be able to use an EXTERNAL via a module the way I am?
Thanks,
Brady
Link Copied
1 Reply
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hmm. I notre that this still is a problem in the current compiler - reported as DPD200166473. What you're doing is an extension to an extension, and one not widely supported. Let me suggest instead that you do this with standard F2003 syntax.
[plain]MODULE MOD1
ABSTRACT INTERFACE
SUBROUTINE UMAT_INT
END SUBROUTINE
END INTERFACE
PROCEDURE(UMAT_INT), POINTER :: H_UMAT
END MODULE MOD1
SUBROUTINE SUB1()
USE MOD1
PROCEDURE(UMAT_INT) :: REAL_UMAT
H_UMAT => REAL_UMAT
CALL H_UMAT()
RETURN
END SUBROUTINE SUB1[/plain]
Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page