re PR c/47963 (ICE: tree check: expected tree that contains 'decl common' structure...
authorJakub Jelinek <jakub@redhat.com>
Thu, 3 Mar 2011 16:09:55 +0000 (17:09 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 3 Mar 2011 16:09:55 +0000 (17:09 +0100)
PR c/47963
* gimplify.c (omp_add_variable): Only call omp_notice_variable
on TYPE_SIZE_UNIT if it is a DECL.

* gcc.dg/gomp/pr47963.c: New test.
* g++.dg/gomp/pr47963.C: New test.

From-SVN: r170655

gcc/ChangeLog
gcc/gimplify.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/gomp/pr47963.C [new file with mode: 0644]
gcc/testsuite/gcc.dg/gomp/pr47963.c [new file with mode: 0644]

index 5d524d50f9a0bd1a0c5e71bd9078ea466e78cc79..1273286301b3b2c0de2a9ad827b1ed94d1ded275 100644 (file)
@@ -1,5 +1,9 @@
 2011-03-03  Jakub Jelinek  <jakub@redhat.com>
 
+       PR c/47963
+       * gimplify.c (omp_add_variable): Only call omp_notice_variable
+       on TYPE_SIZE_UNIT if it is a DECL.
+
        PR debug/47283
        * cfgexpand.c (expand_debug_expr) <case MEM_REF>: If MEM_REF
        first operand is not is_gimple_mem_ref_addr, try to fold it.
index 350d793b7472ed87db98d8a675358554d4daa4b8..cf9495c919895683c6f69b6806debc7d67fd6100 100644 (file)
@@ -1,6 +1,6 @@
 /* Tree lowering pass.  This pass converts the GENERIC functions-as-trees
    tree representation into the GIMPLE form.
-   Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+   Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
    Free Software Foundation, Inc.
    Major work done by Sebastian Pop <s.pop@laposte.net>,
    Diego Novillo <dnovillo@redhat.com> and Jason Merrill <jason@redhat.com>.
@@ -5511,7 +5511,8 @@ omp_add_variable (struct gimplify_omp_ctx *ctx, tree decl, unsigned int flags)
         For local variables TYPE_SIZE_UNIT might not be gimplified yet,
         in this case omp_notice_variable will be called later
         on when it is gimplified.  */
-      else if (! (flags & GOVD_LOCAL))
+      else if (! (flags & GOVD_LOCAL)
+              && DECL_P (TYPE_SIZE_UNIT (TREE_TYPE (decl))))
        omp_notice_variable (ctx, TYPE_SIZE_UNIT (TREE_TYPE (decl)), true);
     }
   else if (lang_hooks.decls.omp_privatize_by_reference (decl))
index 7b139222f3a0558f38572c3c414b703cd59d7e6c..3f7a372fa0a610039d39cb7f4ffe2b82808e35d7 100644 (file)
@@ -1,3 +1,9 @@
+2011-03-03  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c/47963
+       * gcc.dg/gomp/pr47963.c: New test.
+       * g++.dg/gomp/pr47963.C: New test.
+
 2011-03-02  Jason Merrill  <jason@redhat.com>
 
        * g++.dg/cpp0x/regress/condition1.C: New.
diff --git a/gcc/testsuite/g++.dg/gomp/pr47963.C b/gcc/testsuite/g++.dg/gomp/pr47963.C
new file mode 100644 (file)
index 0000000..7c94e64
--- /dev/null
@@ -0,0 +1,11 @@
+// PR c/47963
+// { dg-do compile }
+// { dg-options "-fopenmp" }
+
+void
+foo (float n)
+{
+  int A[n][n]; // { dg-error "has non-integral type" }
+#pragma omp parallel private(A)
+  ;
+}
diff --git a/gcc/testsuite/gcc.dg/gomp/pr47963.c b/gcc/testsuite/gcc.dg/gomp/pr47963.c
new file mode 100644 (file)
index 0000000..636a954
--- /dev/null
@@ -0,0 +1,11 @@
+/* PR c/47963 */
+/* { dg-do compile } */
+/* { dg-options "-fopenmp" } */
+
+void
+foo (float n)
+{
+  int A[n][n]; /* { dg-error "has non-integer type" } */
+#pragma omp parallel private(A)
+  ;
+}