aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/pr66633.f9017
-rw-r--r--gcc/tree-nested.c8
4 files changed, 35 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3f0ba84..abbdf46 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index aca8886..8d53a61 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
diff --git a/gcc/testsuite/gfortran.dg/gomp/pr66633.f90 b/gcc/testsuite/gfortran.dg/gomp/pr66633.f90
new file mode 100644
index 0000000..60e47b3
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/gomp/pr66633.f90
@@ -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
diff --git a/gcc/tree-nested.c b/gcc/tree-nested.c
index f391c65..6b9d753 100644
--- a/gcc/tree-nested.c
+++ b/gcc/tree-nested.c
@@ -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;