# Copyright 1992, 1997, 1999, 2001, 2002, 2003, 2004, 2007, 2008, 2009, 2010
# 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 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/>.

# This file was written by Fred Fish. (fnf@cygnus.com)
# Adapted for g++ 3.0 ABI by Michael Chastain. (chastain@redhat.com)

if $tracelevel then {
	strace $tracelevel
}

if { [skip_cplus_tests] } { continue }

set testfile "cplusfuncs"
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++}] != "" } {
     untested cplusfuncs.exp
     return -1
}

#
# g++ changed its ABI between 2.95 and 3.0.  gdb has two demanglers
# for the two different styles.  The two demanglers have some subtle
# discrepancies in their output.
#
#   old demangler         new demangler
#   --- ---------         --- ---------
#   "operator, "          "operator,"
#   "char *"              "char*"
#   "int *"               "int*"
#   "long *"              "long*"
#   "void *"              "void*"
#   "foo &"               "foo&"
#   "unsigned int"        "unsigned"
#   "void"                ""
#
# I probe for the forms in use.
# The defaults are for the v3 demangler (as of 2001-02-13).
#

set dm_operator_comma		","
set dm_type_char_star		"char*"
set dm_type_char_star_quoted    "char\\*"
set dm_type_foo_ref 		"foo&"
set dm_type_int_star		"int*"
set dm_type_long_star		"long*"
set dm_type_unsigned_int	"unsigned"
set dm_type_void		"void"
set dm_type_void_star		"void*"

proc probe_demangler { } {
    global gdb_prompt
    global dm_operator_comma
    global dm_type_char_star
    global dm_type_char_star_quoted
    global dm_type_foo_ref
    global dm_type_int_star
    global dm_type_long_star
    global dm_type_unsigned_int
    global dm_type_void
    global dm_type_void_star

    send_gdb "print &foo::operator,(foo&)\n"
    gdb_expect {
	-re ".*foo::operator, \\(.*foo.*&.*\\).*\r\n$gdb_prompt $" {
	    # v2 demangler
	    set dm_operator_comma ", "
	    pass "detect dm_operator_comma"
	}
	-re ".*foo::operator,\\(.*foo.*&.*\\).*\r\n$gdb_prompt $" {
	    # v3 demangler
	    pass "detect dm_operator_comma"
	}
	-re ".*$gdb_prompt $" {
	    fail "detect dm_operator_comma"
	}
	timeout {
	    fail "detect dm_operator_comma"
	}
    }

    send_gdb "print &dm_type_char_star\n"
    gdb_expect {
	-re ".*dm_type_char_star\\(char \\*\\).*\r\n$gdb_prompt $" {
	    # v2 demangler
	    set dm_type_char_star "char *"
	    set dm_type_char_star_quoted "char \\*"
	    pass "detect dm_type_char_star"
	}
	-re ".*dm_type_char_star\\(char\\*\\).*\r\n$gdb_prompt $" {
	    # v3 demangler
	    pass "detect dm_type_char_star"
	}
	-re ".*$gdb_prompt $" {
	    fail "detect dm_type_char_star"
	}
	timeout {
	    fail "detect dm_type_char_star (timeout)"
	}
    }

    send_gdb "print &dm_type_foo_ref\n"
    gdb_expect {
	-re ".*dm_type_foo_ref\\(foo &\\).*\r\n$gdb_prompt $" {
	    # v2 demangler
	    set dm_type_foo_ref "foo &"
	    pass "detect dm_type_foo_ref"
	}
	-re ".*dm_type_foo_ref\\(foo&\\).*\r\n$gdb_prompt $" {
	    # v3 demangler
	    pass "detect dm_type_foo_ref"
	}
	-re ".*$gdb_prompt $" {
	    fail "detect dm_type_foo_ref"
	}
	timeout {
	    fail "detect dm_type_foo_ref (timeout)"
	}
    }

    send_gdb "print &dm_type_int_star\n"
    gdb_expect {
	-re ".*dm_type_int_star\\(int \\*\\).*\r\n$gdb_prompt $" {
	    # v2 demangler
	    set dm_type_int_star "int *"
	    pass "detect dm_type_int_star"
	}
	-re ".*dm_type_int_star\\(int\\*\\).*\r\n$gdb_prompt $" {
	    # v3 demangler
	    pass "detect dm_type_int_star"
	}
	-re ".*$gdb_prompt $" {
	    fail "detect dm_type_int_star"
	}
	timeout {
	    fail "detect dm_type_int_star (timeout)"
	}
    }

    send_gdb "print &dm_type_long_star\n"
    gdb_expect {
	-re ".*dm_type_long_star\\(long \\*\\).*\r\n$gdb_prompt $" {
	    # v2 demangler
	    set dm_type_long_star "long *"
	    pass "detect dm_type_long_star"
	}
	-re ".*dm_type_long_star\\(long\\*\\).*\r\n$gdb_prompt $" {
	    # v3 demangler
	    pass "detect dm_type_long_star"
	}
	-re ".*$gdb_prompt $" {
	    fail "detect dm_type_long_star"
	}
	timeout {
	    fail "detect dm_type_long_star (timeout)"
	}
    }

    send_gdb "print &dm_type_unsigned_int\n"
    gdb_expect {
	-re ".*dm_type_unsigned_int\\(unsigned int\\).*\r\n$gdb_prompt $" {
	    # v2 demangler
	    set dm_type_unsigned_int "unsigned int"
	    pass "detect dm_type_unsigned_int"
	}
	-re ".*dm_type_unsigned_int\\(unsigned\\).*\r\n$gdb_prompt $" {
	    # v3 demangler
	    pass "detect dm_type_unsigned_int"
	}
	-re ".*$gdb_prompt $" {
	    fail "detect dm_type_unsigned_int"
	}
	timeout {
	    fail "detect dm_unsigned int (timeout)"
	}
    }

    send_gdb "print &dm_type_void\n"
    gdb_expect {
	-re ".*dm_type_void\\(void\\).*\r\n$gdb_prompt $" {
	    # v2 demangler
	    set dm_type_void "void"
	    pass "detect dm_type_void"
	}
	-re ".*dm_type_void\\(\\).*\r\n$gdb_prompt $" {
	    # v3 demangler
	    pass "detect dm_type_void"
	}
	-re ".*$gdb_prompt $" {
	    fail "detect dm_type_void"
	}
	timeout {
	    fail "detect dm_type_void (timeout)"
	}
    }

    send_gdb "print &dm_type_void_star\n"
    gdb_expect {
	-re ".*dm_type_void_star\\(void \\*\\).*\r\n$gdb_prompt $" {
	    # v2 demangler
	    set dm_type_void_star "void *"
	    pass "detect dm_type_void_star"
	}
	-re ".*dm_type_void_star\\(void\\*\\).*\r\n$gdb_prompt $" {
	    # v3 demangler
	    pass "detect dm_type_void_star"
	}
	-re ".*$gdb_prompt $" {
	    fail "detect dm_type_void_star"
	}
	timeout {
	    fail "detect dm_type_void_star (timeout)"
	}
    }
}

