# Copyright 2017-2026 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 is part of the gdb testsuite.

# Tests which verify (or not) that GDB can access in-scope variables
# when stopped within an OpenMP parallel region.

standard_testfile

if { [test_compiler_info "clang*"] } {
    # Clang doesn't add OpenMP information in the correct scope,
    # so all relevant tests here will fail.  See here for more info:
    # https://github.com/llvm/llvm-project/issues/44236
    unsupported "Clang doesn't provide required info for the test"
    return
}

set have_nested_function_support 0
set opts {openmp debug}
if {[support_nested_function_tests]} {
    lappend opts "additional_flags=-DHAVE_NESTED_FUNCTION_SUPPORT"
    set have_nested_function_support 1
}

if {[prepare_for_testing "failed to prepare" $testfile $srcfile $opts]} {
    return -1
}

# gdb_openmp_setup may be defined to set auto-load safe-path and possibly
# sysroot.  These settings are required for gdb to be able to find
# the libgomp python plugin.  (sysroot only needs to be defined for
# remote debugging.)
#
# This approach has both pros and cons.  On the plus side, it's easy
# to automatically set a precise auto-load safe-path.  (It's easy because
# the output of ldd on the binary may be examined to learn the location
# of libgomp.so.)
#
# However, making these settings is also a drawback due to potentially
# overriding settings made by a board file.  Therefore, this proc
# is optional and will only be called if it's defined.

if {[info procs gdb_openmp_setup] != ""} {
    if {[gdb_openmp_setup $binfile] != ""} {
	untested "could not set up OpenMP environment"
	return -1
    }
}

if {![runto_main]} {
    return -1
}

# We want to invoke setup_kfail (and in some cases setup_xfail) when
# GDB does not yet have support for finding the values of variables in
# (non-master) threads.  We'll check this by looking at the output of
# "maint print thread-parent".  If this command is undefined, then GDB
# does not yet have thread parent support, and it makes sense to kfail
# tests which won't work.  It's possible for GDB to have this support,
# but not work.  E.g. it may be the case that the plugin doesn't
# exist or is not found.  We may eventually need to add additional
# constraints related to setting allow_kfail to 0.  But, for the moment,
# this simple test should be sufficient.

set allow_kfail 1
gdb_test_multiple "maint print thread-parent" "maint print thread-parent" {
    -re "Undefined maintenance print command.*$gdb_prompt" {
	pass "maint print thread-parent (does not exist)"
    }
    -re "No parent found.*" {
	pass "maint print thread-parent"
	set allow_kfail 0
    }
}

# Determine whether to xfail some of the tests based on GCC version.
#
# This may need to be tweaked somewhat.  Testing shows that GCC 7.3.1
# needs the xfails.  GCC 8.3.1 and 9.1.1 do not.  The assumption made
# below is that all versions of gcc 8 and above won't require the
# XFAIL setup and that all versions of gcc 7 and below will, but it's
# possible that there are versions in between 7.3.1 and 8.3.1 for
# which this assumption is invalid.

set have_older_gcc 0
if {[test_compiler_info {gcc-[0-7]-*}]} {
    set have_older_gcc 1
}

# maybe_setup_kfail will set up a kfail for gdb/22214 when COND holds in
# addition to considering the values of $have_older_gcc and $allow_kfail.
#
# When $have_older_gcc evaluates to true, setup_xfail will invoked
# instead.

proc maybe_setup_kfail {cond} {
    global have_older_gcc allow_kfail
    if {$have_older_gcc} {
	setup_xfail *-*-*
    } elseif {[uplevel 1 [list expr $cond]] && $allow_kfail} {
	setup_kfail "gdb/22214" *-*-*
    }
}

with_test_prefix "single_scope" {

    gdb_breakpoint [gdb_get_line_number "single_scope: thread_num="]
    gdb_breakpoint [gdb_get_line_number "single_scope: s1="]

    foreach pref {"first thread" "second thread"} {
	with_test_prefix $pref {
	    gdb_continue_to_breakpoint "at printf"

	    if {$have_older_gcc} { setup_xfail "*-*-*" }
	    set thread_num [get_valueof "" thread_num "unknown"]
	    if {$have_older_gcc} { setup_xfail "*-*-*" }
	    gdb_test "print s1" "= -41"
	    gdb_test "print s2" "= \[12\]02"
	    if {$have_older_gcc} { setup_xfail "*-*-*" }
	    gdb_test "print s3" "= -43"
	    gdb_test "print i1" "= 11"
	    gdb_test "print i2" "= \[12]12"
	    maybe_setup_kfail {$thread_num != 0}
	    gdb_test "print i3" "= 13"
	}
    }

    with_test_prefix "after parallel region" {
	gdb_continue_to_breakpoint "at printf"

	gdb_test "print s1" "= -41"
	gdb_test "print s2" "= -42"
	gdb_test "print s3" "= -43"
	gdb_test "print i1" "= 11"
	gdb_test "print i2" "= 12"
	gdb_test "print i3" "= 13"
    }

}

