From 156660d7b49908d2990e04b2bc6a5d04915cfd2c Mon Sep 17 00:00:00 2001 From: dberlin Date: Fri, 4 Mar 2005 03:08:10 +0000 Subject: [PATCH] 2005-03-03 Daniel Berlin Fix PR debug/20253 * c-opts.c (c_common_parse_file): Call start_source_file and end_source_file at the approriate times. * dwarf2out.c (dwarf2out_finish): Don't auto-end the main file, it will be done for us now. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@95872 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 10 ++++++++++ gcc/c-opts.c | 5 ++++- gcc/dwarf2out.c | 9 ++++++--- gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro.c | 13 +++++++++++++ 4 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 23672a3486c..b6765aca02c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2005-03-03 Daniel Berlin + + Fix PR debug/20253 + + * c-opts.c (c_common_parse_file): Call start_source_file + and end_source_file at the approriate times. + + * dwarf2out.c (dwarf2out_finish): Don't auto-end + the main file, it will be done for us now. + 2005-03-04 Kazu Hirata * fold-const.c (fold_ternary): New. diff --git a/gcc/c-opts.c b/gcc/c-opts.c index 575ff4d485b..d2abeb527b6 100644 --- a/gcc/c-opts.c +++ b/gcc/c-opts.c @@ -1089,13 +1089,16 @@ c_common_parse_file (int set_yydebug) i = 0; for (;;) { + /* Start the main input file */ + (*debug_hooks->start_source_file) (0, this_input_filename); finish_options (); pch_init (); push_file_scope (); c_parse_file (); finish_file (); pop_file_scope (); - + /* And end the main input file. */ + (*debug_hooks->end_source_file) (0); if (++i >= num_in_fnames) break; cpp_undef_all (parse_in); diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 76661ba6d8b..5157ae358bc 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -10497,8 +10497,12 @@ add_abstract_origin_attribute (dw_die_ref die, tree origin) if (TYPE_P (fn)) fn = TYPE_STUB_DECL (fn); + + /* TYPE_STUB_DECL may have given us a NULL, which decl_function_context + won't like. */ + if (fn) + fn = decl_function_context (fn); - fn = decl_function_context (fn); if (fn) dwarf2out_abstract_function (fn); } @@ -13795,11 +13799,10 @@ dwarf2out_finish (const char *filename) output_ranges (); } - /* Have to end the primary source file. */ + /* Have to end the macro section. */ if (debug_info_level >= DINFO_LEVEL_VERBOSE) { named_section_flags (DEBUG_MACINFO_SECTION, SECTION_DEBUG); - dw2_asm_output_data (1, DW_MACINFO_end_file, "End file"); dw2_asm_output_data (1, 0, "End compilation unit"); } diff --git a/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro.c b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro.c new file mode 100644 index 00000000000..45e93737283 --- /dev/null +++ b/gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-macro.c @@ -0,0 +1,13 @@ +/* Test to make sure the mcaro info includes a start file command for the main source */ +/* { dg-do compile */ +/* { dg-options "-g3 -gdwarf-2 -dA -fverbose-asm" } */ +/* { dg-final { scan-assembler "Start new file" } } */ + +#define ADD(x) (M + x) + +int main (void) +{ +#define N 28 +#define M 42 + return ADD(N); +} -- 2.11.4.GIT