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

📄 volatile10.f90

📁 用于进行gcc测试
💻 F90
字号:
! { dg-do run }! { dg-options "-fdump-tree-optimized -O3" }! Test setting host-/use-associated variables as VOLATILE! PR fortran/30522module impl  implicit REAL (A-Z)  volatile :: xend module implmodule one  implicit none  logical :: l, lv  volatile :: lvcontains  subroutine test1(cmp)    logical  :: cmp    volatile :: l, lv    if (l  .neqv. cmp) call abort()    if (lv .neqv. cmp) call abort()    l = .false.    lv = .false.    if(l .or. lv) print *, 'one_test1' ! not optimized away  end subroutine test1  subroutine test2(cmp)    logical  :: cmp    if (l  .neqv. cmp) call abort()    if (lv .neqv. cmp) call abort()    l = .false.    if(l)  print *, 'one_test2_1' ! optimized away    lv = .false.    if(lv) print *, 'one_test2_2' ! not optimized away  end subroutine test2end module onemodule two  use :: one  implicit none  volatile :: lv,lcontains  subroutine test1t(cmp)    logical  :: cmp    volatile :: l, lv    if (l  .neqv. cmp) call abort()    if (lv .neqv. cmp) call abort()    l = .false.    if(l)  print *, 'two_test1_1' ! not optimized away    lv = .false.    if(lv) print *, 'two_test1_2' ! not optimized away  end subroutine test1t  subroutine test2t(cmp)    logical  :: cmp    if (l  .neqv. cmp) call abort()    if (lv .neqv. cmp) call abort()    l = .false.    if(l)  print *, 'two_test2_1' ! not optimized away    lv = .false.    if(lv) print *, 'two_test2_2' ! not optimized away  end subroutine test2tend module twoprogram main  use :: two, only: test1t, test2t  implicit none  logical :: lm, lmv  volatile :: lmv  lm = .true.  lmv = .true.  call test1m(.true.)  lm = .true.  lmv = .true.  call test2m(.true.)  lm = .false.  lmv = .false.  call test1m(.false.)  lm = .false.  lmv = .false.  call test2m(.false.)contains  subroutine test1m(cmp)    use :: one    logical  :: cmp    volatile :: lm,lmv    if(lm  .neqv. cmp) call abort()    if(lmv .neqv. cmp) call abort()    l  = .false.    lv = .false.    call test1(.false.)    l  = .true.    lv = .true.    call test1(.true.)    lm  = .false.    lmv = .false.    if(lm .or. lmv) print *, 'main_test1_1' ! not optimized away    l   = .false.    if(l)  print *, 'main_test1_2'          ! optimized away    lv  = .false.    if(lv) print *, 'main_test1_3'          ! not optimized away    l  = .false.    lv = .false.    call test2(.false.)    l  = .true.    lv = .true.    call test2(.true.)  end subroutine test1m  subroutine test2m(cmp)    use :: one    logical  :: cmp    volatile :: lv    if(lm .neqv. cmp) call abort    if(lmv .neqv. cmp) call abort()    l  = .false.    lv = .false.    call test1(.false.)    l  = .true.    lv = .true.    call test1(.true.)    lm  = .false.    if(lm) print *, 'main_test2_1' ! not optimized away    lmv = .false.    if(lmv)print *, 'main_test2_2' ! not optimized away    l   = .false.    if(l)  print *, 'main_test2_3' ! optimized away    lv  = .false.    if(lv) print *, 'main_test2_4' ! not optimized away    l  = .false.    lv = .false.    call test2(.false.)    l  = .true.    lv = .true.    call test2(.true.)  end subroutine test2mend program main! { dg-final { scan-tree-dump      "one_test1"   "optimized" } }! TODO: dg-final { scan-tree-dump-not  "one_test2_1" "optimized" } ! { dg-final { scan-tree-dump      "one_test2_2" "optimized" } }! { dg-final { scan-tree-dump      "one_test2_2" "optimized" } }! { dg-final { scan-tree-dump      "two_test2_1" "optimized" } }! { dg-final { scan-tree-dump      "two_test2_2" "optimized" } }! { dg-final { scan-tree-dump      "main_test1_1" "optimized" } }! TODO: dg-final { scan-tree-dump-not  "main_test1_2" "optimized" } ! { dg-final { scan-tree-dump      "main_test1_3" "optimized" } }! { dg-final { scan-tree-dump      "main_test2_1" "optimized" } }! { dg-final { scan-tree-dump      "main_test2_2" "optimized" } }! TODO: dg-final { scan-tree-dump-not  "main_test2_3" "optimized" } ! { dg-final { scan-tree-dump      "main_test2_4" "optimized" } }! { dg-final { cleanup-tree-dump  "optimized" } }! { dg-final { cleanup-modules "impl one two" } }

⌨️ 快捷键说明

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