summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjanus <janus@138bc75d-0d04-0410-961f-82ee72b054a4>2017-09-02 19:04:08 +0000
committerjanus <janus@138bc75d-0d04-0410-961f-82ee72b054a4>2017-09-02 19:04:08 +0000
commit34e322d178d1f76b9b47ecfb0f7b085d75832b1e (patch)
tree659a0193833f1b331dece185d96b7f2e7568e33d
parenta4923bff59eee4bbc4eedd17d44735a417ff6e85 (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/fortran/expr.c3
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/gfortran.dg/warn_target_lifetime_3.f902
-rw-r--r--gcc/testsuite/gfortran.dg/warn_target_lifetime_4.f9028
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