with_test_prefix "multi_scope" {
    gdb_breakpoint [gdb_get_line_number "multi_scope: thread_num="]
    gdb_breakpoint [gdb_get_line_number "multi_scope: i01="]

    foreach pref {"first thread" "second thread"} {
	with_test_prefix $pref {
	    gdb_continue_to_breakpoint "at printf"

	    if {$have_older_gcc} { setup_xfail "*-*-*" }
	    set thread_num [get_valueof "" thread_num "unknown"]

	    gdb_test "print i01" "= 1"
	    maybe_setup_kfail {$thread_num != 0}
	    gdb_test "print i02" "= 2"
	    gdb_test "print i11" "= 11"
	    maybe_setup_kfail {$thread_num != 0}
	    gdb_test "print i12" "= 12"
	    gdb_test "print i21" "= \[12\]21"
	    maybe_setup_kfail {$thread_num != 0}
	    gdb_test "print i22" "= 22"
	    gdb_test "print file_scope_var" "= 9876"
	}
    }

    with_test_prefix "after parallel" {
	gdb_continue_to_breakpoint "at printf"

	gdb_test "print i01" "= 1"
	gdb_test "print i02" "= 2"
	gdb_test "print i11" "= 11"
	gdb_test "print i12" "= 12"
	gdb_test "print i21" "= -21"
	gdb_test "print i22" "= 22"
	gdb_test "print file_scope_var" "= 9876"
    }
}

# Nested functions in C are a GNU extension, so only do the nested function
# tests if compiling with -DHAVE_NESTED_FUNCTION_SUPPORT was successful.

if {$have_nested_function_support} {
    with_test_prefix "nested_func" {
	gdb_breakpoint [gdb_get_line_number "nested_func: tn="]

	foreach call_prefix {"1st call" "2nd call"} {
	    with_test_prefix $call_prefix {
		foreach thread_prefix {"1st thread" "2nd thread"} {
		    with_test_prefix $thread_prefix {
			gdb_continue_to_breakpoint "at printf"

			if {$have_older_gcc} { setup_xfail "*-*-*" }
			set thread_num [get_valueof "" "tn" "unknown"]

			gdb_test "print file_scope_var" "= 9876"
			if {$have_older_gcc} { setup_xfail *-*-* }
			gdb_test "print s1" "= -42"
			if {$call_prefix eq "1st call"} {
			    gdb_test "print i" "= 1"
			} else {
			    gdb_test "print i" "= 101"
			}
			gdb_test "print j" "= \[12\]000"
			maybe_setup_kfail {$thread_num != 0}
			if {$call_prefix eq "1st call"} {
			    gdb_test "print k" "= 3"
			} else {
			    gdb_test "print k" "= 103"
			}
			if {$call_prefix eq "1st call"} {
			    gdb_test "print p" "= 10"
			} else {
			    gdb_test "print p" "= 20"
			}
			gdb_test "print q" "= \[12\]001"
			maybe_setup_kfail {$thread_num != 0}
			if {$call_prefix eq "1st call"} {
			    gdb_test "print r" "= 12"
			} else {
			    gdb_test "print r" "= 22"
			}
			gdb_test "print x" "= 4"
			gdb_test "print y" "= \[12\]002"
			maybe_setup_kfail {$thread_num != 0}
			gdb_test "print z" "= 6"
			if {$have_older_gcc} { setup_xfail "*-*-*" }
			gdb_test "print tn" "= \[01\]"
		    }
		}
	    }
	}
    }
}

with_test_prefix "nested_parallel" {
    gdb_breakpoint [gdb_get_line_number "nested_parallel (inner threads)"]

    with_test_prefix "inner_threads" {
	foreach pref {"1st stop" "2nd stop" "3rd stop" "4th stop"} {
	    with_test_prefix $pref {
		gdb_continue_to_breakpoint "at printf"

		# Don't need setup_xfail here due to fact that num is made
		# made known to the inner parallel region.
		set thread_num [get_valueof "" "num" "unknown"]

		if {$have_older_gcc} { setup_xfail "*-*-*" }
		set inner_thread_num [get_valueof "" "inner_num" "unknown"]

		gdb_test "print file_scope_var" "= 9876"
		gdb_test "print num" "= \[01\]"
		maybe_setup_kfail {$thread_num != 0 || $inner_thread_num != 0}
		gdb_test "print i" "= 1"
		maybe_setup_kfail {$thread_num != 0 || $inner_thread_num != 0}
		gdb_test "print j" "= 2"
		if {$have_older_gcc || ($inner_thread_num != 0 && $allow_kfail)} { setup_xfail *-*-* }
		gdb_test "print l" "= 10\[24\]"
		if {$have_older_gcc ||( $inner_thread_num != 0 && $allow_kfail)} { setup_xfail *-*-* }
		gdb_test "print k" "= 10\[13\]"
	    }
	}
    }

    with_test_prefix "outer_threads" {
	gdb_breakpoint [gdb_get_line_number "nested_parallel (outer threads)"]

	with_test_prefix "outer stop" {
	    gdb_continue_to_breakpoint "at printf"

	    if {$have_older_gcc} { setup_xfail "*-*-*" }
	    # Use get_local_valueof instead of get_valueof to avoid picking up
	    # some random 'num' in a shared library.
	    set thread_num [get_local_valueof "num" "unknown"]

	    gdb_test "print file_scope_var" "= 9876"
	    if {$have_older_gcc} { setup_xfail "*-*-*" }
	    gdb_test "print num" "= \[01\]"
	    maybe_setup_kfail {$thread_num != 0}
	    gdb_test "print i" "= 1"
	    maybe_setup_kfail {$thread_num != 0}
	    gdb_test "print j" "= 2"
	    gdb_test "print l" "= 10\[24\]"
	    if {$have_older_gcc} { setup_xfail "*-*-*" }
	    gdb_test "print k" "= 10\[13\]"
	}
    }
}
