1# Copyright 2014-2023 Free Software Foundation, Inc. 2 3# This program is free software; you can redistribute it and/or modify 4# it under the terms of the GNU General Public License as published by 5# the Free Software Foundation; either version 3 of the License, or 6# (at your option) any later version. 7# 8# This program is distributed in the hope that it will be useful, 9# but WITHOUT ANY WARRANTY; without even the implied warranty of 10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11# GNU General Public License for more details. 12# 13# You should have received a copy of the GNU General Public License 14# along with this program. If not, see <http://www.gnu.org/licenses/>. 15 16standard_testfile 17set using_clang [test_compiler_info clang*] 18 19if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] } { 20 return -1 21} 22 23if ![runto_main] { 24 return -1 25} 26 27set sizeof_int [get_sizeof "int" 4] 28 29# Check that VLA passed to function (pointer) points to the first element. 30gdb_breakpoint [gdb_get_line_number "foo_bp"] 31gdb_continue_to_breakpoint "foo_bp" 32gdb_test "print vla_ptr" "\\\(int \\\*\\\) $hex" "print vla_ptr (foo)" 33gdb_test "print *vla_ptr" " = 2" "print *vla_ptr (foo)" 34 35gdb_breakpoint [gdb_get_line_number "bar_bp"] 36gdb_continue_to_breakpoint "bar_bp" 37gdb_test "print vla_ptr" "\\\(int \\\*\\\) $hex" "print vla_ptr (bar)" 38gdb_test "print *vla_ptr" " = 2" "print *vla_ptr (bar)" 39 40gdb_breakpoint [gdb_get_line_number "vla_func_bp"] 41gdb_continue_to_breakpoint "vla_func_bp" 42 43gdb_test_multiple "print td_vla" "" { 44 -re -wrap " = \\\{4, 5, 6, 7, 8\\\}" { 45 pass $gdb_test_name 46 } 47 -re -wrap " = $hex" { 48 if { $using_clang } { 49 # Clang 10.0.1 fails to generate complete type info, filed as 50 # llvm PR48247 - "vla var with typedef'd type has incomplete 51 # debug info". See note below. 52 xfail $gdb_test_name 53 # Verify that despite the incomplete type info, the variable is 54 # there and has the right value. 55 gdb_test "p *td_vla@5" " = \\\{4, 5, 6, 7, 8\\\}" 56 } else { 57 fail $gdb_test_name 58 } 59 } 60} 61 62# Clang 10.0.1 generates this DWARF for td_vla: 63# 64# A variable DIE: 65# <2><19f>: Abbrev Number: 6 (DW_TAG_variable) 66# <1a0> DW_AT_location : 0x39 (location list) 67# <1a4> DW_AT_name : td_vla 68# <1aa> DW_AT_type : <0x1ae> 69# with type: 70# <2><1ae>: Abbrev Number: 7 (DW_TAG_typedef) 71# <1af> DW_AT_type : <0x1fc> 72# <1b3> DW_AT_name : typedef_vla 73# pointing to: 74# <1><1fc>: Abbrev Number: 11 (DW_TAG_array_type) 75# <1fd> DW_AT_type : <0x1d3> 76# <2><201>: Abbrev Number: 14 (DW_TAG_subrange_type) 77# <202> DW_AT_type : <0x1f5> 78# 79# The subrange type is missing the count attribute. 80