# Copyright 1998, 1999, 2003 Free Software Foundation, Inc.

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

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu
# Tests for pointer-to-member support
# Written by Satish Pai <pai@apollo.hp.com> 1997-08-19

# This file is part of the gdb testsuite


if $tracelevel then {
        strace $tracelevel
        }

if { [skip_cplus_tests] } { continue }

#
# test running programs
#

# Start with a fresh gdb
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir

set prms_id 0
set bug_id 0

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

# Create and source the file that provides information about the compiler
# used to compile the test case.

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

# Nearly all of these tests fail when compiled with G++, so just give up
# until GDB gets enhanced. -sts 1999-06-22

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

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
}

send_gdb "break 83\n"
gdb_expect {
   -re "Breakpoint \[0-9\]*.*line 83\\.\r\n$gdb_prompt $" {
      pass "set break at 83"
    }
    -re ".*$gdb_prompt $" { fail "set break at 83" }
    timeout { fail "(timeout) set break at 83" }
}

send_gdb "continue\n"
gdb_expect {
   -re "Continuing\\.\r\n\r\nBreakpoint.*at.*member-ptr\\.cc:83\r\n83\[ \t]*pmi = NULL;\r\n$gdb_prompt $" {
      pass "continue to 83"
    }
    -re ".*$gdb_prompt $" { fail "continue to 83" }
    timeout { fail "(timeout) continue to 83" }
}

# ptype on pointer to data member

send_gdb "ptype pmi\n"
gdb_expect {
   -re "type = int \\( A::\\*\\)\r\n$gdb_prompt $" {
      pass "ptype pmi"
    }
    -re ".*$gdb_prompt $" { fail "ptype pmi" }
    timeout { fail "(timeout) ptype pmi" }
}

# print pointer to data member

setup_xfail "hppa*-*-*" CLLbs16901
send_gdb "print pmi\n"
gdb_expect {
   -re "\\$\[0-9\]* = \\(int \\( A::\\*\\)\\) &A::j\r\n$gdb_prompt $" {
      pass "print pmi"
    }
    -re ".*$gdb_prompt $" { fail "print pmi" }
    timeout { fail "(timeout) print pmi" }
}


# print dereferenced pointer to data member

setup_xfail "hppa*-*-*" CLLbs16901
send_gdb "print a.*pmi\n"
gdb_expect {
   -re "\\$\[0-9\]* = 121\r\n$gdb_prompt $" {
      pass "print a.*pmi"
    }
    -re ".*$gdb_prompt $" { fail "print a.*pmi" }
    timeout { fail "(timeout) print a.*pmi" }
}

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

setup_xfail "hppa*-*-*" CLLbs16901
send_gdb "print a_p->*pmi\n"
gdb_expect {
   -re "\\$\[0-9\]* = 121\r\n$gdb_prompt $" {
      pass "print a->*pmi"
    }
    -re ".*$gdb_prompt $" { fail "print a->*pmi" }
    timeout { fail "(timeout) print a->*pmi" }
}


# set the pointer to data member

send_gdb "set var pmi = &A::jj\n"
gdb_expect {
   -re "$gdb_prompt $" {
      pass "set var (not really a pass)"
    }
    timeout { fail "(timeout) " }
}

# Now print the pointer again

send_gdb "print pmi\n"
gdb_expect {
   -re "\\$\[0-9\]* = \\(int \\( A::\\*\\)\\) &A::jj\r\n$gdb_prompt $" {
      pass "print pmi after setting"
    }
    -re ".*$gdb_prompt $" { fail "print pmi after setting" }
    timeout { fail "(timeout) print pmi after setting" }
}

# print dereferenced pointer to data member again

send_gdb "print a.*pmi\n"
gdb_expect {
   -re "\\$\[0-9\]* = 1331\r\n$gdb_prompt $" {
      pass "print a.*pmi after setting"
    }
    -re ".*$gdb_prompt $" { fail "print a.*pmi after setting" }
    timeout { fail "(timeout) print a.*pmi after setting" }
}

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

send_gdb "set var pmi = &A::j\n"
gdb_expect {
   -re "$gdb_prompt $" {
      pass "set var back to A::j (not really a pass)"
    }
    timeout { fail "(timeout) set var pmi" }
}

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

send_gdb "print a.*pmi\n"
gdb_expect {
   -re "\\$\[0-9\]* = 121\r\n$gdb_prompt $" {
      pass "print a.*pmi after resetting"
    }
    -re ".*$gdb_prompt $" { fail "print a.*pmi after resetting" }
    timeout { fail "(timeout) print a.*pmi after resetting" }
}

