! { dg-do run } | |
! Tests the fix for PR31211, in which the value of the result for | |
! cp_get_default_logger was stored as a temporary, rather than the | |
! pointer itself. This caused a segfault when the result was | |
! nullified. | |
! | |
! Contributed by Joost VandeVondele <jv244@cam.ac.uk> | |
! | |
TYPE cp_logger_type | |
INTEGER :: a | |
END TYPE cp_logger_type | |
if (cp_logger_log(cp_get_default_logger (0))) STOP 1 | |
if (.not. cp_logger_log(cp_get_default_logger (42))) STOP 2 | |
CONTAINS | |
logical function cp_logger_log(logger) | |
TYPE(cp_logger_type), POINTER ::logger | |
if (associated (logger)) then | |
cp_logger_log = (logger%a .eq. 42) | |
else | |
cp_logger_log = .false. | |
end if | |
END function | |
FUNCTION cp_get_default_logger(v) RESULT(res) | |
TYPE(cp_logger_type), POINTER ::res | |
integer :: v | |
if (v .eq. 0) then | |
NULLIFY(RES) | |
else | |
allocate(RES) | |
res%a = v | |
end if | |
END FUNCTION cp_get_default_logger | |
END |