- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
It looks like there's something off with using a length parameter from a parameterised derived type arguement in a procedure. In the following, do_a fails to compile ("This component is not a field of the encompassing structure.") while do_b works - even though they're identical. Perhaps worse, it accepts x(n) for do_a, even though n isn't defined anywhere and implicit none is in effect. Attempting to use this (e.g. x = 1.0) generates an ICE.
module test_module
implicit none
type :: a(n)
integer, len :: n
contains
procedure :: do_a
procedure :: do_b
end type a
contains
subroutine do_a ( this, x )
class(a(n=*)), intent(in) :: this
!real, intent(out) :: x(this%n) ! <--- this fails
!real, intent(out) :: x(n) ! <--- this works, but causes ICE when referenced
real, intent(out) :: x(*)
x(1:this%n) = 1.0 ! <--- generates ICE if x(n) used above
end subroutine do_a
subroutine do_b ( this, x )
class(a(n=*)), intent(in) :: this
real, intent(out) :: x(this%n) ! <--- this works (!)
x(1:this%n) = 1.0 ! <--- no ICE from this one
end subroutine do_b
end module test_module
Here's the ICE:
Intel(R) Visual Fortran Intel(R) 64 Compiler for applications running on Intel(R) 64, Version 16.0 Build 20150815 Copyright (C) 1985-2015 Intel Corporation. All rights reserved. 04010002_1013 test.f90(19): catastrophic error: **Internal compiler error: internal abort** Please report this error along with the circumstances in which it occurred in a Software Problem Report. Note: File and line given may not be explicit cause of this error.
Cheers,
Ben
Link Copied
1 Reply
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thanks, we'll check it out.
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