diff options
author | Tobias Burnus <tobias@codesourcery.com> | 2020-09-30 14:59:27 +0200 |
---|---|---|
committer | Tobias Burnus <tobias@codesourcery.com> | 2020-09-30 14:59:27 +0200 |
commit | 8b0a63e47cd83f4e8534d0d201739bdd10f321a2 (patch) | |
tree | 9331e8dd74b5c1ff5758a9de0a08daa18cd3ad16 /gcc | |
parent | fcc4891d7f3bff1a3f7428f12830bc942989306c (diff) | |
download | gcc-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.c | 7 |
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)) |