- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi, I want to show the following code which a character array index error occurs.
module test1 implicit none private public :: tp1, const1, const2, const3, chars type :: tp1 private integer :: var contains private procedure, public, pass :: getvalue end type tp1 type(tp1), parameter :: const1 = tp1(0) type(tp1), parameter :: const2 = tp1(1) type(tp1), parameter :: const3 = tp1(2) character(*), dimension(0:*), parameter :: chars = ["1234", "5678", "9012" ] contains function getvalue(this) implicit none integer :: getvalue class(tp1), intent(in) :: this getvalue = this % var end function getvalue end module test1 program main use test1 implicit none integer :: idx print*, chars(0), ' ', chars(1), ' ', chars(2) ! <---Output: 1234 5678 9012 idx = const1 % getvalue() print*, idx ! <---Output: 0 print*, chars(idx) ! <---Output: 1234 print*, chars(const1 % getvalue()) ! <---Output: 5678 print*, chars(const2 % getvalue()) ! <---Output: 5678 print*, chars(const3 % getvalue()) ! <---Output: 5678 print*, chars(get()) ! <---Output: 1234 contains function get() implicit none integer :: get get = 0 end function get end program main
The 2-4 PRINT statements of chars gives a strange output of chars(1) rather than the expected chars(0), all other PRINTs are all correctly printed. Is this a mistake or something ?
Link Copied
2 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Clearly a bug in Intel Fortran with what it is doing with NAMED CONSTANTS and the code it generates for it. The problem persists in current 2019 Beta version too.
I suggest you submit this to Intel support, you may want to consider a minimal example:
use test1, only : chars, const3 integer :: idx idx = const3%getvalue() print *, "idx = ", idx, "; expected is 2" print *, "chars( const3%getvalue() ) yields ", chars( const3%getvalue() ), "; expected is ", chars(2) end
for which another compiler correctly yields,
idx = 2 ; expected is 2 chars( const3%getvalue() ) yields 9012; expected is 9012
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thanks FortranFan, I'll do it.

Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page