1# Copyright 2008-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 16 17standard_testfile .cc 18 19if [get_compiler_info] { 20 return -1 21} 22 23if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} { 24 return -1 25} 26 27############################################ 28# test printing of namespace imported within 29# the function. 30 31if ![runto_main] then { 32 perror "couldn't run to breakpoint main" 33 continue 34} 35 36gdb_test "print _a" "= 1" 37 38# Test that names are not printed when they 39# are not imported 40 41gdb_breakpoint marker3 42gdb_continue_to_breakpoint "marker3" 43 44#send_gdb "break marker3\n" 45#send_gdb "continue\n" 46 47gdb_test "print _a" "No symbol \"_a\" in current context." \ 48 "Print _a without import" 49 50gdb_exit 51gdb_start 52gdb_reinitialize_dir $srcdir/$subdir 53gdb_load ${binfile} 54 55 56############################################ 57# test printing of namespace imported into 58# a scope containing the pc. 59 60if ![runto_main] then { 61 perror "couldn't run to breakpoint main" 62 continue 63} 64 65gdb_breakpoint [gdb_get_line_number "marker1 stop"] 66gdb_continue_to_breakpoint "marker1 stop" 67 68gdb_test "print _a" "= 1" "print _a in a nested scope" 69 70 71gdb_exit 72gdb_start 73gdb_reinitialize_dir $srcdir/$subdir 74gdb_load ${binfile} 75 76############################################ 77# test printing of namespace imported into 78# file scope. 79 80 81if ![runto marker5] then { 82 perror "couldn't run to breakpoint marker5" 83 continue 84} 85 86gdb_test "print cc" "= 3" 87 88gdb_exit 89gdb_start 90gdb_reinitialize_dir $srcdir/$subdir 91gdb_load ${binfile} 92 93 94############################################ 95# Test printing of namespace aliases 96 97if ![runto marker2] then { 98 perror "couldn't run to breakpoint marker2" 99 continue 100} 101 102gdb_test "print B::_a" "= 1" 103 104gdb_test "print _a" "No symbol \"_a\" in current context." \ 105 "print _a in namespace alias scope" 106 107gdb_test "print x" "No symbol \"x\" in current context." \ 108 "print x in namespace alias scope" 109 110gdb_exit 111gdb_start 112gdb_reinitialize_dir $srcdir/$subdir 113gdb_load ${binfile} 114 115 116############################################ 117# Test that names are not printed when they 118# are not imported 119 120if {![runto marker3]} { 121 perror "couldn't run to breakpoint marker3" 122} 123 124# gcc-4-3 puts import statements for aliases in 125# the global scope instead of the corresponding 126# function scope. These wrong import statements throw 127# this test off. This is fixed in gcc-4-4. 128if [test_compiler_info gcc-4-3-*] then { setup_xfail *-*-* } 129 130gdb_test "print _a" "No symbol \"_a\" in current context." \ 131 "Print _a without import" 132 133############################################ 134# Test printing of individually imported elements 135 136if ![runto marker4] then { 137 perror "couldn't run to breakpoint marker4" 138 continue 139} 140 141gdb_test "print dx" "= 4" 142 143############################################ 144# Test printing of namespace aliases 145 146if ![runto marker5] then { 147 perror "couldn't run to marker5" 148 continue 149} 150 151gdb_test "print efx" "= 5" 152 153############################################ 154# Test printing of variables imported from 155# nested namespaces 156 157if ![runto I::marker7] then { 158 perror "couldn't run to breakpoint I::marker7" 159 continue 160} 161 162gdb_test "print ghx" "= 6" 163 164############################################ 165# Test that variables are not printed in a namespace 166# that is sibling to the namespace containing an import 167 168if ![runto L::marker8] then { 169 perror "couldn't run to breakpoint L::marker8" 170 continue 171} 172 173gdb_test "print jx" "= 44" 174 175gdb_breakpoint "K::marker9" 176gdb_continue_to_breakpoint "K::marker9" 177 178gdb_test "print jx" "No symbol \"jx\" in current context." 179 180############################################ 181# Test that variables are only printed after the line 182# containing the import 183 184if ![runto_main] then { 185 perror "couldn't run to breakpoint main" 186 continue 187} 188 189gdb_breakpoint [gdb_get_line_number "marker10 stop"] 190gdb_continue_to_breakpoint "marker10 stop" 191 192if { [test_compiler_info {gcc-[0-3]-*}] || 193 [test_compiler_info {gcc-4-[0-3]-*}]} { 194 setup_xfail *-*-* 195} 196 197# Assert that M::x is printed and not N::x 198gdb_test "print x" "= 911" "print x (from M::x)" 199