次の例を、-xalias=ftnpointer を使用してコンパイルします。
parameter (n=20)
integer, pointer :: a(:)
integer, target :: t(n)
interface
subroutine sub(a,b,n)
integer, pointer :: a(:)
integer, pointer :: b(:)
end subroutine
end interface
a => t
a = (/ (i, i=1,n) /)
call sub(a,a,n)
....
end
subroutine sub(a,b,n)
integer, pointer :: a(:)
real, pointer :: b(:)
integer i, mold
forall (i=2:n)
a(i) = transfer(b(i-1), mold)
コンパイラは、a と b がオーバーラップする可能性があることを前提とする必要があり
ます。
|
この例では、コンパイラは、a と b が別のデータ型のデータを指していてもオーバーラップする可能性があることを前提とする必要があります。これは、Fortran 規格に反しています。コンパイラは、このような状況を検出すると警告を出力します。