From: Janus Weil Date: Sat, 2 Sep 2017 20:13:49 +0000 (+0200) Subject: backport: re PR fortran/81770 (Bogus warning: Pointer in pointer assignment might... X-Git-Tag: releases/gcc-5.5.0~90 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3466739ca6469955d598d4f76a758dee869232fe;p=thirdparty%2Fgcc.git backport: re PR fortran/81770 (Bogus warning: Pointer in pointer assignment might outlive the pointer target) 2017-09-02 Janus Weil Backport from trunk PR fortran/81770 * expr.c (gfc_check_pointer_assign): Improve the check whether pointer may outlive pointer target. 2017-09-02 Janus Weil Backport from trunk PR fortran/81770 * gfortran.dg/warn_target_lifetime_3.f90: Fix a typo. * gfortran.dg/warn_target_lifetime_4.f90: New testcase. From-SVN: r251620 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 1cb68f81b7f6..c3356908f6d1 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2017-09-02 Janus Weil + + Backport from trunk + PR fortran/81770 + * expr.c (gfc_check_pointer_assign): Improve the check whether pointer + may outlive pointer target. + 2017-06-09 Janus Weil Backport from trunk diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c index fa928fe52c75..3744f43482f0 100644 --- a/gcc/fortran/expr.c +++ b/gcc/fortran/expr.c @@ -3782,7 +3782,8 @@ gfc_check_pointer_assign (gfc_expr *lvalue, gfc_expr *rvalue) if (warn_target_lifetime && rvalue->expr_type == EXPR_VARIABLE && !rvalue->symtree->n.sym->attr.save - && !attr.pointer && !rvalue->symtree->n.sym->attr.host_assoc + && !rvalue->symtree->n.sym->attr.pointer && !attr.pointer + && !rvalue->symtree->n.sym->attr.host_assoc && !rvalue->symtree->n.sym->attr.in_common && !rvalue->symtree->n.sym->attr.use_assoc && !rvalue->symtree->n.sym->attr.dummy) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 840acd1768c8..00747512c05b 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2017-09-02 Janus Weil + + Backport from trunk + PR fortran/81770 + * gfortran.dg/warn_target_lifetime_3.f90: Fix a typo. + * gfortran.dg/warn_target_lifetime_4.f90: New testcase. + 2017-08-22 Peter Bergner Backport from mainline diff --git a/gcc/testsuite/gfortran.dg/warn_target_lifetime_3.f90 b/gcc/testsuite/gfortran.dg/warn_target_lifetime_3.f90 index 9113a885fa6b..83188a5c116d 100644 --- a/gcc/testsuite/gfortran.dg/warn_target_lifetime_3.f90 +++ b/gcc/testsuite/gfortran.dg/warn_target_lifetime_3.f90 @@ -3,7 +3,7 @@ ! ! PR fortran/55476 ! -! Contribued by Janus Weil +! Contributed by Janus Weil ! subroutine test integer, pointer :: p diff --git a/gcc/testsuite/gfortran.dg/warn_target_lifetime_4.f90 b/gcc/testsuite/gfortran.dg/warn_target_lifetime_4.f90 new file mode 100644 index 000000000000..d2972a922836 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/warn_target_lifetime_4.f90 @@ -0,0 +1,28 @@ +! { dg-do compile } +! { dg-options "-Wtarget-lifetime" } +! +! PR fortran/81770: [5/6/7 Regression] Bogus warning: Pointer in pointer assignment might outlive the pointer target +! +! Contributed by Janus Weil + +module m + + type t + integer, allocatable :: l + end type + +contains + + subroutine sub(c_in, list) + type(t), target, intent(in) :: c_in + integer, pointer, intent(out) :: list + + type(t), pointer :: container + + container => c_in + + list => container%l + + end subroutine + +end