# Copyright 2012-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/>.

# Tests for linespec errors with C and C++.

# The test proper.  LANG is either C or C++.

proc do_test {lang} {
    global testfile srcfile error_messages compiler_info

    standard_testfile
    set exefile $testfile
    if [info exists compiler_info] {
	# Unsetting compiler_info allows us to switch compilers
	# used by prepare_for_testing.
        unset compiler_info
    }
    set options {debug}

    if {$lang == "C++"} {
	if {![allow_cplus_tests]} {
	    return 0
	}
	# Build ".c" source file with g++.
	lappend options "c++"
    }

    if {[prepare_for_testing "failed to prepare" $exefile $srcfile $options]} {
	return -1
    }

    # Turn off the pending breakpoint queries.
    gdb_test_no_output "set breakpoint pending off"

    # Turn off completion limiting
    gdb_test_no_output "set max-completions unlimited"

    if {![runto_main]} {
	return 0
    }

    # Run to a location in the file.
    set bp_location [gdb_get_line_number "set breakpoint here"]

    gdb_test "break $srcfile:$bp_location" \
    "Breakpoint.*at.* file .*$srcfile, line $bp_location\\." \
    "breakpoint line number in file"

    gdb_continue_to_breakpoint "$bp_location"

    # Common error message format strings.
    array set error_messages {
	invalid_file "No source file named %s."
	invalid_function "Function \"%s\" not defined."
	invalid_var_or_func
	    "Undefined convenience variable or function \"%s\" not defined."
	invalid_function_f "Function \"%s\" not defined in \"%s\"."
	invalid_var_or_func_f \
	    "Undefined convenience variable or function \"%s\" not defined in \"%s\"."
	invalid_label "No label \"%s\" defined in function \"%s\"."
	invalid_parm "invalid linespec argument, \"%s\""
	invalid_offset "No line %d in the current file."
	invalid_offset_f "No line %d in file \"%s\"."
	malformed_line_offset "malformed line offset: \"%s\""
	source_incomplete \
	    "Source filename requires function, label, or line offset."
	unexpected "malformed linespec error: unexpected %s"
	unexpected_opt "malformed linespec error: unexpected %s, \"%s\""
	unmatched_quote "unmatched quote"
	garbage "Garbage '%s' at end of command"
    }

    # We intentionally do not use gdb_breakpoint for these tests.

    # Break at 'linespec' and expect the message in ::error_messages
    # indexed by msg_id with the associated args.
    proc test_break {linespec msg_id args} {
	global error_messages

	gdb_test "break $linespec" [string_to_regexp \
				    [eval format \$error_messages($msg_id) \
				     $args]] \
	    "'break $linespec'"
    }

    # Some commonly used whitespace tests around ':'.
    set spaces [list \
		    ":" \
		    ": " \
		    " :" \
		    " : " \
		    "  :  " \
		   ]

    # A list of invalid offsets.
    set invalid_offsets [list -100 +500 1000]

    # Try some simple, invalid linespecs involving spaces.
    foreach x $spaces {
	test_break $x unexpected "colon"
    }

    # Test invalid filespecs starting with offset.  This is done
    # first so that default offsets are tested.
    foreach x $invalid_offsets {
	set offset $x

	# Relative offsets are relative to the current line.  Adjust
	# expected offset from error message accordingly.
	if {[string index $x 0] == "+" || [string index $x 0] == "-"} {
	    incr offset $bp_location
	}
	test_break $x invalid_offset $offset
	test_break "-line $x" invalid_offset $offset
    }

    # Test offsets with trailing tokens w/ and w/o spaces.
    foreach x $spaces {
	test_break "3$x" unexpected "colon"
	test_break "+10$x" unexpected "colon"
	test_break "-10$x" unexpected "colon"
    }

    foreach x {1 +1 +100 -10} {
	test_break "3 $x" unexpected_opt "number" $x
	test_break "-line 3 $x" garbage $x
	test_break "+10 $x" unexpected_opt "number" $x
	test_break "-line +10 $x" garbage $x
	test_break "-10 $x" unexpected_opt "number" $x
	test_break "-line -10 $x" garbage $x
    }

    foreach x {3 +10 -10} {
	test_break "$x foo" unexpected_opt "string" "foo"
	test_break "-line $x foo" garbage "foo"
    }

    # Test invalid linespecs starting with filename.
    # It's OK to use the ".c" extension for the C++ test
    # since the extension doesn't affect GDB's lookup.
    set invalid_files [list "this_file_doesn't_exist.c" \
			    "this file has spaces.c" \
			    "\"file::colons.c\"" \
			    "'file::colons.c'" \
			    "\"this \"file\" has quotes.c\"" \
			    "'this \"file\" has quotes.c'" \
			    "'this 'file' has quotes.c'" \
			    "\"this 'file' has quotes.c\"" \
			    "\"spaces: and :colons.c\"" \
			    "'more: :spaces: :and  colons::.c'" \
			    "C:/nonexist-with-windrive.c"]

    foreach x $invalid_files {
	# Remove any quoting from FILENAME for the error message.
	test_break "$x:3" invalid_file [string trim $x \"']
    }
    foreach x [list "this_file_doesn't_exist.c" \
		    "file::colons.c" \
		    "'file::colons.c'"] {
	test_break "-source $x -line 3" invalid_file [string trim $x \"']
    }

    # Test that option lexing stops at whitespace boundaries, except
    # when lexing function names, where we want to handle setting
    # breakpoints on e.g., "int template_function<int>()".
    test_break "-source this file has spaces.c -line 3" source_incomplete
    test_break "-function ret_type tmpl_function" \
	invalid_function "ret_type tmpl_function"
    test_break "-source $srcfile -function ret_type tmpl_function" \
	       invalid_function_f "ret_type tmpl_function" $srcfile

    test_break "-function main -label label whitespace" \
	       invalid_label "label" "main"

    # Test unmatched quotes.
    foreach x {"\"src-file.c'" "'src-file.c"} {
	test_break "$x:3" unmatched_quote
    }

    test_break $srcfile invalid_function $srcfile
    foreach x {"foo" " foo" " foo "} {
	# Trim any leading/trailing whitespace for error messages.
	test_break "$srcfile:$x" invalid_function_f [string trim $x] $srcfile
	test_break "-source $srcfile -function $x" \
		   invalid_function_f [string trim $x] $srcfile
	test_break "$srcfile:main:$x" invalid_label [string trim $x] "main"
	test_break "-source $srcfile -function main -label $x" \
		   invalid_label [string trim $x] "main"
    }

    foreach x $spaces {
	test_break "$srcfile$x" unexpected "end of input"
	test_break "$srcfile:main$x" unexpected "end of input"
    }

    test_break "${srcfile}::" invalid_function "${srcfile}::"
    test_break "$srcfile:3 1" unexpected_opt "number" "1"
    test_break "-source $srcfile -line 3 1" garbage "1"
    test_break "$srcfile:3 +100" unexpected_opt "number" "+100"
    test_break "-source $srcfile -line 3 +100" garbage "+100"
    test_break "$srcfile:3 -100" unexpected_opt "number" "-100"
    test_break "$srcfile:3 foo" unexpected_opt "string" "foo"
    test_break "-source $srcfile -line 3 foo" garbage "foo"

    foreach x $invalid_offsets {
	test_break "$srcfile:$x" invalid_offset_f $x $srcfile
	test_break "\"$srcfile:$x\"" invalid_offset_f $x $srcfile
	test_break "'$srcfile:$x'" invalid_offset_f $x $srcfile
	test_break "-source $srcfile -line $x" invalid_offset_f $x $srcfile
    }
    test_break "-source $srcfile -line -x" malformed_line_offset "-x"

    # Test invalid filespecs starting with function.
    foreach x {"foobar" "foo::bar" "foo.bar" "foo ." "foo bar" "foo 1" \
	       "foo 0" "foo +10" "foo -10" "foo +100" "foo -100"} {
	test_break $x invalid_function $x
	test_break "-function \"$x\"" invalid_function $x
    }

    foreach x $spaces {
	test_break "main${x}there" invalid_label "there" "main"
	test_break "main:here${x}" unexpected "end of input"
    }

    foreach_with_prefix x {"3" "+100" "-100" "foo"} {
	test_break "main 3" invalid_function "main 3"
	test_break "-function \"main $x\"" invalid_function "main $x"
	if {$x == "foo"} {
	    test_break "main:here $x" unexpected_opt "string" $x
	} else {
	    test_break "main:here $x" unexpected_opt "number" $x
	}

	test_break "-function main -label \"here $x\"" \
		   invalid_label "here $x" "main"
    }

    foreach x {"if" "task" "thread"} {
	test_break $x invalid_function $x
    }

    test_break "'main.c'flubber" unexpected_opt "string" "flubber"
    test_break "'main.c',21" invalid_function "main.c"
    test_break "'main.c' " invalid_function "main.c"
    test_break "'main.c'3" unexpected_opt "number" "3"
    test_break "'main.c'+3" unexpected_opt "number" "+3"

    # Test undefined convenience variables.
    set x {$zippo}
    test_break $x invalid_var_or_func $x
    test_break "$srcfile:$x" invalid_var_or_func_f $x $srcfile

    # Explicit linespec-specific tests
    test_break "-source $srcfile" source_incomplete
    test_break "-source $srcfile main" source_incomplete
}

foreach_with_prefix lang {"C" "C++"} {
    do_test ${lang}
}
