(root)/
gcc-13.2.0/
gcc/
testsuite/
gfortran.dg/
gomp/
assume-3.f90
! { dg-do compile }
! { dg-options "-fopenmp -O2 -fdump-tree-optimized -fdump-tree-original" }

! { dg-final { scan-tree-dump-times ".ASSUME \\(x == 42\\);" 1 "original" } }
! { dg-final { scan-tree-dump-times ".ASSUME \\(x <= 41\\);" 1 "original" } }
! { dg-final { scan-tree-dump-times ".ASSUME \\(y <= 6\\);" 1 "original" } }
! { dg-final { scan-tree-dump-times ".ASSUME \\(y > 5\\);" 1 "original" } }

! { dg-final { scan-tree-dump-times "return 42;" 3 "optimized" } }
! { dg-final { scan-tree-dump-not "return -1;" "optimized" } }

integer function foo (x)
  implicit none
  integer, value :: x
  integer :: y
  !$omp assume holds (x == 42)
    y = x;
  !$omp end assume
  foo = y
end

integer function bar (x)
  implicit none
  integer, value :: x
  !$omp assume holds (x < 42)
  block
  end block
  if (x == 42) then
    bar = -1
    return
  end if
  bar = 42
end

integer function foobar (y)
  implicit none
  integer, value :: y
  !$omp assume holds(y > 5) holds (y < 7)
  block
    if (y == 6) then
      foobar = 42
      return
    end if
  end block
  foobar = -1
end