* 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.
This commit is contained in:
Tom Tromey 2011-06-10 16:21:47 +00:00
parent 894891db7f
commit d0e53741e0
3 changed files with 53 additions and 6 deletions

View File

@ -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

View File

@ -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;
}

View File

@ -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"