re PR c/47963 (ICE: tree check: expected tree that contains 'decl common' structure, have 'integer_cst' in is_global_var, at tree-flow-inline.h:599 on invalid code with -fopenmp)

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
This commit is contained in:
Jakub Jelinek 2011-03-03 17:09:55 +01:00 committed by Jakub Jelinek
parent 71f3a3f517
commit 423ed4163b
5 changed files with 35 additions and 2 deletions

View 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.

View 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))

View 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.

View File

@ -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)
;
}

View File

@ -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)
;
}