diff options
author | janus <janus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2017-09-02 19:04:08 +0000 |
---|---|---|
committer | janus <janus@138bc75d-0d04-0410-961f-82ee72b054a4> | 2017-09-02 19:04:08 +0000 |
commit | 34e322d178d1f76b9b47ecfb0f7b085d75832b1e (patch) | |
tree | 659a0193833f1b331dece185d96b7f2e7568e33d | |
parent | a4923bff59eee4bbc4eedd17d44735a417ff6e85 (diff) | |
download | gcc-34e322d178d1f76b9b47ecfb0f7b085d75832b1e.tar.gz |
2017-09-02 Janus Weil <janus@gcc.gnu.org>
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 <janus@gcc.gnu.org>
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-7-branch@251618 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/fortran/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fortran/expr.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/warn_target_lifetime_3.f90 | 2 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/warn_target_lifetime_4.f90 | 28 |
5 files changed, 45 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 63064268970..2d802f128f0 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2017-09-02 Janus Weil <janus@gcc.gnu.org> + + Backport from trunk + PR fortran/81770 + * expr.c (gfc_check_pointer_assign): Improve the check whether pointer + may outlive pointer target. + 2017-08-22 Jerry DeLisle <jvdelisle@gcc.gnu.org> Backport from trunk diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c index c7d3e549c5b..1718e4a55b8 100644 --- a/gcc/fortran/expr.c +++ b/gcc/fortran/expr.c @@ -3806,7 +3806,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 d3c98ae1464..d635bed7486 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2017-09-02 Janus Weil <janus@gcc.gnu.org> + + 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-29 Michael Meissner <meissner@linux.vnet.ibm.com> Back port from trunk diff --git a/gcc/testsuite/gfortran.dg/warn_target_lifetime_3.f90 b/gcc/testsuite/gfortran.dg/warn_target_lifetime_3.f90 index 6c8ea5b9458..0ef1e2d19c7 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 00000000000..d2972a92283 --- /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 <janus@gcc.gnu.org> + +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 |