2010-01-28 Sami Wagiaalla <swagiaal@redhat.com>
authorSami Wagiaalla <swagiaal@redhat.com>
Thu, 28 Jan 2010 17:58:02 +0000 (17:58 +0000)
committerSami Wagiaalla <swagiaal@redhat.com>
Thu, 28 Jan 2010 17:58:02 +0000 (17:58 +0000)
    * 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
gdb/testsuite/gdb.cp/nsrecurs.cc
gdb/testsuite/gdb.cp/nsrecurs.exp
gdb/testsuite/gdb.cp/nsusing.cc
gdb/testsuite/gdb.cp/nsusing.exp

index 9a5338c205d394f5157057cd81dfe6a25fd2b457..d1cfb4b99801300031c85511d4fc3543926765bc 100644 (file)
@@ -1,3 +1,10 @@
+2010-01-28  Sami Wagiaalla  <swagiaal@redhat.com>
+
+    * 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  <jan.kratochvil@redhat.com>
 
        * gdb.base/break-interp.exp: Use [file tail $filename] to omit any
index 84605a6bb7be81500f0a643d65f52f8b0fb8e6a8..2edc35fc206d64ecdb07acaaf35f275d3141e1bf 100644 (file)
@@ -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;
 }
index 9939a9faae46dd22bd2688547e19e6100757f743..f884a97d20abf4a019f722e1aa18fa882fe9ba26 100644 (file)
@@ -13,8 +13,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# 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"
index b1f0ce48c9bee85e1a1876806d5268694b262d89..72ff9414b1f9bcc848d770c055bed9a86b454e10 100644 (file)
@@ -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 ();
 }
index ef0237d4afde3df42ad8700f3e0906e1c38b85ef..bd115c49408620b0dfc5af4ed2bb25707d9fc97a 100644 (file)
@@ -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)"