From d0e53741e00a0b5a4555217337f0faeaa77dd71a Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Fri, 10 Jun 2011 16:21:47 +0000 Subject: [PATCH] * gdb.cp/temargs.exp: Let tests pass if compiler bug is fixed. Add tests for pointer-to-member-function. * gdb.cp/temargs.cc (S::somefunc): New function. (K2): New class. (main): Instantiate K2; call method. --- gdb/testsuite/ChangeLog | 8 +++++++ gdb/testsuite/gdb.cp/temargs.cc | 12 ++++++++++ gdb/testsuite/gdb.cp/temargs.exp | 39 +++++++++++++++++++++++++++----- 3 files changed, 53 insertions(+), 6 deletions(-) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index b192a47e39..297d1cbe69 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2011-06-10 Tom Tromey + + * gdb.cp/temargs.exp: Let tests pass if compiler bug is fixed. + Add tests for pointer-to-member-function. + * gdb.cp/temargs.cc (S::somefunc): New function. + (K2): New class. + (main): Instantiate K2; call method. + 2011-06-08 Joel Brobecker * gdb.python/py-inferior.c (f2): Make str an array rather diff --git a/gdb/testsuite/gdb.cp/temargs.cc b/gdb/testsuite/gdb.cp/temargs.cc index a97486f161..b7abef76dc 100644 --- a/gdb/testsuite/gdb.cp/temargs.cc +++ b/gdb/testsuite/gdb.cp/temargs.cc @@ -23,6 +23,7 @@ int a_global; struct S { int f; + void somefunc() { } }; template @@ -55,17 +56,28 @@ void func () // Breakpoint 3. } +template +struct K2 +{ + void k2_m () + { + // Breakpoint 5. + } +}; + int main () { Base base; // Note that instantiating with P==0 does not work with g++. // That would be worth testing, once g++ is fixed. Base::Inner inner; + K2<&S::somefunc> k2; base.base_m (); inner.inner_m (); func (); base.templ_m (); + k2.k2_m (); return 0; } diff --git a/gdb/testsuite/gdb.cp/temargs.exp b/gdb/testsuite/gdb.cp/temargs.exp index ed31deb8e3..9774138a8e 100644 --- a/gdb/testsuite/gdb.cp/temargs.exp +++ b/gdb/testsuite/gdb.cp/temargs.exp @@ -41,9 +41,18 @@ if {![runto_main]} { # gcc 4.4 and earlier don't emit enough info for some of our template tests. verbose -log "compiler_info: $compiler_info" set have_older_template_gcc 0 +set have_pr_41736_fixed 1 +set have_pr_45024_fixed 1 if {[test_compiler_info {gcc-[0-3]-*}] || [test_compiler_info {gcc-4-[0-4]-*}]} { set have_older_template_gcc 1 + set have_pr_41736_fixed 0 + set have_pr_45024_fixed 0 +} elseif {[test_compiler_info {gcc-4-5-*}]} { + set have_pr_41736_fixed 0 + set have_pr_45024_fixed 0 +} elseif {[test_compiler_info {gcc-4-6-*}]} { + set have_pr_45024_fixed 0 } set line [gdb_get_line_number "Breakpoint 1" $srcfile] @@ -62,6 +71,10 @@ set line [gdb_get_line_number "Breakpoint 4" $srcfile] gdb_test "break $srcfile:$line" "Breakpoint 5.*" \ "set fourth breakpoint for temargs" +set line [gdb_get_line_number "Breakpoint 5" $srcfile] +gdb_test "break $srcfile:$line" "Breakpoint 6.*" \ + "set fifth breakpoint for temargs" + # # Tests in Base::base_m. # @@ -77,7 +90,7 @@ gdb_test "print I" " = 23" "test value of I in base_m" if $have_older_template_gcc { setup_xfail "*-*-*" } gdb_test "print P == &a_global" " = true" "test value of P in base_m" -setup_kfail "gcc/41736" *-*-* +if {!$have_pr_41736_fixed} { setup_xfail *-*-* } gdb_test "print MP" "&S::f" "test value of MP in base_m" # @@ -86,16 +99,17 @@ gdb_test "print MP" "&S::f" "test value of MP in base_m" gdb_continue_to_breakpoint "continue to second breakpoint for temargs" -setup_kfail "gcc/45024" *-*-* + +if {!$have_pr_45024_fixed} { setup_xfail *-*-* } gdb_test "ptype T" "long" "test type of T in inner_m" -setup_kfail "gcc/45024" *-*-* +if {!$have_pr_45024_fixed} { setup_xfail *-*-* } gdb_test "print I" " = 47" "test value of I in inner_m" if $have_older_template_gcc { setup_xfail "*-*-*" } gdb_test "print P == &a_global" " = true" "test value of P in inner_m" -setup_kfail "gcc/41736" *-*-* +if {!$have_pr_41736_fixed} { setup_xfail *-*-* } gdb_test "print MP" "&S::f" "test value of MP in inner_m" if $have_older_template_gcc { setup_xfail "*-*-*" } @@ -116,7 +130,7 @@ gdb_test "print I" " = 91" "test value of I in func" if $have_older_template_gcc { setup_xfail "*-*-*" } gdb_test "print P == &a_global" " = true" "test value of P in func" -setup_kfail "gcc/41736" *-*-* +if {!$have_pr_41736_fixed} { setup_xfail *-*-* } gdb_test "print MP" "&S::f" "test value of MP in func" # @@ -134,8 +148,21 @@ gdb_test "print I" " = 23" "test value of I in templ_m" if $have_older_template_gcc { setup_xfail "*-*-*" } gdb_test "print P == &a_global" " = true" "test value of P in templ_m" -setup_kfail "gcc/41736" *-*-* +if {!$have_pr_41736_fixed} { setup_xfail *-*-* } 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 K2::k2_m. +# + +gdb_continue_to_breakpoint "continue to fifth breakpoint for temargs" + +if $have_older_template_gcc { setup_xfail "*-*-*" } +gdb_test "ptype F" "type = void \\\(S::\\\*\\\)\\\(S \\\* const\\\)" \ + "test type of F in k2_m" + +setup_kfail gcc/49366 "*-*-*" +gdb_test "print F" "&S::somefunc" "test value of F in k2_m"