# Copyright 1998, 1999, 2003, 2004 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 2 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  

# 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

# TODO: copyright notice for member-ptr.cc

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

if $tracelevel then {
    strace $tracelevel
}

if { [skip_cplus_tests] } { continue }

set prms_id 0
set bug_id 0

set testfile "member-ptr"
set srcfile ${testfile}.cc
set binfile ${objdir}/${subdir}/${testfile}

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

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

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

gdb_breakpoint [gdb_get_line_number "pmi = NULL"]
gdb_continue_to_breakpoint "continue to pmi = NULL"

# gcc is not ready for production
# -- chastain 2004-01-12

if { [test_compiler_info "gcc-*"] } {
    continue
}

# ======================
# 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
    }
    -re "type = int *A::\r\n$gdb_prompt $" {
	# gcc HEAD 2004-01-10 -gdwarf-2
	# gcc HEAD 2004-01-10 -gstabs+
	kfail "gdb/NNNN" $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, 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, 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)\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
    }
}

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

# ptype a pointer to a method

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