1# Copyright 2006-2020 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 16if { [skip_cplus_tests] } { continue } 17 18load_lib mi-support.exp 19set MIFLAGS "-i=mi" 20 21gdb_exit 22if [mi_gdb_start] { 23 continue 24} 25 26standard_testfile .cc 27 28if [get_compiler_info "c++"] { 29 return -1 30} 31 32if {[gdb_compile $srcdir/$subdir/$srcfile $binfile executable {debug c++}] != ""} { 33 untested "failed to compile" 34 return -1 35} 36 37mi_gdb_load ${binfile} 38 39mi_prepare_inline_tests $srcfile 40 41mi_run_inline_test reference_update 42mi_run_inline_test base_in_reference 43mi_run_inline_test reference_to_pointer 44mi_run_inline_test reference_to_struct 45mi_run_inline_test path_expression 46 47set lineno [gdb_get_line_number "/* anonymous_structs_and_unions */"] 48mi_create_breakpoint "$srcfile:$lineno" \ 49 "break in anonymous_structs_and_unions" \ 50 -func {anonymous_structs_and_unions\(\)} -file ".*mi-var-cp.cc" \ 51 -line $lineno 52mi_execute_to "exec-continue" "breakpoint-hit" \ 53 "anonymous_structs_and_unions" "" ".*" ".*" {"" "disp=\"keep\""} \ 54 "continue to anonymous_structs breakpoint" 55 56set tree { 57 Anonymous a { 58 {} public { 59 anonymous struct { 60 {} public { 61 int b {} 62 } 63 } 64 anonymous struct { 65 {} public { 66 int c {} 67 } 68 } 69 anonymous struct { 70 {} public { 71 int d {} 72 anonymous struct { 73 {} public { 74 int e {} 75 anonymous struct { 76 {} public { 77 int f {} 78 anonymous union { 79 {} public { 80 int g {} 81 char h {} 82 } 83 } 84 } 85 } 86 anonymous union { 87 {} public { 88 int i {} 89 char j {} 90 } 91 } 92 } 93 } 94 } 95 } 96 } 97 } 98} 99 100proc verify_everything {variable_name} { 101 # Test -var-list-children 102 mi_varobj_tree_test_children_callback $variable_name 103 104 # Bring the variable named by VARIABLE_NAME into the current scope 105 # in VAROBJ. 106 upvar #0 $variable_name varobj 107 108 # Test -var-info-path-expression 109 mi_gdb_test "-var-info-path-expression $varobj(obj_name)" \ 110 "\\^done,path_expr=\"[string_to_regexp $varobj(path_expr)]\"" \ 111 "path expression for $varobj(obj_name)" 112 113 # Test -var-info-expression 114 mi_gdb_test "-var-info-expression $varobj(obj_name)" \ 115 "\\^done,lang=\"C\\+\\+\",exp=\"[string_to_regexp $varobj(display_name)]\"" \ 116 "expression for $varobj(obj_name)" 117} 118 119mi_walk_varobj_tree c++ $tree verify_everything 120 121mi_gdb_exit 122return 0 123