# Set the data member pointed to.

send_gdb "print a.*pmi = 33\n"
gdb_expect {
   -re "\\$\[0-9\]* = 33\r\n$gdb_prompt $" {
      pass "print command to set"
    }
    -re ".*$gdb_prompt $" { fail "print command to set" }
    timeout { fail "(timeout) print command to set" }
}

# Now check that the data really was changed
send_gdb "print a.*pmi\n"
gdb_expect {
   -re "\\$\[0-9\]* = 33\r\n$gdb_prompt $" {
      pass "print a.*pmi after setting member pointed to"
    }
    -re ".*$gdb_prompt $" { fail "print a.*pmi after setting member pointed to" }
    timeout { fail "(timeout) print a.*pmi after setting member pointed to" }
}

# Double-check by printing a.
setup_xfail "hppa*-*-*" CLLbs16901
send_gdb "print a\n"
gdb_expect {
   -re "\\$\[0-9\]* = \{c = 120 'x', j = 33, jj = 1331, static s = 10, Virtual table at $hex\}\r\n$gdb_prompt $" {
      pass "print a after setting member pointed to by pmi"
    }
    -re ".*$gdb_prompt $" { fail "print a after setting member pointed to by pmi" }
    timeout { fail "(timeout) print a after setting member pointed to by pmi" }
}


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

send_gdb "print a_p->*pmi = 44\n"
gdb_expect {
   -re "\\$\[0-9\]* = 44\r\n$gdb_prompt $" {
      pass "print command to set (->)"
    }
    -re ".*$gdb_prompt $" { fail "print command to set (->)" }
    timeout { fail "(timeout) print command to set (->)" }
}

# Now check that the data really was changed
send_gdb "print a_p->*pmi\n"
gdb_expect {
   -re "\\$\[0-9\]* = 44\r\n$gdb_prompt $" {
      pass "print a_p->*pmi after setting member pointed to"
    }
    -re ".*$gdb_prompt $" { fail "print a_p->*pmi after setting member pointed to" }
    timeout { fail "(timeout) print a_p->*pmi after setting member pointed to" }
}

# Double-check by printing a.
setup_xfail "hppa*-*-*" CLLbs16901
send_gdb "print a\n"
gdb_expect {
   -re "\\$\[0-9\]* = \{c = 120 'x', j = 44, jj = 1331, static s = 10, Virtual table at $hex\}\r\n$gdb_prompt $" {
      pass "print a after setting member pointed to by pmi (->) "
    }
    -re ".*$gdb_prompt $" { fail "print a after setting member pointed to by pmi (->) " }
    timeout { fail "(timeout) print a after setting member pointed to by pmi (->) " }
}


# Do a ptype on the dereferenced pointer to member
# pai/1997-08-20 Doesn't work

# send_gdb "ptype a.*pmi\n"
# gdb_expect {
#   -re "type = int\r\n$gdb_prompt $" {
#      pass "ptype a.*pmi"
#    }
#    -re ".*$gdb_prompt $" { fail "ptype a.*pmi" }
#    timeout { fail "(timeout) ptype a.*pmi" }
#}

# Try to dereference the pointer to data member without any object

send_gdb "print *pmi\n"
gdb_expect {
   -re "Attempt to dereference pointer to member without an object\r\n$gdb_prompt $" {
      pass "attempt to print ptr to member without object"
    }
    -re ".*$gdb_prompt $" { fail "attempt to print ptr to member without object" }
    timeout { fail "(timeout) attempt to print ptr to member without object" }
}

# Try to ptype a dereference of the pointer to data member without any object

send_gdb "ptype *pmi\n"
gdb_expect {
   -re "Attempt to dereference pointer to member without an object\r\n$gdb_prompt $" {
      pass "attempt to ptype ptr to member without object"
    }
    -re ".*$gdb_prompt $" { fail "attempt to ptype ptr to member without object" }
    timeout { fail "(timeout) attempt to ptype ptr to member without object" }
}

# Ptype a pointer to a method.

setup_xfail "hppa*-*-*" CLLbs16901
send_gdb "ptype pmf\n"
gdb_expect {
   -re "type = int \\( A::\\*\\)\\(\\.\\.\\.\\)\r\n$gdb_prompt $" {
      pass "ptype pmf"
    }
    -re ".*$gdb_prompt $" { fail "ptype pmf" }
    timeout { fail "(timeout) ptype pmf" }
}

# print a pointer to a method

