# Copyright 2011-2021 Free Software Foundation, Inc.
#
# Contributed by Red Hat, originally written by Keith Seitz.
#
# 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 is part of the gdb testsuite.

if {[skip_cplus_tests]} { continue }

# Tests for c++/12273, breakpoint/12803
standard_testfile .cc

# Do NOT compile with debug flag.
if {[prepare_for_testing "failed to prepare" $testfile $srcfile {c++}]} {
    return -1
}

# Before setting the language, try to set a few simple breakpoints
set min_syms [list \
		  "GDB<int>::a() const" \
		  "GDB<int>::b() volatile" \
		  "GDB<int>::c() const volatile"]
foreach sym $min_syms {
    set tst "setting breakpoint at '$sym'"
    if {[gdb_breakpoint "'$sym'"]} {
	pass $tst
    }    
}


gdb_test_no_output "set language c++"

# A list of minimal symbol names to check.
# Note that GDB<char>::even_harder<int>(char) is quoted and includes
# the return type.  This is necessary because this is the demangled name
# of the minimal symbol.
set min_syms [list \
		  "GDB<int>::operator ==" \
		  "GDB<int>::operator==(GDB<int> const&)" \
		  "GDB<char>::harder(char)" \
		  "GDB<int>::harder(int)" \
		  {"int GDB<char>::even_harder<int>(char)"} \
		  "GDB<int>::simple()"]

foreach sym $min_syms {
    set tst "setting breakpoint at $sym"
    if {[gdb_breakpoint $sym]} {
	pass $tst
    }
}

gdb_exit
