| ! { dg-do compile } |
| ! { dg-options "-Warray-temporaries" } |
| ! Tests the fix for PR80164, in which the compiler segfaulted on this |
| ! when using -Warray-temporaries |
| ! |
| !****************************************************************************** |
| module global |
| type :: a |
| integer :: b |
| character(8):: c |
| end type a |
| interface assignment(=) |
| module procedure a_to_a, c_to_a, a_to_c |
| end interface |
| interface operator(.ne.) |
| module procedure a_ne_a |
| end interface |
| |
| type(a) :: x(4), y(4) |
| logical :: l1(4), t = .true., f= .false. |
| contains |
| !****************************************************************************** |
| elemental subroutine a_to_a (m, n) |
| type(a), intent(in) :: n |
| type(a), intent(out) :: m |
| m%b = len ( trim(n%c)) |
| m%c = n%c |
| end subroutine a_to_a |
| elemental subroutine c_to_a (m, n) |
| character(8), intent(in) :: n |
| type(a), intent(out) :: m |
| m%b = m%b + 1 |
| m%c = n |
| end subroutine c_to_a |
| elemental subroutine a_to_c (m, n) |
| type(a), intent(in) :: n |
| character(8), intent(out) :: m |
| m = n%c |
| end subroutine a_to_c |
| !****************************************************************************** |
| elemental logical function a_ne_a (m, n) |
| type(a), intent(in) :: n |
| type(a), intent(in) :: m |
| a_ne_a = (m%b .ne. n%b) .or. (m%c .ne. n%c) |
| end function a_ne_a |
| !****************************************************************************** |
| elemental function foo (m) |
| type(a) :: foo |
| type(a), intent(in) :: m |
| foo%b = 0 |
| foo%c = m%c |
| end function foo |
| end module global |
| !****************************************************************************** |
| program test |
| use global |
| x = (/a (0, "one"),a (0, "two"),a (0, "three"),a (0, "four")/) ! { dg-warning "Creating array temporary" } |
| y = x |
| end program test |