diff options
Diffstat (limited to 'gdb/testsuite')
-rw-r--r-- | gdb/testsuite/ChangeLog | 8 | ||||
-rw-r--r-- | gdb/testsuite/gdb.cp/temargs.cc | 12 | ||||
-rw-r--r-- | 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 b192a47..297d1cb 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2011-06-10 Tom Tromey <tromey@redhat.com> + + * 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 <brobecker@adacore.com> * 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 a97486f..b7abef7 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<typename T, int I, int *P, int S::*MP> @@ -55,17 +56,28 @@ void func () // Breakpoint 3. } +template<void (S::*F) ()> +struct K2 +{ + void k2_m () + { + // Breakpoint 5. + } +}; + 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; + K2<&S::somefunc> k2; base.base_m (); inner.inner_m (); func<unsigned char, 91, &a_global, &S::f> (); base.templ_m<short> (); + k2.k2_m (); return 0; } diff --git a/gdb/testsuite/gdb.cp/temargs.exp b/gdb/testsuite/gdb.cp/temargs.exp index ed31deb..9774138 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" |