diff options
author | Richard Guenther <rguenther@suse.de> | 2012-10-04 11:23:18 +0000 |
---|---|---|
committer | Richard Guenther <rguenther@suse.de> | 2012-10-04 11:23:18 +0000 |
commit | c6203b3bb9d9de1fdc4519f358a71e736eddd1ca (patch) | |
tree | 8bbabc4c74321f88facd411646c5cf2e47605c23 /gcc/dwarf2out.c | |
parent | 3a8a82203ff6626a1fce4b8c1f02be1bc05d0b97 (diff) |
2012-10-04 Richard Guenther <rguenther@suse.de>
PR lto/47788
* tree-streamer-out.c (write_ts_block_tree_pointers): For
inlined functions outer scopes write the ultimate origin
as BLOCK_ABSTRACT_ORIGIN and BLOCK_SOURCE_LOCATION.
Do not stream the fragment chains.
* tree-streamer-in.c (lto_input_ts_block_tree_pointers): Likewise.
* dwarf2out.c (gen_subprogram_die): Handle NULL DECL_INITIAL.
(dwarf2out_decl): Always output DECL_ABSTRACT function decls.
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@192075 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/dwarf2out.c')
-rw-r--r-- | gcc/dwarf2out.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 25f57c06b9c..95fc130c3db 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -17329,7 +17329,7 @@ gen_subprogram_die (tree decl, dw_die_ref context_die) a BLOCK node representing the function's outermost pair of curly braces, and any blocks used for the base and member initializers of a C++ constructor function. */ - if (! declaration && TREE_CODE (outer_scope) != ERROR_MARK) + if (! declaration && outer_scope && TREE_CODE (outer_scope) != ERROR_MARK) { int call_site_note_count = 0; int tail_call_site_note_count = 0; @@ -19622,8 +19622,14 @@ dwarf2out_decl (tree decl) inline" functions as DECL_EXTERNAL, but we need to generate DWARF for them anyway. Note that the C++ front-end also plays some similar games for inline function definitions appearing within include files which - also contain `#pragma interface' pragmas. */ - if (DECL_INITIAL (decl) == NULL_TREE) + also contain `#pragma interface' pragmas. + + If we are called from dwarf2out_abstract_function output a DIE + anyway. We can end up here this way with early inlining and LTO + where the inlined function is output in a different LTRANS unit + or not at all. */ + if (DECL_INITIAL (decl) == NULL_TREE + && ! DECL_ABSTRACT (decl)) return; /* If we're a nested function, initially use a parent of NULL; if we're |