aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2010-11-10 19:04:04 +0100
committerTobias Burnus <burnus@gcc.gnu.org>2010-11-10 19:04:04 +0100
commit1d3a84ce0338d5002672a643ca506224cd944298 (patch)
tree67a1fe76be31a8c6ed217135b30c3902c00a2d68 /gcc
parent95b53b576b7372dd13ab1115df13c2dc92b730b9 (diff)
downloadgcc-1d3a84ce0338d5002672a643ca506224cd944298.zip
gcc-1d3a84ce0338d5002672a643ca506224cd944298.tar.gz
gcc-1d3a84ce0338d5002672a643ca506224cd944298.tar.bz2
re PR fortran/46411 (MOVE_ALLOC wrongly rejected as impure)
2010-11-10 Tobias Burnus <burnus@net-b.de> PR fortran/46411 * intrinsic.c (gfc_intrinsic_sub_interface): Check for attr.pure and not for attr.elemental. * intrinsic.texi (move_alloc): Document as being pure. 2010-11-10 Tobias Burnus <burnus@net-b.de> PR fortran/46411 * gfortran.dg/intrinsic_7.f90: New. From-SVN: r166550
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog7
-rw-r--r--gcc/fortran/intrinsic.c2
-rw-r--r--gcc/fortran/intrinsic.texi2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/intrinsic_7.f9013
5 files changed, 27 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index d0b003d..fe335a9 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,10 @@
+2010-11-10 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/46411
+ * intrinsic.c (gfc_intrinsic_sub_interface): Check for attr.pure
+ and not for attr.elemental.
+ * intrinsic.texi (move_alloc): Document as being pure.
+
2010-11-10 Tobias Burnus <burnus@net-b.de>
PR fortran/46244
diff --git a/gcc/fortran/intrinsic.c b/gcc/fortran/intrinsic.c
index f7f0e05..d17544c 100644
--- a/gcc/fortran/intrinsic.c
+++ b/gcc/fortran/intrinsic.c
@@ -4193,7 +4193,7 @@ gfc_intrinsic_sub_interface (gfc_code *c, int error_flag)
c->resolved_sym->attr.elemental = isym->elemental;
}
- if (gfc_pure (NULL) && !isym->elemental)
+ if (gfc_pure (NULL) && !isym->pure)
{
gfc_error ("Subroutine call to intrinsic '%s' at %L is not PURE", name,
&c->loc);
diff --git a/gcc/fortran/intrinsic.texi b/gcc/fortran/intrinsic.texi
index 09f5278..3b81c2d 100644
--- a/gcc/fortran/intrinsic.texi
+++ b/gcc/fortran/intrinsic.texi
@@ -8977,7 +8977,7 @@ end program
Fortran 2003 and later
@item @emph{Class}:
-Subroutine
+Pure subroutine
@item @emph{Syntax}:
@code{CALL MOVE_ALLOC(FROM, TO)}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5143d15..ba0a4c1 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2010-11-10 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/46411
+ * gfortran.dg/intrinsic_7.f90: New.
+
2010-11-10 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* g++.dg/abi/rtti3.C: Scan for .weakext on alpha*-dec-osf*.
diff --git a/gcc/testsuite/gfortran.dg/intrinsic_7.f90 b/gcc/testsuite/gfortran.dg/intrinsic_7.f90
new file mode 100644
index 0000000..69bca66
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/intrinsic_7.f90
@@ -0,0 +1,13 @@
+! { dg-do compile }
+!
+! PR fortran/46411
+!
+! MOVE_ALLOC and other non-elemental but pure
+! procedures where regarded as impure.
+!
+
+pure subroutine test()
+ integer, allocatable :: a, b
+ allocate(a,b)
+ call move_alloc(a,b)
+end subroutine test