From 417d348c5a9cba8d5d9b407523ea54f52c061b3e Mon Sep 17 00:00:00 2001 From: Jim Wilson Date: Wed, 20 Oct 1999 22:19:06 +0000 Subject: [PATCH] Fix numerous -O3 -g testsuite failures for DWARF2 targets. * integrate.c (integrate_decl_tree): Set DECL_CONTEXT to 0 if this is a local extern function declaration. From-SVN: r30107 --- gcc/ChangeLog | 5 +++++ gcc/integrate.c | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index cdd6b0f..998c467 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Wed Oct 20 15:18:42 1999 Jim Wilson + + * integrate.c (integrate_decl_tree): Set DECL_CONTEXT to 0 if this is + a local extern function declaration. + Wed Oct 20 13:56:01 1999 Richard Henderson * i386.c (ix86_expand_prologue): Properly wrap USE around diff --git a/gcc/integrate.c b/gcc/integrate.c index bd2e662..e312b18 100644 --- a/gcc/integrate.c +++ b/gcc/integrate.c @@ -1419,10 +1419,23 @@ integrate_decl_tree (let, map) if (DECL_LANG_SPECIFIC (d)) copy_lang_decl (d); + /* ??? We used to call pushdecl here, but that does not work now that + we generate entire functions as trees. We only want the pushdecl + code that sets DECL_CONTEXT. Each front end sets DECL_CONTEXT + slightly differently though, so we may need new callbacks to the + front-ends to do this right. For now, we just use the code from the + C front end and hope that is sufficient. Alternatively, we could + set DECL_CONTEXT (d) here only if DECL_CONTEXT (t) is non-null. */ /* This new declaration is now in the scope of the function into which we are inlining the function, not the function being inlined. */ DECL_CONTEXT (d) = current_function_decl; + /* A local extern declaration for a function doesn't constitute nesting. + A local auto declaration does, since it's a forward decl + for a nested function coming later. */ + if (TREE_CODE (d) == FUNCTION_DECL && DECL_INITIAL (d) == 0 + && DECL_EXTERNAL (d)) + DECL_CONTEXT (d) = 0; /* Add this declaration to the list of variables in the new block. */ -- 2.7.4