diff options
| author | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-09-23 00:51:40 +0000 |
|---|---|---|
| committer | hubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-09-23 00:51:40 +0000 |
| commit | 1b55e9dcbdaf4b6f3bac8fe2dca5bd075b0a0377 (patch) | |
| tree | 101fce60f8be93e2d49a7ca27ef11256887c00e0 | |
| parent | d8c70625ae072fce9cd64ee06c8a3b91bc554057 (diff) | |
| download | ppe42-gcc-1b55e9dcbdaf4b6f3bac8fe2dca5bd075b0a0377.tar.gz ppe42-gcc-1b55e9dcbdaf4b6f3bac8fe2dca5bd075b0a0377.zip | |
PR debug/17389
* dwarf2out.c (dwarf2out_finish): Deal with nested functions
of fully inlined functions.
* tree-inline.c (inline_forbidden_p_1): Nested functions can be
inlined.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@87911 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/dwarf2out.c | 11 | ||||
| -rw-r--r-- | gcc/tree-inline.c | 14 |
3 files changed, 14 insertions, 17 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5ece63e9e3a..ffbdcfb9eda 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2004-09-23 Jan Hubicka <jh@suse.cz> + PR debug/17389 + * dwarf2out.c (dwarf2out_finish): Deal with nested functions + of fully inlined functions. + * tree-inline.c (inline_forbidden_p_1): Nested functions can be + inlined. + * cfgexpand.c (add_reg_br_prob_note): New function. (expand_gimple_cond_expr): Use it. (tree_expand_cfg): No longer kill the profile. diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index e269629d9d2..3c47864c85b 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -13554,7 +13554,12 @@ dwarf2out_finish (const char *filename) nested function can be optimized away, which results in the nested function die being orphaned. Likewise with the return type of that nested function. Force - this to be a child of the containing function. */ + this to be a child of the containing function. + + It may happen that even the containing function got fully + inlined and optimized out. In that case we are lost and + assign the empty child. This should not be big issue as + the function is likely unreachable too. */ tree context = NULL_TREE; gcc_assert (node->created_for); @@ -13567,8 +13572,8 @@ dwarf2out_finish (const char *filename) gcc_assert (context && TREE_CODE (context) == FUNCTION_DECL); origin = lookup_decl_die (context); - gcc_assert (origin); - add_child_die (origin, die); + if (origin) + add_child_die (origin, die); } } } diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 243b870cf70..d026dca18ec 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -993,20 +993,6 @@ inline_forbidden_p_1 (tree *nodep, int *walk_subtrees ATTRIBUTE_UNUSED, } break; - case BIND_EXPR: - for (t = BIND_EXPR_VARS (node); t ; t = TREE_CHAIN (t)) - { - /* We cannot inline functions that contain other functions. */ - if (TREE_CODE (t) == FUNCTION_DECL && DECL_INITIAL (t)) - { - inline_forbidden_reason - = N_("%Jfunction '%F' can never be inlined " - "because it contains a nested function"); - return node; - } - } - break; - case GOTO_EXPR: t = TREE_OPERAND (node, 0); |

