From 2cdb2cec3d934c4d14a37f86189e63796965d0ef Mon Sep 17 00:00:00 2001
From: pinskia <pinskia@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sun, 5 Feb 2006 20:29:10 +0000
Subject: [PATCH] 2006-02-05  Andrew Pinski  <pinskia@physics.uc.edu>

        PR tree-opt/25251
        * tree-cfg.c (cleanup_dead_labels): Also don't remove
        forced labels.

2006-02-05  Andrew Pinski  <pinskia@physics.uc.edu>

        PR tree-opt/25251
        * gfortran.dg/assign_7.f: New test.



git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@110621 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog                        |  6 ++++++
 gcc/testsuite/ChangeLog              |  5 +++++
 gcc/testsuite/gfortran.dg/assign_7.f | 16 ++++++++++++++++
 gcc/tree-cfg.c                       |  6 ++++--
 4 files changed, 31 insertions(+), 2 deletions(-)
 create mode 100644 gcc/testsuite/gfortran.dg/assign_7.f

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 93a10d71d78c..ece6e7eb5113 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2006-02-05  Andrew Pinski  <pinskia@physics.uc.edu>
+
+	PR tree-opt/25251
+	* tree-cfg.c (cleanup_dead_labels): Also don't remove
+	forced labels.
+
 2006-02-04  Zdenek Dvorak <dvorakz@suse.cz>
 
 	* tree-vrp.c (cfg_loops): Removed.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a654677d188a..d21d5a778b70 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2006-02-05  Andrew Pinski  <pinskia@physics.uc.edu>
+
+	PR tree-opt/25251
+	* gfortran.dg/assign_7.f: New test.
+
 2006-02-05  H.J. Lu  <hongjiu.lu@intel.com>
 
 	PR fortran/26041
diff --git a/gcc/testsuite/gfortran.dg/assign_7.f b/gcc/testsuite/gfortran.dg/assign_7.f
new file mode 100644
index 000000000000..cb6b8258ba7d
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/assign_7.f
@@ -0,0 +1,16 @@
+C { dg-do compile }
+C Option passed to avoid excess errors from obsolete warning
+C { dg-options "-w" }
+
+      PROGRAM FM013
+      IF (ICZERO) 31270, 1270, 31270
+ 1270 CONTINUE
+ 1272 ASSIGN 1273 TO J
+ 1273 ASSIGN 1274 TO J
+ 1274 ASSIGN 1275 TO J
+      GOTO 1276
+ 1275 continue
+ 1276 GOTO J, ( 1272, 1273, 1274, 1275 )
+31270 IVDELE = IVDELE + 1
+      END
+
diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c
index 9ba761dcf4a9..85d588a131c8 100644
--- a/gcc/tree-cfg.c
+++ b/gcc/tree-cfg.c
@@ -1108,7 +1108,8 @@ cleanup_dead_labels (void)
   for_each_eh_region (update_eh_label);
 
   /* Finally, purge dead labels.  All user-defined labels and labels that
-     can be the target of non-local gotos are preserved.  */
+     can be the target of non-local gotos and labels which have their
+     address taken are preserved.  */
   FOR_EACH_BB (bb)
     {
       block_stmt_iterator i;
@@ -1128,7 +1129,8 @@ cleanup_dead_labels (void)
 
 	  if (label == label_for_this_bb
 	      || ! DECL_ARTIFICIAL (label)
-	      || DECL_NONLOCAL (label))
+	      || DECL_NONLOCAL (label)
+	      || FORCED_LABEL (label))
 	    bsi_next (&i);
 	  else
 	    bsi_remove (&i, true);
-- 
GitLab