# Copyright 2011 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
set testfile "cmpd-minsyms"
# Do NOT compile with debug flag.
if {[prepare_for_testing $testfile $testfile $testfile.cc {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
