]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
commit 3c8211c0eb27b1490ebef317c8bedd2eff783c7d
authorJan Kratochvil <jan.kratochvil@redhat.com>
Sat, 2 Jul 2011 19:51:28 +0000 (19:51 +0000)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Sat, 2 Jul 2011 19:51:28 +0000 (19:51 +0000)
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
Date:   Fri Jul 1 18:32:06 2011 +0000

gdb/testsuite/
Test GCC PR debug/49546.
* gdb.cp/temargs.exp (set sixth breakpoint for temargs)
(test type of F in k3_m, test value of F in k3_m): New.
* gdb.cp/temargs.cc (struct S3, struct K3): New.
(main): New variable k3.  Call k3.k3_m.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.cp/temargs.cc
gdb/testsuite/gdb.cp/temargs.exp

index ad5617ec5d428c36f0b7eecb182d45a259754c51..fcab0026651c804512f0c6cbd7676d0ee7a32dfb 100644 (file)
@@ -1,3 +1,11 @@
+2011-07-02  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       Test GCC PR debug/49546.
+       * gdb.cp/temargs.exp (set sixth breakpoint for temargs)
+       (test type of F in k3_m, test value of F in k3_m): New.
+       * gdb.cp/temargs.cc (struct S3, struct K3): New.
+       (main): New variable k3.  Call k3.k3_m.
+
 2011-06-10  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
        * gdb.dwarf2/dw2-filename.exp (info sources): New testcase.
index a97486f1619dc3f1b63c4fab15e398f10616a97d..9198a09f04045ced7a69d29cdb1cb5e4b9bd72d1 100644 (file)
@@ -55,17 +55,35 @@ void func ()
   // Breakpoint 3.
 }
 
+// GCC PR debug/49546
+struct S3
+{
+  static void m (int x) {}
+};
+template <void (*F) (int)>
+// or: template <void (F) (int)>
+struct K3
+{
+  void k3_m ()
+  {
+    F (0);     // Breakpoint 6.
+  }
+};
+
 int main ()
 {
   Base<double, 23, &a_global, &S::f> base;
   // Note that instantiating with P==0 does not work with g++.
   // That would be worth testing, once g++ is fixed.
   Base<long, 47, &a_global, &S::f>::Inner<float> inner;
+  K3<&S3::m> k3;
+// or: K3<S3::m> k3;
 
   base.base_m ();
   inner.inner_m ();
   func<unsigned char, 91, &a_global, &S::f> ();
   base.templ_m<short> ();
+  k3.k3_m ();
 
   return 0;
 }
index ed31deb8e39559a4b00742303db8b9f5d4f6b028..6ef69c166b0977774e2459f2a6e10fe243d26fb9 100644 (file)
@@ -80,6 +80,10 @@ gdb_test "print P == &a_global" " = true" "test value of P in base_m"
 setup_kfail "gcc/41736" *-*-*
 gdb_test "print MP" "&S::f" "test value of MP in base_m"
 
+set line [gdb_get_line_number "Breakpoint 6" $srcfile]
+gdb_test "break $srcfile:$line" "Breakpoint 6.*" \
+    "set sixth breakpoint for temargs"
+
 #
 # Tests in Inner::inner_m.
 #
@@ -139,3 +143,19 @@ gdb_test "print MP" "&S::f" "test value of MP in templ_m"
 
 if $have_older_template_gcc { setup_xfail "*-*-*" }
 gdb_test "whatis Q" "short" "test type of Q in templ_m"
+
+#
+# Tests in K3::k3_m, GCC PR debug/49546.
+# The problem reproduces with DW_AT_MIPS_linkage_name.  It does not happen with
+# GDB physname - GDB's own computation of the linkage name based on
+# (incorrectly output by GCC) DW_AT_name.
+#
+
+gdb_continue_to_breakpoint "continue to sixth breakpoint for temargs"
+
+if $have_older_template_gcc { setup_xfail "*-*-*" }
+gdb_test "ptype F" {type = void \(\*\)\(int\)} "test type of F in k3_m"
+
+if $have_older_template_gcc { setup_xfail "*-*-*" }
+gdb_test "print F" { = \(void \(\*\)\(int\)\) 0x[0-9a-f]+ <S3::m\(int\)>} \
+        "test value of F in k3_m"