PSXE 2017 Update 2 - Internal Compiler Error(s) involving PARAMETER constants and /debug-parameters /debug options
A defect (regression) has been found in the Intel® Parallel Studio XE 2017 Update 2 (17.0 compiler) release involving the use of PARAMETER constants along with the /debug-parameter and /debug options. The combined use can led to multiple internal compiler errors.
The following example (complements of andrew_4619) demonstrates usage that will trigger the internal error:
module ice implicit none integer, parameter :: ld=82 contains subroutine thingy call bob(ld) end subroutine thingy subroutine bob(I) integer,intent(in) :: I print *, I end subroutine bob end module ice
Users may experience several internal errors during a build attempt for the Debug configuration under Visual Studio where it is common to have /debug-parameter and /debug options enabled simultaneously.
Users can work around the defect by either:
The internal tracking id for this defect is: DPD200418283.
(Resolution Update on 05/12/2017): This defect is fixed in the Intel® Parallel Studio XE 2017 Update 4 release (ifort Version 22.214.171.124 Build 20170428 - PSXE 2017.4.051 / CnL 2017.4.210 - Windows)
I was debugging some code and tried to right-click on a PARAMETER constant to use QuickWatch to see its value. It showed as UNDEFINED, but each case I try that acts this way, seems to evaluate correctly. I am using IVF 2017, update 2, and FULL debug mode. Am I supposed to be able to QuickWatch PARAMETER constants or is this perhaps a symptom of the issue mentioned above?
Thank you in advance.
If you disable (or set to None) the specific debugging aid for PARAMETERS as noted in item #1 of the original post then under the debugger you will see Undefined for parameter constants.
If you do not have the type of use shown in the example that triggers the internal error then you can enable the setting in item #1 and be able to view a parameter constant's value via QuickWatch as shown below.
While the sample code from the OP does compile using ifort 126.96.36.199, below code (same code, but character constant instead of integer) still does not:
module ice implicit none character, parameter :: ld = 'c' contains subroutine thingy call bob(ld) end subroutine thingy subroutine bob(I) character, intent(in) :: I print *, I end subroutine bob end module ice