re PR middle-end/66633 (ICE on valid "verify_gimple failed" with OpenMP)

PR middle-end/66633
	* tree-nested.c (convert_nonlocal_omp_clauses): Initialize need_chain
	to true if the function is nested and if not optimizing.
	(convert_local_omp_clauses): Initialize need_frame to true if the
	function contains nested functions and if not optimizing.

From-SVN: r225227
This commit is contained in:
Eric Botcazou 2015-07-01 08:21:40 +00:00 committed by Eric Botcazou
parent 97e7739106
commit eb71ab9f1f
4 changed files with 35 additions and 2 deletions

View File

@ -1,3 +1,11 @@
2015-07-01 Eric Botcazou <ebotcazou@adacore.com>
PR middle-end/66633
* tree-nested.c (convert_nonlocal_omp_clauses): Initialize need_chain
to true if the function is nested and if not optimizing.
(convert_local_omp_clauses): Initialize need_frame to true if the
function contains nested functions and if not optimizing.
2015-07-01 Richard Biener <rguenther@suse.de>
* fold-const.c (fold_binary_loc): Move ~X ^ X -> -1 and

View File

@ -1,3 +1,7 @@
2015-07-01 Eric Botcazou <ebotcazou@adacore.com>
* gfortran.dg/gomp/pr66633.f90: New test.
2015-07-01 Patrick Palka <ppalka@gcc.gnu.org>
PR c++/66686

View File

@ -0,0 +1,17 @@
! PR middle-end/66633
! Testcase by Andrew Benson <abensonca@gmail.com>
! { dg-do compile }
! { dg-options "-O0 -fopenmp" }
module spls
contains
function spl()
!$omp parallel
write (0,*) igrt(fli)
!$omp end parallel
contains
double precision function fli()
end function fli
end function spl
end module spls

View File

@ -1069,7 +1069,9 @@ static bool
convert_nonlocal_omp_clauses (tree *pclauses, struct walk_stmt_info *wi)
{
struct nesting_info *const info = (struct nesting_info *) wi->info;
bool need_chain = false, need_stmts = false;
/* If not optimizing, we will force the creation of the CHAIN object in
convert_all_function_calls, so we need to take it into account here. */
bool need_chain = info->outer && !optimize, need_stmts = false;
tree clause, decl;
int dummy;
bitmap new_suppress;
@ -1697,7 +1699,9 @@ static bool
convert_local_omp_clauses (tree *pclauses, struct walk_stmt_info *wi)
{
struct nesting_info *const info = (struct nesting_info *) wi->info;
bool need_frame = false, need_stmts = false;
/* If not optimizing, we will force the creation of the FRAME object in
convert_all_function_calls, so we need to take it into account here. */
bool need_frame = info->inner && !optimize, need_stmts = false;
tree clause, decl;
int dummy;
bitmap new_suppress;