re PR c/79431 (ICE in get, at cgraph.h:397)
authorJakub Jelinek <jakub@redhat.com>
Thu, 9 Feb 2017 14:01:44 +0000 (15:01 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 9 Feb 2017 14:01:44 +0000 (15:01 +0100)
PR c/79431
* gimplify.c (gimplify_adjust_omp_clauses): Ignore
"omp declare target link" attribute unless is_global_var.
* omp-offload.c (find_link_var_op): Likewise.
c/
* c-parser.c (c_parser_omp_declare_target): Don't invoke
symtab_node::get on automatic variables.
cp/
* parser.c (cp_parser_oacc_declare): Formatting fix.
(cp_parser_omp_declare_target): Don't invoke symtab_node::get on
automatic variables.
testsuite/
* c-c++-common/gomp/pr79431.c: New test.

From-SVN: r245302

gcc/ChangeLog
gcc/c/ChangeLog
gcc/c/c-parser.c
gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/gimplify.c
gcc/omp-offload.c
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/gomp/pr79431.c [new file with mode: 0644]

index 7228afcbc6f6fddf54db5ffabf36759d6ce95c09..184e7d1b48ec33681140a6fc36e4bbce5b05e251 100644 (file)
@@ -1,3 +1,10 @@
+2017-02-09  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/79431
+       * gimplify.c (gimplify_adjust_omp_clauses): Ignore
+       "omp declare target link" attribute unless is_global_var.
+       * omp-offload.c (find_link_var_op): Likewise.
+
 2017-02-09  Nathan Sidwell  <nathan@codesourcery.com>
            Chung-Lin Tang  <cltang@codesourcery.com>
 
index c05721df7eccdeb0576c2437d95afbe87871a149..98f7c4ce48986a88b22cebbd0bbeeb59289f350b 100644 (file)
@@ -1,3 +1,9 @@
+2017-02-09  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/79431
+       * c-parser.c (c_parser_omp_declare_target): Don't invoke
+       symtab_node::get on automatic variables.
+
 2016-02-09  Nathan Sidwell  <nathan@codesourcery.com>
            Chung-Lin Tang  <cltang@codesourcery.com>
 
index 6e83728b577a0b4759b1bc77134a3c45391c0b93..8f4f569bd4a365d1b6a52ead22dad1f54769130d 100644 (file)
@@ -16849,8 +16849,11 @@ c_parser_omp_declare_target (c_parser *parser)
        }
       if (!at1)
        {
-         symtab_node *node = symtab_node::get (t);
          DECL_ATTRIBUTES (t) = tree_cons (id, NULL_TREE, DECL_ATTRIBUTES (t));
+         if (TREE_CODE (t) != FUNCTION_DECL && !is_global_var (t))
+           continue;
+
+         symtab_node *node = symtab_node::get (t);
          if (node != NULL)
            {
              node->offloadable = 1;
index 291dcddcde17af81633b14040630d01a96e8d2bc..a71cca1d20bf8fc08c2467194f6d3762f82eaed5 100644 (file)
@@ -1,3 +1,10 @@
+2017-02-09  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/79431
+       * parser.c (cp_parser_oacc_declare): Formatting fix.
+       (cp_parser_omp_declare_target): Don't invoke symtab_node::get on
+       automatic variables.
+
 2016-02-09  Nathan Sidwell  <nathan@codesourcery.com>
            Chung-Lin Tang  <cltang@codesourcery.com>
 
index 41b08e1a7a30eedff870b7b5972f8dde23e51fae..b46ee7c9454947c9b66d8fbe4110fae1602d242c 100644 (file)
@@ -36230,7 +36230,7 @@ cp_parser_oacc_declare (cp_parser *parser, cp_token *pragma_tok)
            id = get_identifier ("omp declare target");
 
          DECL_ATTRIBUTES (decl)
-                          = tree_cons (id, NULL_TREE, DECL_ATTRIBUTES (decl));
+           = tree_cons (id, NULL_TREE, DECL_ATTRIBUTES (decl));
          if (global_bindings_p ())
            {
              symtab_node *node = symtab_node::get (decl);
@@ -36770,8 +36770,11 @@ cp_parser_omp_declare_target (cp_parser *parser, cp_token *pragma_tok)
        }
       if (!at1)
        {
-         symtab_node *node = symtab_node::get (t);
          DECL_ATTRIBUTES (t) = tree_cons (id, NULL_TREE, DECL_ATTRIBUTES (t));
+         if (TREE_CODE (t) != FUNCTION_DECL && !is_global_var (t))
+           continue;
+
+         symtab_node *node = symtab_node::get (t);
          if (node != NULL)
            {
              node->offloadable = 1;
index dd73fc258e59ea2e04e961f8967460c580768831..1b9c8d23f1ac38fe8473e0e2240e1a342083ba08 100644 (file)
@@ -8938,8 +8938,9 @@ gimplify_adjust_omp_clauses (gimple_seq *pre_p, gimple_seq body, tree *list_p,
          if ((ctx->region_type & ORT_TARGET) != 0
              && !(n->value & GOVD_SEEN)
              && GOMP_MAP_ALWAYS_P (OMP_CLAUSE_MAP_KIND (c)) == 0
-             && !lookup_attribute ("omp declare target link",
-                                   DECL_ATTRIBUTES (decl)))
+             && (!is_global_var (decl)
+                 || !lookup_attribute ("omp declare target link",
+                                       DECL_ATTRIBUTES (decl))))
            {
              remove = true;
              /* For struct element mapping, if struct is never referenced
index e4ce48cb8e5e1b7dcc7774a4983b0f2a03ec5666..6fbe4ff753a173d55686941a15173a05b9e0efa8 100644 (file)
@@ -1819,7 +1819,9 @@ find_link_var_op (tree *tp, int *walk_subtrees, void *)
 {
   tree t = *tp;
 
-  if (VAR_P (t) && DECL_HAS_VALUE_EXPR_P (t)
+  if (VAR_P (t)
+      && DECL_HAS_VALUE_EXPR_P (t)
+      && is_global_var (t)
       && lookup_attribute ("omp declare target link", DECL_ATTRIBUTES (t)))
     {
       *walk_subtrees = 0;
index 95c0bfc5c7e08e1c337939f3efa8e9727cdf6e32..18a7a08d2c82b2c005d8a6a68b62dff8fcf7c4f8 100644 (file)
@@ -1,3 +1,8 @@
+2017-02-09  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/79431
+       * c-c++-common/gomp/pr79431.c: New test.
+
 2017-02-09  Nathan Sidwell  <nathan@codesourcery.com>
            Cesar Philippidis  <cesar@codesourcery.com>
            Joseph Myers  <joseph@codesourcery.com>
diff --git a/gcc/testsuite/c-c++-common/gomp/pr79431.c b/gcc/testsuite/c-c++-common/gomp/pr79431.c
new file mode 100644 (file)
index 0000000..62f7a05
--- /dev/null
@@ -0,0 +1,8 @@
+/* PR c/79431 */
+
+void
+foo (void)
+{
+  int a;
+  #pragma omp declare target (a)
+}