# Copyright 1998-2013 Free Software Foundation, Inc.

# This file is part of the gdb testsuite

# 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
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# 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.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# Tests for pointer-to-member support
# Written by Satish Pai <pai@apollo.hp.com> 1997-08-19
# Rewritten by Michael Chastain <mec.gnu@mindspring.com> 2004-01-11

set vhn "\\$\[0-9\]+"

if { [skip_cplus_tests] } { continue }


standard_testfile .cc

if [get_compiler_info "c++"] {
    return -1
}

if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
    return -1
}

if ![runto_main] then {
    perror "couldn't run to breakpoint"
    continue
}

gdb_breakpoint [gdb_get_line_number "Breakpoint 1 here"]
gdb_continue_to_breakpoint "continue to pmi = NULL"

# ======================
# pointer to member data
# ======================

# ptype on pointer to data member

set name "ptype pmi (A::j)"
gdb_test_multiple "ptype pmi" $name {
    -re "type = int A::\\*\r\n$gdb_prompt $" {
	pass $name
    }
}

# print pointer to data member

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

# print dereferenced pointer to data member

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

# print dereferenced pointer to data member
# this time, dereferenced through a pointer

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

# set the pointer to a different data member

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

# print the pointer again

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

# print dereferenced pointer to data member again

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

# set the pointer to data member back to A::j

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

# print dereferenced pointer to data member yet again (extra check, why not)

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

# Set the data member pointed to.

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

# Now check that the data really was changed

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

# Double-check by printing a.

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
    }
    -re "$vhn = \{c = 120 'x', j = 33, jj = 1331, (static|static int) s = 10, Virtual table at $hex\}\r\n$gdb_prompt $" {
	pass $name
    }
    -re "$vhn = \{(_vptr.A|_vptr\\$) = ${hex}( <vtable for A.*>)?, 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
    }
}

# Set the data member pointed to, using ->*

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

# Check that the data really was changed

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

# Double-check by printing a.

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}( <vtable for A.*>), 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
    }
}

# ptype the dereferenced pointer to member.

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

# dereference the pointer to data member without any object
# this is not allowed: a pmi must be bound to an object to dereference

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

# dereference the pointer to data member without any object
# this is not allowed: a pmi must be bound to an object to dereference

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

# 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".

set name "print (int) pmi"
gdb_test_multiple "print (int) pmi" $name {
    -re "$vhn = (4|8|12)\r\n$gdb_prompt" {
	pass $name
    }
}

# Check "(int) pmi" explicitly for equality.

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

# Check pointers to data members, which are themselves pointers to
# functions.  These behave like data members, not like pointers to
# member functions.

gdb_test "ptype diamond_pfunc_ptr" \
    "type = int \\(\\*Diamond::\\*\\)\\(int\\)"

gdb_test "ptype diamond.*diamond_pfunc_ptr" \
    "type = int \\(\\*\\)\\(int\\)"

# This one is invalid; () binds more tightly than .*, so it tries to
# call the member pointer as a normal pointer-to-function.

gdb_test "print diamond.*diamond_pfunc_ptr (20)" \
    "Invalid data type for function to be called."

# With parentheses, it is valid.

gdb_test "print (diamond.*diamond_pfunc_ptr) (20)" \
    "$vhn = 39"

# Make sure that we do not interpret this as either a member pointer
# call or a member function call.

gdb_test "print diamond.func_ptr (20)" \
    "$vhn = 39"

# ==========================
# pointer to member function
# ==========================

# ptype a pointer to a method

set name "ptype pmf"
gdb_test_multiple "ptype pmf" $name {
    -re "type = int \\( ?A::\\*\\)\\(A \\*( const)?, int\\)\r\n$gdb_prompt $" {
	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
    }
}

# print a pointer to a method

set name "print pmf"
gdb_test_multiple "print pmf" $name {
    -re "$vhn = \\(int \\(A::\\*\\)\\(A \\*( const)?, int\\)\\) $hex <A::bar\\(int\\)>\r\n$gdb_prompt $" {
	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
    }
}

# ptype a pointer to a pointer to a method

set name "ptype pmf_p"
gdb_test_multiple "ptype pmf_p" $name {
    -re "type = int \\( ?A::\\*\\*\\)\\(A \\*( const)?, int\\)\r\n$gdb_prompt $" {
	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
    }
}

# print a pointer to a pointer to a method

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

# print dereferenced pointer to method

set name "print a.*pmf"
gdb_test_multiple "print a.*pmf" $name {
    -re "$vhn = {int \\(A \\*( const)?, int\\)} $hex <A::bar\\(int\\)>\r\n$gdb_prompt $" {
	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
    }
}

# print dereferenced pointer to method, using ->*

set name "print a_p->*pmf"
gdb_test_multiple "print a_p->*pmf" $name {
    -re "$vhn = {int \\(A \\*( const)?, int\\)} $hex <A::bar\\(int\\)>\r\n$gdb_prompt $" {
	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
    }
}

# set the pointer to data member

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

# dereference the pointer to data member without any object
# this is not allowed: a pmf must be bound to an object to dereference

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

# dereference the pointer to data member without any object
# this is not allowed: a pmf must be bound to an object to dereference

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

# Call a function through a pmf.

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

gdb_test "ptype a.*pmf" "type = int \\(A \\*( const)?, int\\)"
gdb_test "ptype (a.*pmf)(3)" "type = int"

# 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" \
    "$vhn = {int \\(Diamond \\*( const)?\\)} $hex <Base::get_x\\((void|)\\)>"
gdb_test "print diamond.*right_pmf" \
    "$vhn = {int \\(Diamond \\*( const)?\\)} $hex <Base::get_x\\((void|)\\)>"

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" \
    "$vhn = {int \\(Diamond \\*( const)?\\)} $hex <Left::vget\\((void|)\\)>"
gdb_test "print diamond.*right_vpmf" \
    "$vhn = {int \\(Diamond \\*( const)?\\)} $hex <Right::vget\\((void|)\\)>"

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"
gdb_test "print null_pmf = &A::foo" "$vhn = \\(int \\(A::\\*\\)\\(A \\*( const)?, int\\)\\) $hex <A::foo ?\\(int\\)>"
gdb_test "print null_pmf = 0" "$vhn = NULL"
