aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg/char4-subscript.f90
diff options
context:
space:
mode:
authorTobias Burnus <tobias@codesourcery.com>2020-06-25 16:57:08 +0200
committerTobias Burnus <tobias@codesourcery.com>2020-06-25 16:57:08 +0200
commitf48bffe70cba310461ec19ffcd07c573a6b86575 (patch)
tree55c737310793db38ac215616287c8d1f50a1f6cc /gcc/testsuite/gfortran.dg/char4-subscript.f90
parent628b78f9794a2eefcbc578011806bfa8e09b9ef7 (diff)
downloadgcc-f48bffe70cba310461ec19ffcd07c573a6b86575.zip
gcc-f48bffe70cba310461ec19ffcd07c573a6b86575.tar.gz
gcc-f48bffe70cba310461ec19ffcd07c573a6b86575.tar.bz2
Fortran: Fix character-kind=4 substring resolution (PR95837)
Testing showed that it is always set and its value matches always ts->kind (if available) or otherwise, if it is a variable, the sym->ts.kind. gcc/fortran/ChangeLog: PR fortran/95837 * resolve.c (gfc_resolve_substring_charlen): Remove bogus ts.kind setting for the expression. gcc/testsuite/ChangeLog: PR fortran/95837 * gfortran.dg/char4-subscript.f90: New test.
Diffstat (limited to 'gcc/testsuite/gfortran.dg/char4-subscript.f90')
-rw-r--r--gcc/testsuite/gfortran.dg/char4-subscript.f9030
1 files changed, 30 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/char4-subscript.f90 b/gcc/testsuite/gfortran.dg/char4-subscript.f90
new file mode 100644
index 0000000..f1f915c
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/char4-subscript.f90
@@ -0,0 +1,30 @@
+! { dg-do run }
+! { dg-additional-options "-fdump-tree-original" }
+!
+! PR fortran/95837
+!
+type t
+ character(len=:, kind=4), pointer :: str2
+end type t
+type(t) :: var
+
+allocate(character(len=5, kind=4) :: var%str2)
+
+var%str2(1:1) = 4_"d"
+var%str2(2:3) = 4_"ef"
+var%str2(4:4) = achar(int(Z'1F600'), kind=4)
+var%str2(5:5) = achar(int(Z'1F608'), kind=4)
+
+if (var%str2(1:3) /= 4_"def") stop 1
+if (ichar(var%str2(4:4)) /= int(Z'1F600')) stop 2
+if (ichar(var%str2(5:5)) /= int(Z'1F608')) stop 2
+
+deallocate(var%str2)
+end
+
+! Note: the last '\x00' is regarded as string terminator, hence, the tailing \0 byte is not in the dump
+
+! { dg-final { scan-tree-dump " \\(\\*var\\.str2\\)\\\[1\\\]{lb: 1 sz: 4} = .d\\\\x00\\\\x00.\\\[1\\\]{lb: 1 sz: 4};" "original" } }
+! { dg-final { scan-tree-dump " __builtin_memmove \\(\\(void \\*\\) &\\(\\*var.str2\\)\\\[2\\\]{lb: 1 sz: 4}, \\(void \\*\\) &.e\\\\x00\\\\x00\\\\x00f\\\\x00\\\\x00.\\\[1\\\]{lb: 1 sz: 4}, 8\\);" "original" } }
+! { dg-final { scan-tree-dump " \\(\\*var.str2\\)\\\[4\\\]{lb: 1 sz: 4} = .\\\\x00\\\\xf6\\\\x01.\\\[1\\\]{lb: 1 sz: 4};" "original" } }
+! { dg-final { scan-tree-dump " \\(\\*var.str2\\)\\\[5\\\]{lb: 1 sz: 4} = .\\\\b\\\\xf6\\\\x01.\\\[1\\\]{lb: 1 sz: 4};" "original" } }