aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTobias Burnus <tobias@codesourcery.com>2020-09-30 14:59:27 +0200
committerTobias Burnus <tobias@codesourcery.com>2020-09-30 14:59:27 +0200
commit8b0a63e47cd83f4e8534d0d201739bdd10f321a2 (patch)
tree9331e8dd74b5c1ff5758a9de0a08daa18cd3ad16 /gcc
parentfcc4891d7f3bff1a3f7428f12830bc942989306c (diff)
downloadgcc-8b0a63e47cd83f4e8534d0d201739bdd10f321a2.zip
gcc-8b0a63e47cd83f4e8534d0d201739bdd10f321a2.tar.gz
gcc-8b0a63e47cd83f4e8534d0d201739bdd10f321a2.tar.bz2
OpenMP: Add implicit declare target for nested procedures
gcc/ChangeLog: * omp-offload.c (omp_discover_implicit_declare_target): Also handled nested functions. libgomp/ChangeLog: * testsuite/libgomp.fortran/declare-target-3.f90: New test.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/omp-offload.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/omp-offload.c b/gcc/omp-offload.c
index a89275b..7fb3a72 100644
--- a/gcc/omp-offload.c
+++ b/gcc/omp-offload.c
@@ -327,11 +327,18 @@ omp_discover_implicit_declare_target (void)
FOR_EACH_DEFINED_FUNCTION (node)
if (DECL_SAVED_TREE (node->decl))
{
+ struct cgraph_node *cgn;
if (omp_declare_target_fn_p (node->decl))
worklist.safe_push (node->decl);
else if (DECL_STRUCT_FUNCTION (node->decl)
&& DECL_STRUCT_FUNCTION (node->decl)->has_omp_target)
worklist.safe_push (node->decl);
+ for (cgn = node->nested; cgn; cgn = cgn->next_nested)
+ if (omp_declare_target_fn_p (cgn->decl))
+ worklist.safe_push (cgn->decl);
+ else if (DECL_STRUCT_FUNCTION (cgn->decl)
+ && DECL_STRUCT_FUNCTION (cgn->decl)->has_omp_target)
+ worklist.safe_push (cgn->decl);
}
FOR_EACH_STATIC_INITIALIZER (vnode)
if (omp_declare_target_var_p (vnode->decl))