summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/widechar_2.f90
blob: 706901e6b1cb1f571d41aec806fdef2f7e458807 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
! { 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) call abort
    if (len(s1) /= len(t1)) call abort
    if (len(s1) /= len(s4)) call abort
    if (len_trim(s1) /= len_trim(t1)) call abort
    if (len_trim(s1) /= len_trim(s4)) call abort
  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) call abort
    if (t4 /= s4) call abort
    if (len(s1) /= len(t1)) call abort
    if (len(s1) /= len(s4)) call abort
    if (len(s1) /= len(t4)) call abort
    if (len_trim(s1) /= len_trim(t1)) call abort
    if (len_trim(s1) /= len_trim(s4)) call abort
    if (len_trim(s1) /= len_trim(t4)) call abort
  end subroutine check2

end