⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 use_only_1.f90

📁 用于进行gcc测试
💻 F90
字号:
! { dg-do run }! { dg-options "-O1" }! Checks the fix for PR33541, in which a requirement of! F95 11.3.2 was not being met: The local names 'x' and! 'y' coming from the USE statements without an ONLY clause! should not survive in the presence of the locally renamed! versions. In fixing the PR, the same correction has been! made to generic interfaces.!! Reported by Reported by John Harper in! http://gcc.gnu.org/ml/fortran/2007-09/msg00397.html!MODULE xmod  integer(4) :: x = -666  private foo, bar  interface xfoobar    module procedure foo, bar  end interfacecontains  integer function foo ()    foo = 42  end function  integer function bar (a)    integer a    bar = a  end functionEND MODULE xmodMODULE ymod  integer(4) :: y = -666  private foo, bar  interface yfoobar    module procedure foo, bar  end interfacecontains  integer function foo ()    foo = 42  end function  integer function bar (a)    integer a    bar = a  end functionEND MODULE ymod  integer function xfoobar () ! These function as defaults should...    xfoobar = 99  end function  integer function yfoobar () ! ...the rename works correctly.    yfoobar = 99  end functionPROGRAM test2uses  implicit integer(2) (a-z)  x = 666  ! These assignments generate implicitly typed  y = 666  ! local variables 'x' and 'y'.  call test1  call test2  call test3contains  subroutine test1  ! Test the fix of the original PR    USE xmod    USE xmod, ONLY: xrenamed => x    USE ymod, ONLY: yrenamed => y    USE ymod    implicit integer(2) (a-z)    if (kind(xrenamed) == kind(x)) call abort ()    if (kind(yrenamed) == kind(y)) call abort ()  end subroutine  subroutine test2  ! Test the fix applies to generic interfaces    USE xmod    USE xmod, ONLY: xfoobar_renamed => xfoobar    USE ymod, ONLY: yfoobar_renamed => yfoobar    USE ymod    if (xfoobar_renamed (42) == xfoobar ()) call abort ()    if (yfoobar_renamed (42) == yfoobar ()) call abort ()  end subroutine  subroutine test3  ! Check that USE_NAME == LOCAL_NAME is OK    USE xmod    USE xmod, ONLY: x => x, xfoobar => xfoobar    USE ymod, ONLY: y => y, yfoobar => yfoobar    USE ymod    if (kind (x) /= 4) call abort ()        if (kind (y) /= 4) call abort ()        if (xfoobar (77) /= 77_4) call abort ()    if (yfoobar (77) /= 77_4) call abort ()  end subroutineEND PROGRAM test2uses! { dg-final { cleanup-modules "xmod ymod" } }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -