view gcc/testsuite/gfortran.dg/widechar_2.f90 @ 144:8f4e72ab4e11

fix segmentation fault caused by nothing next cur_op to end
author Takahiro SHIMIZU <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Sun, 23 Dec 2018 21:23:56 +0900
parents 84e7813d76e9
children
line wrap: on
line source

! { dg-do run }
! { dg-options "-fbackslash" }

  character(kind=1,len=20) :: s1
  character(kind=4,len=20) :: s4

  s1 = "this is me!"
  s4 = s1
  call check(s1, 4_"this is me!         ")
  call check2(s1, 4_"this is me!         ")
  s4 = "this is me!"
  call check(s1, 4_"this is me!         ")
  call check2(s1, 4_"this is me!         ")

  s1 = ""
  s4 = s1
  call check(s1, 4_"                    ")
  call check2(s1, 4_"                    ")
  s4 = ""
  call check(s1, 4_"                    ")
  call check2(s1, 4_"                    ")

  s1 = " \xFF"
  s4 = s1
  call check(s1, 4_" \xFF                  ")
  call check2(s1, 4_" \xFF                  ")
  s4 = " \xFF"
  call check(s1, 4_" \xFF                  ")
  call check2(s1, 4_" \xFF                  ")

  s1 = "  \xFF"
  s4 = s1
  call check(s1, 4_"  \xFF                 ")
  call check2(s1, 4_"  \xFF                 ")
  s4 = "  \xFF"
  call check(s1, 4_"  \xFF                 ")
  call check2(s1, 4_"  \xFF                 ")

contains
  subroutine check(s1,s4)
    character(kind=1,len=20) :: s1, t1
    character(kind=4,len=20) :: s4
    t1 = s4
    if (t1 /= s1) STOP 1
    if (len(s1) /= len(t1)) STOP 2
    if (len(s1) /= len(s4)) STOP 3
    if (len_trim(s1) /= len_trim(t1)) STOP 4
    if (len_trim(s1) /= len_trim(s4)) STOP 5
  end subroutine check

  subroutine check2(s1,s4)
    character(kind=1,len=*) :: s1
    character(kind=4,len=*) :: s4
    character(kind=1,len=len(s1)) :: t1
    character(kind=4,len=len(s4)) :: t4

    t1 = s4
    t4 = s1
    if (t1 /= s1) STOP 6
    if (t4 /= s4) STOP 7
    if (len(s1) /= len(t1)) STOP 8
    if (len(s1) /= len(s4)) STOP 9
    if (len(s1) /= len(t4)) STOP 10
    if (len_trim(s1) /= len_trim(t1)) STOP 11
    if (len_trim(s1) /= len_trim(s4)) STOP 12
    if (len_trim(s1) /= len_trim(t4)) STOP 13
  end subroutine check2

end