aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Kratochvil <jan.kratochvil@redhat.com>2011-07-01 18:32:06 +0000
committerJan Kratochvil <jan.kratochvil@redhat.com>2011-07-01 18:32:06 +0000
commit85a20c42eacf836502c5dc0cc2afbd24666b2e86 (patch)
tree7861faca63f246a1730a152d32587d2c251665da
parent127c81bc5760b06524fb795d0a8e2ecc3d080e4d (diff)
downloadgdb-85a20c42eacf836502c5dc0cc2afbd24666b2e86.zip
gdb-85a20c42eacf836502c5dc0cc2afbd24666b2e86.tar.gz
gdb-85a20c42eacf836502c5dc0cc2afbd24666b2e86.tar.bz2
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.
-rw-r--r--gdb/testsuite/ChangeLog8
-rw-r--r--gdb/testsuite/gdb.cp/temargs.cc18
-rw-r--r--gdb/testsuite/gdb.cp/temargs.exp20
3 files changed, 46 insertions, 0 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index 00a7a45..e0c4a0a 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+2011-07-01 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-07-01 Jean-Charles Delay <delay@adacore.com>
* gdb.ada/packed_array.exp: Fix expected outout.
diff --git a/gdb/testsuite/gdb.cp/temargs.cc b/gdb/testsuite/gdb.cp/temargs.cc
index b7abef7..10e2efd 100644
--- a/gdb/testsuite/gdb.cp/temargs.cc
+++ b/gdb/testsuite/gdb.cp/temargs.cc
@@ -65,6 +65,21 @@ struct K2
}
};
+// 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;
@@ -72,12 +87,15 @@ int main ()
// That would be worth testing, once g++ is fixed.
Base<long, 47, &a_global, &S::f>::Inner<float> inner;
K2<&S::somefunc> k2;
+ 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> ();
k2.k2_m ();
+ k3.k3_m ();
return 0;
}
diff --git a/gdb/testsuite/gdb.cp/temargs.exp b/gdb/testsuite/gdb.cp/temargs.exp
index 9774138..85f01d9 100644
--- a/gdb/testsuite/gdb.cp/temargs.exp
+++ b/gdb/testsuite/gdb.cp/temargs.exp
@@ -75,6 +75,10 @@ set line [gdb_get_line_number "Breakpoint 5" $srcfile]
gdb_test "break $srcfile:$line" "Breakpoint 6.*" \
"set fifth breakpoint for temargs"
+set line [gdb_get_line_number "Breakpoint 6" $srcfile]
+gdb_test "break $srcfile:$line" "Breakpoint 7.*" \
+ "set sixth breakpoint for temargs"
+
#
# Tests in Base::base_m.
#
@@ -166,3 +170,19 @@ gdb_test "ptype F" "type = void \\\(S::\\\*\\\)\\\(S \\\* const\\\)" \
setup_kfail gcc/49366 "*-*-*"
gdb_test "print F" "&S::somefunc" "test value of F in k2_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"