I am trying to align the memory of pointers in a pretty large code. But, I receive a compilation error #8626 which is undocumented. So, I have made a test program that can reproduce the same compilation error.
The issue is that the variable names outside of a derived type in a module is the same as the ones inside a derived type.
Below is the test program to get a clear picture:
module mod1 implicit none real*8, pointer, contiguous :: Arr(:) !dir$ attributes align : 64 :: Arr type der1 ! This does NOT work because the name is same real*8, pointer, contiguous :: Arr(:) !dir$ attributes align : 64 :: Arr ! This works because Arr is renamed to ArrD !real*8, pointer, contiguous :: ArrD(:) !!dir$ attributes align : 64 :: ArrD end type end module program test use mod1 implicit none end program
When I compiler the program, I receive the following error:
test.f90(10): error #8626: The DEC$ ATTRIBUTES ALIGN or FASTMEM attribute must specify a field in the type being defined. [ARR] !dir$ attributes align : 64 :: Arr ----------------------------------^ compilation aborted for test.f90 (code 1)
How do I specify a field, as told in the above error? Is there any way to tell the compiler to differentiate these two pointers?
Thank you in advance.
The code that you provided works with ifort 17 and 18. So this seems to be a regression in the v19 of the compiler. I suggest to report this via the Online Support Center of Intel.