- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Windows 10 Pro Build 14393 MS visual studio ultimate 2013 12.0.40629.00 Update 5 Intel(R) Visual Fortran Compiler XE 15.0.7.287 Type :: Grid1D(Nx,Ns) Integer(4),Len :: Nx=100,Ns=1_4 Real(8) :: SS(1:Nx,1:Ns) Integer(4) :: NxA=1,NyA=1 End Type
(1) Sometimes it will not compile but sometimes it is correctly complied.
Error massage: error #8737: For a default initialized component every type parameter and array bound must be a constant expression. [SS]
Adding a useless code before it will solve the problem
Type :: Test Real(8), Allocatable :: Test2(:) End Type
(2) If it is complied, some of the component can not be referred when compiling
Error massage: error #6460: This is not a field name that is defined in the encompassing structure. [NYA]
This happens when the Subroutine below is compiled (The code has been cleaned).
Subroutine DiagHeatingRatePeriod(GD) Implicit none Class(*),intent(inout) :: GD Select Type (GD) Type is (Grid1D(*,*)) GD%Nya=1 End select Return End Subroutine
Thanks!
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
You'll need to provide a complete compilable source for us to look at. Also, please try a current compiler version (17.0.0 is current.) We've fixed a lot of bugs since 15.0.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Windows 10 Pro Build 14393
MS visual studio 14.0.25431.01 Update 3 (same problems with MS visual studio ultimate 2013 12.0.40629.00 Update 5)
Test Case A: Constant2.F90 complie with 2015/2016/2017 with errors
------ Build started: Project: Test, Configuration: Debug|Win32 ------
Compiling with Intel(R) Visual Fortran Compiler 17.0.0.109 [IA-32]...
Constant2.F90
fortcom: Fatal: There has been an internal compiler error (C0000005).
compilation aborted for C:\Users\Tame\Source\Repos\PM\Test\Test\Constant2.F90 (code 1)
Build log written to "file://C:\Users\Tame\Source\Repos\PM\Test\Test\Debug\BuildLog.htm"
Test - 1 error(s), 0 warning(s)
---------------------- Done ----------------------
------ Build started: Project: Test, Configuration: Debug|Win32 ------
Compiling with Intel(R) Visual Fortran Compiler 16.0.4.246 [IA-32]...
Constant2.F90
fortcom: Fatal: There has been an internal compiler error (C0000005).
compilation aborted for C:\Users\Tame\Source\Repos\PM\Test\Test\Constant2.F90 (code 1)
Build log written to "file://C:\Users\Tame\Source\Repos\PM\Test\Test\Debug\BuildLog.htm"
Test - 1 error(s), 0 warning(s)
---------------------- Done ----------------------
------ Build started: Project: Test, Configuration: Debug|Win32 ------
Compiling with Intel(R) Visual Fortran Compiler XE 15.0.7.287 [IA-32]...
Constant2.F90
C:\Users\Tame\Source\Repos\PM\Test\Test\Constant2.F90(53): error #8737: For a default initialized component every type parameter and array bound must be a constant expression. [VALUE]
C:\Users\Tame\Source\Repos\PM\Test\Test\Constant2.F90(61): error #8737: For a default initialized component every type parameter and array bound must be a constant expression. [VALUE]
compilation aborted for C:\Users\Tame\Source\Repos\PM\Test\Test\Constant2.F90 (code 1)
Build log written to "file://C:\Users\Tame\Source\Repos\PM\Test\Test\Debug\BuildLog.htm"
Test - 3 error(s), 0 warning(s)
Test Case B: Constant2.F90 complie with 2015/2016/2017 with no errors simplly by adding or removing something, the error is not always reproducibale
Here the error dissapeared in 2016/2017, but still exited in 2015 by remove
"
Type :: Test2
Real(8), Allocatable :: Test2(:)
End Type
"
------ Build started: Project: Test, Configuration: Debug|Win32 ------
Compiling with Intel(R) Visual Fortran Compiler 17.0.0.109 [IA-32]...
Constant3.F90
Build log written to "file://C:\Users\Tame\Source\Repos\PM\Test\Test\Debug\BuildLog.htm"
Test - 0 error(s), 0 warning(s)
---------------------- Done ----------------------
------ Build started: Project: Test, Configuration: Debug|Win32 ------
Compiling with Intel(R) Visual Fortran Compiler 16.0.4.246 [IA-32]...
Constant3.F90
Build log written to "file://C:\Users\Tame\Source\Repos\PM\Test\Test\Debug\BuildLog.htm"
Test - 0 error(s), 0 warning(s)
---------------------- Done ----------------------
------ Build started: Project: Test, Configuration: Debug|Win32 ------
Compiling with Intel(R) Visual Fortran Compiler XE 15.0.7.287 [IA-32]...
Constant3.F90
C:\Users\Tame\Source\Repos\PM\Test\Test\Constant3.F90(58): error #8737: For a default initialized component every type parameter and array bound must be a constant expression. [VALUE]
compilation aborted for C:\Users\Tame\Source\Repos\PM\Test\Test\Constant3.F90 (code 1)
Build log written to "file://C:\Users\Tame\Source\Repos\PM\Test\Test\Debug\BuildLog.htm"
Test - 2 error(s), 0 warning(s)
---------------------- Done ----------------------
Compiling with Intel(R) Visual Fortran Compiler XE 15.0.7.287 [IA-32]... ifort /nologo /debug:full /Od /warn:interfaces /module:"Debug\\" /object:"Debug\\" /Fd"Debug\vc140.pdb" /traceback /check:bounds /check:stack /libs:dll /threads /dbglibs /c /Qvc14 /Qlocation,link,"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\\bin" "C:\Users\Tame\Source\Repos\PM\Test\Test\Constant3.F90" C:\Users\Tame\Source\Repos\PM\Test\Test\Constant3.F90(58): error #8737: For a default initialized component every type parameter and array bound must be a constant expression. [VALUE] End Type Grid1D ^ compilation aborted for C:\Users\Tame\Source\Repos\PM\Test\Test\Constant3.F90 (code 1) Test - 2 error(s), 0 warning(s) |
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Oddly, if the /Od option is removed, the two files can be compiled without encountering the ICE.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The problem is no always reproducible. It is really annoying when trying to use parameterized derived types.
Sometimes even by adding some blank lines will remove the problem.
I guess the reason is the compiler does not always compile parameterized derived types with F2003 standard by sometimes with F95 standard.
Adding some meaningless lines will avoid the problem sometimes.
mecej4 wrote:
Oddly, if the /Od option is removed, the two files can be compiled without encountering the ICE.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Steve Lionel (Intel) wrote:
.. please try a current compiler version (17.0.0 is current.) We've fixed a lot of bugs since 15.0.
Steve,
Fyi for Intel development team: I tried version 17.0.0.109 [Intel(R) 64] with the Constant2.F90 file posted by Wei J. in Message #3 and I get ICEs with /Od as well as with /On (n=1 to 3) options. The behavior is indeed as indicated by OP and noticed previously with other ICEs; a slight change of source file can prevent or reintroduce the ICE, e.g., removing the module named Constants helped compile the code successfully in one instance, or removing the PDT Grid2D compiled ok too.
I can attest to OP's comment, "It is really annoying when trying to use parameterized derived types." but, as I've stated previously, that's not too say PDT's should not be supported in the standard - I find PDTs to be a very useful concept and if anything, I would like to see the feature extended considerably to provide greater support for generics in Fortran. Rather it will be most useful if Intel Fortran team can step back and take a comprehensive look at the PDT implementation to clean, thorough resolutions quickly to the outstanding issues and get it the functionality working right overall for users. My confidence level in using the facility in my own code designs or to recommend to other colleagues remains low as I'm really struggling to keep track of what has been fixed since 15.0 - it's proving too difficult to get a big picture on PDTs and to understand what's been resolved and what issues still pending with PDTs in Intel Fortran, the problem being further compounded with the missing "compiler fixes list" with 17.0 version. It's all rather frustrating.
Thanks,
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
There's an effort to restore the fixes list in some form, but it probably wouldn't be useful if just trying to match symptoms.
Thanks for the complete example - we'll get right on it. PDT LEN parameters are difficult to get right.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I haven't been able to reproduce it yet. Will keep trying.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I can now reproduce an error but only with an x64 target compile. It doesn't reproduce in a later internal build, so I am testing it with the upcoming Update 1 to see what happens.
Grr.. and now I can reproduce it in Win32 as well. You're right, this is variable! We'll get to the bottom of it.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Steve Lionel (Intel) wrote:
.. You're right, this is variable! We'll get to the bottom of it.
Steve,
FWIW, here's what I had found from a 10 minute look at the code yesterday - please see comments marked with !** in the reduced example below, all with x64 target (Intel(R) 64 compiler version):
module Constants implicit none real(8) :: R !** 1) Commenting out this line avoids ICE, but triggers unexpected error #8737 contains subroutine DRandomInt(RR) !** 2) OR Commenting out this procedure avoids ICE use IFPORT real(8),intent(inout) :: RR integer :: AA AA=int(RR*100.d0) RR=DRAND(AA) return entry DRandom(RR) !** 3) OR Commenting out this ENTRY section avoids ICE with /On (n=1 to 3), not /Od RR=DRAND(0) ! return end subroutine DRandomInt end module Constants module TypeModule implicit none ! This Section is the definitions of the physicla parameters. integer(4),parameter :: NxMax=65 type :: Grid2D(Nx,Ny,Ns) integer(4),len :: Nx=NxMax,Ny=1000,Ns=1_4 real(8) :: value(1:Nx,0:Ny,1:Ns) !** 4) OR Commenting out this line avoids ICE real(8) :: Dx=0.d0,Dy=0.d0 integer(4) :: timer=0,Period=1 end type Grid2D end module TypeModule
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Based on my experiments with a "release candidate" build of Update 1, I am 99% certain that the bugs related to these sources (including FortranFan's cut-down version) will be fixed with Update 1. I'm expecting this to be released "soon", but it has taken longer to get it out than we anticipated. When you do get Update 1, please try it on your whole application and let us know how it works for you.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Update 1 should be available later today.
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page