# Copyright 1992-2023 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)

require allow_cplus_tests

standard_testfile .cc

if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} {
    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*"

# Some other vagaries of GDB's type printing machinery.  The integer types
# may have unsigned before or after their length, and may have "int"
# appended.  The char* conversion operator may have name "char*" even if
# the type is "char *", because the name comes from the debug information
# and the type from GDB.  Function types may not see through typedefs.

set dm_type_short		"short"
set dm_type_long		"long"
set dm_type_unsigned_short	"unsigned short"
set dm_type_unsigned_long	"unsigned long"
set dm_operator_char_star	"char*"
set dm_operator_char_star_quoted	"char\\*"
set dm_type_typedef		0

proc probe_demangler { } {
    global gdb_prompt
    global dm_operator_comma
    global dm_operator_char_star
    global dm_operator_char_star_quoted
    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
    global dm_type_short
    global dm_type_unsigned_short
    global dm_type_long
    global dm_type_unsigned_long
    global dm_type_typedef

    gdb_test_multiple "print &foo::operator,(foo&)" \
	"detect dm_operator_comma" {
	    -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"
	    }
	}

    gdb_test_multiple "print &foo::operator char*($dm_type_void)" \
	"detect dm_operator_char_star" {
	    -re ".*foo::operator char \\*\\(void\\).*\r\n$gdb_prompt $" {
		# v2 demangler or GDB type printer
		set dm_operator_char_star "char *"
		set dm_operator_char_star_quoted "char \\*"
		pass "detect dm_operator_char_star"
	    }
	    -re ".*foo::operator char\\*\\(\\).*\r\n$gdb_prompt $" {
		# v3 demangler
		pass "detect dm_operator_char_star"
	    }
	}

    gdb_test_multiple "print &dm_type_char_star" \
	"detect dm_type_char_star" {
	    -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"
	    }
	}

    gdb_test_multiple "print &dm_type_foo_ref" \
	"detect dm_type_foo_ref" {
	    -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"
	    }
	}

    gdb_test_multiple "print &dm_type_int_star" \
	"detect dm_type_int_star" {
	    -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"
	    }
	}

    gdb_test_multiple "print &dm_type_long_star" \
	"detect dm_type_long_star" {
	    -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 ".*dm_type_long_star\\(long int \\*\\).*\r\n$gdb_prompt $" {
		# GCC v3 and GDB's type printer
		set dm_type_long_star "long int *"
		pass "detect dm_type_long_star"
	    }
	}

    gdb_test_multiple "print &dm_type_unsigned_int" \
	"detect dm_type_unsigned_int" {
	    -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"
	    }
	}

    gdb_test_multiple "print &dm_type_void" \
	"detect dm_type_void" {
	    -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"
	    }
	}

    gdb_test_multiple "print &dm_type_void_star" \
	"detect dm_type_void_star" {
	    -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"
	    }
	}

    gdb_test_multiple "print &dm_type_short" \
	"detect dm_type_short" {
	    -re ".*dm_type_short\\(short\\).*\r\n$gdb_prompt $" {
		# v2 and v3 demanglers
		pass "detect dm_type_short"
	    }
	    -re ".*dm_type_short\\(short int\\).*\r\n$gdb_prompt $" {
		# GDB type printer
		set dm_type_short "short int"
		pass "detect dm_type_short"
	    }
	}

    gdb_test_multiple "print &dm_type_unsigned_short" \
	"detect dm_type_unsigned_short" {
	    -re ".*dm_type_unsigned_short\\(unsigned short\\).*\r\n$gdb_prompt $" {
		# v2 and v3 demanglers
		pass "detect dm_type_unsigned_short"
	    }
	    -re ".*dm_type_unsigned_short\\(short unsigned int\\).*\r\n$gdb_prompt $" {
		# GDB type printer
		set dm_type_unsigned_short "short unsigned int"
		pass "detect dm_type_unsigned_short"
	    }
	}

    gdb_test_multiple "print &dm_type_long" \
	"detect dm_type_long" {
	    -re ".*dm_type_long\\(long\\).*\r\n$gdb_prompt $" {
		# v2 and v3 demanglers
		pass "detect dm_type_long"
	    }
	    -re ".*dm_type_long\\(long int\\).*\r\n$gdb_prompt $" {
		# GDB type printer
		set dm_type_long "long int"
		pass "detect dm_type_long"
	    }
	}

    gdb_test_multiple "print &dm_type_unsigned_long" \
	"detect dm_type_unsigned_long" {
	    -re ".*dm_type_unsigned_long\\(unsigned long\\).*\r\n$gdb_prompt $" {
		# v2 and v3 demanglers
		pass "detect dm_type_unsigned_long"
	    }
	    -re ".*dm_type_unsigned_long\\(long unsigned int\\).*\r\n$gdb_prompt $" {
		# GDB type printer
		set dm_type_unsigned_long "long unsigned int"
		pass "detect dm_type_unsigned_long"
	    }
	}

    gdb_test_multiple "print &dm_type_typedef" \
	"detect dm_type_typedef" {
	    -re ".*dm_type_typedef\\(int\\).*\r\n$gdb_prompt $" {
		# v2 and v3 demanglers
		pass "detect dm_type_typedef"
	    }
	    -re ".*dm_type_typedef\\(myint\\).*\r\n$gdb_prompt $" {
		# GDB type printer
		set dm_type_typedef 1
		pass "detect dm_type_typedef"
	    }
	}
}

