comparison gcc/cfgbuild.c @ 67:f6334be47118

update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
author nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
date Tue, 22 Mar 2011 17:18:12 +0900
parents b7f97abdc517
children 04ced10e8804
comparison
equal deleted inserted replaced
65:65488c3d617d 67:f6334be47118
1 /* Control flow graph building code for GNU compiler. 1 /* Control flow graph building code for GNU compiler.
2 Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2 Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008 3 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
4 Free Software Foundation, Inc. 4 Free Software Foundation, Inc.
5 5
6 This file is part of GCC. 6 This file is part of GCC.
7 7
8 GCC is free software; you can redistribute it and/or modify it under 8 GCC is free software; you can redistribute it and/or modify it under
32 #include "flags.h" 32 #include "flags.h"
33 #include "output.h" 33 #include "output.h"
34 #include "function.h" 34 #include "function.h"
35 #include "except.h" 35 #include "except.h"
36 #include "expr.h" 36 #include "expr.h"
37 #include "toplev.h" 37 #include "diagnostic-core.h"
38 #include "timevar.h" 38 #include "timevar.h"
39 #include "sbitmap.h" 39 #include "sbitmap.h"
40 40
41 static void make_edges (basic_block, basic_block, int); 41 static void make_edges (basic_block, basic_block, int);
42 static void make_label_edge (sbitmap, basic_block, rtx, int); 42 static void make_label_edge (sbitmap, basic_block, rtx, int);
110 case INSN: 110 case INSN:
111 /* Treat trap instructions like noreturn calls (same provision). */ 111 /* Treat trap instructions like noreturn calls (same provision). */
112 if (GET_CODE (PATTERN (insn)) == TRAP_IF 112 if (GET_CODE (PATTERN (insn)) == TRAP_IF
113 && XEXP (PATTERN (insn), 0) == const1_rtx) 113 && XEXP (PATTERN (insn), 0) == const1_rtx)
114 return true; 114 return true;
115 if (!flag_non_call_exceptions) 115 if (!cfun->can_throw_non_call_exceptions)
116 return false; 116 return false;
117 break; 117 break;
118 118
119 case BARRIER: 119 case BARRIER:
120 /* It is nonsense to reach barrier when looking for the 120 /* It is nonsense to reach barrier when looking for the
331 331
332 /* If this is a CALL_INSN, then mark it as reaching the active EH 332 /* If this is a CALL_INSN, then mark it as reaching the active EH
333 handler for this CALL_INSN. If we're handling non-call 333 handler for this CALL_INSN. If we're handling non-call
334 exceptions then any insn can reach any of the active handlers. 334 exceptions then any insn can reach any of the active handlers.
335 Also mark the CALL_INSN as reaching any nonlocal goto handler. */ 335 Also mark the CALL_INSN as reaching any nonlocal goto handler. */
336 else if (code == CALL_INSN || flag_non_call_exceptions) 336 else if (code == CALL_INSN || cfun->can_throw_non_call_exceptions)
337 { 337 {
338 /* Add any appropriate EH edges. */ 338 /* Add any appropriate EH edges. */
339 rtl_make_eh_edge (edge_cache, bb, insn); 339 rtl_make_eh_edge (edge_cache, bb, insn);
340 340
341 if (code == CALL_INSN && nonlocal_goto_handler_labels) 341 if (code == CALL_INSN && nonlocal_goto_handler_labels)