2010-01-01 08:32:07 +01:00
|
|
|
# Copyright 1998, 1999, 2003, 2004, 2006, 2007, 2008, 2009, 2010
|
2008-01-01 23:53:26 +01:00
|
|
|
# Free Software Foundation, Inc.
|
2004-01-13 05:36:04 +01:00
|
|
|
|
|
|
|
# This file is part of the gdb testsuite
|
1999-04-16 03:35:26 +02:00
|
|
|
|
|
|
|
# This program is free software; you can redistribute it and/or modify
|
|
|
|
# it under the terms of the GNU General Public License as published by
|
2007-08-23 20:14:19 +02:00
|
|
|
# the Free Software Foundation; either version 3 of the License, or
|
1999-04-16 03:35:26 +02:00
|
|
|
# (at your option) any later version.
|
2007-08-23 20:14:19 +02:00
|
|
|
#
|
1999-04-16 03:35:26 +02:00
|
|
|
# This program is distributed in the hope that it will be useful,
|
|
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
# GNU General Public License for more details.
|
2007-08-23 20:14:19 +02:00
|
|
|
#
|
1999-04-16 03:35:26 +02:00
|
|
|
# You should have received a copy of the GNU General Public License
|
2007-08-23 20:14:19 +02:00
|
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
1999-04-16 03:35:26 +02:00
|
|
|
|
|
|
|
# Tests for pointer-to-member support
|
|
|
|
# Written by Satish Pai <pai@apollo.hp.com> 1997-08-19
|
2004-01-13 05:36:04 +01:00
|
|
|
# Rewritten by Michael Chastain <mec.gnu@mindspring.com> 2004-01-11
|
1999-04-16 03:35:26 +02:00
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set vhn "\\$\[0-9\]+"
|
1999-04-16 03:35:26 +02:00
|
|
|
|
|
|
|
if $tracelevel then {
|
2004-01-13 05:36:04 +01:00
|
|
|
strace $tracelevel
|
|
|
|
}
|
1999-04-16 03:35:26 +02:00
|
|
|
|
1999-09-09 02:02:17 +02:00
|
|
|
if { [skip_cplus_tests] } { continue }
|
|
|
|
|
1999-04-16 03:35:26 +02:00
|
|
|
|
|
|
|
set testfile "member-ptr"
|
|
|
|
set srcfile ${testfile}.cc
|
|
|
|
set binfile ${objdir}/${subdir}/${testfile}
|
|
|
|
|
1999-06-28 18:06:02 +02:00
|
|
|
if [get_compiler_info ${binfile} "c++"] {
|
|
|
|
return -1
|
|
|
|
}
|
|
|
|
|
1999-04-16 03:35:26 +02:00
|
|
|
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
|
2006-08-10 07:27:22 +02:00
|
|
|
untested member-ptr.exp
|
|
|
|
return -1
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
gdb_exit
|
|
|
|
gdb_start
|
|
|
|
gdb_reinitialize_dir $srcdir/$subdir
|
|
|
|
gdb_load ${binfile}
|
|
|
|
|
|
|
|
if ![runto_main] then {
|
|
|
|
perror "couldn't run to breakpoint"
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
* NEWS: Mention pointer to member improvements.
* Makefile.in (gnu-v3-abi.o): Delete special rule.
(eval.o, gnu-v3-abi.o, ia64-tdep.o): Update.
* ada-valprint.c (ada_print_scalar): Update for new type codes.
* c-typeprint.c (c_print_type): Update for new type codes.
(c_type_print_varspec_prefix, c_type_print_varspec_suffix)
(c_type_print_base): Likewise.
(c_type_print_args): Rewrite.
* c-valprint.c (c_val_print): Update for new type codes. Remove
support for references to members. Treat methods like functions.
* cp-abi.c (cplus_print_method_ptr, cplus_method_ptr_size)
(cplus_make_method_ptr, cplus_method_ptr_to_value): New.
* cp-abi.h (cplus_print_method_ptr, cplus_method_ptr_size)
(cplus_make_method_ptr, cplus_method_ptr_to_value): New prototypes.
(struct cp_abi_ops): Add corresponding members.
* cp-valprint.c (cp_print_class_method): Delete.
(cp_find_class_member): New function.
(cp_print_class_member): Use it. Simplify support for bogus
member pointers.
* dwarf2read.c (quirk_gcc_member_function_pointer): Use
lookup_methodptr_type.
(read_tag_ptr_to_member_type): Likewise, and lookup_memberptr_type.
* eval.c (evaluate_subexp_standard): Implement EVAL_SKIP for
OP_SCOPE. Update call to value_aggregate_elt. Rewrite member
pointer support.
(evaluate_subexp_for_address): Handle OP_SCOPE explicitly. Handle
references returned by user defined operators.
* f-typeprint.c (f_print_type, f_type_print_varspec_prefix)
(f_type_print_varspec_suffix): Remove support for member pointers.
* gdbtypes.c (lookup_memberptr_type): Renamed from lookup_member_type
and adjusted.
(smash_to_memberptr_type): Likewise, from smash_to_member_type.
(lookup_methodptr_type): New.
(rank_one_type): Adjust for TYPE_CODE_MEMBERPTR.
(recursive_dump_type): Update for new types.
* gdbtypes.h (enum type_code): Replace TYPE_CODE_MEMBER with
TYPE_CODE_MEMBERPTR and TYPE_CODE_METHODPTR.
(lookup_memberptr_type, lookup_methodptr_type)
(smash_to_memberptr_type): New prototypes.
(smash_to_method_type): Formatting fix.
(lookup_member_type, smash_to_member_type): Delete prototypes.
* gnu-v3-abi.c (gnuv3_get_vtable, gnuv3_get_virtual_fn): New.
Do not rely on debug information for the vptr or the method's
enclosing type. Handle function descriptors for IA64.
(gnuv3_virtual_fn_field): Rewrite using the new functions.
(gnuv3_find_method_in, gnuv3_print_method_ptr)
(gnuv3_method_ptr_size, gnuv3_make_method_ptr)
(gnuv3_method_ptr_to_value): New.
(init_gnuv3_ops): Set new members of gnu_v3_abi_ops.
* hpread.c (hpread_type_lookup): Update for new types.
* infcall.c (value_arg_coerce): Likewise.
* m2-typeprint.c (m2_print_type): Remove explicit support
for member pointers.
* m2-valprint.c (m2_val_print): Likewise.
* p-typeprint.c (pascal_type_print_varspec_prefix)
(pascal_type_print_varspec_suffix, pascal_type_print_base): Likewise.
* p-valprint.c (pascal_val_print): Likewise.
(pascal_object_print_class_method, pascal_object_print_class_member):
Delete.
* p-lang.h (pascal_object_print_class_method)
(pascal_object_print_class_member): Delete prototypes.
* stabsread.c (read_type): Update for new types.
* typeprint.c (print_type_scalar): Likewise.
* valops.c (value_struct_elt_for_reference, value_namespace_elt)
(value_maybe_namespace_elt, value_aggregate_elt): Add want_address
argument. Construct a pointer to member if the address of a
function or data member is requested.
(value_cast_pointers): Don't modify the input value.
(value_cast): Adjust pointer to member handling for new types.
Allow null pointer to member constants. Don't modify the input
value.
(value_ind): Remove pointer to member check. Handle function
descriptors for function pointers.
(value_struct_elt, value_find_oload_method_list, check_field):
Remove pointer to member checks.
* value.c (unpack_long): Allow pointers to data members.
(value_from_longest): Allow member pointers.
* value.h (value_aggregate_elt): Add want_address.
* varobj.c (c_variable_editable): Remove check for members.
* gdbarch.sh: Add vtable_function_descriptors and vbit_in_delta.
* ia64-tdep.c (ia64_convert_from_func_ptr_addr): Handle descriptors
in virtual tables.
(ia64_gdbarch_init): Call set_gdbarch_vtable_function_descriptors.
* c-lang.h (cp_print_class_method): Delete prototype.
* arm-tdep.c (arm_gdbarch_init): Call set_gdbarch_vbit_in_delta.
* mips-tdep.c (mips_gdbarch_init): Likewise.
* gdbarch.c, gdbarch.h: Regenerated.
* gdb.cp/classes.exp (test_pointers_to_class_members): Update expected
output. Test the types of members and member pointers.
* gdb.cp/inherit.exp (test_print_mi_member_types): Remove KFAILs for
gdb/2092.
* gdb.cp/member-ptr.exp: Search for a comment instead of a
statement. Enable for GCC. Update expected output for some tests
and add new tests. Remove obsolete GCC KFAILs. Allow GCC's class
layout.
* gdb.cp/member-ptr.cc (Padding, Padding::vspacer, Base, Base::get_x)
(Base::vget_base, Left, Left::vget, Right, Right::vget, Diamond)
(Diamond::vget_base): New.
(main): Add new tests.
* gdb.cp/printmethod.exp: Update expected output for member functions.
* gdb.cp/virtfunc.exp (test_virtual_calls): Add a KFAIL for
print pEe->D::vg().
2007-01-03 19:05:45 +01:00
|
|
|
gdb_breakpoint [gdb_get_line_number "Breakpoint 1 here"]
|
2004-01-13 05:36:04 +01:00
|
|
|
gdb_continue_to_breakpoint "continue to pmi = NULL"
|
1999-04-16 03:35:26 +02:00
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
# ======================
|
|
|
|
# pointer to member data
|
|
|
|
# ======================
|
|
|
|
|
1999-04-16 03:35:26 +02:00
|
|
|
# ptype on pointer to data member
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "ptype pmi (A::j)"
|
|
|
|
gdb_test_multiple "ptype pmi" $name {
|
* NEWS: Mention pointer to member improvements.
* Makefile.in (gnu-v3-abi.o): Delete special rule.
(eval.o, gnu-v3-abi.o, ia64-tdep.o): Update.
* ada-valprint.c (ada_print_scalar): Update for new type codes.
* c-typeprint.c (c_print_type): Update for new type codes.
(c_type_print_varspec_prefix, c_type_print_varspec_suffix)
(c_type_print_base): Likewise.
(c_type_print_args): Rewrite.
* c-valprint.c (c_val_print): Update for new type codes. Remove
support for references to members. Treat methods like functions.
* cp-abi.c (cplus_print_method_ptr, cplus_method_ptr_size)
(cplus_make_method_ptr, cplus_method_ptr_to_value): New.
* cp-abi.h (cplus_print_method_ptr, cplus_method_ptr_size)
(cplus_make_method_ptr, cplus_method_ptr_to_value): New prototypes.
(struct cp_abi_ops): Add corresponding members.
* cp-valprint.c (cp_print_class_method): Delete.
(cp_find_class_member): New function.
(cp_print_class_member): Use it. Simplify support for bogus
member pointers.
* dwarf2read.c (quirk_gcc_member_function_pointer): Use
lookup_methodptr_type.
(read_tag_ptr_to_member_type): Likewise, and lookup_memberptr_type.
* eval.c (evaluate_subexp_standard): Implement EVAL_SKIP for
OP_SCOPE. Update call to value_aggregate_elt. Rewrite member
pointer support.
(evaluate_subexp_for_address): Handle OP_SCOPE explicitly. Handle
references returned by user defined operators.
* f-typeprint.c (f_print_type, f_type_print_varspec_prefix)
(f_type_print_varspec_suffix): Remove support for member pointers.
* gdbtypes.c (lookup_memberptr_type): Renamed from lookup_member_type
and adjusted.
(smash_to_memberptr_type): Likewise, from smash_to_member_type.
(lookup_methodptr_type): New.
(rank_one_type): Adjust for TYPE_CODE_MEMBERPTR.
(recursive_dump_type): Update for new types.
* gdbtypes.h (enum type_code): Replace TYPE_CODE_MEMBER with
TYPE_CODE_MEMBERPTR and TYPE_CODE_METHODPTR.
(lookup_memberptr_type, lookup_methodptr_type)
(smash_to_memberptr_type): New prototypes.
(smash_to_method_type): Formatting fix.
(lookup_member_type, smash_to_member_type): Delete prototypes.
* gnu-v3-abi.c (gnuv3_get_vtable, gnuv3_get_virtual_fn): New.
Do not rely on debug information for the vptr or the method's
enclosing type. Handle function descriptors for IA64.
(gnuv3_virtual_fn_field): Rewrite using the new functions.
(gnuv3_find_method_in, gnuv3_print_method_ptr)
(gnuv3_method_ptr_size, gnuv3_make_method_ptr)
(gnuv3_method_ptr_to_value): New.
(init_gnuv3_ops): Set new members of gnu_v3_abi_ops.
* hpread.c (hpread_type_lookup): Update for new types.
* infcall.c (value_arg_coerce): Likewise.
* m2-typeprint.c (m2_print_type): Remove explicit support
for member pointers.
* m2-valprint.c (m2_val_print): Likewise.
* p-typeprint.c (pascal_type_print_varspec_prefix)
(pascal_type_print_varspec_suffix, pascal_type_print_base): Likewise.
* p-valprint.c (pascal_val_print): Likewise.
(pascal_object_print_class_method, pascal_object_print_class_member):
Delete.
* p-lang.h (pascal_object_print_class_method)
(pascal_object_print_class_member): Delete prototypes.
* stabsread.c (read_type): Update for new types.
* typeprint.c (print_type_scalar): Likewise.
* valops.c (value_struct_elt_for_reference, value_namespace_elt)
(value_maybe_namespace_elt, value_aggregate_elt): Add want_address
argument. Construct a pointer to member if the address of a
function or data member is requested.
(value_cast_pointers): Don't modify the input value.
(value_cast): Adjust pointer to member handling for new types.
Allow null pointer to member constants. Don't modify the input
value.
(value_ind): Remove pointer to member check. Handle function
descriptors for function pointers.
(value_struct_elt, value_find_oload_method_list, check_field):
Remove pointer to member checks.
* value.c (unpack_long): Allow pointers to data members.
(value_from_longest): Allow member pointers.
* value.h (value_aggregate_elt): Add want_address.
* varobj.c (c_variable_editable): Remove check for members.
* gdbarch.sh: Add vtable_function_descriptors and vbit_in_delta.
* ia64-tdep.c (ia64_convert_from_func_ptr_addr): Handle descriptors
in virtual tables.
(ia64_gdbarch_init): Call set_gdbarch_vtable_function_descriptors.
* c-lang.h (cp_print_class_method): Delete prototype.
* arm-tdep.c (arm_gdbarch_init): Call set_gdbarch_vbit_in_delta.
* mips-tdep.c (mips_gdbarch_init): Likewise.
* gdbarch.c, gdbarch.h: Regenerated.
* gdb.cp/classes.exp (test_pointers_to_class_members): Update expected
output. Test the types of members and member pointers.
* gdb.cp/inherit.exp (test_print_mi_member_types): Remove KFAILs for
gdb/2092.
* gdb.cp/member-ptr.exp: Search for a comment instead of a
statement. Enable for GCC. Update expected output for some tests
and add new tests. Remove obsolete GCC KFAILs. Allow GCC's class
layout.
* gdb.cp/member-ptr.cc (Padding, Padding::vspacer, Base, Base::get_x)
(Base::vget_base, Left, Left::vget, Right, Right::vget, Diamond)
(Diamond::vget_base): New.
(main): Add new tests.
* gdb.cp/printmethod.exp: Update expected output for member functions.
* gdb.cp/virtfunc.exp (test_virtual_calls): Add a KFAIL for
print pEe->D::vg().
2007-01-03 19:05:45 +01:00
|
|
|
-re "type = int A::\\*\r\n$gdb_prompt $" {
|
2004-01-13 05:36:04 +01:00
|
|
|
pass $name
|
|
|
|
}
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
# print pointer to data member
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "print pmi (A::j) "
|
|
|
|
gdb_test_multiple "print pmi" $name {
|
|
|
|
-re "$vhn = &A::j\r\n$gdb_prompt $" {
|
|
|
|
pass $name
|
|
|
|
}
|
|
|
|
-re "$vhn = \\(int ?\\( ?A::\\*\\)\\) &A::j\r\n$gdb_prompt $" {
|
|
|
|
pass $name
|
|
|
|
}
|
|
|
|
-re "$vhn = \\(int ?\\( ?A::\\*\\)\\) ?&A::j ?\\+ ?1 bytes\r\n$gdb_prompt $" {
|
|
|
|
# gcc 2.95.3 -gdwarf-2
|
|
|
|
kfail "gdb/NNNN" $name
|
|
|
|
}
|
|
|
|
-re "$vhn = &A::j ?\\+ ?1 bytes\r\n$gdb_prompt $" {
|
|
|
|
# gcc 2.95.3 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
|
|
|
}
|
|
|
|
-re "$vhn = not implemented: member type in c_val_print\r\n$gdb_prompt $" {
|
|
|
|
# gcc HEAD 2004-01-11 05:33:21 -gdwarf-2
|
|
|
|
# gcc HEAD 2004-01-11 05:33:21 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
|
|
|
}
|
|
|
|
-re "$vhn = \\(int ?\\( A::\\*\\)\\) 536870920\r\n$gdb_prompt $" {
|
|
|
|
# the value is 0x20000008 hex. 0x20000000 is an internal flag.
|
|
|
|
# Use '|' to add in more values as needed.
|
|
|
|
# hpacc A.03.45
|
|
|
|
kfail "gdb/NNNN" $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
# print dereferenced pointer to data member
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "print a.*pmi (A::j)"
|
|
|
|
gdb_test_multiple "print a.*pmi" $name {
|
|
|
|
-re "$vhn = 121\r\n$gdb_prompt $" {
|
|
|
|
pass $name
|
|
|
|
}
|
|
|
|
-re "$vhn = 855638016\r\n$gdb_prompt $" {
|
|
|
|
# gcc 2.95.3 -gdwarf-2
|
|
|
|
# gcc 2.95.3 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
|
|
|
}
|
|
|
|
-re "not implemented: member types in unpack_long\r\n$gdb_prompt $" {
|
|
|
|
# gcc HEAD 2004-01-10 -gdwarf-2
|
|
|
|
# gcc HEAD 2004-01-10 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
# print dereferenced pointer to data member
|
|
|
|
# this time, dereferenced through a pointer
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "print a_p->*pmi (A::j)"
|
|
|
|
gdb_test_multiple "print a_p->*pmi" $name {
|
|
|
|
-re "$vhn = 121\r\n$gdb_prompt $" {
|
|
|
|
pass $name
|
|
|
|
}
|
|
|
|
-re "$vhn = 855638016\r\n$gdb_prompt $" {
|
|
|
|
# gcc 2.95.3 -gdwarf-2
|
|
|
|
# gcc 2.95.3 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
|
|
|
}
|
|
|
|
-re "not implemented: member types in unpack_long\r\n$gdb_prompt $" {
|
|
|
|
# gcc HEAD 2004-01-10 -gdwarf-2
|
|
|
|
# gcc HEAD 2004-01-10 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
# set the pointer to a different data member
|
1999-04-16 03:35:26 +02:00
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "set var pmi = &A::jj"
|
|
|
|
gdb_test_multiple "set var pmi = &A::jj" $name {
|
|
|
|
-re "Invalid cast.\r\n$gdb_prompt $" {
|
|
|
|
# gcc HEAD 2004-01-10 -gdwarf-2
|
|
|
|
# gcc HEAD 2004-01-10 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
|
|
|
}
|
|
|
|
-re "set var pmi = &A::jj\r\n$gdb_prompt $" {
|
|
|
|
# I have to match the echo'ed input explicitly here.
|
|
|
|
# If I leave it out, the pattern becomes too general
|
|
|
|
# and matches anything that ends in "$gdb_prompt $".
|
|
|
|
pass $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
# print the pointer again
|
1999-04-16 03:35:26 +02:00
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "print pmi (A::jj)"
|
|
|
|
gdb_test_multiple "print pmi" $name {
|
|
|
|
-re "$vhn = &A::jj\r\n$gdb_prompt $" {
|
|
|
|
pass $name
|
|
|
|
}
|
|
|
|
-re "$vhn = \\(int ?\\( ?A::\\*\\)\\) &A::jj\r\n$gdb_prompt $" {
|
|
|
|
pass $name
|
|
|
|
}
|
|
|
|
-re "$vhn = not implemented: member type in c_val_print\r\n$gdb_prompt $" {
|
|
|
|
# gcc HEAD 2004-01-11 05:33:21 -gdwarf-2
|
|
|
|
# gcc HEAD 2004-01-11 05:33:21 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
|
|
|
}
|
|
|
|
-re "$vhn = \\(int ?\\( A::\\*\\)\\) 536870924\r\n$gdb_prompt $" {
|
|
|
|
# the value is 0x20000008 hex. 0x20000000 is an internal flag.
|
|
|
|
# Use '|' to add in more values as needed.
|
|
|
|
# hpacc A.03.45
|
|
|
|
kfail "gdb/NNNN" $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
# print dereferenced pointer to data member again
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "print a.*pmi (A::jj)"
|
|
|
|
gdb_test_multiple "print a.*pmi" $name {
|
|
|
|
-re "$vhn = 1331\r\n$gdb_prompt $" {
|
|
|
|
pass $name
|
|
|
|
}
|
|
|
|
-re "not implemented: member types in unpack_long\r\n$gdb_prompt $" {
|
|
|
|
# gcc HEAD 2004-01-10 -gdwarf-2
|
|
|
|
# gcc HEAD 2004-01-10 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
# set the pointer to data member back to A::j
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "set var pmi = &A::j"
|
|
|
|
gdb_test_multiple "set var pmi = &A::j" $name {
|
|
|
|
-re "Invalid cast.\r\n$gdb_prompt $" {
|
|
|
|
# gcc HEAD 2004-01-10 -gdwarf-2
|
|
|
|
# gcc HEAD 2004-01-10 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
|
|
|
}
|
|
|
|
-re "set var pmi = &A::j\r\n$gdb_prompt $" {
|
|
|
|
# I have to match the echo'ed input explicitly here.
|
|
|
|
# If I leave it out, the pattern becomes too general
|
|
|
|
# and matches anything that ends in "$gdb_prompt $".
|
|
|
|
pass $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
# print dereferenced pointer to data member yet again (extra check, why not)
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "print a.*pmi (A::j) (again)"
|
|
|
|
gdb_test_multiple "print a.*pmi" $name {
|
|
|
|
-re "$vhn = 121\r\n$gdb_prompt $" {
|
|
|
|
pass $name
|
|
|
|
}
|
|
|
|
-re "not implemented: member types in unpack_long\r\n$gdb_prompt $" {
|
|
|
|
# gcc HEAD 2004-01-10 -gdwarf-2
|
|
|
|
# gcc HEAD 2004-01-10 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
# Set the data member pointed to.
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "print a.*pmi = 33"
|
|
|
|
gdb_test_multiple "print a.*pmi = 33" $name {
|
|
|
|
-re "$vhn = 33\r\n$gdb_prompt $" {
|
|
|
|
pass $name
|
|
|
|
}
|
|
|
|
-re "not implemented: member types in unpack_long\r\n$gdb_prompt $" {
|
|
|
|
# gcc HEAD 2004-01-10 -gdwarf-2
|
|
|
|
# gcc HEAD 2004-01-10 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
# Now check that the data really was changed
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "print a.*pmi (A::j) (33)"
|
|
|
|
gdb_test_multiple "print a.*pmi" $name {
|
|
|
|
-re "$vhn = 33\r\n$gdb_prompt $" {
|
|
|
|
pass $name
|
|
|
|
}
|
|
|
|
-re "not implemented: member types in unpack_long\r\n$gdb_prompt $" {
|
|
|
|
# gcc HEAD 2004-01-10 -gdwarf-2
|
|
|
|
# gcc HEAD 2004-01-10 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
# Double-check by printing a.
|
1999-04-16 03:35:26 +02:00
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "print a (j = 33)"
|
|
|
|
gdb_test_multiple "print a" $name {
|
|
|
|
-re "$vhn = \{c = 120 'x', j = 33, jj = 1331, (static|static int) s = 10, (_vptr.A|_vptr\\$) = ($hex|$hex <A virtual table>)\}\r\n$gdb_prompt $" {
|
|
|
|
pass $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
2004-01-13 05:36:04 +01:00
|
|
|
-re "$vhn = \{c = 120 'x', j = 33, jj = 1331, (static|static int) s = 10, Virtual table at $hex\}\r\n$gdb_prompt $" {
|
|
|
|
pass $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
2004-01-13 05:36:04 +01:00
|
|
|
-re "$vhn = \{(_vptr.A|_vptr\\$) = $hex, c = 120 'x', j = 33, jj = 1331, (static|static int) s = 10\}\r\n$gdb_prompt $" {
|
|
|
|
pass $name
|
|
|
|
}
|
|
|
|
-re "$vhn = \{(_vptr.A|_vptr\\$) = $hex, c = 120 'x', j = 121, jj = 1331, (static|static int) s = 10\}\r\n$gdb_prompt $" {
|
|
|
|
# gcc HEAD 2004-01-10 -gdwarf-2
|
|
|
|
# gcc HEAD 2004-01-10 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
# Set the data member pointed to, using ->*
|
1999-04-16 03:35:26 +02:00
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "print a_p->*pmi = 44"
|
|
|
|
gdb_test_multiple "print a_p->*pmi = 44" $name {
|
|
|
|
-re "$vhn = 44\r\n$gdb_prompt $" {
|
|
|
|
pass $name
|
|
|
|
}
|
|
|
|
-re "not implemented: member types in unpack_long\r\n$gdb_prompt $" {
|
|
|
|
# gcc HEAD 2004-01-10 -gdwarf-2
|
|
|
|
# gcc HEAD 2004-01-10 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
# Check that the data really was changed
|
1999-04-16 03:35:26 +02:00
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "print a_p->*pmi (44)"
|
|
|
|
gdb_test_multiple "print a_p->*pmi" $name {
|
|
|
|
-re "$vhn = 44\r\n$gdb_prompt $" {
|
|
|
|
pass $name
|
|
|
|
}
|
|
|
|
-re "not implemented: member types in unpack_long\r\n$gdb_prompt $" {
|
|
|
|
# gcc HEAD 2004-01-10 -gdwarf-2
|
|
|
|
# gcc HEAD 2004-01-10 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
# Double-check by printing a.
|
1999-04-16 03:35:26 +02:00
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "print a (j = 44)"
|
|
|
|
gdb_test_multiple "print a" $name {
|
|
|
|
-re "$vhn = \{c = 120 'x', j = 44, jj = 1331, (static|static int) s = 10, (_vptr.A|_vptr\\$) = ($hex|$hex <A virtual table>)\}\r\n$gdb_prompt $" {
|
|
|
|
pass $name
|
|
|
|
}
|
|
|
|
-re "$vhn = \{c = 120 'x', j = 44, jj = 1331, (static|static int) s = 10, Virtual table at $hex\}\r\n$gdb_prompt $" {
|
|
|
|
pass $name
|
|
|
|
}
|
|
|
|
-re "$vhn = \{(_vptr.A|_vptr\\$) = $hex, c = 120 'x', j = 44, jj = 1331, (static|static int) s = 10\}\r\n$gdb_prompt $" {
|
|
|
|
pass $name
|
|
|
|
}
|
|
|
|
-re "$vhn = \{(_vptr.A|_vptr\\$) = $hex, c = 120 'x', j = 121, jj = 1331, (static|static int) s = 10\}\r\n$gdb_prompt $" {
|
|
|
|
# gcc HEAD 2004-01-10 -gdwarf-2
|
|
|
|
# gcc HEAD 2004-01-10 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
# ptype the dereferenced pointer to member.
|
1999-04-16 03:35:26 +02:00
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "ptype a.*pmi"
|
|
|
|
gdb_test_multiple "ptype a.*pmi" $name {
|
|
|
|
-re "type = int\r\n$gdb_prompt" {
|
|
|
|
pass $name
|
|
|
|
}
|
|
|
|
-re "not implemented: member types in unpack_long\r\n$gdb_prompt $" {
|
|
|
|
# gcc HEAD 2004-01-10 -gdwarf-2
|
|
|
|
# gcc HEAD 2004-01-10 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
# dereference the pointer to data member without any object
|
|
|
|
# this is not allowed: a pmi must be bound to an object to dereference
|
1999-04-16 03:35:26 +02:00
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "print *pmi"
|
|
|
|
gdb_test_multiple "print *pmi" $name {
|
|
|
|
-re "Attempt to dereference pointer to member without an object\r\n$gdb_prompt $" {
|
|
|
|
pass $name
|
|
|
|
}
|
|
|
|
-re "Cannot access memory at address 0x4\r\n$gdb_prompt $" {
|
|
|
|
# gcc 2.95.3 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
|
|
|
}
|
|
|
|
-re "Cannot access memory at address 0x8\r\n$gdb_prompt $" {
|
|
|
|
# gcc 3.3.2 -gdwarf-2
|
|
|
|
# gcc 3.3.2 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
# dereference the pointer to data member without any object
|
|
|
|
# this is not allowed: a pmi must be bound to an object to dereference
|
1999-04-16 03:35:26 +02:00
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "ptype *pmi"
|
|
|
|
gdb_test_multiple "ptype *pmi" $name {
|
|
|
|
-re "Attempt to dereference pointer to member without an object\r\n$gdb_prompt $" {
|
|
|
|
pass $name
|
|
|
|
}
|
|
|
|
-re "type = int A::\r\n$gdb_prompt $" {
|
|
|
|
# gcc 2.95.3 -gstabs+
|
|
|
|
# gcc HEAD 2004-01-10 -gdwarf-2
|
|
|
|
# gcc HEAD 2004-01-10 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
# Check cast of pointer to member to integer.
|
|
|
|
# This is similar to "offset-of".
|
|
|
|
# such as "A a; print (size_t) &A.j - (size_t) &A".
|
1999-04-16 03:35:26 +02:00
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "print (int) pmi"
|
|
|
|
gdb_test_multiple "print (int) pmi" $name {
|
* NEWS: Mention pointer to member improvements.
* Makefile.in (gnu-v3-abi.o): Delete special rule.
(eval.o, gnu-v3-abi.o, ia64-tdep.o): Update.
* ada-valprint.c (ada_print_scalar): Update for new type codes.
* c-typeprint.c (c_print_type): Update for new type codes.
(c_type_print_varspec_prefix, c_type_print_varspec_suffix)
(c_type_print_base): Likewise.
(c_type_print_args): Rewrite.
* c-valprint.c (c_val_print): Update for new type codes. Remove
support for references to members. Treat methods like functions.
* cp-abi.c (cplus_print_method_ptr, cplus_method_ptr_size)
(cplus_make_method_ptr, cplus_method_ptr_to_value): New.
* cp-abi.h (cplus_print_method_ptr, cplus_method_ptr_size)
(cplus_make_method_ptr, cplus_method_ptr_to_value): New prototypes.
(struct cp_abi_ops): Add corresponding members.
* cp-valprint.c (cp_print_class_method): Delete.
(cp_find_class_member): New function.
(cp_print_class_member): Use it. Simplify support for bogus
member pointers.
* dwarf2read.c (quirk_gcc_member_function_pointer): Use
lookup_methodptr_type.
(read_tag_ptr_to_member_type): Likewise, and lookup_memberptr_type.
* eval.c (evaluate_subexp_standard): Implement EVAL_SKIP for
OP_SCOPE. Update call to value_aggregate_elt. Rewrite member
pointer support.
(evaluate_subexp_for_address): Handle OP_SCOPE explicitly. Handle
references returned by user defined operators.
* f-typeprint.c (f_print_type, f_type_print_varspec_prefix)
(f_type_print_varspec_suffix): Remove support for member pointers.
* gdbtypes.c (lookup_memberptr_type): Renamed from lookup_member_type
and adjusted.
(smash_to_memberptr_type): Likewise, from smash_to_member_type.
(lookup_methodptr_type): New.
(rank_one_type): Adjust for TYPE_CODE_MEMBERPTR.
(recursive_dump_type): Update for new types.
* gdbtypes.h (enum type_code): Replace TYPE_CODE_MEMBER with
TYPE_CODE_MEMBERPTR and TYPE_CODE_METHODPTR.
(lookup_memberptr_type, lookup_methodptr_type)
(smash_to_memberptr_type): New prototypes.
(smash_to_method_type): Formatting fix.
(lookup_member_type, smash_to_member_type): Delete prototypes.
* gnu-v3-abi.c (gnuv3_get_vtable, gnuv3_get_virtual_fn): New.
Do not rely on debug information for the vptr or the method's
enclosing type. Handle function descriptors for IA64.
(gnuv3_virtual_fn_field): Rewrite using the new functions.
(gnuv3_find_method_in, gnuv3_print_method_ptr)
(gnuv3_method_ptr_size, gnuv3_make_method_ptr)
(gnuv3_method_ptr_to_value): New.
(init_gnuv3_ops): Set new members of gnu_v3_abi_ops.
* hpread.c (hpread_type_lookup): Update for new types.
* infcall.c (value_arg_coerce): Likewise.
* m2-typeprint.c (m2_print_type): Remove explicit support
for member pointers.
* m2-valprint.c (m2_val_print): Likewise.
* p-typeprint.c (pascal_type_print_varspec_prefix)
(pascal_type_print_varspec_suffix, pascal_type_print_base): Likewise.
* p-valprint.c (pascal_val_print): Likewise.
(pascal_object_print_class_method, pascal_object_print_class_member):
Delete.
* p-lang.h (pascal_object_print_class_method)
(pascal_object_print_class_member): Delete prototypes.
* stabsread.c (read_type): Update for new types.
* typeprint.c (print_type_scalar): Likewise.
* valops.c (value_struct_elt_for_reference, value_namespace_elt)
(value_maybe_namespace_elt, value_aggregate_elt): Add want_address
argument. Construct a pointer to member if the address of a
function or data member is requested.
(value_cast_pointers): Don't modify the input value.
(value_cast): Adjust pointer to member handling for new types.
Allow null pointer to member constants. Don't modify the input
value.
(value_ind): Remove pointer to member check. Handle function
descriptors for function pointers.
(value_struct_elt, value_find_oload_method_list, check_field):
Remove pointer to member checks.
* value.c (unpack_long): Allow pointers to data members.
(value_from_longest): Allow member pointers.
* value.h (value_aggregate_elt): Add want_address.
* varobj.c (c_variable_editable): Remove check for members.
* gdbarch.sh: Add vtable_function_descriptors and vbit_in_delta.
* ia64-tdep.c (ia64_convert_from_func_ptr_addr): Handle descriptors
in virtual tables.
(ia64_gdbarch_init): Call set_gdbarch_vtable_function_descriptors.
* c-lang.h (cp_print_class_method): Delete prototype.
* arm-tdep.c (arm_gdbarch_init): Call set_gdbarch_vbit_in_delta.
* mips-tdep.c (mips_gdbarch_init): Likewise.
* gdbarch.c, gdbarch.h: Regenerated.
* gdb.cp/classes.exp (test_pointers_to_class_members): Update expected
output. Test the types of members and member pointers.
* gdb.cp/inherit.exp (test_print_mi_member_types): Remove KFAILs for
gdb/2092.
* gdb.cp/member-ptr.exp: Search for a comment instead of a
statement. Enable for GCC. Update expected output for some tests
and add new tests. Remove obsolete GCC KFAILs. Allow GCC's class
layout.
* gdb.cp/member-ptr.cc (Padding, Padding::vspacer, Base, Base::get_x)
(Base::vget_base, Left, Left::vget, Right, Right::vget, Diamond)
(Diamond::vget_base): New.
(main): Add new tests.
* gdb.cp/printmethod.exp: Update expected output for member functions.
* gdb.cp/virtfunc.exp (test_virtual_calls): Add a KFAIL for
print pEe->D::vg().
2007-01-03 19:05:45 +01:00
|
|
|
-re "$vhn = (4|8|12)\r\n$gdb_prompt" {
|
2004-01-13 05:36:04 +01:00
|
|
|
pass $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
# Check "(int) pmi" explicitly for equality.
|
1999-04-16 03:35:26 +02:00
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "print ((int) pmi) == ((char *) &a.j - (char *) &a)"
|
|
|
|
gdb_test_multiple "print ((int) pmi) == ((char *) &a.j - (char *) & a)" $name {
|
|
|
|
-re "$vhn = true\r\n$gdb_prompt" {
|
|
|
|
pass $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
# ==========================
|
|
|
|
# pointer to member function
|
|
|
|
# ==========================
|
|
|
|
|
|
|
|
# ptype a pointer to a method
|
1999-04-16 03:35:26 +02:00
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "ptype pmf"
|
|
|
|
gdb_test_multiple "ptype pmf" $name {
|
2010-07-28 21:04:08 +02:00
|
|
|
-re "type = int \\( ?A::\\*\\)\\(A \\*( const)?, int\\)\r\n$gdb_prompt $" {
|
2004-01-13 05:36:04 +01:00
|
|
|
pass $name
|
|
|
|
}
|
|
|
|
-re "type = int \\( ?A::\\*\\)\\(void\\)\r\n$gdb_prompt $" {
|
|
|
|
# hpacc A.03.45
|
|
|
|
kfail "gdb/NNNN" $name
|
|
|
|
}
|
|
|
|
-re "type = struct \{.*\}\r\n$gdb_prompt $" {
|
|
|
|
# gcc 2.95.3 -gdwarf-2
|
|
|
|
# gcc 2.95.3 -gstabs+
|
|
|
|
# gcc 3.2.2 -gdwarf-2
|
|
|
|
# gcc 3.2.2 -gstabs+
|
|
|
|
# gcc HEAD 2004-01-10 -gdwarf-2
|
|
|
|
# gcc HEAD 2004-01-10 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
# print a pointer to a method
|
1999-04-16 03:35:26 +02:00
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "print pmf"
|
|
|
|
gdb_test_multiple "print pmf" $name {
|
2010-07-28 21:04:08 +02:00
|
|
|
-re "$vhn = \\(int \\(A::\\*\\)\\(A \\*( const)?, int\\)\\) $hex <A::bar\\(int\\)>\r\n$gdb_prompt $" {
|
2004-01-13 05:36:04 +01:00
|
|
|
pass $name
|
|
|
|
}
|
|
|
|
-re "$vhn = .*not supported with HP aCC.*\r\n$gdb_prompt $" {
|
|
|
|
# hpacc A.03.45
|
|
|
|
kfail "gdb/NNNN" $name
|
|
|
|
}
|
|
|
|
-re "$vhn = \{.*\}\r\n$gdb_prompt $" {
|
|
|
|
# gcc 2.95.3 -gdwarf-2
|
|
|
|
# gcc 2.95.3 -gstabs+
|
|
|
|
# gcc 3.2.2 -gdwarf-2
|
|
|
|
# gcc 3.2.2 -gstabs+
|
|
|
|
# gcc HEAD 2004-01-10 -gdwarf-2
|
|
|
|
# gcc HEAD 2004-01-10 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
# ptype a pointer to a pointer to a method
|
1999-04-16 03:35:26 +02:00
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "ptype pmf_p"
|
|
|
|
gdb_test_multiple "ptype pmf_p" $name {
|
2010-07-28 21:04:08 +02:00
|
|
|
-re "type = int \\( ?A::\\*\\*\\)\\(A \\*( const)?, int\\)\r\n$gdb_prompt $" {
|
2004-01-13 05:36:04 +01:00
|
|
|
pass $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
2004-01-13 05:36:04 +01:00
|
|
|
-re "type = int \\( ?A::\\*\\*\\)\\(void\\)\r\n$gdb_prompt $" {
|
|
|
|
# hpacc A.03.45
|
|
|
|
kfail "gdb/NNNN" $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
2004-01-13 05:36:04 +01:00
|
|
|
-re "type = struct \{.*\} \\*\r\n$gdb_prompt $" {
|
|
|
|
# gcc 2.95.3 -gdwarf-2
|
|
|
|
# gcc 2.95.3 -gstabs+
|
|
|
|
# gcc 3.2.2 -gdwarf-2
|
|
|
|
# gcc 3.2.2 -gstabs+
|
|
|
|
# gcc HEAD 2004-01-10 -gdwarf-2
|
|
|
|
# gcc HEAD 2004-01-10 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
# print a pointer to a pointer to a method
|
1999-04-16 03:35:26 +02:00
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "print pmf_p"
|
|
|
|
gdb_test_multiple "print pmf_p" $name {
|
|
|
|
-re "$vhn = \\(int \\( ?A::\\*\\*\\)\\)\\(int\\)\\) $hex\r\n$gdb_prompt $" {
|
|
|
|
pass $name
|
|
|
|
}
|
|
|
|
-re "$vhn = \\(PMF \\*\\) $hex\r\n$gdb_prompt $" {
|
|
|
|
pass "gdb/NNNN"
|
|
|
|
}
|
|
|
|
-re "$vhn = \\(int \\( ?A::\\*\\*\\)\\(void\\)\\) $hex\r\n$gdb_prompt $" {
|
|
|
|
# hpacc A.03.45
|
|
|
|
kfail "gdb/NNNN" $name
|
|
|
|
}
|
|
|
|
-re "$vhn = \\(struct \{.*\} \\*\\) $hex\r\n$gdb_prompt $" {
|
|
|
|
# gcc 2.95.3 -gdwarf-2
|
|
|
|
kfail "gdb/NNNN" $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
# print dereferenced pointer to method
|
1999-04-16 03:35:26 +02:00
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "print a.*pmf"
|
|
|
|
gdb_test_multiple "print a.*pmf" $name {
|
2010-07-28 21:04:08 +02:00
|
|
|
-re "$vhn = {int \\(A \\*( const)?, int\\)} $hex <A::bar\\(int\\)>\r\n$gdb_prompt $" {
|
2004-01-13 05:36:04 +01:00
|
|
|
pass $name
|
|
|
|
}
|
|
|
|
-re "Pointers to methods not supported with HP aCC\r\n$gdb_prompt $" {
|
|
|
|
# hpacc A.03.45
|
|
|
|
kfail "gdb/NNNN" $name
|
|
|
|
}
|
|
|
|
-re "Value can't be converted to integer.\r\n$gdb_prompt $" {
|
|
|
|
# gcc 2.95.3 -gdwarf-2
|
|
|
|
# gcc 2.95.3 -gstabs+
|
|
|
|
# gcc 3.2.2 -gdwarf-2
|
|
|
|
# gcc 3.2.2 -gstabs+
|
|
|
|
# gcc HEAD 2004-01-10 -gdwarf-2
|
|
|
|
# gcc HEAD 2004-01-10 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
# print dereferenced pointer to method, using ->*
|
1999-04-16 03:35:26 +02:00
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "print a_p->*pmf"
|
|
|
|
gdb_test_multiple "print a_p->*pmf" $name {
|
2010-07-28 21:04:08 +02:00
|
|
|
-re "$vhn = {int \\(A \\*( const)?, int\\)} $hex <A::bar\\(int\\)>\r\n$gdb_prompt $" {
|
2004-01-13 05:36:04 +01:00
|
|
|
pass $name
|
|
|
|
}
|
|
|
|
-re "Pointers to methods not supported with HP aCC\r\n$gdb_prompt $" {
|
|
|
|
# hpacc A.03.45
|
|
|
|
kfail "gdb/NNNN" $name
|
|
|
|
}
|
|
|
|
-re "Value can't be converted to integer.\r\n$gdb_prompt $" {
|
|
|
|
# gcc 2.95.3 -gdwarf-2
|
|
|
|
# gcc 2.95.3 -gstabs+
|
|
|
|
# gcc 3.2.2 -gdwarf-2
|
|
|
|
# gcc 3.2.2 -gstabs+
|
|
|
|
# gcc HEAD 2004-01-10 -gdwarf-2
|
|
|
|
# gcc HEAD 2004-01-10 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
# set the pointer to data member
|
1999-04-16 03:35:26 +02:00
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "set var pmf = &A::foo"
|
|
|
|
gdb_test_multiple "set var pmf = &A::foo" $name {
|
|
|
|
-re "set var pmf = &A::foo\r\n$gdb_prompt $" {
|
|
|
|
# I have to match the echo'ed input explicitly here.
|
|
|
|
# If I leave it out, the pattern becomes too general
|
|
|
|
# and matches anything that ends in "$gdb_prompt $".
|
|
|
|
pass $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
2004-01-13 05:36:04 +01:00
|
|
|
-re "Invalid cast.\r\n$gdb_prompt $" {
|
|
|
|
# gcc 2.95.3 -gdwarf-2
|
|
|
|
# gcc 2.95.3 -gstabs+
|
|
|
|
# gcc 3.2.2 -gdwarf-2
|
|
|
|
# gcc 3.2.2 -gstabs+
|
|
|
|
# gcc HEAD 2004-01-10 -gdwarf-2
|
|
|
|
# gcc HEAD 2004-01-10 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
|
|
|
}
|
|
|
|
-re "Assignment to pointers to methods not implemented with HP aCC\r\n$gdb_prompt $" {
|
|
|
|
kfail "gdb/NNNN" $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
# dereference the pointer to data member without any object
|
|
|
|
# this is not allowed: a pmf must be bound to an object to dereference
|
1999-04-16 03:35:26 +02:00
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "print *pmf"
|
|
|
|
gdb_test_multiple "print *pmf" $name {
|
|
|
|
-re "Attempt to dereference pointer to member without an object\r\n$gdb_prompt $" {
|
|
|
|
pass $name
|
|
|
|
}
|
|
|
|
-re "Structure has no component named operator\\*.\r\n$gdb_prompt $" {
|
|
|
|
# gcc 2.95.3 -gdwarf-2
|
|
|
|
# gcc 2.95.3 -gstabs+
|
|
|
|
# gcc 3.3.2 -gdwarf-2
|
|
|
|
# gcc 3.3.2 -gstabs+
|
|
|
|
# gcc HEAD 2004-01-10 -gdwarf-2
|
|
|
|
# gcc HEAD 2004-01-10 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
# dereference the pointer to data member without any object
|
|
|
|
# this is not allowed: a pmf must be bound to an object to dereference
|
1999-04-16 03:35:26 +02:00
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "ptype *pmf"
|
|
|
|
gdb_test_multiple "ptype *pmf" $name {
|
|
|
|
-re "Attempt to dereference pointer to member without an object\r\n$gdb_prompt $" {
|
|
|
|
pass $name
|
|
|
|
}
|
|
|
|
-re "Structure has no component named operator\\*.\r\n$gdb_prompt $" {
|
|
|
|
# gcc 2.95.3 -gdwarf-2
|
|
|
|
# gcc 2.95.3 -gstabs+
|
|
|
|
# gcc 3.3.2 -gdwarf-2
|
|
|
|
# gcc 3.3.2 -gstabs+
|
|
|
|
# gcc HEAD 2004-01-10 -gdwarf-2
|
|
|
|
# gcc HEAD 2004-01-10 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
# Call a function through a pmf.
|
1999-04-16 03:35:26 +02:00
|
|
|
|
2004-01-13 05:36:04 +01:00
|
|
|
set name "print (a.*pmf)(3)"
|
|
|
|
gdb_test_multiple "print (a.*pmf)(3)" $name {
|
|
|
|
-re "$vhn = 50\r\n$gdb_prompt $" {
|
|
|
|
pass $name
|
|
|
|
}
|
|
|
|
-re "Not implemented: function invocation through pointer to method with HP aCC\r\n$gdb_prompt $" {
|
|
|
|
# hpacc A.03.45
|
|
|
|
kfail "gdb/NNNN" $name
|
|
|
|
}
|
|
|
|
-re "Value can't be converted to integer.\r\n$gdb_prompt $" {
|
|
|
|
# gcc 2.95.3 -gdwarf-2
|
|
|
|
# gcc 2.95.3 -gstabs+
|
|
|
|
# gcc 3.3.2 -gdwarf-2
|
|
|
|
# gcc 3.3.2 -gstabs+
|
|
|
|
# gcc HEAD 2004-01-10 -gdwarf-2
|
|
|
|
# gcc HEAD 2004-01-10 -gstabs+
|
|
|
|
kfail "gdb/NNNN" $name
|
1999-04-16 03:35:26 +02:00
|
|
|
}
|
|
|
|
}
|
* NEWS: Mention pointer to member improvements.
* Makefile.in (gnu-v3-abi.o): Delete special rule.
(eval.o, gnu-v3-abi.o, ia64-tdep.o): Update.
* ada-valprint.c (ada_print_scalar): Update for new type codes.
* c-typeprint.c (c_print_type): Update for new type codes.
(c_type_print_varspec_prefix, c_type_print_varspec_suffix)
(c_type_print_base): Likewise.
(c_type_print_args): Rewrite.
* c-valprint.c (c_val_print): Update for new type codes. Remove
support for references to members. Treat methods like functions.
* cp-abi.c (cplus_print_method_ptr, cplus_method_ptr_size)
(cplus_make_method_ptr, cplus_method_ptr_to_value): New.
* cp-abi.h (cplus_print_method_ptr, cplus_method_ptr_size)
(cplus_make_method_ptr, cplus_method_ptr_to_value): New prototypes.
(struct cp_abi_ops): Add corresponding members.
* cp-valprint.c (cp_print_class_method): Delete.
(cp_find_class_member): New function.
(cp_print_class_member): Use it. Simplify support for bogus
member pointers.
* dwarf2read.c (quirk_gcc_member_function_pointer): Use
lookup_methodptr_type.
(read_tag_ptr_to_member_type): Likewise, and lookup_memberptr_type.
* eval.c (evaluate_subexp_standard): Implement EVAL_SKIP for
OP_SCOPE. Update call to value_aggregate_elt. Rewrite member
pointer support.
(evaluate_subexp_for_address): Handle OP_SCOPE explicitly. Handle
references returned by user defined operators.
* f-typeprint.c (f_print_type, f_type_print_varspec_prefix)
(f_type_print_varspec_suffix): Remove support for member pointers.
* gdbtypes.c (lookup_memberptr_type): Renamed from lookup_member_type
and adjusted.
(smash_to_memberptr_type): Likewise, from smash_to_member_type.
(lookup_methodptr_type): New.
(rank_one_type): Adjust for TYPE_CODE_MEMBERPTR.
(recursive_dump_type): Update for new types.
* gdbtypes.h (enum type_code): Replace TYPE_CODE_MEMBER with
TYPE_CODE_MEMBERPTR and TYPE_CODE_METHODPTR.
(lookup_memberptr_type, lookup_methodptr_type)
(smash_to_memberptr_type): New prototypes.
(smash_to_method_type): Formatting fix.
(lookup_member_type, smash_to_member_type): Delete prototypes.
* gnu-v3-abi.c (gnuv3_get_vtable, gnuv3_get_virtual_fn): New.
Do not rely on debug information for the vptr or the method's
enclosing type. Handle function descriptors for IA64.
(gnuv3_virtual_fn_field): Rewrite using the new functions.
(gnuv3_find_method_in, gnuv3_print_method_ptr)
(gnuv3_method_ptr_size, gnuv3_make_method_ptr)
(gnuv3_method_ptr_to_value): New.
(init_gnuv3_ops): Set new members of gnu_v3_abi_ops.
* hpread.c (hpread_type_lookup): Update for new types.
* infcall.c (value_arg_coerce): Likewise.
* m2-typeprint.c (m2_print_type): Remove explicit support
for member pointers.
* m2-valprint.c (m2_val_print): Likewise.
* p-typeprint.c (pascal_type_print_varspec_prefix)
(pascal_type_print_varspec_suffix, pascal_type_print_base): Likewise.
* p-valprint.c (pascal_val_print): Likewise.
(pascal_object_print_class_method, pascal_object_print_class_member):
Delete.
* p-lang.h (pascal_object_print_class_method)
(pascal_object_print_class_member): Delete prototypes.
* stabsread.c (read_type): Update for new types.
* typeprint.c (print_type_scalar): Likewise.
* valops.c (value_struct_elt_for_reference, value_namespace_elt)
(value_maybe_namespace_elt, value_aggregate_elt): Add want_address
argument. Construct a pointer to member if the address of a
function or data member is requested.
(value_cast_pointers): Don't modify the input value.
(value_cast): Adjust pointer to member handling for new types.
Allow null pointer to member constants. Don't modify the input
value.
(value_ind): Remove pointer to member check. Handle function
descriptors for function pointers.
(value_struct_elt, value_find_oload_method_list, check_field):
Remove pointer to member checks.
* value.c (unpack_long): Allow pointers to data members.
(value_from_longest): Allow member pointers.
* value.h (value_aggregate_elt): Add want_address.
* varobj.c (c_variable_editable): Remove check for members.
* gdbarch.sh: Add vtable_function_descriptors and vbit_in_delta.
* ia64-tdep.c (ia64_convert_from_func_ptr_addr): Handle descriptors
in virtual tables.
(ia64_gdbarch_init): Call set_gdbarch_vtable_function_descriptors.
* c-lang.h (cp_print_class_method): Delete prototype.
* arm-tdep.c (arm_gdbarch_init): Call set_gdbarch_vbit_in_delta.
* mips-tdep.c (mips_gdbarch_init): Likewise.
* gdbarch.c, gdbarch.h: Regenerated.
* gdb.cp/classes.exp (test_pointers_to_class_members): Update expected
output. Test the types of members and member pointers.
* gdb.cp/inherit.exp (test_print_mi_member_types): Remove KFAILs for
gdb/2092.
* gdb.cp/member-ptr.exp: Search for a comment instead of a
statement. Enable for GCC. Update expected output for some tests
and add new tests. Remove obsolete GCC KFAILs. Allow GCC's class
layout.
* gdb.cp/member-ptr.cc (Padding, Padding::vspacer, Base, Base::get_x)
(Base::vget_base, Left, Left::vget, Right, Right::vget, Diamond)
(Diamond::vget_base): New.
(main): Add new tests.
* gdb.cp/printmethod.exp: Update expected output for member functions.
* gdb.cp/virtfunc.exp (test_virtual_calls): Add a KFAIL for
print pEe->D::vg().
2007-01-03 19:05:45 +01:00
|
|
|
|
2010-07-28 21:04:08 +02:00
|
|
|
gdb_test "ptype a.*pmf" "type = int \\(A \\*( const)?, int\\)"
|
* gdb.cp/cp-relocate.exp: Remove single-quoting of C++ methods.
* gdb.cp/cplusfuncs.cc (dm_type_short): New function.
(dm_type_long): New function.
(dm_type_unsigned_short): New function.
(dm_type_unsigned_long): New function.
(myint): New typedef.
* gdb.cp/cplusfuncs.exp (probe_demangler): Add tests for short,
long, unsigned shor and long, operator char*, and typedef.
(test_lookup_operator_functions): Add operator char* test.
(test_paddr_operator_functions): Likewise.
(test_paddr_overloaded_functions): Use probe values for
short, long, and unsigned short and long.
(test_paddr_hairy_functions): If the demangler probe detected
gdb type printers, "expect" them. Otherwise "expect" the v2 or v3
demangler.
* gdb.cp/expand-sals.exp: Backtrace may contain class names.
* gdb.cp/member-ptr.exp: Refine expected result for "print pmf"
and "print null_pmf".
Add test "ptype a.*pmf".
* gdb.cp/overload.exp: Allow optional "int" to appear with
"short" and "long".
* gdb.cp/ovldbreak.exp: Use append to construct super-duper
long expect value for men_overload1arg.
Allow "int" to appear with "short" and "long".
When testing "info break", add argument for main (void).
Also allow "int" to appear with "short" and "long".
Ditto with "unsigned" and "long long".
* gdb.java/jmain.exp: Do not enclose methods names in single
quotes.
* gdb.java/jmisc.exp: Likewise.
* gdb.java/jprint.exp: Likewise.
* gdb.python/py-symbol.exp: Update expected "linkage_name" value.
From Jan Kratochvil <jan.kratochvil@redhat.com>:
* gdb.cp/exception.exp (backtrace after first throw)
(backtrace after second throw): Allow a namespace before __cxa_throw.
(backtrace after first catch, backtrace after second catch): Allow
a namespace before __cxa_begin_catch.
* gdb.cp/cpexprs.exp: New file.
* gdb.cp/cpexprs.cc: New file.
From Daniel Jacobowitz <dan@codesourcery.com>
* gdb.cp/cpexprs.exp (escape): Delete. Change all callers
to use string_to_regexp.
(ctor, dtor): New functions. Use them to match constructor
and destructor function types.
(Top level): Use runto_main.
2010-03-09 19:08:05 +01:00
|
|
|
|
* NEWS: Mention pointer to member improvements.
* Makefile.in (gnu-v3-abi.o): Delete special rule.
(eval.o, gnu-v3-abi.o, ia64-tdep.o): Update.
* ada-valprint.c (ada_print_scalar): Update for new type codes.
* c-typeprint.c (c_print_type): Update for new type codes.
(c_type_print_varspec_prefix, c_type_print_varspec_suffix)
(c_type_print_base): Likewise.
(c_type_print_args): Rewrite.
* c-valprint.c (c_val_print): Update for new type codes. Remove
support for references to members. Treat methods like functions.
* cp-abi.c (cplus_print_method_ptr, cplus_method_ptr_size)
(cplus_make_method_ptr, cplus_method_ptr_to_value): New.
* cp-abi.h (cplus_print_method_ptr, cplus_method_ptr_size)
(cplus_make_method_ptr, cplus_method_ptr_to_value): New prototypes.
(struct cp_abi_ops): Add corresponding members.
* cp-valprint.c (cp_print_class_method): Delete.
(cp_find_class_member): New function.
(cp_print_class_member): Use it. Simplify support for bogus
member pointers.
* dwarf2read.c (quirk_gcc_member_function_pointer): Use
lookup_methodptr_type.
(read_tag_ptr_to_member_type): Likewise, and lookup_memberptr_type.
* eval.c (evaluate_subexp_standard): Implement EVAL_SKIP for
OP_SCOPE. Update call to value_aggregate_elt. Rewrite member
pointer support.
(evaluate_subexp_for_address): Handle OP_SCOPE explicitly. Handle
references returned by user defined operators.
* f-typeprint.c (f_print_type, f_type_print_varspec_prefix)
(f_type_print_varspec_suffix): Remove support for member pointers.
* gdbtypes.c (lookup_memberptr_type): Renamed from lookup_member_type
and adjusted.
(smash_to_memberptr_type): Likewise, from smash_to_member_type.
(lookup_methodptr_type): New.
(rank_one_type): Adjust for TYPE_CODE_MEMBERPTR.
(recursive_dump_type): Update for new types.
* gdbtypes.h (enum type_code): Replace TYPE_CODE_MEMBER with
TYPE_CODE_MEMBERPTR and TYPE_CODE_METHODPTR.
(lookup_memberptr_type, lookup_methodptr_type)
(smash_to_memberptr_type): New prototypes.
(smash_to_method_type): Formatting fix.
(lookup_member_type, smash_to_member_type): Delete prototypes.
* gnu-v3-abi.c (gnuv3_get_vtable, gnuv3_get_virtual_fn): New.
Do not rely on debug information for the vptr or the method's
enclosing type. Handle function descriptors for IA64.
(gnuv3_virtual_fn_field): Rewrite using the new functions.
(gnuv3_find_method_in, gnuv3_print_method_ptr)
(gnuv3_method_ptr_size, gnuv3_make_method_ptr)
(gnuv3_method_ptr_to_value): New.
(init_gnuv3_ops): Set new members of gnu_v3_abi_ops.
* hpread.c (hpread_type_lookup): Update for new types.
* infcall.c (value_arg_coerce): Likewise.
* m2-typeprint.c (m2_print_type): Remove explicit support
for member pointers.
* m2-valprint.c (m2_val_print): Likewise.
* p-typeprint.c (pascal_type_print_varspec_prefix)
(pascal_type_print_varspec_suffix, pascal_type_print_base): Likewise.
* p-valprint.c (pascal_val_print): Likewise.
(pascal_object_print_class_method, pascal_object_print_class_member):
Delete.
* p-lang.h (pascal_object_print_class_method)
(pascal_object_print_class_member): Delete prototypes.
* stabsread.c (read_type): Update for new types.
* typeprint.c (print_type_scalar): Likewise.
* valops.c (value_struct_elt_for_reference, value_namespace_elt)
(value_maybe_namespace_elt, value_aggregate_elt): Add want_address
argument. Construct a pointer to member if the address of a
function or data member is requested.
(value_cast_pointers): Don't modify the input value.
(value_cast): Adjust pointer to member handling for new types.
Allow null pointer to member constants. Don't modify the input
value.
(value_ind): Remove pointer to member check. Handle function
descriptors for function pointers.
(value_struct_elt, value_find_oload_method_list, check_field):
Remove pointer to member checks.
* value.c (unpack_long): Allow pointers to data members.
(value_from_longest): Allow member pointers.
* value.h (value_aggregate_elt): Add want_address.
* varobj.c (c_variable_editable): Remove check for members.
* gdbarch.sh: Add vtable_function_descriptors and vbit_in_delta.
* ia64-tdep.c (ia64_convert_from_func_ptr_addr): Handle descriptors
in virtual tables.
(ia64_gdbarch_init): Call set_gdbarch_vtable_function_descriptors.
* c-lang.h (cp_print_class_method): Delete prototype.
* arm-tdep.c (arm_gdbarch_init): Call set_gdbarch_vbit_in_delta.
* mips-tdep.c (mips_gdbarch_init): Likewise.
* gdbarch.c, gdbarch.h: Regenerated.
* gdb.cp/classes.exp (test_pointers_to_class_members): Update expected
output. Test the types of members and member pointers.
* gdb.cp/inherit.exp (test_print_mi_member_types): Remove KFAILs for
gdb/2092.
* gdb.cp/member-ptr.exp: Search for a comment instead of a
statement. Enable for GCC. Update expected output for some tests
and add new tests. Remove obsolete GCC KFAILs. Allow GCC's class
layout.
* gdb.cp/member-ptr.cc (Padding, Padding::vspacer, Base, Base::get_x)
(Base::vget_base, Left, Left::vget, Right, Right::vget, Diamond)
(Diamond::vget_base): New.
(main): Add new tests.
* gdb.cp/printmethod.exp: Update expected output for member functions.
* gdb.cp/virtfunc.exp (test_virtual_calls): Add a KFAIL for
print pEe->D::vg().
2007-01-03 19:05:45 +01:00
|
|
|
# Print out a pointer to data member which requires looking into
|
|
|
|
# a base class.
|
|
|
|
gdb_test "print diamond_pmi" "$vhn = &Base::x"
|
|
|
|
gdb_test "print diamond.*diamond_pmi" "$vhn = 77"
|
|
|
|
|
|
|
|
# Examine some more complicated pmfs, which require adjusting "this"
|
|
|
|
# and looking through virtual tables.
|
|
|
|
|
|
|
|
# These two have a different object adjustment, but call the same method.
|
|
|
|
gdb_test "print diamond.*left_pmf" \
|
2010-07-28 21:04:08 +02:00
|
|
|
"$vhn = {int \\(Diamond \\*( const)?\\)} $hex <Base::get_x\\((void|)\\)>"
|
* NEWS: Mention pointer to member improvements.
* Makefile.in (gnu-v3-abi.o): Delete special rule.
(eval.o, gnu-v3-abi.o, ia64-tdep.o): Update.
* ada-valprint.c (ada_print_scalar): Update for new type codes.
* c-typeprint.c (c_print_type): Update for new type codes.
(c_type_print_varspec_prefix, c_type_print_varspec_suffix)
(c_type_print_base): Likewise.
(c_type_print_args): Rewrite.
* c-valprint.c (c_val_print): Update for new type codes. Remove
support for references to members. Treat methods like functions.
* cp-abi.c (cplus_print_method_ptr, cplus_method_ptr_size)
(cplus_make_method_ptr, cplus_method_ptr_to_value): New.
* cp-abi.h (cplus_print_method_ptr, cplus_method_ptr_size)
(cplus_make_method_ptr, cplus_method_ptr_to_value): New prototypes.
(struct cp_abi_ops): Add corresponding members.
* cp-valprint.c (cp_print_class_method): Delete.
(cp_find_class_member): New function.
(cp_print_class_member): Use it. Simplify support for bogus
member pointers.
* dwarf2read.c (quirk_gcc_member_function_pointer): Use
lookup_methodptr_type.
(read_tag_ptr_to_member_type): Likewise, and lookup_memberptr_type.
* eval.c (evaluate_subexp_standard): Implement EVAL_SKIP for
OP_SCOPE. Update call to value_aggregate_elt. Rewrite member
pointer support.
(evaluate_subexp_for_address): Handle OP_SCOPE explicitly. Handle
references returned by user defined operators.
* f-typeprint.c (f_print_type, f_type_print_varspec_prefix)
(f_type_print_varspec_suffix): Remove support for member pointers.
* gdbtypes.c (lookup_memberptr_type): Renamed from lookup_member_type
and adjusted.
(smash_to_memberptr_type): Likewise, from smash_to_member_type.
(lookup_methodptr_type): New.
(rank_one_type): Adjust for TYPE_CODE_MEMBERPTR.
(recursive_dump_type): Update for new types.
* gdbtypes.h (enum type_code): Replace TYPE_CODE_MEMBER with
TYPE_CODE_MEMBERPTR and TYPE_CODE_METHODPTR.
(lookup_memberptr_type, lookup_methodptr_type)
(smash_to_memberptr_type): New prototypes.
(smash_to_method_type): Formatting fix.
(lookup_member_type, smash_to_member_type): Delete prototypes.
* gnu-v3-abi.c (gnuv3_get_vtable, gnuv3_get_virtual_fn): New.
Do not rely on debug information for the vptr or the method's
enclosing type. Handle function descriptors for IA64.
(gnuv3_virtual_fn_field): Rewrite using the new functions.
(gnuv3_find_method_in, gnuv3_print_method_ptr)
(gnuv3_method_ptr_size, gnuv3_make_method_ptr)
(gnuv3_method_ptr_to_value): New.
(init_gnuv3_ops): Set new members of gnu_v3_abi_ops.
* hpread.c (hpread_type_lookup): Update for new types.
* infcall.c (value_arg_coerce): Likewise.
* m2-typeprint.c (m2_print_type): Remove explicit support
for member pointers.
* m2-valprint.c (m2_val_print): Likewise.
* p-typeprint.c (pascal_type_print_varspec_prefix)
(pascal_type_print_varspec_suffix, pascal_type_print_base): Likewise.
* p-valprint.c (pascal_val_print): Likewise.
(pascal_object_print_class_method, pascal_object_print_class_member):
Delete.
* p-lang.h (pascal_object_print_class_method)
(pascal_object_print_class_member): Delete prototypes.
* stabsread.c (read_type): Update for new types.
* typeprint.c (print_type_scalar): Likewise.
* valops.c (value_struct_elt_for_reference, value_namespace_elt)
(value_maybe_namespace_elt, value_aggregate_elt): Add want_address
argument. Construct a pointer to member if the address of a
function or data member is requested.
(value_cast_pointers): Don't modify the input value.
(value_cast): Adjust pointer to member handling for new types.
Allow null pointer to member constants. Don't modify the input
value.
(value_ind): Remove pointer to member check. Handle function
descriptors for function pointers.
(value_struct_elt, value_find_oload_method_list, check_field):
Remove pointer to member checks.
* value.c (unpack_long): Allow pointers to data members.
(value_from_longest): Allow member pointers.
* value.h (value_aggregate_elt): Add want_address.
* varobj.c (c_variable_editable): Remove check for members.
* gdbarch.sh: Add vtable_function_descriptors and vbit_in_delta.
* ia64-tdep.c (ia64_convert_from_func_ptr_addr): Handle descriptors
in virtual tables.
(ia64_gdbarch_init): Call set_gdbarch_vtable_function_descriptors.
* c-lang.h (cp_print_class_method): Delete prototype.
* arm-tdep.c (arm_gdbarch_init): Call set_gdbarch_vbit_in_delta.
* mips-tdep.c (mips_gdbarch_init): Likewise.
* gdbarch.c, gdbarch.h: Regenerated.
* gdb.cp/classes.exp (test_pointers_to_class_members): Update expected
output. Test the types of members and member pointers.
* gdb.cp/inherit.exp (test_print_mi_member_types): Remove KFAILs for
gdb/2092.
* gdb.cp/member-ptr.exp: Search for a comment instead of a
statement. Enable for GCC. Update expected output for some tests
and add new tests. Remove obsolete GCC KFAILs. Allow GCC's class
layout.
* gdb.cp/member-ptr.cc (Padding, Padding::vspacer, Base, Base::get_x)
(Base::vget_base, Left, Left::vget, Right, Right::vget, Diamond)
(Diamond::vget_base): New.
(main): Add new tests.
* gdb.cp/printmethod.exp: Update expected output for member functions.
* gdb.cp/virtfunc.exp (test_virtual_calls): Add a KFAIL for
print pEe->D::vg().
2007-01-03 19:05:45 +01:00
|
|
|
gdb_test "print diamond.*right_pmf" \
|
2010-07-28 21:04:08 +02:00
|
|
|
"$vhn = {int \\(Diamond \\*( const)?\\)} $hex <Base::get_x\\((void|)\\)>"
|
* NEWS: Mention pointer to member improvements.
* Makefile.in (gnu-v3-abi.o): Delete special rule.
(eval.o, gnu-v3-abi.o, ia64-tdep.o): Update.
* ada-valprint.c (ada_print_scalar): Update for new type codes.
* c-typeprint.c (c_print_type): Update for new type codes.
(c_type_print_varspec_prefix, c_type_print_varspec_suffix)
(c_type_print_base): Likewise.
(c_type_print_args): Rewrite.
* c-valprint.c (c_val_print): Update for new type codes. Remove
support for references to members. Treat methods like functions.
* cp-abi.c (cplus_print_method_ptr, cplus_method_ptr_size)
(cplus_make_method_ptr, cplus_method_ptr_to_value): New.
* cp-abi.h (cplus_print_method_ptr, cplus_method_ptr_size)
(cplus_make_method_ptr, cplus_method_ptr_to_value): New prototypes.
(struct cp_abi_ops): Add corresponding members.
* cp-valprint.c (cp_print_class_method): Delete.
(cp_find_class_member): New function.
(cp_print_class_member): Use it. Simplify support for bogus
member pointers.
* dwarf2read.c (quirk_gcc_member_function_pointer): Use
lookup_methodptr_type.
(read_tag_ptr_to_member_type): Likewise, and lookup_memberptr_type.
* eval.c (evaluate_subexp_standard): Implement EVAL_SKIP for
OP_SCOPE. Update call to value_aggregate_elt. Rewrite member
pointer support.
(evaluate_subexp_for_address): Handle OP_SCOPE explicitly. Handle
references returned by user defined operators.
* f-typeprint.c (f_print_type, f_type_print_varspec_prefix)
(f_type_print_varspec_suffix): Remove support for member pointers.
* gdbtypes.c (lookup_memberptr_type): Renamed from lookup_member_type
and adjusted.
(smash_to_memberptr_type): Likewise, from smash_to_member_type.
(lookup_methodptr_type): New.
(rank_one_type): Adjust for TYPE_CODE_MEMBERPTR.
(recursive_dump_type): Update for new types.
* gdbtypes.h (enum type_code): Replace TYPE_CODE_MEMBER with
TYPE_CODE_MEMBERPTR and TYPE_CODE_METHODPTR.
(lookup_memberptr_type, lookup_methodptr_type)
(smash_to_memberptr_type): New prototypes.
(smash_to_method_type): Formatting fix.
(lookup_member_type, smash_to_member_type): Delete prototypes.
* gnu-v3-abi.c (gnuv3_get_vtable, gnuv3_get_virtual_fn): New.
Do not rely on debug information for the vptr or the method's
enclosing type. Handle function descriptors for IA64.
(gnuv3_virtual_fn_field): Rewrite using the new functions.
(gnuv3_find_method_in, gnuv3_print_method_ptr)
(gnuv3_method_ptr_size, gnuv3_make_method_ptr)
(gnuv3_method_ptr_to_value): New.
(init_gnuv3_ops): Set new members of gnu_v3_abi_ops.
* hpread.c (hpread_type_lookup): Update for new types.
* infcall.c (value_arg_coerce): Likewise.
* m2-typeprint.c (m2_print_type): Remove explicit support
for member pointers.
* m2-valprint.c (m2_val_print): Likewise.
* p-typeprint.c (pascal_type_print_varspec_prefix)
(pascal_type_print_varspec_suffix, pascal_type_print_base): Likewise.
* p-valprint.c (pascal_val_print): Likewise.
(pascal_object_print_class_method, pascal_object_print_class_member):
Delete.
* p-lang.h (pascal_object_print_class_method)
(pascal_object_print_class_member): Delete prototypes.
* stabsread.c (read_type): Update for new types.
* typeprint.c (print_type_scalar): Likewise.
* valops.c (value_struct_elt_for_reference, value_namespace_elt)
(value_maybe_namespace_elt, value_aggregate_elt): Add want_address
argument. Construct a pointer to member if the address of a
function or data member is requested.
(value_cast_pointers): Don't modify the input value.
(value_cast): Adjust pointer to member handling for new types.
Allow null pointer to member constants. Don't modify the input
value.
(value_ind): Remove pointer to member check. Handle function
descriptors for function pointers.
(value_struct_elt, value_find_oload_method_list, check_field):
Remove pointer to member checks.
* value.c (unpack_long): Allow pointers to data members.
(value_from_longest): Allow member pointers.
* value.h (value_aggregate_elt): Add want_address.
* varobj.c (c_variable_editable): Remove check for members.
* gdbarch.sh: Add vtable_function_descriptors and vbit_in_delta.
* ia64-tdep.c (ia64_convert_from_func_ptr_addr): Handle descriptors
in virtual tables.
(ia64_gdbarch_init): Call set_gdbarch_vtable_function_descriptors.
* c-lang.h (cp_print_class_method): Delete prototype.
* arm-tdep.c (arm_gdbarch_init): Call set_gdbarch_vbit_in_delta.
* mips-tdep.c (mips_gdbarch_init): Likewise.
* gdbarch.c, gdbarch.h: Regenerated.
* gdb.cp/classes.exp (test_pointers_to_class_members): Update expected
output. Test the types of members and member pointers.
* gdb.cp/inherit.exp (test_print_mi_member_types): Remove KFAILs for
gdb/2092.
* gdb.cp/member-ptr.exp: Search for a comment instead of a
statement. Enable for GCC. Update expected output for some tests
and add new tests. Remove obsolete GCC KFAILs. Allow GCC's class
layout.
* gdb.cp/member-ptr.cc (Padding, Padding::vspacer, Base, Base::get_x)
(Base::vget_base, Left, Left::vget, Right, Right::vget, Diamond)
(Diamond::vget_base): New.
(main): Add new tests.
* gdb.cp/printmethod.exp: Update expected output for member functions.
* gdb.cp/virtfunc.exp (test_virtual_calls): Add a KFAIL for
print pEe->D::vg().
2007-01-03 19:05:45 +01:00
|
|
|
|
|
|
|
gdb_test "print (diamond.*left_pmf) ()" "$vhn = 77"
|
|
|
|
gdb_test "print (diamond.*right_pmf) ()" "$vhn = 88"
|
|
|
|
|
|
|
|
# These two point to different methods, although they have the same
|
|
|
|
# virtual table offsets.
|
|
|
|
gdb_test "print diamond.*left_vpmf" \
|
2010-07-28 21:04:08 +02:00
|
|
|
"$vhn = {int \\(Diamond \\*( const)?\\)} $hex <Left::vget\\((void|)\\)>"
|
* NEWS: Mention pointer to member improvements.
* Makefile.in (gnu-v3-abi.o): Delete special rule.
(eval.o, gnu-v3-abi.o, ia64-tdep.o): Update.
* ada-valprint.c (ada_print_scalar): Update for new type codes.
* c-typeprint.c (c_print_type): Update for new type codes.
(c_type_print_varspec_prefix, c_type_print_varspec_suffix)
(c_type_print_base): Likewise.
(c_type_print_args): Rewrite.
* c-valprint.c (c_val_print): Update for new type codes. Remove
support for references to members. Treat methods like functions.
* cp-abi.c (cplus_print_method_ptr, cplus_method_ptr_size)
(cplus_make_method_ptr, cplus_method_ptr_to_value): New.
* cp-abi.h (cplus_print_method_ptr, cplus_method_ptr_size)
(cplus_make_method_ptr, cplus_method_ptr_to_value): New prototypes.
(struct cp_abi_ops): Add corresponding members.
* cp-valprint.c (cp_print_class_method): Delete.
(cp_find_class_member): New function.
(cp_print_class_member): Use it. Simplify support for bogus
member pointers.
* dwarf2read.c (quirk_gcc_member_function_pointer): Use
lookup_methodptr_type.
(read_tag_ptr_to_member_type): Likewise, and lookup_memberptr_type.
* eval.c (evaluate_subexp_standard): Implement EVAL_SKIP for
OP_SCOPE. Update call to value_aggregate_elt. Rewrite member
pointer support.
(evaluate_subexp_for_address): Handle OP_SCOPE explicitly. Handle
references returned by user defined operators.
* f-typeprint.c (f_print_type, f_type_print_varspec_prefix)
(f_type_print_varspec_suffix): Remove support for member pointers.
* gdbtypes.c (lookup_memberptr_type): Renamed from lookup_member_type
and adjusted.
(smash_to_memberptr_type): Likewise, from smash_to_member_type.
(lookup_methodptr_type): New.
(rank_one_type): Adjust for TYPE_CODE_MEMBERPTR.
(recursive_dump_type): Update for new types.
* gdbtypes.h (enum type_code): Replace TYPE_CODE_MEMBER with
TYPE_CODE_MEMBERPTR and TYPE_CODE_METHODPTR.
(lookup_memberptr_type, lookup_methodptr_type)
(smash_to_memberptr_type): New prototypes.
(smash_to_method_type): Formatting fix.
(lookup_member_type, smash_to_member_type): Delete prototypes.
* gnu-v3-abi.c (gnuv3_get_vtable, gnuv3_get_virtual_fn): New.
Do not rely on debug information for the vptr or the method's
enclosing type. Handle function descriptors for IA64.
(gnuv3_virtual_fn_field): Rewrite using the new functions.
(gnuv3_find_method_in, gnuv3_print_method_ptr)
(gnuv3_method_ptr_size, gnuv3_make_method_ptr)
(gnuv3_method_ptr_to_value): New.
(init_gnuv3_ops): Set new members of gnu_v3_abi_ops.
* hpread.c (hpread_type_lookup): Update for new types.
* infcall.c (value_arg_coerce): Likewise.
* m2-typeprint.c (m2_print_type): Remove explicit support
for member pointers.
* m2-valprint.c (m2_val_print): Likewise.
* p-typeprint.c (pascal_type_print_varspec_prefix)
(pascal_type_print_varspec_suffix, pascal_type_print_base): Likewise.
* p-valprint.c (pascal_val_print): Likewise.
(pascal_object_print_class_method, pascal_object_print_class_member):
Delete.
* p-lang.h (pascal_object_print_class_method)
(pascal_object_print_class_member): Delete prototypes.
* stabsread.c (read_type): Update for new types.
* typeprint.c (print_type_scalar): Likewise.
* valops.c (value_struct_elt_for_reference, value_namespace_elt)
(value_maybe_namespace_elt, value_aggregate_elt): Add want_address
argument. Construct a pointer to member if the address of a
function or data member is requested.
(value_cast_pointers): Don't modify the input value.
(value_cast): Adjust pointer to member handling for new types.
Allow null pointer to member constants. Don't modify the input
value.
(value_ind): Remove pointer to member check. Handle function
descriptors for function pointers.
(value_struct_elt, value_find_oload_method_list, check_field):
Remove pointer to member checks.
* value.c (unpack_long): Allow pointers to data members.
(value_from_longest): Allow member pointers.
* value.h (value_aggregate_elt): Add want_address.
* varobj.c (c_variable_editable): Remove check for members.
* gdbarch.sh: Add vtable_function_descriptors and vbit_in_delta.
* ia64-tdep.c (ia64_convert_from_func_ptr_addr): Handle descriptors
in virtual tables.
(ia64_gdbarch_init): Call set_gdbarch_vtable_function_descriptors.
* c-lang.h (cp_print_class_method): Delete prototype.
* arm-tdep.c (arm_gdbarch_init): Call set_gdbarch_vbit_in_delta.
* mips-tdep.c (mips_gdbarch_init): Likewise.
* gdbarch.c, gdbarch.h: Regenerated.
* gdb.cp/classes.exp (test_pointers_to_class_members): Update expected
output. Test the types of members and member pointers.
* gdb.cp/inherit.exp (test_print_mi_member_types): Remove KFAILs for
gdb/2092.
* gdb.cp/member-ptr.exp: Search for a comment instead of a
statement. Enable for GCC. Update expected output for some tests
and add new tests. Remove obsolete GCC KFAILs. Allow GCC's class
layout.
* gdb.cp/member-ptr.cc (Padding, Padding::vspacer, Base, Base::get_x)
(Base::vget_base, Left, Left::vget, Right, Right::vget, Diamond)
(Diamond::vget_base): New.
(main): Add new tests.
* gdb.cp/printmethod.exp: Update expected output for member functions.
* gdb.cp/virtfunc.exp (test_virtual_calls): Add a KFAIL for
print pEe->D::vg().
2007-01-03 19:05:45 +01:00
|
|
|
gdb_test "print diamond.*right_vpmf" \
|
2010-07-28 21:04:08 +02:00
|
|
|
"$vhn = {int \\(Diamond \\*( const)?\\)} $hex <Right::vget\\((void|)\\)>"
|
* NEWS: Mention pointer to member improvements.
* Makefile.in (gnu-v3-abi.o): Delete special rule.
(eval.o, gnu-v3-abi.o, ia64-tdep.o): Update.
* ada-valprint.c (ada_print_scalar): Update for new type codes.
* c-typeprint.c (c_print_type): Update for new type codes.
(c_type_print_varspec_prefix, c_type_print_varspec_suffix)
(c_type_print_base): Likewise.
(c_type_print_args): Rewrite.
* c-valprint.c (c_val_print): Update for new type codes. Remove
support for references to members. Treat methods like functions.
* cp-abi.c (cplus_print_method_ptr, cplus_method_ptr_size)
(cplus_make_method_ptr, cplus_method_ptr_to_value): New.
* cp-abi.h (cplus_print_method_ptr, cplus_method_ptr_size)
(cplus_make_method_ptr, cplus_method_ptr_to_value): New prototypes.
(struct cp_abi_ops): Add corresponding members.
* cp-valprint.c (cp_print_class_method): Delete.
(cp_find_class_member): New function.
(cp_print_class_member): Use it. Simplify support for bogus
member pointers.
* dwarf2read.c (quirk_gcc_member_function_pointer): Use
lookup_methodptr_type.
(read_tag_ptr_to_member_type): Likewise, and lookup_memberptr_type.
* eval.c (evaluate_subexp_standard): Implement EVAL_SKIP for
OP_SCOPE. Update call to value_aggregate_elt. Rewrite member
pointer support.
(evaluate_subexp_for_address): Handle OP_SCOPE explicitly. Handle
references returned by user defined operators.
* f-typeprint.c (f_print_type, f_type_print_varspec_prefix)
(f_type_print_varspec_suffix): Remove support for member pointers.
* gdbtypes.c (lookup_memberptr_type): Renamed from lookup_member_type
and adjusted.
(smash_to_memberptr_type): Likewise, from smash_to_member_type.
(lookup_methodptr_type): New.
(rank_one_type): Adjust for TYPE_CODE_MEMBERPTR.
(recursive_dump_type): Update for new types.
* gdbtypes.h (enum type_code): Replace TYPE_CODE_MEMBER with
TYPE_CODE_MEMBERPTR and TYPE_CODE_METHODPTR.
(lookup_memberptr_type, lookup_methodptr_type)
(smash_to_memberptr_type): New prototypes.
(smash_to_method_type): Formatting fix.
(lookup_member_type, smash_to_member_type): Delete prototypes.
* gnu-v3-abi.c (gnuv3_get_vtable, gnuv3_get_virtual_fn): New.
Do not rely on debug information for the vptr or the method's
enclosing type. Handle function descriptors for IA64.
(gnuv3_virtual_fn_field): Rewrite using the new functions.
(gnuv3_find_method_in, gnuv3_print_method_ptr)
(gnuv3_method_ptr_size, gnuv3_make_method_ptr)
(gnuv3_method_ptr_to_value): New.
(init_gnuv3_ops): Set new members of gnu_v3_abi_ops.
* hpread.c (hpread_type_lookup): Update for new types.
* infcall.c (value_arg_coerce): Likewise.
* m2-typeprint.c (m2_print_type): Remove explicit support
for member pointers.
* m2-valprint.c (m2_val_print): Likewise.
* p-typeprint.c (pascal_type_print_varspec_prefix)
(pascal_type_print_varspec_suffix, pascal_type_print_base): Likewise.
* p-valprint.c (pascal_val_print): Likewise.
(pascal_object_print_class_method, pascal_object_print_class_member):
Delete.
* p-lang.h (pascal_object_print_class_method)
(pascal_object_print_class_member): Delete prototypes.
* stabsread.c (read_type): Update for new types.
* typeprint.c (print_type_scalar): Likewise.
* valops.c (value_struct_elt_for_reference, value_namespace_elt)
(value_maybe_namespace_elt, value_aggregate_elt): Add want_address
argument. Construct a pointer to member if the address of a
function or data member is requested.
(value_cast_pointers): Don't modify the input value.
(value_cast): Adjust pointer to member handling for new types.
Allow null pointer to member constants. Don't modify the input
value.
(value_ind): Remove pointer to member check. Handle function
descriptors for function pointers.
(value_struct_elt, value_find_oload_method_list, check_field):
Remove pointer to member checks.
* value.c (unpack_long): Allow pointers to data members.
(value_from_longest): Allow member pointers.
* value.h (value_aggregate_elt): Add want_address.
* varobj.c (c_variable_editable): Remove check for members.
* gdbarch.sh: Add vtable_function_descriptors and vbit_in_delta.
* ia64-tdep.c (ia64_convert_from_func_ptr_addr): Handle descriptors
in virtual tables.
(ia64_gdbarch_init): Call set_gdbarch_vtable_function_descriptors.
* c-lang.h (cp_print_class_method): Delete prototype.
* arm-tdep.c (arm_gdbarch_init): Call set_gdbarch_vbit_in_delta.
* mips-tdep.c (mips_gdbarch_init): Likewise.
* gdbarch.c, gdbarch.h: Regenerated.
* gdb.cp/classes.exp (test_pointers_to_class_members): Update expected
output. Test the types of members and member pointers.
* gdb.cp/inherit.exp (test_print_mi_member_types): Remove KFAILs for
gdb/2092.
* gdb.cp/member-ptr.exp: Search for a comment instead of a
statement. Enable for GCC. Update expected output for some tests
and add new tests. Remove obsolete GCC KFAILs. Allow GCC's class
layout.
* gdb.cp/member-ptr.cc (Padding, Padding::vspacer, Base, Base::get_x)
(Base::vget_base, Left, Left::vget, Right, Right::vget, Diamond)
(Diamond::vget_base): New.
(main): Add new tests.
* gdb.cp/printmethod.exp: Update expected output for member functions.
* gdb.cp/virtfunc.exp (test_virtual_calls): Add a KFAIL for
print pEe->D::vg().
2007-01-03 19:05:45 +01:00
|
|
|
|
|
|
|
gdb_test "print (diamond.*left_vpmf) ()" "$vhn = 177"
|
|
|
|
gdb_test "print (diamond.*left_base_vpmf) ()" "$vhn = 2077"
|
|
|
|
gdb_test "print (diamond.*right_vpmf) ()" "$vhn = 288"
|
|
|
|
|
|
|
|
# We should be able to figure out left_vpmf even without an object,
|
|
|
|
# because it comes from a non-virtual base. The same for right_vpmf.
|
|
|
|
gdb_test "print left_vpmf" "$vhn = &virtual Left::vget\\(\\)"
|
|
|
|
gdb_test "print right_vpmf" "$vhn = &virtual Right::vget\\(\\)"
|
|
|
|
|
|
|
|
# But we should gracefully fail to figure out base_vpmf, because
|
|
|
|
# its runtime type is more derived than its static type. This
|
|
|
|
# is a valid but unspecified cast (it is value preserving, i.e.
|
|
|
|
# can be casted back to the correct type and used).
|
|
|
|
gdb_test "print base_vpmf" \
|
|
|
|
"$vhn = &virtual table offset \[0-9\]*, this adjustment -\[0-9\]*"
|
|
|
|
|
|
|
|
# Make sure we parse this correctly; it's invalid.
|
|
|
|
gdb_test "print diamond.*left_vpmf ()" \
|
|
|
|
"Invalid data type for function to be called\\."
|
|
|
|
|
|
|
|
# NULL pointer to member tests.
|
|
|
|
gdb_test "print null_pmi" "$vhn = NULL"
|
|
|
|
gdb_test "print null_pmi = &A::j" "$vhn = &A::j"
|
|
|
|
gdb_test "print null_pmi = 0" "$vhn = NULL"
|
|
|
|
|
|
|
|
gdb_test "print null_pmf" "$vhn = NULL"
|
2010-07-28 21:04:08 +02:00
|
|
|
gdb_test "print null_pmf = &A::foo" "$vhn = \\(int \\(A::\\*\\)\\(A \\*( const)?, int\\)\\) $hex <A::foo ?\\(int\\)>"
|
* NEWS: Mention pointer to member improvements.
* Makefile.in (gnu-v3-abi.o): Delete special rule.
(eval.o, gnu-v3-abi.o, ia64-tdep.o): Update.
* ada-valprint.c (ada_print_scalar): Update for new type codes.
* c-typeprint.c (c_print_type): Update for new type codes.
(c_type_print_varspec_prefix, c_type_print_varspec_suffix)
(c_type_print_base): Likewise.
(c_type_print_args): Rewrite.
* c-valprint.c (c_val_print): Update for new type codes. Remove
support for references to members. Treat methods like functions.
* cp-abi.c (cplus_print_method_ptr, cplus_method_ptr_size)
(cplus_make_method_ptr, cplus_method_ptr_to_value): New.
* cp-abi.h (cplus_print_method_ptr, cplus_method_ptr_size)
(cplus_make_method_ptr, cplus_method_ptr_to_value): New prototypes.
(struct cp_abi_ops): Add corresponding members.
* cp-valprint.c (cp_print_class_method): Delete.
(cp_find_class_member): New function.
(cp_print_class_member): Use it. Simplify support for bogus
member pointers.
* dwarf2read.c (quirk_gcc_member_function_pointer): Use
lookup_methodptr_type.
(read_tag_ptr_to_member_type): Likewise, and lookup_memberptr_type.
* eval.c (evaluate_subexp_standard): Implement EVAL_SKIP for
OP_SCOPE. Update call to value_aggregate_elt. Rewrite member
pointer support.
(evaluate_subexp_for_address): Handle OP_SCOPE explicitly. Handle
references returned by user defined operators.
* f-typeprint.c (f_print_type, f_type_print_varspec_prefix)
(f_type_print_varspec_suffix): Remove support for member pointers.
* gdbtypes.c (lookup_memberptr_type): Renamed from lookup_member_type
and adjusted.
(smash_to_memberptr_type): Likewise, from smash_to_member_type.
(lookup_methodptr_type): New.
(rank_one_type): Adjust for TYPE_CODE_MEMBERPTR.
(recursive_dump_type): Update for new types.
* gdbtypes.h (enum type_code): Replace TYPE_CODE_MEMBER with
TYPE_CODE_MEMBERPTR and TYPE_CODE_METHODPTR.
(lookup_memberptr_type, lookup_methodptr_type)
(smash_to_memberptr_type): New prototypes.
(smash_to_method_type): Formatting fix.
(lookup_member_type, smash_to_member_type): Delete prototypes.
* gnu-v3-abi.c (gnuv3_get_vtable, gnuv3_get_virtual_fn): New.
Do not rely on debug information for the vptr or the method's
enclosing type. Handle function descriptors for IA64.
(gnuv3_virtual_fn_field): Rewrite using the new functions.
(gnuv3_find_method_in, gnuv3_print_method_ptr)
(gnuv3_method_ptr_size, gnuv3_make_method_ptr)
(gnuv3_method_ptr_to_value): New.
(init_gnuv3_ops): Set new members of gnu_v3_abi_ops.
* hpread.c (hpread_type_lookup): Update for new types.
* infcall.c (value_arg_coerce): Likewise.
* m2-typeprint.c (m2_print_type): Remove explicit support
for member pointers.
* m2-valprint.c (m2_val_print): Likewise.
* p-typeprint.c (pascal_type_print_varspec_prefix)
(pascal_type_print_varspec_suffix, pascal_type_print_base): Likewise.
* p-valprint.c (pascal_val_print): Likewise.
(pascal_object_print_class_method, pascal_object_print_class_member):
Delete.
* p-lang.h (pascal_object_print_class_method)
(pascal_object_print_class_member): Delete prototypes.
* stabsread.c (read_type): Update for new types.
* typeprint.c (print_type_scalar): Likewise.
* valops.c (value_struct_elt_for_reference, value_namespace_elt)
(value_maybe_namespace_elt, value_aggregate_elt): Add want_address
argument. Construct a pointer to member if the address of a
function or data member is requested.
(value_cast_pointers): Don't modify the input value.
(value_cast): Adjust pointer to member handling for new types.
Allow null pointer to member constants. Don't modify the input
value.
(value_ind): Remove pointer to member check. Handle function
descriptors for function pointers.
(value_struct_elt, value_find_oload_method_list, check_field):
Remove pointer to member checks.
* value.c (unpack_long): Allow pointers to data members.
(value_from_longest): Allow member pointers.
* value.h (value_aggregate_elt): Add want_address.
* varobj.c (c_variable_editable): Remove check for members.
* gdbarch.sh: Add vtable_function_descriptors and vbit_in_delta.
* ia64-tdep.c (ia64_convert_from_func_ptr_addr): Handle descriptors
in virtual tables.
(ia64_gdbarch_init): Call set_gdbarch_vtable_function_descriptors.
* c-lang.h (cp_print_class_method): Delete prototype.
* arm-tdep.c (arm_gdbarch_init): Call set_gdbarch_vbit_in_delta.
* mips-tdep.c (mips_gdbarch_init): Likewise.
* gdbarch.c, gdbarch.h: Regenerated.
* gdb.cp/classes.exp (test_pointers_to_class_members): Update expected
output. Test the types of members and member pointers.
* gdb.cp/inherit.exp (test_print_mi_member_types): Remove KFAILs for
gdb/2092.
* gdb.cp/member-ptr.exp: Search for a comment instead of a
statement. Enable for GCC. Update expected output for some tests
and add new tests. Remove obsolete GCC KFAILs. Allow GCC's class
layout.
* gdb.cp/member-ptr.cc (Padding, Padding::vspacer, Base, Base::get_x)
(Base::vget_base, Left, Left::vget, Right, Right::vget, Diamond)
(Diamond::vget_base): New.
(main): Add new tests.
* gdb.cp/printmethod.exp: Update expected output for member functions.
* gdb.cp/virtfunc.exp (test_virtual_calls): Add a KFAIL for
print pEe->D::vg().
2007-01-03 19:05:45 +01:00
|
|
|
gdb_test "print null_pmf = 0" "$vhn = NULL"
|