#
#  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 srcfile decimal

    regsub {\\\(void\\\)} $demangled {\(\)} demangled

    set file_re "File .*[string_to_regexp $srcfile]:"

    gdb_test_lines "info function $name" "info function for \"$name\"" \
	[multi_line \
	     "$file_re" \
	     "$decimal:\t(class|)${demangled}.*"]
}

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

    gdb_test "print &$name" \
	".* = .* $hex <$good_pattern>"
}

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

    gdb_test_multiple "print &$name" "print &$name" {
	-re ".* = .* $hex <$good_pattern>\r\n$gdb_prompt $" {
	    pass "print &$name"
	}
	-re ".* = .* $hex <$bad_pattern>\r\n$gdb_prompt $" {
	    kfail $bugid "print &$name"
	}
    }
}

#
#  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_operator_char_star
    global dm_type_char_star
    global dm_operator_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_operator_char_star_quoted\(" \
				"char *foo::operator $dm_operator_char_star\($dm_type_void);"

}


proc test_paddr_operator_functions {} {
    global hex
    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
    global dm_operator_char_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)>"    

    print_addr "foo::operator delete($dm_type_void_star)"
    print_addr "foo::operator delete\[\]($dm_type_void_star)"

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

#
# Test overloaded functions (1 arg).
#

proc test_paddr_overloaded_functions {} {
    global dm_type_unsigned_int
    global dm_type_void
    global dm_type_short
    global dm_type_unsigned_short
    global dm_type_long
    global dm_type_unsigned_long

    print_addr "overload1arg($dm_type_void)"
    print_addr "overload1arg(char)"
    print_addr "overload1arg(signed char)"
    print_addr "overload1arg(unsigned char)"
    print_addr "overload1arg($dm_type_short)"
    print_addr "overload1arg($dm_type_unsigned_short)"
    print_addr "overload1arg(int)"
    print_addr "overload1arg($dm_type_unsigned_int)"
    print_addr "overload1arg($dm_type_long)"
    print_addr "overload1arg($dm_type_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
    global dm_type_typedef

    print_addr_2 "hairyfunc1" "hairyfunc1(int)"

    if {$dm_type_typedef == 0} {
	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"
    } else {
	print_addr_2 "hairyfunc2" "hairyfunc2(PFPc_i)"
	print_addr_2 "hairyfunc3" "hairyfunc3(PFPFPl_s_i)"
	print_addr_2 "hairyfunc4" "hairyfunc4(PFPFPc_s_i)"

	# gdb-gnats bug gdb/19:
	# "gdb v3 demangler fails on hairyfunc5 hairyfunc6 hairyfunc7"
	print_addr_2 "hairyfunc5" "hairyfunc5(PFPc_PFl_i)"
	print_addr_2 "hairyfunc6" "hairyfunc6(PFPi_PFl_i)"
	print_addr_2 "hairyfunc7" "hairyfunc7(PFPFPc_i_PFl_i)"
    }
}

proc do_tests {} {
    global binfile
    global dm_type_int_star

    gdb_test_no_output "set width 0"

    runto_main

    gdb_test_no_output "set language c++"
    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" \
	"Function \"foo::operator [string_to_regexp $dm_type_int_star]\" not defined\\."
}

do_tests