setup_xfail "hppa*-*-*" CLLbs16901
send_gdb "print pmf\n"
gdb_expect {
   -re "\\$\[0-9\]* = \\(int \\( A::\\*\\)\\(\\.\\.\\.\\)\\) \\?\\? <not supported with HP aCC>\r\n$gdb_prompt $" {
      pass "print pmf"
    }
    -re ".*$gdb_prompt $" { fail "print pmf" }
    timeout { fail "(timeout) print pmf" }
}


# Ptype a pointer to a pointer to a method

setup_xfail "hppa*-*-*" CLLbs16901
send_gdb "ptype pmf_p\n"
gdb_expect {
   -re "type = int \\( A::\\*\\*\\)\\(\\.\\.\\.\\)\r\n$gdb_prompt $" {
      pass "ptype pmf_p"
    }
    -re ".*$gdb_prompt $" { fail "ptype pmf_p" }
    timeout { fail "(timeout) ptype pmf_p" }
}

# print a pointer to a pointer to a method

setup_xfail "hppa*-*-*" CLLbs16901
send_gdb "print pmf_p\n"
gdb_expect {
   -re "\\$\[0-9\]* = \\(int \\( A::\\*\\*\\)\\(\\.\\.\\.\\)\\) $hex\r\n$gdb_prompt $" {
      pass "print pmf_p"
    }
    -re ".*$gdb_prompt $" { fail "print pmf_p" }
    timeout { fail "(timeout) print pmf_p" }
}

# print dereferenced pointer to method

setup_xfail "hppa*-*-*" CLLbs16901
send_gdb "print a.*pmf\n"
gdb_expect {
   -re "Pointers to methods not supported with HP aCC\r\n$gdb_prompt $" {
      pass "print a.*pmf (known aCC limitation)"
    }
    -re ".*$gdb_prompt $" { fail "print a.*pmf" }
    timeout { fail "(timeout) print a.*pmf" }
}

# print dereferenced pointer to method, using ->*

setup_xfail "hppa*-*-*" CLLbs16901
send_gdb "print a_p->*pmf\n"
gdb_expect {
   -re "Pointers to methods not supported with HP aCC\r\n$gdb_prompt $" {
      pass "print a_p->*pmf (known aCC limitation)"
    }
    -re ".*$gdb_prompt $" { fail "print a_p->*pmf" }
    timeout { fail "(timeout) print a_p->*pmf" }
}

# set the pointer to data member

setup_xfail "hppa*-*-*"
send_gdb "set var pmf = &A::foo\n"
gdb_expect {
   -re "Assignment to pointers to methods not implemented with HP aCC\r\n$gdb_prompt $" {
      pass "set var pmf (known aCC limitation)"
    }
    -re ".*$gdb_prompt $" { fail "set var pmf" }
    timeout { fail "(timeout) set var pmf" }
}

# Try to dereference the pointer to method without any object

setup_xfail "hppa*-*-*" CLLbs16901
send_gdb "print *pmf\n"
gdb_expect {
   -re "Attempt to dereference pointer to member without an object\r\n$gdb_prompt $" {
      pass "attempt to print  ptr to method without object"
    }
    -re ".*$gdb_prompt $" { fail "attempt to print ptr to method without object" }
    timeout { fail "(timeout) attempt to print ptr to method without object" }
}

# Try to ptype a dereference of the pointer to method without any object

send_gdb "ptype *pmi\n"
gdb_expect {
   -re "Attempt to dereference pointer to member without an object\r\n$gdb_prompt $" {
      pass "attempt to ptype ptr to member without object"
    }
    -re ".*$gdb_prompt $" { fail "attempt to ptype ptr to member without object" }
    timeout { fail "(timeout) attempt to ptype ptr to member without object" }
}

# Check cast of pointer to member to integer
setup_xfail "hppa*-*-*" CLLbs16901
send_gdb "print (int) pmi\n"
gdb_expect {
   -re "\\$\[0-9\]* = 8\r\n$gdb_prompt $" {
      pass "casting pmi to int"
    }
    -re ".*$gdb_prompt $" { fail "casting pmi to int" }
    timeout { fail "(timeout) casting pmi to int" }
}

# Check cast of pointer to method to integer
setup_xfail "hppa*-*-*" CLLbs16901
send_gdb "print (int) pmf\n"
gdb_expect {
   -re "Pointers to methods not supported with HP aCC\r\n$gdb_prompt $" {
      pass "casting pmf to int (known aCC limitation)"
    }
    -re ".*$gdb_prompt $" { fail "casting pmf to int" }
    timeout { fail "(timeout) casting pmf to int" }
}

