Files
binutils-gdb/gdb/testsuite/gdb.fortran/vla-strings.f90
Bernhard Heckel 0ad7d8d1a3 fort_dyn_array: Fortran dynamic string support
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
2016-09-07 12:19:36 +02:00

40 lines
1.6 KiB
Fortran

! 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