#
#  Lookup a specific C++ function and print the demangled type.
#  This form accepts the demangled type as a regexp.
#

proc info_func_regexp { name demangled } {
    global gdb_prompt

    send_gdb "info function $name\n"
    regsub {\\\(void\\\)} $demangled {\(\)} demangled
    gdb_expect {
	-re ".*File .*:\r\n(class |)$demangled\r\n.*$gdb_prompt $" {
	    pass "info function for \"$name\""
	}
	-re ".*$gdb_prompt $" {
	    fail "info function for \"$name\""
	}
	timeout {
	    fail "info function for \"$name\" (timeout)"
	}
    }
}

#
#  Lookup a specific C++ function and print the demangled type.
#  This form accepts the demangled type as a literal string.
#

proc info_func { name demangled } {
    info_func_regexp "$name" [string_to_regexp "$demangled"]
}

#
# Print the address of a function.
# This checks that I can lookup a fully qualified C++ function.
# This also checks the argument types on the return string.

# Note: carlton/2003-01-16: If you modify this, make a corresponding
# modification to print_addr_2_kfail.

proc print_addr_2 { name good } {
    global gdb_prompt
    global hex

    set good_pattern [string_to_regexp $good]

    send_gdb "print &$name\n"
    gdb_expect {
	-re ".* = .* $hex <$good_pattern>\r\n$gdb_prompt $" {
	    pass "print &$name"
	}
	-re ".*$gdb_prompt $" {
	    fail "print &$name"
	}
	timeout {
	    fail "print &$name (timeout)"
	}
    }
}

