! { 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