diff options
-rw-r--r-- | gcc/fortran/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/interface.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/warn_alias.f90 | 33 |
4 files changed, 45 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 6b95a0d..559e688 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2013-07-27 Tobias Burnus <burnus@net-b.de> + + PR fortran/57991 + * interface.c (check_some_aliasing): Also warn for intent OUT/OUT. + 2013-07-27 Janus Weil <janus@gcc.gnu.org> PR fortran/57285 diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c index 3c794b2..339dd24 100644 --- a/gcc/fortran/interface.c +++ b/gcc/fortran/interface.c @@ -3078,7 +3078,8 @@ check_some_aliasing (gfc_formal_arglist *f, gfc_actual_arglist *a) break; f2_intent = p[j].f->sym->attr.intent; if ((f1_intent == INTENT_IN && f2_intent == INTENT_OUT) - || (f1_intent == INTENT_OUT && f2_intent == INTENT_IN)) + || (f1_intent == INTENT_OUT && f2_intent == INTENT_IN) + || (f1_intent == INTENT_OUT && f2_intent == INTENT_OUT)) { gfc_warning ("Same actual argument associated with INTENT(%s) " "argument '%s' and INTENT(%s) argument '%s' at %L", diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0940a39..fe05cb8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-07-27 Tobias Burnus <burnus@net-b.de> + + PR fortran/57991 + * gfortran.dg/warn_alias.f90: New. + 2013-07-27 Janus Weil <janus@gcc.gnu.org> PR fortran/57285 diff --git a/gcc/testsuite/gfortran.dg/warn_alias.f90 b/gcc/testsuite/gfortran.dg/warn_alias.f90 new file mode 100644 index 0000000..99b97a6 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/warn_alias.f90 @@ -0,0 +1,33 @@ +! { dg-do compile } +! { dg-options "-Waliasing" } +! +! PR fortran/57991 +! +! Added check for OUT/OUT. IN/OUT and OUT/IN where already check +! since GCC 4.0, but not being tested for. + + Program q + integer :: x + x = 5 + Call test1(x, x) ! { dg-warning "Same actual argument associated with INTENT.OUT. argument 'a' and INTENT.OUT. argument 'b'" } + Call test2(x, x) ! { dg-warning "Same actual argument associated with INTENT.IN. argument 'a' and INTENT.OUT. argument 'b'" } + Call test3(x, x) ! { dg-warning "Same actual argument associated with INTENT.OUT. argument 'a' and INTENT.IN. argument 'b'" } + Contains + Subroutine test1(a,b) + Integer, intent(out) :: a + Integer, intent(out) :: b + b = 5 + a = 5 + End Subroutine + Subroutine test2(a,b) + Integer, intent(in) :: a + Integer, intent(out) :: b + b = 5 + a + End Subroutine + Subroutine test3(a,b) + Integer, intent(out) :: a + Integer, intent(in) :: b + a = 5 + b + End Subroutine + End Program + |