#include "config.h"#include "system.h"#include "coretypes.h"#include "tm.h"#include "tree.h"#include "rtl.h"#include "varray.h"#include "tree-gimple.h"#include "tree-inline.h"#include "diagnostic.h"#include "langhooks.h"#include "langhooks-def.h"#include "tree-flow.h"#include "timevar.h"#include "except.h"#include "hashtab.h"#include "flags.h"#include "function.h"#include "expr.h"#include "toplev.h"#include "tree-pass.h"Include dependency graph for gimple-low.c:

Go to the source code of this file.
Data Structures | |
| struct | lower_data |
Functions | |
| static void | lower_stmt (tree_stmt_iterator *, struct lower_data *) |
| static void | lower_bind_expr (tree_stmt_iterator *, struct lower_data *) |
| static void | lower_cond_expr (tree_stmt_iterator *, struct lower_data *) |
| static void | lower_return_expr (tree_stmt_iterator *, struct lower_data *) |
| static unsigned int | lower_function_body () |
| static void | lower_stmt_body () |
| static void | lower_omp_directive () |
| static void | lower_stmt () |
| static void | lower_bind_expr () |
| static bool | try_catch_may_fallthru () |
| bool | block_may_fallthru () |
| static void | lower_cond_expr () |
| static void | lower_return_expr () |
| void | record_vars_into () |
| void | record_vars () |
| static void | mark_blocks_with_used_vars () |
| static unsigned int | mark_used_blocks () |
Variables | |
| tree_opt_pass | pass_lower_cf |
| tree_opt_pass | pass_mark_used_blocks |
|
|
Try to determine if we can fall out of the bottom of BLOCK. This guess need not be 100% accurate; simply be conservative and return true if we don't know. This is used only to avoid stupidly generating extra code. If we're wrong, we'll just delete the extra code later. Definition at line 345 of file gimple-low.c. References BIND_EXPR_BODY, call_expr_flags(), COND_EXPR_ELSE, COND_EXPR_THEN, ECF_NORETURN, expr_last(), NULL_TREE, SWITCH_LABELS, TREE_CODE, TREE_OPERAND, and try_catch_may_fallthru(). Referenced by convert_nl_goto_receiver(), frob_into_branch_around(), honor_protect_cleanup_actions(), lower_catch(), lower_cleanup(), lower_cond_expr(), lower_function_body(), lower_try_finally(), shortcut_cond_expr(), and try_catch_may_fallthru(). 00346 { 00347 tree stmt = expr_last (block); 00348 00349 switch (stmt ? TREE_CODE (stmt) : ERROR_MARK) 00350 { 00351 case GOTO_EXPR: 00352 case RETURN_EXPR: 00353 case RESX_EXPR: 00354 /* Easy cases. If the last statement of the block implies 00355 control transfer, then we can't fall through. */ 00356 return false; 00357 00358 case SWITCH_EXPR: 00359 /* If SWITCH_LABELS is set, this is lowered, and represents a 00360 branch to a selected label and hence can not fall through. 00361 Otherwise SWITCH_BODY is set, and the switch can fall 00362 through. */ 00363 return SWITCH_LABELS (stmt) == NULL_TREE; 00364 00365 case COND_EXPR: 00366 if (block_may_fallthru (COND_EXPR_THEN (stmt))) 00367 return true; 00368 return block_may_fallthru (COND_EXPR_ELSE (stmt)); 00369 00370 case BIND_EXPR: 00371 return block_may_fallthru (BIND_EXPR_BODY (stmt)); 00372 00373 case TRY_CATCH_EXPR: 00374 return try_catch_may_fallthru (stmt); 00375 00376 case TRY_FINALLY_EXPR: 00377 /* The finally clause is always executed after the try clause, 00378 so if it does not fall through, then the try-finally will not 00379 fall through. Otherwise, if the try clause does not fall 00380 through, then when the finally clause falls through it will 00381 resume execution wherever the try clause was going. So the 00382 whole try-finally will only fall through if both the try 00383 clause and the finally clause fall through. */ 00384 return (block_may_fallthru (TREE_OPERAND (stmt, 0)) 00385 && block_may_fallthru (TREE_OPERAND (stmt, 1))); 00386 00387 case MODIFY_EXPR: 00388 if (TREE_CODE (TREE_OPERAND (stmt, 1)) == CALL_EXPR) 00389 stmt = TREE_OPERAND (stmt, 1); 00390 else 00391 return true; 00392 /* FALLTHRU */ 00393 00394 case CALL_EXPR: 00395 /* Functions that do not return do not fall through. */ 00396 return (call_expr_flags (stmt) & ECF_NORETURN) == 0; 00397 00398 case CLEANUP_POINT_EXPR: 00399 return block_may_fallthru (TREE_OPERAND (stmt, 0)); 00400 00401 default: 00402 return true; 00403 } 00404 }
|
|
|
Lowers a bind_expr TSI. DATA is passed through the recursion. Definition at line 240 of file gimple-low.c. References BIND_EXPR_BLOCK, BIND_EXPR_BODY, BIND_EXPR_VARS, lower_data::block, BLOCK_CHAIN, BLOCK_SUBBLOCKS, BLOCK_SUPERCONTEXT, current_function_decl, DECL_INITIAL, lower_stmt_body(), NULL_TREE, record_vars(), TREE_ASM_WRITTEN, tsi_delink(), tsi_link_before(), TSI_SAME_STMT, and tsi_stmt(). 00241 { 00242 tree old_block = data->block; 00243 tree stmt = tsi_stmt (*tsi); 00244 tree new_block = BIND_EXPR_BLOCK (stmt); 00245 00246 if (new_block) 00247 { 00248 if (new_block == old_block) 00249 { 00250 /* The outermost block of the original function may not be the 00251 outermost statement chain of the gimplified function. So we 00252 may see the outermost block just inside the function. */ 00253 gcc_assert (new_block == DECL_INITIAL (current_function_decl)); 00254 new_block = NULL; 00255 } 00256 else 00257 { 00258 /* We do not expect to handle duplicate blocks. */ 00259 gcc_assert (!TREE_ASM_WRITTEN (new_block)); 00260 TREE_ASM_WRITTEN (new_block) = 1; 00261 00262 /* Block tree may get clobbered by inlining. Normally this would 00263 be fixed in rest_of_decl_compilation using block notes, but 00264 since we are not going to emit them, it is up to us. */ 00265 BLOCK_CHAIN (new_block) = BLOCK_SUBBLOCKS (old_block); 00266 BLOCK_SUBBLOCKS (old_block) = new_block; 00267 BLOCK_SUBBLOCKS (new_block) = NULL_TREE; 00268 BLOCK_SUPERCONTEXT (new_block) = old_block; 00269 00270 data->block = new_block; 00271 } 00272 } 00273 00274 record_vars (BIND_EXPR_VARS (stmt)); 00275 lower_stmt_body (BIND_EXPR_BODY (stmt), data); 00276 00277 if (new_block) 00278 { 00279 gcc_assert (data->block == new_block); 00280 00281 BLOCK_SUBBLOCKS (new_block) 00282 = blocks_nreverse (BLOCK_SUBBLOCKS (new_block)); 00283 data->block = old_block; 00284 } 00285 00286 /* The BIND_EXPR no longer carries any useful information -- kill it. */ 00287 tsi_link_before (tsi, BIND_EXPR_BODY (stmt), TSI_SAME_STMT); 00288 tsi_delink (tsi); 00289 }
|
|
||||||||||||
|
Referenced by lower_function_body(), and lower_stmt(). |
|
|
Lowers a cond_expr TSI. DATA is passed through the recursion. Definition at line 409 of file gimple-low.c. References block_may_fallthru(), build1, build_and_jump(), COND_EXPR_ELSE, COND_EXPR_THEN, expr_only(), LABEL_EXPR_LABEL, lower_stmt_body(), NULL_TREE, simple_goto_p(), TREE_SIDE_EFFECTS, TSI_CONTINUE_LINKING, tsi_delink(), tsi_link_after(), tsi_next(), tsi_stmt(), and void_type_node. 00410 { 00411 tree stmt = tsi_stmt (*tsi); 00412 bool then_is_goto, else_is_goto; 00413 tree then_branch, else_branch; 00414 tree then_goto, else_goto; 00415 00416 then_branch = COND_EXPR_THEN (stmt); 00417 else_branch = COND_EXPR_ELSE (stmt); 00418 00419 lower_stmt_body (then_branch, data); 00420 lower_stmt_body (else_branch, data); 00421 00422 then_goto = expr_only (then_branch); 00423 then_is_goto = then_goto && simple_goto_p (then_goto); 00424 00425 else_goto = expr_only (else_branch); 00426 else_is_goto = else_goto && simple_goto_p (else_goto); 00427 00428 if (!then_is_goto || !else_is_goto) 00429 { 00430 tree then_label, else_label, end_label, t; 00431 00432 then_label = NULL_TREE; 00433 else_label = NULL_TREE; 00434 end_label = NULL_TREE; 00435 00436 /* Replace the cond_expr with explicit gotos. */ 00437 if (!then_is_goto) 00438 { 00439 t = build1 (LABEL_EXPR, void_type_node, NULL_TREE); 00440 if (TREE_SIDE_EFFECTS (then_branch)) 00441 then_label = t; 00442 else 00443 end_label = t; 00444 then_goto = build_and_jump (&LABEL_EXPR_LABEL (t)); 00445 } 00446 00447 if (!else_is_goto) 00448 { 00449 t = build1 (LABEL_EXPR, void_type_node, NULL_TREE); 00450 if (TREE_SIDE_EFFECTS (else_branch)) 00451 else_label = t; 00452 else 00453 { 00454 /* Both THEN and ELSE can be no-ops if one or both contained an 00455 empty BIND_EXPR that was associated with the toplevel block 00456 of an inlined function. In that case remove_useless_stmts 00457 can't have cleaned things up for us; kill the whole 00458 conditional now. */ 00459 if (end_label) 00460 { 00461 tsi_delink (tsi); 00462 return; 00463 } 00464 else 00465 end_label = t; 00466 } 00467 else_goto = build_and_jump (&LABEL_EXPR_LABEL (t)); 00468 } 00469 00470 if (then_label) 00471 { 00472 bool may_fallthru = block_may_fallthru (then_branch); 00473 00474 tsi_link_after (tsi, then_label, TSI_CONTINUE_LINKING); 00475 tsi_link_after (tsi, then_branch, TSI_CONTINUE_LINKING); 00476 00477 if (else_label && may_fallthru) 00478 { 00479 end_label = build1 (LABEL_EXPR, void_type_node, NULL_TREE); 00480 t = build_and_jump (&LABEL_EXPR_LABEL (end_label)); 00481 tsi_link_after (tsi, t, TSI_CONTINUE_LINKING); 00482 } 00483 } 00484 00485 if (else_label) 00486 { 00487 tsi_link_after (tsi, else_label, TSI_CONTINUE_LINKING); 00488 tsi_link_after (tsi, else_branch, TSI_CONTINUE_LINKING); 00489 } 00490 00491 if (end_label) 00492 tsi_link_after (tsi, end_label, TSI_CONTINUE_LINKING); 00493 } 00494 00495 COND_EXPR_THEN (stmt) = then_goto; 00496 COND_EXPR_ELSE (stmt) = else_goto; 00497 00498 tsi_next (tsi); 00499 }
|
|
||||||||||||
|
Referenced by lower_stmt(). |
|
|
Lowers the body of current_function_decl. Definition at line 62 of file gimple-low.c. References alloc_stmt_list(), BLOCK_CHAIN, block_may_fallthru(), BLOCK_SUBBLOCKS, build1, current_function_decl, DECL_INITIAL, DECL_SAVED_TREE, lower_bind_expr(), NULL_TREE, SET_EXPR_LOCATION, SET_EXPR_LOCUS, TREE_ASM_WRITTEN, TREE_CHAIN, TREE_CODE, TREE_OPERAND, TREE_PURPOSE, TREE_VALUE, TSI_CONTINUE_LINKING, tsi_last(), tsi_link_after(), TSI_NEW_STMT, tsi_start(), and void_type_node. 00063 { 00064 struct lower_data data; 00065 tree *body_p = &DECL_SAVED_TREE (current_function_decl); 00066 tree bind = *body_p; 00067 tree_stmt_iterator i; 00068 tree t, x; 00069 00070 gcc_assert (TREE_CODE (bind) == BIND_EXPR); 00071 00072 memset (&data, 0, sizeof (data)); 00073 data.block = DECL_INITIAL (current_function_decl); 00074 BLOCK_SUBBLOCKS (data.block) = NULL_TREE; 00075 BLOCK_CHAIN (data.block) = NULL_TREE; 00076 TREE_ASM_WRITTEN (data.block) = 1; 00077 00078 *body_p = alloc_stmt_list (); 00079 i = tsi_start (*body_p); 00080 tsi_link_after (&i, bind, TSI_NEW_STMT); 00081 lower_bind_expr (&i, &data); 00082 00083 i = tsi_last (*body_p); 00084 00085 /* If the function falls off the end, we need a null return statement. 00086 If we've already got one in the return_statements list, we don't 00087 need to do anything special. Otherwise build one by hand. */ 00088 if (block_may_fallthru (*body_p) 00089 && (data.return_statements == NULL 00090 || TREE_OPERAND (TREE_VALUE (data.return_statements), 0) != NULL)) 00091 { 00092 x = build1 (RETURN_EXPR, void_type_node, NULL); 00093 SET_EXPR_LOCATION (x, cfun->function_end_locus); 00094 tsi_link_after (&i, x, TSI_CONTINUE_LINKING); 00095 } 00096 00097 /* If we lowered any return statements, emit the representative 00098 at the end of the function. */ 00099 for (t = data.return_statements ; t ; t = TREE_CHAIN (t)) 00100 { 00101 x = build1 (LABEL_EXPR, void_type_node, TREE_PURPOSE (t)); 00102 tsi_link_after (&i, x, TSI_CONTINUE_LINKING); 00103 00104 /* Remove the line number from the representative return statement. 00105 It now fills in for many such returns. Failure to remove this 00106 will result in incorrect results for coverage analysis. */ 00107 x = TREE_VALUE (t); 00108 #ifdef USE_MAPPED_LOCATION 00109 SET_EXPR_LOCATION (x, UNKNOWN_LOCATION); 00110 #else 00111 SET_EXPR_LOCUS (x, NULL); 00112 #endif 00113 tsi_link_after (&i, x, TSI_CONTINUE_LINKING); 00114 } 00115 00116 gcc_assert (data.block == DECL_INITIAL (current_function_decl)); 00117 BLOCK_SUBBLOCKS (data.block) 00118 = blocks_nreverse (BLOCK_SUBBLOCKS (data.block)); 00119 00120 clear_block_marks (data.block); 00121 return 0; 00122 }
|
|
|
Lower the OpenMP directive statement pointed by TSI. DATA is passed through the recursion. Definition at line 160 of file gimple-low.c. References lower_stmt_body(), NULL_TREE, OMP_BODY, tsi_delink(), tsi_link_before(), TSI_SAME_STMT, and tsi_stmt(). Referenced by lower_stmt(). 00161 { 00162 tree stmt; 00163 00164 stmt = tsi_stmt (*tsi); 00165 00166 lower_stmt_body (OMP_BODY (stmt), data); 00167 tsi_link_before (tsi, stmt, TSI_SAME_STMT); 00168 tsi_link_before (tsi, OMP_BODY (stmt), TSI_SAME_STMT); 00169 OMP_BODY (stmt) = NULL_TREE; 00170 tsi_delink (tsi); 00171 }
|
|
|
Definition at line 502 of file gimple-low.c. References build1, create_artificial_label(), EXPR_LOCUS, lower_data::return_statements, SET_EXPR_LOCUS, TREE_CHAIN, TREE_CODE, tree_cons, TREE_OPERAND, TREE_PURPOSE, TREE_VALUE, tsi_delink(), tsi_link_before(), TSI_SAME_STMT, tsi_stmt(), and void_type_node. 00503 { 00504 tree stmt = tsi_stmt (*tsi); 00505 tree value, t, label; 00506 00507 /* Extract the value being returned. */ 00508 value = TREE_OPERAND (stmt, 0); 00509 if (value && TREE_CODE (value) == MODIFY_EXPR) 00510 value = TREE_OPERAND (value, 1); 00511 00512 /* Match this up with an existing return statement that's been created. */ 00513 for (t = data->return_statements; t ; t = TREE_CHAIN (t)) 00514 { 00515 tree tvalue = TREE_OPERAND (TREE_VALUE (t), 0); 00516 if (tvalue && TREE_CODE (tvalue) == MODIFY_EXPR) 00517 tvalue = TREE_OPERAND (tvalue, 1); 00518 00519 if (value == tvalue) 00520 { 00521 label = TREE_PURPOSE (t); 00522 goto found; 00523 } 00524 } 00525 00526 /* Not found. Create a new label and record the return statement. */ 00527 label = create_artificial_label (); 00528 data->return_statements = tree_cons (label, stmt, data->return_statements); 00529 00530 /* Generate a goto statement and remove the return statement. */ 00531 found: 00532 t = build1 (GOTO_EXPR, void_type_node, label); 00533 SET_EXPR_LOCUS (t, EXPR_LOCUS (stmt)); 00534 tsi_link_before (tsi, t, TSI_SAME_STMT); 00535 tsi_delink (tsi); 00536 }
|
|
||||||||||||
|
Referenced by lower_stmt(). |
|
|
Lowers statement TSI. DATA is passed through the recursion. Definition at line 177 of file gimple-low.c. References lower_data::block, CATCH_BODY, EH_FILTER_FAILURE, EXPR_HAS_LOCATION, lower_bind_expr(), lower_cond_expr(), lower_omp_directive(), lower_return_expr(), lower_stmt_body(), TREE_BLOCK, TREE_CODE, TREE_OPERAND, tsi_next(), and tsi_stmt(). 00178 { 00179 tree stmt = tsi_stmt (*tsi); 00180 00181 if (EXPR_HAS_LOCATION (stmt) && data) 00182 TREE_BLOCK (stmt) = data->block; 00183 00184 switch (TREE_CODE (stmt)) 00185 { 00186 case BIND_EXPR: 00187 lower_bind_expr (tsi, data); 00188 return; 00189 case COND_EXPR: 00190 lower_cond_expr (tsi, data); 00191 return; 00192 case RETURN_EXPR: 00193 lower_return_expr (tsi, data); 00194 return; 00195 00196 case TRY_FINALLY_EXPR: 00197 case TRY_CATCH_EXPR: 00198 lower_stmt_body (TREE_OPERAND (stmt, 0), data); 00199 lower_stmt_body (TREE_OPERAND (stmt, 1), data); 00200 break; 00201 case CATCH_EXPR: 00202 lower_stmt_body (CATCH_BODY (stmt), data); 00203 break; 00204 case EH_FILTER_EXPR: 00205 lower_stmt_body (EH_FILTER_FAILURE (stmt), data); 00206 break; 00207 00208 case NOP_EXPR: 00209 case ASM_EXPR: 00210 case MODIFY_EXPR: 00211 case CALL_EXPR: 00212 case GOTO_EXPR: 00213 case LABEL_EXPR: 00214 case SWITCH_EXPR: 00215 case OMP_FOR: 00216 case OMP_SECTIONS: 00217 case OMP_SECTION: 00218 case OMP_SINGLE: 00219 case OMP_MASTER: 00220 case OMP_ORDERED: 00221 case OMP_CRITICAL: 00222 case OMP_RETURN: 00223 case OMP_CONTINUE: 00224 break; 00225 00226 case OMP_PARALLEL: 00227 lower_omp_directive (tsi, data); 00228 return; 00229 00230 default: 00231 gcc_unreachable (); 00232 } 00233 00234 tsi_next (tsi); 00235 }
|
|
||||||||||||
|
Referenced by lower_stmt_body(). |
|
|
Lowers the EXPR. Unlike gimplification the statements are not relowered when they are changed -- if this has to be done, the lowering routine must do it explicitly. DATA is passed through the recursion. Definition at line 147 of file gimple-low.c. References lower_stmt(), tsi_end_p(), and tsi_start(). Referenced by lower_bind_expr(), lower_cond_expr(), lower_omp_directive(), and lower_stmt(). 00148 { 00149 tree_stmt_iterator tsi; 00150 00151 for (tsi = tsi_start (expr); !tsi_end_p (tsi); ) 00152 lower_stmt (&tsi, data); 00153 }
|
|
|
Mark BLOCK used if it has a used variable in it, then recurse over its subblocks. Definition at line 585 of file gimple-low.c. References BLOCK_VARS, TREE_CHAIN, and TREE_USED. Referenced by mark_used_blocks(). 00586 { 00587 tree var; 00588 tree subblock; 00589 00590 if (!TREE_USED (block)) 00591 { 00592 for (var = BLOCK_VARS (block); 00593 var; 00594 var = TREE_CHAIN (var)) 00595 { 00596 if (TREE_USED (var)) 00597 { 00598 TREE_USED (block) = true; 00599 break; 00600 } 00601 } 00602 } 00603 for (subblock = BLOCK_SUBBLOCKS (block); 00604 subblock; 00605 subblock = BLOCK_CHAIN (subblock)) 00606 mark_blocks_with_used_vars (subblock); 00607 }
|
|
|
Mark the used attribute on blocks correctly. Definition at line 612 of file gimple-low.c. References current_function_decl, DECL_INITIAL, and mark_blocks_with_used_vars(). 00613 { 00614 mark_blocks_with_used_vars (DECL_INITIAL (current_function_decl)); 00615 return 0; 00616 }
|
|
|
Record the variables in VARS into current_function_decl. Definition at line 575 of file gimple-low.c. References current_function_decl, and record_vars_into(). Referenced by gimple_add_tmp_var(), lower_bind_expr(), and pop_gimplify_context(). 00576 { 00577 record_vars_into (vars, current_function_decl); 00578 }
|
|
|
Record the variables in VARS into function FN. Definition at line 542 of file gimple-low.c. References current_function_decl, DECL_EXTERNAL, DECL_STRUCT_FUNCTION, NULL_TREE, TREE_CHAIN, TREE_CODE, and tree_cons. Referenced by record_vars(). 00543 { 00544 struct function *saved_cfun = cfun; 00545 00546 if (fn != current_function_decl) 00547 cfun = DECL_STRUCT_FUNCTION (fn); 00548 00549 for (; vars; vars = TREE_CHAIN (vars)) 00550 { 00551 tree var = vars; 00552 00553 /* BIND_EXPRs contains also function/type/constant declarations 00554 we don't need to care about. */ 00555 if (TREE_CODE (var) != VAR_DECL) 00556 continue; 00557 00558 /* Nothing to do in this case. */ 00559 if (DECL_EXTERNAL (var)) 00560 continue; 00561 00562 /* Record the variable. */ 00563 cfun->unexpanded_var_list = tree_cons (NULL_TREE, var, 00564 cfun->unexpanded_var_list); 00565 } 00566 00567 if (fn != current_function_decl) 00568 cfun = saved_cfun; 00569 }
|
|
|
Try to determine whether a TRY_CATCH expression can fall through. This is a subroutine of block_may_fallthru. Definition at line 295 of file gimple-low.c. References block_may_fallthru(), CATCH_BODY, EH_FILTER_FAILURE, TREE_CODE, TREE_OPERAND, tsi_end_p(), tsi_next(), tsi_start(), and tsi_stmt(). Referenced by block_may_fallthru(). 00296 { 00297 tree_stmt_iterator i; 00298 00299 /* If the TRY block can fall through, the whole TRY_CATCH can 00300 fall through. */ 00301 if (block_may_fallthru (TREE_OPERAND (stmt, 0))) 00302 return true; 00303 00304 i = tsi_start (TREE_OPERAND (stmt, 1)); 00305 switch (TREE_CODE (tsi_stmt (i))) 00306 { 00307 case CATCH_EXPR: 00308 /* We expect to see a sequence of CATCH_EXPR trees, each with a 00309 catch expression and a body. The whole TRY_CATCH may fall 00310 through iff any of the catch bodies falls through. */ 00311 for (; !tsi_end_p (i); tsi_next (&i)) 00312 { 00313 if (block_may_fallthru (CATCH_BODY (tsi_stmt (i)))) 00314 return true; 00315 } 00316 return false; 00317 00318 case EH_FILTER_EXPR: 00319 /* The exception filter expression only matters if there is an 00320 exception. If the exception does not match EH_FILTER_TYPES, 00321 we will execute EH_FILTER_FAILURE, and we will fall through 00322 if that falls through. If the exception does match 00323 EH_FILTER_TYPES, the stack unwinder will continue up the 00324 stack, so we will not fall through. We don't know whether we 00325 will throw an exception which matches EH_FILTER_TYPES or not, 00326 so we just ignore EH_FILTER_TYPES and assume that we might 00327 throw an exception which doesn't match. */ 00328 return block_may_fallthru (EH_FILTER_FAILURE (tsi_stmt (i))); 00329 00330 default: 00331 /* This case represents statements to be executed when an 00332 exception occurs. Those statements are implicitly followed 00333 by a RESX_EXPR to resume execution after the exception. So 00334 in this case the TRY_CATCH never falls through. */ 00335 return false; 00336 } 00337 }
|
|
|
Initial value:
{
"lower",
NULL,
lower_function_body,
NULL,
NULL,
0,
0,
PROP_gimple_any,
PROP_gimple_lcf,
0,
0,
TODO_dump_func,
0
}
Definition at line 124 of file gimple-low.c. |
|
|
Initial value:
{
"blocks",
NULL,
mark_used_blocks,
NULL,
NULL,
0,
0,
0,
0,
0,
0,
TODO_dump_func,
0
}
Definition at line 619 of file gimple-low.c. |
1.4.6