Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
29010 Discussions

polymorphic intent(out) ifort 15.0.3 error

Ferdinand_T_
New Contributor II
1,969 Views

Hello Intel,

ifort 15.0.3 (with no options given) aborts with an error on the code below. The error seems to be related to the intent(out) attribute on a "class" polymorphic dummy argument (which is not declared allocatable). I encountered the problem with intent(out) passed dummy arguments, but it doesn't have to be a passed dummy to trigger the error (e.g. as in my example).

I am using

Intel(R) Fortran Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 15.0.3.187 Build 20150407

Best regards,
Ferdinand

module m
	implicit none
	public 

	! Some derived type
	type :: t
	end type

contains

	! Derived type is polymorphic intent(out) dummy arg.
	subroutine sub(arg)
		class(t), intent(out) :: arg
	end subroutine
end module


program p
	implicit none

	! Error:

	! /scratch/ifort857Jqq.o: In function `sub':
	! [...]/test.f90:12: undefined reference to `for_dealloc_all_nopdtlen'

end program

 

PS: I searched the forum but couldn't find any post related to this issue, even though it seems to be very basic.

0 Kudos
1 Solution
Kevin_D_Intel
Employee
1,969 Views

It appears something is suspicious about either the compiler installation and/or maybe your shell environment setup. The missing routines are from the Intel Fortran run-time library libifcore.a. The libraries will be under a default path like: /opt/intel/composer_xe_2013_sp1.3.174/compiler/lib/intel64

I expect you did source the compilervars.sh/csh to set up your environment?

You could compile with -watch and capture the output of both stdout/stderr to a file (e.g. ifort -watch test.f90 &> out.txt) and attach the file to a reply and that might help shed some clues.

View solution in original post

0 Kudos
5 Replies
Kevin_D_Intel
Employee
1,969 Views

Hi Ferdinand - Something seems to be missing. I do not suffer an error like what is noted in the code comments.

$ ifort -V
Intel(R) Fortran Intel(R) 64 Compiler XE for applications running on Intel(R) 64, Version 15.0.3.187 Build 20150407
Copyright (C) 1985-2015 Intel Corporation.  All rights reserved.

$ ifort u593296.f90
u593296.f90(12): warning #6843: A dummy argument with an explicit INTENT(OUT) declaration is not given an explicit value.   [ARG]
        subroutine sub(arg)
-----------------------^
$

 

0 Kudos
Ferdinand_T_
New Contributor II
1,969 Views

Thank you for checking so quickly, Mr. Davis.

My command line was just "ifort test.f90" (the latter being the name of the program with the above code). It was also important to not to move the code into a standalone module or into the program (without module) to reproduce the error on my machine.

The system is a Red Hat Enterprise Linux 6:

$uname -a
Linux uc1n996 2.6.32-504.16.2.el6.x86_64 #1 SMP Tue Mar 10 17:01:00 EDT 2015 x86_64 x86_64 x86_64 GNU/Linux

I encountered additional, possibly related issues, e.g. here is an other example

program p
	implicit none

	character(len=:), allocatable :: str

	str = "a"
	str = str // "b"

	print *, str

	! ERROR when compiled with "-check all":
	!
	! /scratch/ifort75ujA5.o: In function `MAIN__':
	! test.f90:(.text+0x278): undefined reference to `for__rtc_uninit_use_src'
	! test.f90:(.text+0x3f5): undefined reference to `for__rtc_uninit_use_src'

end program

Could these undefined references come from linked system libraries such as the c-library, or else (for=fortran? Is it Intel/ifort-specific?) ? Any pointers might help. Perhaps the installation isn't correct (although most of my programs compile and run fine).

Thank you, best regards
Ferdinand

 

0 Kudos
Kevin_D_Intel
Employee
1,970 Views

It appears something is suspicious about either the compiler installation and/or maybe your shell environment setup. The missing routines are from the Intel Fortran run-time library libifcore.a. The libraries will be under a default path like: /opt/intel/composer_xe_2013_sp1.3.174/compiler/lib/intel64

I expect you did source the compilervars.sh/csh to set up your environment?

You could compile with -watch and capture the output of both stdout/stderr to a file (e.g. ifort -watch test.f90 &> out.txt) and attach the file to a reply and that might help shed some clues.

0 Kudos
Ferdinand_T_
New Contributor II
1,969 Views

Dear Mr. Davis,

your information and the "-watch" option helped me spot the problem!

In fact, my LIBRARY_PATH was configured incorrectly.

Compiler and libraries had been loaded into the environment via the "modules" system, so I didn't have to source the compilervars.sh manually. However, I actually also loaded the MKL after loading the compiler, which messed up the LIBRARY_PATH (by prepending a path to an older version (14.0.4) intel64 libraries, which are obviously incompatible). So the error is in the module settings here.

Thank you very much,
Ferdinand

 

 

 

 


 

0 Kudos
Kevin_D_Intel
Employee
1,969 Views

Good detective work! Glad to hear you resolved it.

0 Kudos
Reply