# NOTE: carlton/2003-01-16: hairyfunc5-6 fail on GCC 3.x (for at least
# x=1 and x=2.1).  So I'm modifying print_addr_2 to accept a failure
# condition.  FIXME: It would be nice if the failure condition were
# conditional on the compiler version, but I'm not sufficiently
# motivated.  I did hardwire in the versions of char * and int *,
# which will give some compiler-specificity to the failure.

proc print_addr_2_kfail { name good bad bugid } {
    global gdb_prompt
    global hex

    set good_pattern [string_to_regexp $good]
    set bad_pattern [string_to_regexp $bad]

    send_gdb "print &$name\n"
    gdb_expect {
	-re ".* = .* $hex <$good_pattern>\r\n$gdb_prompt $" {
	    pass "print &$name"
	}
	-re ".* = .* $hex <$bad_pattern>\r\n$gdb_prompt $" {
	    kfail $bugid "print &$name"
	}
	-re ".*$gdb_prompt $" {
	    fail "print &$name"
	}
	timeout {
	    fail "print &$name (timeout)"
	}
    }
}

#
#  Simple interfaces to print_addr_2.
#

proc print_addr { name } {
    regsub {\(void\)} $name {()} expected
    if {[string first "::" $name] == -1} {
	# C function -- must be qutoed
	set name "'$name'"
    }
    print_addr_2 "$name" $expected
}

#
# Test name demangling for operators.
#
# The '(' at the end of each regex input pattern is so that we match only
# the one we are looking for.  I.E. "operator&" would match both
# "operator&(foo &)" and "operator&&(foo &)".
#
# gdb-gnats bug gdb/18:
#  "gdb can't parse "info func operator*" or "info func operator\*".
#  The star in "operator*" is interpreted as a regexp, but the "\*"
#  in  "operator\*" is not a legal operator.
#

proc test_lookup_operator_functions {} {
    global dm_operator_comma
    global dm_type_char_star
    global dm_type_char_star_quoted
    global dm_type_foo_ref
    global dm_type_void
    global dm_type_void_star

    # operator* requires quoting so that GDB does not treat it as a regexp.
    info_func "operator\\*("	"void foo::operator*($dm_type_foo_ref);"
    info_func "operator%("	"void foo::operator%($dm_type_foo_ref);"
    info_func "operator-("	"void foo::operator-($dm_type_foo_ref);"
    info_func "operator>>("	"void foo::operator>>($dm_type_foo_ref);"
    info_func "operator!=("	"void foo::operator!=($dm_type_foo_ref);"
    info_func "operator>("	"void foo::operator>($dm_type_foo_ref);"
    info_func "operator>=("	"void foo::operator>=($dm_type_foo_ref);"
    info_func "operator|("	"void foo::operator|($dm_type_foo_ref);"
    info_func "operator&&("	"void foo::operator&&($dm_type_foo_ref);"
    info_func "operator!("	"void foo::operator!($dm_type_void);"
    info_func "operator++("	"void foo::operator++(int);"
    info_func "operator=("	"void foo::operator=($dm_type_foo_ref);"
    info_func "operator+=("	"void foo::operator+=($dm_type_foo_ref);"
    # operator*= requires quoting so that GDB does not treat it as a regexp.
    info_func "operator\\*=("	"void foo::operator*=($dm_type_foo_ref);"
    info_func "operator%=("	"void foo::operator%=($dm_type_foo_ref);"
    info_func "operator>>=("	"void foo::operator>>=($dm_type_foo_ref);"
    info_func "operator|=("	"void foo::operator|=($dm_type_foo_ref);"
    info_func "operator$dm_operator_comma\("	\
    				"void foo::operator$dm_operator_comma\($dm_type_foo_ref);"
    info_func "operator/("	"void foo::operator/($dm_type_foo_ref);"
    info_func "operator+("	"void foo::operator+($dm_type_foo_ref);"
    info_func "operator<<("	"void foo::operator<<($dm_type_foo_ref);"
    info_func "operator==("	"void foo::operator==($dm_type_foo_ref);"
    info_func "operator<("	"void foo::operator<($dm_type_foo_ref);"
    info_func "operator<=("	"void foo::operator<=($dm_type_foo_ref);"
    info_func "operator&("	"void foo::operator&($dm_type_foo_ref);"
    info_func "operator^("	"void foo::operator^($dm_type_foo_ref);"
    info_func "operator||("	"void foo::operator||($dm_type_foo_ref);"
    info_func "operator~("	"void foo::operator~($dm_type_void);"
    info_func "operator--("	"void foo::operator--(int);"
    info_func "operator->("	"foo *foo::operator->($dm_type_void);"
    info_func "operator-=("	"void foo::operator-=($dm_type_foo_ref);"
    info_func "operator/=("	"void foo::operator/=($dm_type_foo_ref);"
    info_func "operator<<=("	"void foo::operator<<=($dm_type_foo_ref);"
    info_func "operator&=("	"void foo::operator&=($dm_type_foo_ref);"
    info_func "operator^=("	"void foo::operator^=($dm_type_foo_ref);"
    # operator->* requires quoting so that GDB does not treat it as a regexp.
    info_func "operator->\\*("	"void foo::operator->*($dm_type_foo_ref);"

    # operator[] needs double backslashes, so that a single backslash
    # will be sent to GDB, preventing the square brackets from being
    # evaluated as a regular expression. 
    info_func "operator\\\[\\\](" "void foo::operator\[\]($dm_type_foo_ref);"

    # These are gnarly because they might end with 'static'.
    set dm_type_void_star_regexp [string_to_regexp $dm_type_void_star]
    info_func_regexp "operator new("     "void \\*foo::operator new\\(.*\\)(| static);"
    info_func_regexp "operator delete("  "void foo::operator delete\\($dm_type_void_star_regexp\\)(| static);"

    info_func "operator int("	"int foo::operator int($dm_type_void);"
    info_func "operator()("	"void foo::operator()($dm_type_foo_ref);"
    info_func "operator $dm_type_char_star_quoted\(" \
				"char *foo::operator $dm_type_char_star\($dm_type_void);"

}


