aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2012-08-20 07:47:46 +0200
committerTobias Burnus <burnus@gcc.gnu.org>2012-08-20 07:47:46 +0200
commitf657024b85d19eefb046c487a6f7e48bd4905dc9 (patch)
tree51ca2ece33f0faaea70effd3caefa5961c1fb915 /gcc/testsuite
parenta15f1338f99a03da935ecbb1f04097469296e91a (diff)
downloadgcc-f657024b85d19eefb046c487a6f7e48bd4905dc9.zip
gcc-f657024b85d19eefb046c487a6f7e48bd4905dc9.tar.gz
gcc-f657024b85d19eefb046c487a6f7e48bd4905dc9.tar.bz2
re PR fortran/54301 (Add optional warning if pointer assigning a local variable to a nonlocal pointer)
2012-08-20 Tobias Burnus <burnus@net-b.de> PR fortran/54301 * expr.c (gfc_check_pointer_assign): Warn when the pointer might outlive its target. * gfortran.h (struct gfc_option_t): Add warn_target_lifetime. * options.c (gfc_init_options, set_wall, gfc_handle_option): handle it. * invoke.texi (-Wtarget-lifetime): Document it. (-Wall): Implied it. * lang.opt (-Wtarget-lifetime): New flag. 2012-08-20 Tobias Burnus <burnus@net-b.de> PR fortran/54301 * gfortran.dg/warn_target_lifetime_1.f90: New. From-SVN: r190522
Diffstat (limited to 'gcc/testsuite')
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/warn_target_lifetime_1.f9047
2 files changed, 52 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 1e29433..c115e55 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2012-08-20 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/54301
+ * gfortran.dg/warn_target_lifetime_1.f90: New.
+
2012-08-19 Thomas König <tkoenig@gcc.gnu.org>
PR fortran/54298
diff --git a/gcc/testsuite/gfortran.dg/warn_target_lifetime_1.f90 b/gcc/testsuite/gfortran.dg/warn_target_lifetime_1.f90
new file mode 100644
index 0000000..fafa0f1
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/warn_target_lifetime_1.f90
@@ -0,0 +1,47 @@
+! { dg-do compile }
+! { dg-options "-Wtarget-lifetime" }
+!
+! PR fortran/54301
+!
+function f () result (ptr)
+ integer, pointer :: ptr(:)
+ integer, allocatable, target :: a(:)
+ allocate(a(5))
+
+ ptr => a ! { dg-warning "Pointer at .1. in pointer assignment might outlive the pointer target" }
+ a = [1,2,3,4,5]
+end function
+
+
+subroutine foo()
+ integer, pointer :: ptr(:)
+ call bar ()
+contains
+ subroutine bar ()
+ integer, target :: tgt(5)
+ ptr => tgt ! { dg-warning "Pointer at .1. in pointer assignment might outlive the pointer target" }
+ end subroutine bar
+end subroutine foo
+
+function foo3(tgt)
+ integer, target :: tgt
+ integer, pointer :: foo3
+ foo3 => tgt
+end function
+
+subroutine sub()
+ implicit none
+ integer, pointer :: ptr
+ integer, target :: tgt
+ ptr => tgt
+
+ block
+ integer, pointer :: p2
+ integer, target :: tgt2
+ p2 => tgt2
+ p2 => tgt
+ ptr => p2
+ ptr => tgt
+ ptr => tgt2 ! { dg-warning "Pointer at .1. in pointer assignment might outlive the pointer target" }
+ end block
+end subroutine sub