-2019-06-12 Steven G. Kargl <kargl@gcc.gnu.org>
+2019-06-14 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/89646
+ * dependency.c (gfc_check_argument_var_dependency): Suppress spurious
+ warnings by comparing variable names.
+
+2019-06-13 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/68544
* resolve.c (is_dt_name): New function to compare symbol name against
If a dependency is found in the case
elemental == ELEM_CHECK_VARIABLE, we will generate
a temporary, so we don't need to bother the user. */
- gfc_warning (0, "INTENT(%s) actual argument at %L might "
- "interfere with actual argument at %L.",
- intent == INTENT_OUT ? "OUT" : "INOUT",
- &var->where, &expr->where);
+
+ if (var->expr_type == EXPR_VARIABLE
+ && expr->expr_type == EXPR_VARIABLE
+ && strcmp(var->symtree->name, expr->symtree->name) == 0)
+ gfc_warning (0, "INTENT(%s) actual argument at %L might "
+ "interfere with actual argument at %L.",
+ intent == INTENT_OUT ? "OUT" : "INOUT",
+ &var->where, &expr->where);
}
return 0;
}
+2019-06-14 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/89646
+ * gfortran.dg/pr89646.f90: New test.
+
2019-06-14 H.J. Lu <hongjiu.lu@intel.com>
PR rtl-optimization/90765
--- /dev/null
+! { dg-do compile }
+! PR fortran/89646
+! Original testcase contributed by Ian Harvey <ian_harvey at bigpond dot com>
+!
+! This code use to give spurious warnings about aliasing.
+!
+module m
+ implicit none
+ type :: t
+ end type t
+ contains
+ ! To reproduce, both actual arguments must be TARGET,
+ ! both arguments must be of derived type.
+ subroutine s
+ type(t), target :: a(5)
+ type(t), target :: b(5)
+ call move(a, b)
+ end subroutine s
+ ! To reproduce, called procedure must be elemental.
+ elemental subroutine move(x, y)
+ type(t), intent(inout) :: x
+ type(t), intent(out) :: y
+ end subroutine move
+end module m