proc test_paddr_operator_functions {} {
    global hex
    global hp_aCC_compiler
    global dm_operator_comma
    global dm_type_char_star
    global dm_type_foo_ref
    global dm_type_long_star
    global dm_type_unsigned_int
    global dm_type_void
    global dm_type_void_star

    print_addr "foo::operator*($dm_type_foo_ref)"
    print_addr "foo::operator%($dm_type_foo_ref)"
    print_addr "foo::operator-($dm_type_foo_ref)"
    print_addr "foo::operator>>($dm_type_foo_ref)"
    print_addr "foo::operator!=($dm_type_foo_ref)"
    print_addr "foo::operator>($dm_type_foo_ref)"
    print_addr "foo::operator>=($dm_type_foo_ref)"
    print_addr "foo::operator|($dm_type_foo_ref)"
    print_addr "foo::operator&&($dm_type_foo_ref)"
    print_addr "foo::operator!($dm_type_void)"
    print_addr "foo::operator++(int)"
    print_addr "foo::operator=($dm_type_foo_ref)"
    print_addr "foo::operator+=($dm_type_foo_ref)"
    print_addr "foo::operator*=($dm_type_foo_ref)"
    print_addr "foo::operator%=($dm_type_foo_ref)"
    print_addr "foo::operator>>=($dm_type_foo_ref)"
    print_addr "foo::operator|=($dm_type_foo_ref)"
    print_addr "foo::operator$dm_operator_comma\($dm_type_foo_ref)"
    print_addr "foo::operator/($dm_type_foo_ref)"
    print_addr "foo::operator+($dm_type_foo_ref)"
    print_addr "foo::operator<<($dm_type_foo_ref)"
    print_addr "foo::operator==($dm_type_foo_ref)"
    print_addr "foo::operator<($dm_type_foo_ref)"
    print_addr "foo::operator<=($dm_type_foo_ref)"
    print_addr "foo::operator&($dm_type_foo_ref)"
    print_addr "foo::operator^($dm_type_foo_ref)"
    print_addr "foo::operator||($dm_type_foo_ref)"
    print_addr "foo::operator~($dm_type_void)"
    print_addr "foo::operator--(int)"
    print_addr "foo::operator->($dm_type_void)"
    print_addr "foo::operator-=($dm_type_foo_ref)"
    print_addr "foo::operator/=($dm_type_foo_ref)"
    print_addr "foo::operator<<=($dm_type_foo_ref)"
    print_addr "foo::operator&=($dm_type_foo_ref)"
    print_addr "foo::operator^=($dm_type_foo_ref)"
    print_addr "foo::operator->*($dm_type_foo_ref)"
    print_addr "foo::operator\[\]($dm_type_foo_ref)"
    print_addr "foo::operator()($dm_type_foo_ref)"

    gdb_test "print &foo::operator new" \
	" = .* $hex <foo::operator new\\(.*\\)(| static)>"
    gdb_test "print &foo::operator new\[\]" \
	" = .* $hex <foo::operator new\\\[\\\]\\(.*\\)(| static)>"    
    if { !$hp_aCC_compiler } {
	print_addr "foo::operator delete($dm_type_void_star)"
	print_addr "foo::operator delete[]($dm_type_void_star)"
    } else {
	gdb_test "print &'foo::operator delete($dm_type_void_star) static'" \
	    " = .*(0x\[0-9a-f\]+|) <foo::operator delete.*>"
    }

    print_addr "foo::operator int($dm_type_void)"
    print_addr "foo::operator $dm_type_char_star\($dm_type_void)"
}

