public inbox for gcc-cvs@sourceware.org help / color / mirror / Atom feed
From: Tobias Burnus <burnus@gcc.gnu.org> To: gcc-cvs@gcc.gnu.org Subject: [gcc r14-4720] OpenMP: Avoid ICE with LTO and 'omp allocate' Date: Wed, 18 Oct 2023 11:08:22 +0000 (GMT) [thread overview] Message-ID: <20231018110822.E91343858C2A@sourceware.org> (raw) https://gcc.gnu.org/g:af4bb221153359f5948da917d5ef2df738bb1e61 commit r14-4720-gaf4bb221153359f5948da917d5ef2df738bb1e61 Author: Tobias Burnus <tobias@codesourcery.com> Date: Wed Oct 18 13:05:35 2023 +0200 OpenMP: Avoid ICE with LTO and 'omp allocate' gcc/ChangeLog: * gimplify.cc (gimplify_bind_expr): Remove "omp allocate" attribute to avoid that auxillary statement list reaches LTO. gcc/testsuite/ChangeLog: * gfortran.dg/gomp/allocate-13a.f90: New test. Diff: --- gcc/gimplify.cc | 18 ++++++++----- gcc/testsuite/gfortran.dg/gomp/allocate-13a.f90 | 34 +++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 7 deletions(-) diff --git a/gcc/gimplify.cc b/gcc/gimplify.cc index 9c617c21381b..22ff1075abbf 100644 --- a/gcc/gimplify.cc +++ b/gcc/gimplify.cc @@ -1426,7 +1426,8 @@ gimplify_bind_expr (tree *expr_p, gimple_seq *pre_p) DECL_ATTRIBUTES (v) = tree_cons (get_identifier ("omp allocate var"), build_tree_list (NULL_TREE, t), - DECL_ATTRIBUTES (t)); + remove_attribute ("omp allocate", + DECL_ATTRIBUTES (t))); tmp = build_fold_indirect_ref (v); TREE_THIS_NOTRAP (tmp) = 1; SET_DECL_VALUE_EXPR (t, tmp); @@ -1473,7 +1474,12 @@ gimplify_bind_expr (tree *expr_p, gimple_seq *pre_p) at the top, unless an allocator or size expression requires to put it afterward; note that the size is always later in generated code; for strings, no - size expr but still an expr might be available. */ + size expr but still an expr might be available. + As LTO does not handle a statement list, 'sl' has + to be removed; done so by removing the attribute. */ + DECL_ATTRIBUTES (t) + = remove_attribute ("omp allocate", + DECL_ATTRIBUTES (t)); tree sl = TREE_PURPOSE (TREE_CHAIN (TREE_VALUE (attr))); tree_stmt_iterator e = tsi_start (sl); tree needle = NULL_TREE; @@ -1631,16 +1637,14 @@ gimplify_bind_expr (tree *expr_p, gimple_seq *pre_p) && !is_global_var (t) && DECL_CONTEXT (t) == current_function_decl) { - tree attr; if (flag_openmp && DECL_HAS_VALUE_EXPR_P (t) && TREE_USED (t) - && ((attr = lookup_attribute ("omp allocate", - DECL_ATTRIBUTES (t))) != NULL_TREE) - && TREE_CHAIN (TREE_VALUE (attr)) == NULL_TREE) + && lookup_attribute ("omp allocate", DECL_ATTRIBUTES (t))) { /* For Fortran, TREE_CHAIN (TREE_VALUE (attr)) is set, which - causes that the GOMP_free call is already added above. */ + causes that the GOMP_free call is already added above; + and "omp allocate" is removed from DECL_ATTRIBUTES. */ tree v = TREE_OPERAND (DECL_VALUE_EXPR (t), 0); tree tmp = builtin_decl_explicit (BUILT_IN_GOMP_FREE); tmp = build_call_expr_loc (end_locus, tmp, 2, v, diff --git a/gcc/testsuite/gfortran.dg/gomp/allocate-13a.f90 b/gcc/testsuite/gfortran.dg/gomp/allocate-13a.f90 new file mode 100644 index 000000000000..4b297cdb4aa6 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/allocate-13a.f90 @@ -0,0 +1,34 @@ +! { dg-do compile { target lto } } +! { dg-additional-options "-flto" } + +! Same as allocate-13.f90 but compiled with -flto. + +! This was failing before as the statement list, +! used for placing the GOMP_alloc/GOMP_free leaked +! through to LTO. + +module m + implicit none + !$omp requires dynamic_allocators +contains +subroutine f () + !$omp declare target + integer :: var + !$omp allocate(var) + var = 5 +end + +subroutine h () + !$omp target + !$omp parallel + !$omp single + block + integer :: var2(5) + !$omp allocate(var2) + var2(1) = 7 + end block + !$omp end single + !$omp end parallel + !$omp end target +end +end module
reply other threads:[~2023-10-18 11:08 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20231018110822.E91343858C2A@sourceware.org \ --to=burnus@gcc.gnu.org \ --cc=gcc-cvs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).