- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I have a library which stopped compiling after updating from Parallel Studio XE2019 update 2 to Parallel Studio XE2019 update 4. I cheched it many times together with Visual Studio 2017 and updating to Visual Studio 2019 too and the result is always the same, the compilation gets stuck while compiling a particular file (always in the same file in a never ending process).
Has anyone noticed this same behavior? Has anyone reported any problem after updating? Any option different? I don't know.
Thanks.
Daniel.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I had a similar problem with all the 19.x compiler version, but it got worse with 19.4. The compiler gets stuck in a loop or something. It seems to be related to use statements. It gets really annoying in combination with submodules. We had to include some submodules back into the main modules to get it working again. In some cases it worked when randomly erasing "only" statements...
I reported it in April with the attached reproducer:
module M_OBJ implicit none type, public :: T_OBJ character(len=:), allocatable, public :: ch contains procedure, pass(obj_out), public :: assignObj generic :: assignment(=) => assignObj ! Works without this line procedure, private :: concatObj generic :: operator(//) => concatObj ! Works without this line end type type, public :: T_OBJ_CONTAINER class(T_OBJ), pointer :: v => null() end type interface T_OBJ module procedure constructor ! Works without this line end interface T_OBJ contains elemental function constructor() type(T_OBJ) :: constructor ! constructor%ch = '' end function constructor elemental subroutine assignObj(obj_out, obj_in) class(T_OBJ), intent(inout) :: obj_out class(T_OBJ), intent(in ) :: obj_in end subroutine assignObj pure function concatObj(lhs, rhs) class(T_OBJ), intent(in ) :: lhs class(T_OBJ), intent(in ) :: rhs character(len=:), allocatable :: concatObj end function concatObj end module M_OBJ !=================================================================================================================================== module M_BASE_TYPE_HASH_TABLE ! 0 works, 1 does not #define USE_ONLY 1 #if USE_ONLY use M_OBJ, only: T_OBJ, T_OBJ_CONTAINER #else use M_OBJ #endif implicit none ! 0 works, 1 does not #define USE_SUBMODULE 1 #if USE_SUBMODULE interface module subroutine alloc_routine() end subroutine alloc_routine end interface #else contains subroutine alloc_routine() implicit none type(T_OBJ_CONTAINER) :: sorter allocate(T_OBJ::sorter%v) end subroutine #endif end module M_BASE_TYPE_HASH_TABLE #if USE_SUBMODULE submodule (M_BASE_TYPE_HASH_TABLE) M_BASE_TYPE_HASH_TABLE_S contains module subroutine alloc_routine() implicit none type(T_OBJ_CONTAINER) :: arr allocate(T_OBJ :: arr%v) end subroutine end submodule #endif
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
You're the first to mention such a thing here. I suggest using the big orange "Bug Report" button to send Intel all the files needed, along with command line used, to see if they can reproduce it. Back when I was doing support I had seen reports of that sort of behavior from time to time. You may want to experiment with command line options to see if any of them affect the behavior. The way I do this is to go to the build log and copy the command line it uses, then I paste that into a command prompt window and try it. If the problem still appears, I start removing options until I find one that changes the behavior (not always possible, but most of the time.)
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I wish it was that easy, the file is part of a code with hundreds of files, some of them with thousands of lines of code.
I noticed this problem two months ago and I tried to isolate it removing files and commenting code but I did not succeed because at some point the problem dissapeared. I will give it another try.
I like this new big orange "Bug report" button. It make sense to have it here I normally ask here before sending a ticket.
Thank you, Steve.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The project may have hundreds of files, but if the problem is only with compiling a specific file, as you wrote above, you only need to provide that file, its include files and the files that contain the modules that are USEd by the problem file.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I had a similar problem with all the 19.x compiler version, but it got worse with 19.4. The compiler gets stuck in a loop or something. It seems to be related to use statements. It gets really annoying in combination with submodules. We had to include some submodules back into the main modules to get it working again. In some cases it worked when randomly erasing "only" statements...
I reported it in April with the attached reproducer:
module M_OBJ implicit none type, public :: T_OBJ character(len=:), allocatable, public :: ch contains procedure, pass(obj_out), public :: assignObj generic :: assignment(=) => assignObj ! Works without this line procedure, private :: concatObj generic :: operator(//) => concatObj ! Works without this line end type type, public :: T_OBJ_CONTAINER class(T_OBJ), pointer :: v => null() end type interface T_OBJ module procedure constructor ! Works without this line end interface T_OBJ contains elemental function constructor() type(T_OBJ) :: constructor ! constructor%ch = '' end function constructor elemental subroutine assignObj(obj_out, obj_in) class(T_OBJ), intent(inout) :: obj_out class(T_OBJ), intent(in ) :: obj_in end subroutine assignObj pure function concatObj(lhs, rhs) class(T_OBJ), intent(in ) :: lhs class(T_OBJ), intent(in ) :: rhs character(len=:), allocatable :: concatObj end function concatObj end module M_OBJ !=================================================================================================================================== module M_BASE_TYPE_HASH_TABLE ! 0 works, 1 does not #define USE_ONLY 1 #if USE_ONLY use M_OBJ, only: T_OBJ, T_OBJ_CONTAINER #else use M_OBJ #endif implicit none ! 0 works, 1 does not #define USE_SUBMODULE 1 #if USE_SUBMODULE interface module subroutine alloc_routine() end subroutine alloc_routine end interface #else contains subroutine alloc_routine() implicit none type(T_OBJ_CONTAINER) :: sorter allocate(T_OBJ::sorter%v) end subroutine #endif end module M_BASE_TYPE_HASH_TABLE #if USE_SUBMODULE submodule (M_BASE_TYPE_HASH_TABLE) M_BASE_TYPE_HASH_TABLE_S contains module subroutine alloc_routine() implicit none type(T_OBJ_CONTAINER) :: arr allocate(T_OBJ :: arr%v) end subroutine end submodule #endif
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
mecej4 wrote:The project may have hundreds of files, but if the problem is only with compiling a specific file, as you wrote above, you only need to provide that file, its include files and the files that contain the modules that are USEd by the problem file.
Thank you mecej4, you are right and that's still a lot of modules, submodules and lines of code. I will try to simplify the case.
Daniel.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thank you Wolf.
It could be related because I also have organization in submodules. Let's see if they fix your problem and mine is fixed as well. Just in case I'll try to create a code and report too.
Daniel.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Finally, I end up with this piece of code which reproduces the problem (at least in my case). When I try to compile a never ending process starts. Small changes in parts of the code or further simplifications eliminate the problem (it either compiles or not), so it has to be something subtle. It should work with update 2 but not with update 4. If someone can double check that the problem exists, it would be great.
MODULE TIPOS_DERIVADOS IMPLICIT NONE TYPE,ABSTRACT::typerestric CONTAINS PROCEDURE,PASS::evaljacobian=>null_jacob END TYPE typerestric TYPE elementlista_restrics CLASS(typerestric),POINTER::RS END TYPE elementlista_restrics TYPE typelista_restrics TYPE(elementlista_restrics),ALLOCATABLE,DIMENSION(:)::RSS END TYPE typelista_restrics TYPE spMatrix contains procedure, private:: unaryminus procedure, private:: spmatsum procedure, private, pass(A):: scalarproduct generic:: operator(-) => unaryminus generic:: operator(*) => scalarproduct generic:: operator(+) => spmatsum END TYPE spMatrix CONTAINS pure function unaryminus(A) result (mA) implicit none class(spMatrix), in<tent(in):: A type(spMatrix) mA end function unaryminus pure function scalarproduct(x, A) result (mA) implicit none real(8), intent(in):: x class(spMatrix), intent(in):: A type(spMatrix) mA end function scalarproduct pure function spmatsum(A, B) result (C) implicit none class(spMatrix), intent(in):: A, B type(spMatrix) C end function spmatsum SUBROUTINE null_jacob(RS,Fiqx) IMPLICIT NONE class(typerestric),INTENT(IN)::RS TYPE(spMatrix),INTENT(INOUT)::Fiqx END SUBROUTINE null_jacob END MODULE TIPOS_DERIVADOS !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC MODULE restricciones_constdist USE TIPOS_DERIVADOS,ONLY:typerestric,spMatrix IMPLICIT NONE END MODULE restricciones_constdist !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC !CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC MODULE restricciones !USE TIPOS_DERIVADOS !If we uncomment this line, the compiler doesn't block. USE restricciones_constdist IMPLICIT NONE PRIVATE CONTAINS SUBROUTINE ADDrestrictolist(RS,LSRSS,handleout) implicit none CLASS(typerestric)::RS TYPE(typelista_restrics),TARGET::LSRSS CLASS(typerestric),POINTER,OPTIONAL,INTENT(OUT)::handleout END SUBROUTINE ADDrestrictolist END MODULE restricciones
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Dops,
I tested your code on PSXE2019U2 and U3 (after removing a typo in line 31 -> intent(in)).
PSXEU2 throws correctly an error:
D:\02_Fortran\99_test\PSXE2019U3_U4_infloop>ifort test.f90 Intel(R) Visual Fortran Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 19.0.2.190 Build 20190117 Copyright (C) 1985-2019 Intel Corporation. All rights reserved. test.f90(80): error #6457: This derived type name has not been declared. [TYPELISTA_RESTRICS] TYPE(typelista_restrics),TARGET::LSRSS ---------^ test.f90(77): error #6404: This name does not have a type, and must have an explicit type. [LSRSS] SUBROUTINE ADDrestrictolist(RS,LSRSS,handleout) -------------------------------^ compilation aborted for test.f90 (code 1)
PSXE2019U3 hangs (as expected U4 does) in an infinite loop. I think that's a bug introduced with U3, where the dependency checking for modules/submodules seems to be faulty. Both U2/U3 compiles fine, if you remove the restiction in line 59 to
USE TIPOS_DERIVADOS !,ONLY:typerestric,spMatrix
The error is not captured anymore in U3 (U4). For me that's a bug. You should open a ticket here, if not already done and make link to this thread.
BR, Johannes
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thank you very much, Johannes. I was waiting for confirmation before opening the ticket.
Daniel.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Done. I have just submitted the ticket. Fortunately it is easy to fix the code in order to get it working with update 4, but the problem can appear again in similar situations.
Thanks, everyone.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Daniel, I'm glad, that I could help. I had misunderstood the error partially. Now re-reading the post, I tested PSXEU3 with modifying line 59 to
USE TIPOS_DERIVADOS,ONLY:typerestric,spMatrix,typelista_restrics
By this PSXE2019U2 compiles fine. However, although the code is now correct, PSXE2019U3 fails/is never proceeding. So, in addition to the not captured missing definition as shown in #9, correct code with 'only' does not compile. The latter is the more severe.
Thanks Daniel, for opening a ticket.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Daniel Dopico wrote:... I will give it another try.
I like this new big orange "Bug report" button. It make sense to have it here I normally ask here before sending a ticket.
Thank you, Steve.
Daniel, thank you for submitting the bug report and for the effort in reducing the code in question to a smaller test case. I am glad to hear that you find the new 'bug report' button convenient.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I am glad to comment here that this bug has been fixed in next Compiler update (19.0 Update 5) coming out within 2 months.
It is really nice to have feedback from Intel about the bugs reported before a new release appears. In the past, it was quite frustrating to wait for a new release without information about wether your bug was corrected or not.
Congratulations to Intel for this feedback.
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page