aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2006-10-29 11:27:39 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2006-10-29 11:27:39 +0100
commita7a53ca582735ec356bb273b2d17aee0274896d1 (patch)
tree59c440f9db09227ba377e82b3faec95f9cd560ba
parent3a0572072d2b6a49fa491744aea520cda26e85c3 (diff)
downloadgcc-a7a53ca582735ec356bb273b2d17aee0274896d1.zip
gcc-a7a53ca582735ec356bb273b2d17aee0274896d1.tar.gz
gcc-a7a53ca582735ec356bb273b2d17aee0274896d1.tar.bz2
re PR fortran/29629 (ICE on OpenMP-enabled program (gfc_conv_variable, at fortran/trans-expr.c:404))
PR fortran/29629 * trans-openmp.c (gfc_trans_omp_array_reduction): Set attr.flavor of init_val_sym and outer_sym to FL_VARIABLE. * testsuite/libgomp.fortran/pr29629.f90: New test. From-SVN: r118134
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/trans-openmp.c2
-rw-r--r--libgomp/ChangeLog5
-rw-r--r--libgomp/testsuite/libgomp.fortran/pr29629.f9020
4 files changed, 33 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 6c24c47..31c6c6f 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2006-10-29 Jakub Jelinek <jakub@redhat.com>
+
+ PR fortran/29629
+ * trans-openmp.c (gfc_trans_omp_array_reduction): Set attr.flavor
+ of init_val_sym and outer_sym to FL_VARIABLE.
+
2006-10-29 Kazu Hirata <kazu@codesourcery.com>
* intrinsic.texi: Fix a typo.
diff --git a/gcc/fortran/trans-openmp.c b/gcc/fortran/trans-openmp.c
index 32020cc..fa8be1d 100644
--- a/gcc/fortran/trans-openmp.c
+++ b/gcc/fortran/trans-openmp.c
@@ -300,6 +300,7 @@ gfc_trans_omp_array_reduction (tree c, gfc_symbol *sym, locus where)
init_val_sym.ts = sym->ts;
init_val_sym.attr.referenced = 1;
init_val_sym.declared_at = where;
+ init_val_sym.attr.flavor = FL_VARIABLE;
backend_decl = omp_reduction_init (c, gfc_sym_type (&init_val_sym));
init_val_sym.backend_decl = backend_decl;
@@ -308,6 +309,7 @@ gfc_trans_omp_array_reduction (tree c, gfc_symbol *sym, locus where)
outer_sym.as = gfc_copy_array_spec (sym->as);
outer_sym.attr.dummy = 0;
outer_sym.attr.result = 0;
+ outer_sym.attr.flavor = FL_VARIABLE;
outer_sym.backend_decl = create_tmp_var_raw (TREE_TYPE (decl), NULL);
/* Create fake symtrees for it. */
diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog
index d578824..139b7fc 100644
--- a/libgomp/ChangeLog
+++ b/libgomp/ChangeLog
@@ -1,3 +1,8 @@
+2006-10-29 Jakub Jelinek <jakub@redhat.com>
+
+ PR fortran/29629
+ * testsuite/libgomp.fortran/pr29629.f90: New test.
+
2006-10-24 Eric Botcazou <ebotcazou@libertysurf.fr>
PR libgomp/29494
diff --git a/libgomp/testsuite/libgomp.fortran/pr29629.f90 b/libgomp/testsuite/libgomp.fortran/pr29629.f90
new file mode 100644
index 0000000..9ccddff
--- /dev/null
+++ b/libgomp/testsuite/libgomp.fortran/pr29629.f90
@@ -0,0 +1,20 @@
+! PR fortran/29629
+! { dg-do run }
+
+program pr29629
+ integer :: n
+ n = 10000
+ if (any (func(n).ne.10000)) call abort
+ contains
+ function func(n)
+ integer, intent(in) :: n
+ integer, dimension(n) :: func
+ integer :: k
+ func = 0
+!$omp parallel do private(k), reduction(+:func), num_threads(4)
+ do k = 1, n
+ func = func + 1
+ end do
+!$omp end parallel do
+ end function
+end program