#
# Test overloaded functions (1 arg).
#

proc test_paddr_overloaded_functions {} {
    global dm_type_unsigned_int
    global dm_type_void

    print_addr "overload1arg($dm_type_void)"
    print_addr "overload1arg(char)"
    print_addr "overload1arg(signed char)"
    print_addr "overload1arg(unsigned char)"
    print_addr "overload1arg(short)"
    print_addr "overload1arg(unsigned short)"
    print_addr "overload1arg(int)"
    print_addr "overload1arg($dm_type_unsigned_int)"
    print_addr "overload1arg(long)"
    print_addr "overload1arg(unsigned long)"
    print_addr "overload1arg(float)"
    print_addr "overload1arg(double)"

    print_addr "overloadargs(int)"
    print_addr "overloadargs(int, int)"
    print_addr "overloadargs(int, int, int)"
    print_addr "overloadargs(int, int, int, int)"
    print_addr "overloadargs(int, int, int, int, int)"
    print_addr "overloadargs(int, int, int, int, int, int)"
    print_addr "overloadargs(int, int, int, int, int, int, int)"
    print_addr "overloadargs(int, int, int, int, int, int, int, int)"
    print_addr "overloadargs(int, int, int, int, int, int, int, int, int)"
    print_addr "overloadargs(int, int, int, int, int, int, int, int, int, int)"
    print_addr "overloadargs(int, int, int, int, int, int, int, int, int, int, int)"
}

proc test_paddr_hairy_functions {} {
    global gdb_prompt
    global hex
    global dm_type_char_star
    global dm_type_int_star
    global dm_type_long_star

    print_addr_2 "hairyfunc1" "hairyfunc1(int)"
    print_addr_2 "hairyfunc2" "hairyfunc2(int (*)($dm_type_char_star))"
    print_addr_2 "hairyfunc3" "hairyfunc3(int (*)(short (*)($dm_type_long_star)))"
    print_addr_2 "hairyfunc4" "hairyfunc4(int (*)(short (*)($dm_type_char_star)))"

    # gdb-gnats bug gdb/19:
    # "gdb v3 demangler fails on hairyfunc5 hairyfunc6 hairyfunc7"
    print_addr_2_kfail "hairyfunc5" "hairyfunc5(int (*(*)($dm_type_char_star))(long))" "hairyfunc5(int (*)(long) (*)(char*))" "gdb/19"
    print_addr_2_kfail "hairyfunc6" "hairyfunc6(int (*(*)($dm_type_int_star))(long))" "hairyfunc6(int (*)(long) (*)(int*))" "gdb/19"
    print_addr_2_kfail "hairyfunc7" "hairyfunc7(int (*(*)(int (*)($dm_type_char_star)))(long))" "hairyfunc7(int (*)(long) (*)(int (*)(char*)))" "gdb/19"
}

proc do_tests {} {
    global prms_id
    global bug_id
    global subdir
    global objdir
    global srcdir
    global binfile
    global gdb_prompt
    global dm_type_int_star

    set prms_id 0
    set bug_id 0

    # Start with a fresh gdb.

    gdb_exit
    gdb_start
    gdb_reinitialize_dir $srcdir/$subdir
    gdb_load $binfile

    send_gdb "set language c++\n"
    gdb_expect -re "$gdb_prompt $"
    send_gdb "set width 0\n"
    gdb_expect -re "$gdb_prompt $"

    runto_main

    probe_demangler
    test_paddr_overloaded_functions
    test_paddr_operator_functions
    test_paddr_hairy_functions
    test_lookup_operator_functions

    # A regression test on errors involving operators
    gdb_test "list foo::operator $dm_type_int_star" \
	".*the class foo does not have any method named operator $dm_type_int_star.*"
}

do_tests
