# Copyright 2003-2021 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 tests decoding non-debuggable Objective-C symbols

# This file was written by Adam Fedor (fedor@gnu.org)

standard_testfile .m

#
# Objective-C program compilation isn't standard. We need to figure out
# which libraries to link in. Most of the time it uses pthread
#
if {[gdb_compile_objc "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list ] ] != "" } {
  return -1
}

proc do_objc_tests {} {
    global subdir
    global srcdir
    global binfile
    global gdb_prompt


    # Start with a fresh gdb.

    gdb_exit
    gdb_start
    gdb_reinitialize_dir $srcdir/$subdir
    gdb_load $binfile

}

do_objc_tests

# Disable pending breakpoint query to avoid timeouts
# if Obj-C symbols cannot be found
gdb_test "set breakpoint pending off" "" "set breakpoint pending"

#
# Break on multiply defined non-debuggable symbol (PR objc/1236)
#
set name "break on non-debuggable method"
gdb_test_multiple "break someMethod" $name \
{
    -re "\\\[0\\\] cancel\r\n\\\[1\\\] all\r\n\\\[2\\\]\[ \]+-.NonDebug someMethod.*\\\[3\\\]\[ \]+-.NonDebug2 someMethod.*" {
	send_gdb "2\n"
	exp_continue
    }
    -re "\\\[0\\\] cancel\r\n\\\[1\\\] all\r\n> " {
	gdb_test "0" "" ""
	kfail "gdb/1236" $name
    }
    -re "Breakpoint \[0-9\]+ at 0x\[0-9a-f\]+.*$gdb_prompt $" { pass $name }
    -re ".*$gdb_prompt $"   { kfail "gdb/1236" $name }
}