# Try to invoke a function through a pointer to data member
setup_xfail "hppa*-*-*" CLLbs16901
send_gdb "print (a.*pmi)(3)\n"
gdb_expect {
   -re "Not implemented: function invocation through pointer to method with HP aCC\r\n$gdb_prompt $" {
      pass "print (a.*pmi)(3) -- error message should be different"
    }
    -re ".*$gdb_prompt $" { fail "print (a.*pmi)(3)" }
    timeout { fail "(timeout) print (a.*pmi)(3)" }
}

# Try to invoke a function through a pointer to a method
setup_xfail "hppa*-*-*" CLLbs16901
send_gdb "print (a.*pmf)(3)\n"
gdb_expect {
   -re "Not implemented: function invocation through pointer to method with HP aCC\r\n$gdb_prompt $" {
      pass "print (a.*pmi)(3) -- known aCC limitation"
    }
    -re ".*$gdb_prompt $" { fail "print (a.*pmf)(3)" }
    timeout { fail "(timeout) print (a.*pmf)(3)" }
}


# Go past assignment of NULL to pmi
setup_xfail "hppa*-*-*" CLLbs16901
send_gdb "next\n"
gdb_expect {
   -re "\r\n85\[ \t\]*k = \\(a.\\*pmf\\)\\(3\\);\r\n$gdb_prompt $" {
      pass "next past 83"
    }
    -re ".*$gdb_prompt $" { fail "next past 83" }
    timeout { fail "(timeout) next past 83" }
}

#send_gdb "print pmi\n"
#gdb_expect {
#   -re "Attempted dereference of null pointer-to-member\r\n$gdb_prompt $" {
#      pass ""
#    }
#    -re ".*$gdb_prompt $" { fail "" }
#    timeout { fail "(timeout) " }
#}

# Dereference the null pointer to member
setup_xfail "hppa*-*-*" CLLbs16901
send_gdb "print a.*pmi\n"
gdb_expect {
   -re "Attempted dereference of null pointer-to-member\r\n$gdb_prompt $" {
      pass "print a.*NULL"
    }
    -re ".*$gdb_prompt $" { fail "print a.*NULL" }
    timeout { fail "(timeout) print a.*NULL" }
}


# Go to another part of the program
send_gdb "break 91\n"
gdb_expect {
   -re "Breakpoint \[0-9\]*.*line 91\\.\r\n$gdb_prompt $" {
      pass "set break at 91"
    }
    -re ".*$gdb_prompt $" { fail "set break at 91" }
    timeout { fail "(timeout) set break at 91" }
}

setup_xfail "hppa*-*-*" CLLbs16901
send_gdb "continue\n"
gdb_expect {
   -re "Continuing\\.\r\n\r\nBreakpoint.*at.*member-ptr\\.cc:91\r\n91\[ \t]*k = \\(a.\\*pmf\\)\\(4\\);\r\n$gdb_prompt $" {
      pass "continue to 91"
    }
    -re ".*$gdb_prompt $" { fail "continue to 91" }
    timeout { fail "(timeout) continue to 91" }
}


# Now check again that pmi works even when not set to
# something that's at the beginning of the object

setup_xfail "hppa*-*-*" CLLbs16901
send_gdb "print pmi\n"
gdb_expect {
   -re "\\$\[0-9\]* = \\(int \\( A::\\*\\)\\) &A::jj\r\n$gdb_prompt $" {
      pass "print pmi (2)"
    }
    -re ".*$gdb_prompt $" { fail "print pmi (2)" }
    timeout { fail "(timeout) print pmi (2)" }
}


# print dereferenced pointer to data member

setup_xfail "hppa*-*-*" CLLbs16901
send_gdb "print a.*pmi\n"
gdb_expect {
   -re "\\$\[0-9\]* = 1331\r\n$gdb_prompt $" {
      pass "print a.*pmi (2)"
    }
    -re ".*$gdb_prompt $" { fail "print a.*pmi (2)" }
    timeout { fail "(timeout) print a.*pmi (2)" }
}

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

setup_xfail "hppa*-*-*" CLLbs16901
send_gdb "print a_p->*pmi\n"
gdb_expect {
   -re "\\$\[0-9\]* = 1331\r\n$gdb_prompt $" {
      pass "print a->*pmi"
    }
    -re ".*$gdb_prompt $" { fail "print a->*pmi (2)" }
    timeout { fail "(timeout) print a->*pmi (2)" }
}


# p a.*pmf - fail

# p pmi

# p a.*pmi

