aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Franke <franke.daniel@gmail.com>2010-06-10 14:25:56 -0400
committerDaniel Franke <dfranke@gcc.gnu.org>2010-06-10 14:25:56 -0400
commit84efddb2006d83cfe7d250ac4556442b98ba4bf5 (patch)
treec45163db1acd0734941abf9bd96a618ecb834a6b
parentda604ebda9226ee8cf08f7849488e201cc26fd40 (diff)
downloadgcc-84efddb2006d83cfe7d250ac4556442b98ba4bf5.zip
gcc-84efddb2006d83cfe7d250ac4556442b98ba4bf5.tar.gz
gcc-84efddb2006d83cfe7d250ac4556442b98ba4bf5.tar.bz2
re PR fortran/44457 (Missing ASYNCHRONOUS constraint check)
gcc/fortran/: 2010-06-10 Daniel Franke <franke.daniel@gmail.com> PR fortran/44457 * interface.c (compare_actual_formal): Reject actual arguments with array subscript passed to ASYNCHRONOUS dummys. gcc/testsuite/: 2010-06-10 Daniel Franke <franke.daniel@gmail.com> PR fortran/44457 * gfortran.dg/asynchronous_3.f03 From-SVN: r160567
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/interface.c10
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/asynchronous_3.f0315
4 files changed, 32 insertions, 4 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index d463f15..acb5fe1 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2010-06-10 Daniel Franke <franke.daniel@gmail.com>
+
+ PR fortran/44457
+ * interface.c (compare_actual_formal): Reject actual arguments with
+ array subscript passed to ASYNCHRONOUS dummys.
+
2010-06-10 Daniel Kraft <d@domob.eu>
PR fortran/38936
diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c
index 379c636..284622f 100644
--- a/gcc/fortran/interface.c
+++ b/gcc/fortran/interface.c
@@ -2133,13 +2133,15 @@ compare_actual_formal (gfc_actual_arglist **ap, gfc_formal_arglist *formal,
if ((f->sym->attr.intent == INTENT_OUT
|| f->sym->attr.intent == INTENT_INOUT
- || f->sym->attr.volatile_)
+ || f->sym->attr.volatile_
+ || f->sym->attr.asynchronous)
&& gfc_has_vector_subscript (a->expr))
{
if (where)
- gfc_error ("Array-section actual argument with vector subscripts "
- "at %L is incompatible with INTENT(OUT), INTENT(INOUT) "
- "or VOLATILE attribute of the dummy argument '%s'",
+ gfc_error ("Array-section actual argument with vector "
+ "subscripts at %L is incompatible with INTENT(OUT), "
+ "INTENT(INOUT), VOLATILE or ASYNCHRONOUS attribute "
+ "of the dummy argument '%s'",
&a->expr->where, f->sym->name);
return 0;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 1a0c99c..f5ca670 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2010-06-10 Daniel Franke <franke.daniel@gmail.com>
+
+ PR fortran/44457
+ * gfortran.dg/asynchronous_3.f03
+
2010-06-10 Changpeng Fang <changpeng.fang@amd.com>
PR middle-end/44185
diff --git a/gcc/testsuite/gfortran.dg/asynchronous_3.f03 b/gcc/testsuite/gfortran.dg/asynchronous_3.f03
new file mode 100644
index 0000000..7b83374
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/asynchronous_3.f03
@@ -0,0 +1,15 @@
+! { dg-do "compile" }
+!
+! PR fortran/44457 - no array-subscript actual argument
+! for an asynchronous dummy
+!
+
+ integer :: a(10), sect(3)
+ sect = [1,2,3]
+ call f(a(sect)) ! { dg-error "incompatible" }
+ call f(a(::2))
+contains
+ subroutine f(x)
+ integer, asynchronous :: x(:)
+ end subroutine f
+end