OSDN Git Service

* cfganal.c (flow_call_edges_add): Don't crash on noreturn call.
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 7 Jan 2003 20:14:51 +0000 (20:14 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 7 Jan 2003 20:14:51 +0000 (20:14 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@61007 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/cfganal.c
gcc/testsuite/gcc.dg/20030107-1.c [new file with mode: 0644]

index ac0a80d..8acd399 100644 (file)
@@ -1,3 +1,7 @@
+2003-01-07  Richard Henderson  <rth@redhat.com>
+
+       * cfganal.c (flow_call_edges_add): Don't crash on noreturn call.
+
 2003-01-07  Daniel Berlin  <dberlin@dberlin.org>
 
        * cfg.c: Include alloc-pool.h
index 170ba44..a787817 100644 (file)
@@ -1,6 +1,6 @@
 /* Control flow graph analysis code for GNU compiler.
    Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-   1999, 2000, 2001 Free Software Foundation, Inc.
+   1999, 2000, 2001, 2003 Free Software Foundation, Inc.
 
 This file is part of GCC.
 
@@ -322,10 +322,11 @@ flow_call_edges_add (blocks)
 
          for (e = bb->succ; e; e = e->succ_next)
            if (e->dest == EXIT_BLOCK_PTR)
-             break;
-
-         insert_insn_on_edge (gen_rtx_USE (VOIDmode, const0_rtx), e);
-         commit_edge_insertions ();
+             {
+               insert_insn_on_edge (gen_rtx_USE (VOIDmode, const0_rtx), e);
+               commit_edge_insertions ();
+               break;
+             }
        }
     }
 
diff --git a/gcc/testsuite/gcc.dg/20030107-1.c b/gcc/testsuite/gcc.dg/20030107-1.c
new file mode 100644 (file)
index 0000000..9264eba
--- /dev/null
@@ -0,0 +1,5 @@
+/* { dg-do compile } */
+/* { dg-options "-fprofile-arcs" } */
+
+extern void bar(void) __attribute__((noreturn));
+int foo (void) { bar(); }