| ! { dg-do compile } |
| ! |
| ! PR fortran/66929 |
| ! Generic procedures as actual argument used to lead to |
| ! a NULL pointer dereference in gfc_get_proc_ifc_for_expr |
| ! because the generic symbol was used as procedure symbol, |
| ! instead of the specific one. |
| |
| module iso_varying_string |
| type, public :: varying_string |
| character(LEN=1), dimension(:), allocatable :: chars |
| end type varying_string |
| interface operator(/=) |
| module procedure op_ne_VS_CH |
| end interface operator (/=) |
| interface trim |
| module procedure trim_ |
| end interface |
| contains |
| elemental function op_ne_VS_CH (string_a, string_b) result (op_ne) |
| type(varying_string), intent(in) :: string_a |
| character(LEN=*), intent(in) :: string_b |
| logical :: op_ne |
| op_ne = .true. |
| end function op_ne_VS_CH |
| elemental function trim_ (string) result (trim_string) |
| type(varying_string), intent(in) :: string |
| type(varying_string) :: trim_string |
| trim_string = varying_string(["t", "r", "i", "m", "m", "e", "d"]) |
| end function trim_ |
| end module iso_varying_string |
| module syntax_rules |
| use iso_varying_string, string_t => varying_string |
| contains |
| subroutine set_rule_type_and_key |
| type(string_t) :: key |
| if (trim (key) /= "") then |
| print *, "non-empty" |
| end if |
| end subroutine set_rule_type_and_key |
| end module syntax_rules |