aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Schwinge <thomas@codesourcery.com>2022-11-08 12:10:03 +0100
committerThomas Schwinge <thomas@codesourcery.com>2023-09-12 11:43:07 +0200
commit56004123ab74193d88ad297877fa4e2a0d7ef5b1 (patch)
tree0b7d45ccfbdfb8763f82db496672a6adc8ee2b5f
parent949f1ccf1ba9d1f33ca3809424e97429b717950a (diff)
downloadgcc-56004123ab74193d88ad297877fa4e2a0d7ef5b1.zip
gcc-56004123ab74193d88ad297877fa4e2a0d7ef5b1.tar.gz
gcc-56004123ab74193d88ad297877fa4e2a0d7ef5b1.tar.bz2
nvptx: stack size limits are relevant for execution only
For non-'dg-do run' test cases, that means: big 'dg-require-stack-size' need not be UNSUPPORTED (and indeed now do all PASS), 'dg-add-options stack_size' need not define (and thus limit) 'STACK_SIZE' (and still do all PASS). Re "Find 'dg-do-what' in an outer frame", currently (sources not completely clean, though), we've got: $ git grep -F 'check_effective_target_stack_size: found dg-do-what at level ' -- build-gcc/\*.log | sort | uniq -c 6 build-gcc/gcc/testsuite/gcc/gcc.log:check_effective_target_stack_size: found dg-do-what at level 2 267 build-gcc/gcc/testsuite/gcc/gcc.log:check_effective_target_stack_size: found dg-do-what at level 3 239 build-gcc/gcc/testsuite/gcc/gcc.log:check_effective_target_stack_size: found dg-do-what at level 4 gcc/testsuite/ * lib/target-supports.exp (check_effective_target_stack_size): For nvptx target, stack size limits are relevant for execution only. gcc/ * doc/sourcebuild.texi (stack_size): Update.
-rw-r--r--gcc/doc/sourcebuild.texi4
-rw-r--r--gcc/testsuite/lib/target-supports.exp16
2 files changed, 20 insertions, 0 deletions
diff --git a/gcc/doc/sourcebuild.texi b/gcc/doc/sourcebuild.texi
index de1aa8c..8bf7014 100644
--- a/gcc/doc/sourcebuild.texi
+++ b/gcc/doc/sourcebuild.texi
@@ -2932,6 +2932,10 @@ Target has limited stack size. The stack size limit can be obtained using the
STACK_SIZE macro defined by @ref{stack_size_ao,,@code{dg-add-options} feature
@code{stack_size}}.
+Note that for certain targets, stack size limits are relevant for
+execution only, and therefore considered only if @code{dg-do run} is
+in effect, otherwise unlimited.
+
@item static
Target supports @option{-static}.
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 0ea8bcb..1080a5c 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -649,6 +649,22 @@ proc check_effective_target_trampolines { } {
# Return 1 if target has limited stack size.
proc check_effective_target_stack_size { } {
+ # For nvptx target, stack size limits are relevant for execution only.
+ if { [istarget nvptx-*-*] } {
+ # Find 'dg-do-what' in an outer frame.
+ set level 1
+ while true {
+ upvar $level dg-do-what dg-do-what
+ if [info exists dg-do-what] then break
+ incr level
+ }
+ verbose "check_effective_target_stack_size: found dg-do-what at level $level" 2
+
+ if { ![string equal [lindex ${dg-do-what} 0] run] } {
+ return 0
+ }
+ }
+
if [target_info exists gcc,stack_size] {
return 1
}