From df83a9bf8b0dc2e2553db096e6933a5be943cda6 Mon Sep 17 00:00:00 2001 From: Sami Wagiaalla Date: Thu, 28 Jan 2010 17:58:02 +0000 Subject: [PATCH] 2010-01-28 Sami Wagiaalla * gdb.cp/nsusing.exp: Added more tests. * gdb.cp/nsrecurs.exp: Ditto. * gdb.cp/nsusing.cc: Added test functions. * gdb.cp/nsrecurs.cc: Ditto. --- gdb/testsuite/ChangeLog | 7 ++ gdb/testsuite/gdb.cp/nsrecurs.cc | 45 ++++++++-- gdb/testsuite/gdb.cp/nsrecurs.exp | 15 +++- gdb/testsuite/gdb.cp/nsusing.cc | 130 +++++++++++++++++++++-------- gdb/testsuite/gdb.cp/nsusing.exp | 131 +++++++++++++++++++++++++----- 5 files changed, 263 insertions(+), 65 deletions(-) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 9a5338c205d..d1cfb4b9980 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2010-01-28 Sami Wagiaalla + + * gdb.cp/nsusing.exp: Added more tests. + * gdb.cp/nsrecurs.exp: Ditto. + * gdb.cp/nsusing.cc: Added test functions. + * gdb.cp/nsrecurs.cc: Ditto. + 2010-01-27 Jan Kratochvil * gdb.base/break-interp.exp: Use [file tail $filename] to omit any diff --git a/gdb/testsuite/gdb.cp/nsrecurs.cc b/gdb/testsuite/gdb.cp/nsrecurs.cc index 84605a6bb7b..2edc35fc206 100644 --- a/gdb/testsuite/gdb.cp/nsrecurs.cc +++ b/gdb/testsuite/gdb.cp/nsrecurs.cc @@ -1,30 +1,57 @@ -namespace A{ +namespace A +{ int ax = 9; } -namespace B{ +namespace B +{ using namespace A; } -namespace C{ +namespace C +{ using namespace B; } +using namespace C; + //--------------- -namespace D{ +namespace D +{ using namespace D; int dx = 99; } -using namespace C; +using namespace D; //--------------- -namespace{ - namespace{ +namespace +{ + namespace + { int xx = 999; } } -int main(){ +//--------------- +namespace E +{ + int ex = 9999; +} + +namespace F +{ + namespace FE = E; +} + +namespace G +{ + namespace GF = F; +} + +//---------------- +int main () +{ using namespace D; - return ax + dx + xx; + namespace GX = G; + return ax + dx + xx + G::GF::FE::ex; } diff --git a/gdb/testsuite/gdb.cp/nsrecurs.exp b/gdb/testsuite/gdb.cp/nsrecurs.exp index 9939a9faae4..f884a97d20a 100644 --- a/gdb/testsuite/gdb.cp/nsrecurs.exp +++ b/gdb/testsuite/gdb.cp/nsrecurs.exp @@ -13,8 +13,6 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -# Test recursive namespace lookup - if $tracelevel then { strace $tracelevel } @@ -25,7 +23,8 @@ set bug_id 0 set testfile nsrecurs set srcfile ${testfile}.cc set binfile ${objdir}/${subdir}/${testfile} -if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } { +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" \ + "${binfile}" executable {debug c++}] != "" } { untested "Couldn't compile test program" return -1 } @@ -65,3 +64,13 @@ gdb_test "print dx" "= 99" # anonymous namespace imports. gdb_test "print xx" "= 999" + +############################################ +# Test printing using recursive namespace +# aliases. + +setup_kfail "gdb/10541" "*-*-*" +gdb_test "ptype G::GF" "= namespace F" + +setup_kfail "gdb/10541" "*-*-*" +gdb_test "print G::GF::FE::ex" "= 9999" diff --git a/gdb/testsuite/gdb.cp/nsusing.cc b/gdb/testsuite/gdb.cp/nsusing.cc index b1f0ce48c9b..72ff9414b1f 100644 --- a/gdb/testsuite/gdb.cp/nsusing.cc +++ b/gdb/testsuite/gdb.cp/nsusing.cc @@ -1,34 +1,77 @@ -namespace O +namespace M { - int ox = 4; + int x = 911; } -namespace PQ +namespace N { - int marker6 () + int x = 912; +} + +int marker10 () +{ + using namespace M; + int y = x + 1; // marker10 stop + using namespace N; + return y; +} + +namespace J +{ + int jx = 44; +} + +namespace K +{ + int marker9 () { - return 0; + //x; + return marker10 (); } } -namespace P +namespace L { - using namespace O; + using namespace J; + int marker8 () + { + jx; + return K::marker9 (); + } } -//-------------- -namespace C +namespace G { - int cc = 3; + namespace H + { + int ghx = 6; + } } -using namespace C; -int marker5 () +namespace I { - cc; - return PQ::marker6 (); + int marker7 () + { + using namespace G::H; + ghx; + return L::marker8 (); + } } +namespace E +{ + namespace F + { + int efx = 5; + } +} + +using namespace E::F; +int marker6 () +{ + efx; + return I::marker7 (); +} namespace A { @@ -36,42 +79,61 @@ namespace A int x = 2; } -int marker4(){ - using A::x; - return marker5 (); +namespace C +{ + int cc = 3; +} + +namespace D +{ + int dx = 4; +} + +using namespace C; +int marker5 () +{ + cc; + return marker6 (); } -int marker3(){ - return marker4(); +int marker4 () +{ + using D::dx; + return marker5 (); } -int marker2() +int marker3 () +{ + return marker4 (); +} + +int marker2 () { namespace B = A; B::_a; - return marker3(); + return marker3 (); } -int marker1() +int marker1 () { int total = 0; - { - int b = 1; { - using namespace A; - int c = 2; - { - int d = 3; - total = _a + b + c + d + marker2(); // marker1 stop - } + int b = 1; + { + using namespace A; + int c = 2; + { + int d = 3; + total = _a + b + c + d + marker2 (); // marker1 stop + } + } } - } - return marker2() + total; + return marker2 () + total; } -int main() +int main () { using namespace A; _a; - return marker1(); + return marker1 (); } diff --git a/gdb/testsuite/gdb.cp/nsusing.exp b/gdb/testsuite/gdb.cp/nsusing.exp index ef0237d4afd..bd115c49408 100644 --- a/gdb/testsuite/gdb.cp/nsusing.exp +++ b/gdb/testsuite/gdb.cp/nsusing.exp @@ -23,7 +23,8 @@ set bug_id 0 set testfile nsusing set srcfile ${testfile}.cc set binfile ${objdir}/${subdir}/${testfile} -if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } { +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable \ + {debug c++}] != "" } { untested "Couldn't compile test program" return -1 } @@ -51,32 +52,94 @@ if ![runto_main] then { gdb_test "print _a" "= 1" +# Test that names are not printed when they +# are not imported + +gdb_breakpoint marker3 +gdb_continue_to_breakpoint "marker3" + +#send_gdb "break marker3\n" +#send_gdb "continue\n" + +gdb_test "print _a" "No symbol \"_a\" in current context." \ + "Print _a without import" + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} + + ############################################ -# test printing of namespace imported into +# test printing of namespace imported into # a scope containing the pc. +if ![runto_main] then { + perror "couldn't run to breakpoint main" + continue +} + gdb_breakpoint [gdb_get_line_number "marker1 stop"] gdb_continue_to_breakpoint "marker1 stop" gdb_test "print _a" "= 1" "print _a in a nested scope" + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} + +############################################ +# test printing of namespace imported into +# file scope. + + +if ![runto marker5] then { + perror "couldn't run to breakpoint marker5" + continue +} + +gdb_test "print cc" "= 3" + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} + + ############################################ # Test printing of namespace aliases -setup_kfail "gdb/7935" "*-*-*" if ![runto marker2] then { perror "couldn't run to breakpoint marker2" continue } -gdb_test "print B::a" "= 1" +setup_kfail "gdb/7935" "*-*-*" +gdb_test "print B::_a" "= 1" + +setup_kfail "gdb/7935" "*-*-*" +gdb_test "print _a" "No symbol \"_a\" in current context." \ + "print _a in namespace alias scope" + +setup_kfail "gdb/7935" "*-*-*" +gdb_test "print x" "No symbol \"x\" in current context." \ + "print x in namespace alias scope" + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} + ############################################ -# Test that names are not printed when they +# Test that names are not printed when they # are not imported -gdb_breakpoint "marker3" -gdb_continue_to_breakpoint "marker3" +if {![runto marker3]} { + perror "couldn't run to breakpoint marker3" +} # gcc-4-3 puts import statements for aliases in # the global scope instead of the corresponding @@ -84,37 +147,67 @@ gdb_continue_to_breakpoint "marker3" # this test off. This is fixed in gcc-4-4. if [test_compiler_info gcc-4-3-*] then { setup_xfail *-*-* } -gdb_test "print _a" "No symbol \"_a\" in current context." "Print _a without import" +gdb_test "print _a" "No symbol \"_a\" in current context." \ + "Print _a without import" ############################################ # Test printing of individually imported elements -setup_kfail "gdb/7936" "*-*-*" if ![runto marker4] then { perror "couldn't run to breakpoint marker4" continue } - -gdb_test "print x" "= 2" +setup_kfail "gdb/7936" "*-*-*" +gdb_test "print dx" "= 4" ############################################ -# test printing of namespace imported into -# file scope. +# Test printing of namespace aliases if ![runto marker5] then { perror "couldn't run to marker5" continue } -gdb_test "print cc" "= 3" +gdb_test "print efx" "= 5" ############################################ -# test printing of namespace imported into -# file scope. +# Test printing of variables imported from +# nested namespaces + +if ![runto I::marker7] then { + perror "couldn't run to breakpoint I::marker7" + continue +} + +gdb_test "print ghx" "= 6" + +############################################ +# Test that variables are not printed in a namespace +# that is sibling to the namespace containing an import + +if ![runto L::marker8] then { + perror "couldn't run to breakpoint L::marker8" + continue +} + +gdb_test "print jx" "= 44" + +gdb_breakpoint "K::marker9" +gdb_continue_to_breakpoint "K::marker9" + +gdb_test "print jx" "No symbol \"jx\" in current context." -if ![runto PQ::marker6] then { - perror "couldn't run to PQ::marker6" +############################################ +# Test that variables are only printed after the line +# containing the import + +if ![runto_main] then { + perror "couldn't run to breakpoint main" continue } -gdb_test "print ox" "No symbol \"ox\" in current context." +gdb_breakpoint [gdb_get_line_number "marker10 stop"] +gdb_continue_to_breakpoint "marker10 stop" + +# Assert that M::x is printed and not N::x +gdb_test "print x" "= 911" "print x (from M::x)" -- 2.30.2