re PR fortran/89646 (Spurious actual argument might interfere warning)
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-14 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/89646 * gfortran.dg/pr89646.f90: New test. From-SVN: r272307
This commit is contained in:
parent
957ed73861
commit
3fa31ee92a
|
@ -1,4 +1,10 @@
|
|||
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
|
||||
|
|
|
@ -979,6 +979,10 @@ gfc_check_argument_var_dependency (gfc_expr *var, sym_intent intent,
|
|||
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. */
|
||||
|
||||
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",
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
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
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
! { 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
|
Loading…
Reference in New Issue