1! { dg-do run } 2! { dg-options "-fdump-tree-original" } 3! 4! PR fortran/36132 5! 6! Before invalid memory was accessed because an absent, optional 7! argument was packed before passing it as absent actual. 8! Getting it to crash is difficult, but valgrind shows the problem. 9! 10MODULE M1 11 INTEGER, PARAMETER :: dp=KIND(0.0D0) 12CONTAINS 13 SUBROUTINE S1(a) 14 REAL(dp), DIMENSION(45), INTENT(OUT), & 15 OPTIONAL :: a 16 if (present(a)) call abort() 17 END SUBROUTINE S1 18 SUBROUTINE S2(a) 19 REAL(dp), DIMENSION(:, :), INTENT(OUT), & 20 OPTIONAL :: a 21 CALL S1(a) 22 END SUBROUTINE 23END MODULE M1 24 25USE M1 26CALL S2() 27END 28 29! { dg-final { scan-tree-dump-times "a != 0B \\? \\\(.*\\\) _gfortran_internal_pack" 1 "original" } } 30! { dg-final { scan-tree-dump-times "if \\(a != 0B &&" 1 "original" } } 31! { dg-final { cleanup-tree-dump "original" } } 32