1! { dg-do run } 2! { dg-options "-fbackslash" } 3 4 implicit none 5 character(kind=1,len=3) :: s1, t1 6 character(kind=4,len=3) :: s4, t4 7 8 s1 = "foo" ; t1 = "bar" 9 call check_minmax_1 ("foo", "bar", min("foo","bar"), max("foo","bar")) 10 call check_minmax_1 ("bar", "foo", min("foo","bar"), max("foo","bar")) 11 call check_minmax_1 (s1, t1, min(s1,t1), max(s1,t1)) 12 call check_minmax_1 (t1, s1, min(s1,t1), max(s1,t1)) 13 14 s1 = " " ; t1 = "bar" 15 call check_minmax_1 (" ", "bar", min(" ","bar"), max(" ","bar")) 16 call check_minmax_1 ("bar", " ", min(" ","bar"), max(" ","bar")) 17 call check_minmax_1 (s1, t1, min(s1,t1), max(s1,t1)) 18 call check_minmax_1 (t1, s1, min(s1,t1), max(s1,t1)) 19 20 s1 = " " ; t1 = " " 21 call check_minmax_1 (" ", " ", min(" "," "), max(" "," ")) 22 call check_minmax_1 (" ", " ", min(" "," "), max(" "," ")) 23 call check_minmax_1 (s1, t1, min(s1,t1), max(s1,t1)) 24 call check_minmax_1 (t1, s1, min(s1,t1), max(s1,t1)) 25 26 s1 = "d\xFF " ; t1 = "d " 27 call check_minmax_1 ("d\xFF ", "d ", min("d\xFF ","d "), max("d\xFF ","d ")) 28 call check_minmax_1 ("d ", "d\xFF ", min("d\xFF ","d "), max("d\xFF ","d ")) 29 call check_minmax_1 (s1, t1, min(s1,t1), max(s1,t1)) 30 call check_minmax_1 (t1, s1, min(s1,t1), max(s1,t1)) 31 32 s4 = 4_" " ; t4 = 4_"xxx" 33 call check_minmax_2 (4_" ", 4_"xxx", min(4_" ", 4_"xxx"), & 34 max(4_" ", 4_"xxx")) 35 call check_minmax_2 (4_"xxx", 4_" ", min(4_" ", 4_"xxx"), & 36 max(4_" ", 4_"xxx")) 37 call check_minmax_2 (s4, t4, min(s4,t4), max(s4,t4)) 38 call check_minmax_2 (t4, s4, min(s4,t4), max(s4,t4)) 39 40 s4 = 4_" \u1be3m" ; t4 = 4_"xxx" 41 call check_minmax_2 (4_" \u1be3m", 4_"xxx", min(4_" \u1be3m", 4_"xxx"), & 42 max(4_" \u1be3m", 4_"xxx")) 43 call check_minmax_2 (4_"xxx", 4_" \u1be3m", min(4_" \u1be3m", 4_"xxx"), & 44 max(4_" \u1be3m", 4_"xxx")) 45 call check_minmax_2 (s4, t4, min(s4,t4), max(s4,t4)) 46 call check_minmax_2 (t4, s4, min(s4,t4), max(s4,t4)) 47 48contains 49 50 subroutine check_minmax_1 (s1, s2, smin, smax) 51 implicit none 52 character(kind=1,len=*), intent(in) :: s1, s2, smin, smax 53 character(kind=4,len=len(s1)) :: w1, w2, wmin, wmax 54 55 w1 = s1 ; w2 = s2 ; wmin = smin ; wmax = smax 56 if (min (w1, w2) /= wmin) call abort 57 if (max (w1, w2) /= wmax) call abort 58 if (min (s1, s2) /= smin) call abort 59 if (max (s1, s2) /= smax) call abort 60 end subroutine check_minmax_1 61 62 subroutine check_minmax_2 (s1, s2, smin, smax) 63 implicit none 64 character(kind=4,len=*), intent(in) :: s1, s2, smin, smax 65 66 if (min (s1, s2) /= smin) call abort 67 if (max (s1, s2) /= smax) call abort 68 end subroutine check_minmax_2 69 70end 71