diff options
author | Thomas Schwinge <thomas@codesourcery.com> | 2019-05-17 21:13:04 +0200 |
---|---|---|
committer | Thomas Schwinge <tschwinge@gcc.gnu.org> | 2019-05-17 21:13:04 +0200 |
commit | e03436e7ac2ddbbf397a6d64309b01ad37cfcadf (patch) | |
tree | 22150e0e84ce3e0e987558f9ad64fc859fc24264 /gcc/fortran | |
parent | 5d9a8091e2d2ad4122369a40ad3cd0d4e6131321 (diff) | |
download | gcc-e03436e7ac2ddbbf397a6d64309b01ad37cfcadf.zip gcc-e03436e7ac2ddbbf397a6d64309b01ad37cfcadf.tar.gz gcc-e03436e7ac2ddbbf397a6d64309b01ad37cfcadf.tar.bz2 |
[PR89433] Refer to OpenACC 'routine' clauses from "omp declare target" attribute
gcc/c-family/
PR c/89433
* c-attribs.c (c_common_attribute_table): Set min_len to -1 for
"omp declare target".
gcc/c/
PR c/89433
* c-parser.c (c_finish_oacc_routine): Refer to OpenACC 'routine'
clauses from "omp declare target" attribute.
gcc/cp/
PR c++/89433
* parser.c (cp_finalize_oacc_routine): Refer to OpenACC 'routine'
clauses from "omp declare target" attribute.
gcc/fortran/
PR fortran/89433
* f95-lang.c (gfc_attribute_table): Set min_len to -1 for "omp
declare target".
* trans-decl.c (add_attributes_to_decl): Refer to OpenACC
'routine' clauses from "omp declare target" attribute.
gcc/testsuite/
PR testsuite/89433
* c-c++-common/goacc/classify-routine.c: Update.
* gfortran.dg/goacc/classify-routine.f95: Likewise.
From-SVN: r271343
Diffstat (limited to 'gcc/fortran')
-rw-r--r-- | gcc/fortran/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/fortran/f95-lang.c | 2 | ||||
-rw-r--r-- | gcc/fortran/trans-decl.c | 18 |
3 files changed, 20 insertions, 8 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index b885106..f09e715 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,11 @@ +2019-05-17 Thomas Schwinge <thomas@codesourcery.com> + + PR fortran/89433 + * f95-lang.c (gfc_attribute_table): Set min_len to -1 for "omp + declare target". + * trans-decl.c (add_attributes_to_decl): Refer to OpenACC + 'routine' clauses from "omp declare target" attribute. + 2019-05-16 Martin Sebor <msebor@redhat.com> * gfortranspec.c (append_arg): Spell out the word "argument." diff --git a/gcc/fortran/f95-lang.c b/gcc/fortran/f95-lang.c index 3e3d304..6b9f490 100644 --- a/gcc/fortran/f95-lang.c +++ b/gcc/fortran/f95-lang.c @@ -91,7 +91,7 @@ static const struct attribute_spec gfc_attribute_table[] = { /* { name, min_len, max_len, decl_req, type_req, fn_type_req, affects_type_identity, handler, exclude } */ - { "omp declare target", 0, 0, true, false, false, false, + { "omp declare target", 0, -1, true, false, false, false, gfc_handle_omp_declare_target_attribute, NULL }, { "omp declare target link", 0, 0, true, false, false, false, gfc_handle_omp_declare_target_attribute, NULL }, diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c index 07d1c33..8420870 100644 --- a/gcc/fortran/trans-decl.c +++ b/gcc/fortran/trans-decl.c @@ -1400,12 +1400,7 @@ add_attributes_to_decl (symbol_attribute sym_attr, tree list) list = chainon (list, attr); } - if (sym_attr.omp_declare_target_link) - list = tree_cons (get_identifier ("omp declare target link"), - NULL_TREE, list); - else if (sym_attr.omp_declare_target) - list = tree_cons (get_identifier ("omp declare target"), - NULL_TREE, list); + tree clauses = NULL_TREE; if (sym_attr.oacc_routine_lop != OACC_ROUTINE_LOP_NONE) { @@ -1430,11 +1425,20 @@ add_attributes_to_decl (symbol_attribute sym_attr, tree list) gcc_unreachable (); } tree c = build_omp_clause (UNKNOWN_LOCATION, code); + OMP_CLAUSE_CHAIN (c) = clauses; + clauses = c; - tree dims = oacc_build_routine_dims (c); + tree dims = oacc_build_routine_dims (clauses); list = oacc_replace_fn_attrib_attr (list, dims); } + if (sym_attr.omp_declare_target_link) + list = tree_cons (get_identifier ("omp declare target link"), + NULL_TREE, list); + else if (sym_attr.omp_declare_target) + list = tree_cons (get_identifier ("omp declare target"), + clauses, list); + return list; } |