summaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.fortran/vla-strings.f90
diff options
context:
space:
mode:
authorBernhard Heckel <bernhard.heckel@intel.com>2016-07-12 08:19:34 +0200
committerBernhard Heckel <bernhard.heckel@intel.com>2016-09-07 12:19:36 +0200
commit0ad7d8d1a3a36c6e04e3b6d37d8825f18d595723 (patch)
tree8264c5240b5d9a78908266425117ebee8123b511 /gdb/testsuite/gdb.fortran/vla-strings.f90
parent4c60f96807d8559a56412d846b96b9cccedfa8e7 (diff)
downloadbinutils-gdb-users/bheckel/fortran-vla-strings.tar.gz
fort_dyn_array: Fortran dynamic string supportusers/bheckel/fortran-vla-strings
This patch changes the semantic of the Dwarf string length attribute to reflect the standard as well as enables correct string length calculation of dynamic strings. Add tests for varous dynamic string evaluations. Old: (gdb) p my_dyn_string Cannot access memory at address 0x605fc0 New: (gdb) p *my_dyn_string $1 = 'foo' gdb/Changlog: * dwarf2read.c (read_tag_string_type): changed semantic of DW_AT_string_length to be able to handle Dwarf blocks as well. Support for DW_AT_byte_length added to get correct length if specified in combination with DW_AT_string_length. (attr_to_dynamic_prop): added functionality to add Dwarf operators to baton data attribute. Added post values to baton as required by the string evaluation case. (read_subrange_type): Adapt caller. (set_die_type): Adapt caller. (add_post_values_to_baton): New function. * gdbtypes.c (resolve_dynamic_type): Add conditions to support string types. (resolve_dynamic_array): Add conditions for dynamic strings and create a new string type. (is_dynamic_type): Follow pointer if a string type was detected, as Fortran strings are represented as pointers to strings internally. gdb/testsuite/Changelog: * vla-strings.f90: New file. * vla-strings.exp: New file. Change-Id: I7d7f47c7a4900a7fdb51102032455b53d60e60d7
Diffstat (limited to 'gdb/testsuite/gdb.fortran/vla-strings.f90')
-rw-r--r--gdb/testsuite/gdb.fortran/vla-strings.f9039
1 files changed, 39 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.fortran/vla-strings.f90 b/gdb/testsuite/gdb.fortran/vla-strings.f90
new file mode 100644
index 00000000000..3c22735fdbe
--- /dev/null
+++ b/gdb/testsuite/gdb.fortran/vla-strings.f90
@@ -0,0 +1,39 @@
+! Copyright 2016 Free Software Foundation, Inc.
+!
+! This program is free software; you can redistribute it and/or modify
+! it under the terms of the GNU General Public License as published by
+! the Free Software Foundation; either version 3 of the License, or
+! (at your option) any later version.
+!
+! This program is distributed in the hope that it will be useful,
+! but WITHOUT ANY WARRANTY; without even the implied warranty of
+! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+! GNU General Public License for more details.
+!
+! You should have received a copy of the GNU General Public License
+! along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+program vla_strings
+ character(len=:), target, allocatable :: var_char
+ character(len=:), pointer :: var_char_p
+ logical :: l
+
+ allocate(character(len=10) :: var_char)
+ l = allocated(var_char) ! var_char-allocated-1
+ var_char = 'foo'
+ deallocate(var_char) ! var_char-filled-1
+ l = allocated(var_char) ! var_char-deallocated
+ allocate(character(len=42) :: var_char)
+ l = allocated(var_char)
+ var_char = 'foobar'
+ var_char = '' ! var_char-filled-2
+ var_char = 'bar' ! var_char-empty
+ deallocate(var_char)
+ allocate(character(len=21) :: var_char)
+ l = allocated(var_char) ! var_char-allocated-3
+ var_char = 'johndoe'
+ var_char_p => var_char
+ l = associated(var_char_p) ! var_char_p-associated
+ var_char_p => null()
+ l = associated(var_char_p) ! var_char_p-not-associated
+end program vla_strings