This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Local binding DECLs
On Mon, 2003-05-12 at 10:30, Daniel Berlin wrote:
>
> On Monday, May 12, 2003, at 02:44 AM, Stephen Biggs wrote:
>
> > On Mon, 2003-05-12 at 04:13, Richard Henderson wrote:
> >> On Sun, May 11, 2003 at 10:04:20AM +0300, Stephen Biggs wrote:
> >>> Ok... is there ANY way to find out if the FUNCTION_DECL I am handed
> >>> at
> >>> any time (preferably in ENCODE_SECTION) is declared in a function
> >>> block
> >>> as opposed to globally?
> >>
> >> *Declared*? I.e. to distinguish
> >>
> >> extern void foo();
> >> void bar() { foo(); }
> >>
> >> from
> >>
> >> void bar() {
> >> extern void foo();
> >> foo();
> >> }
> >>
> >> Absolutely not. That question doesn't even make sense.
> >>
> >>
> >> r~
> >>
> > Sure it does, if you have, for example:
> >
> > void bar() {
> > static void foo();
> > foo();
> > }
> >
> > void bar1() {
> > static int foo();
> > foo();
> > }
> >
> > void bar2() {
> > static int foo(int);
> > int a = foo(3);
> > }
> > foo() {}
> >
> > This compiles.
> >
> > I see nothing that gives me the ability to know that any particular
> > DECL
> > is declared inside a particular function.
> >
>
>
> Errr, won't DECL_CONTEXT do what you want?
> From tree.h:
> /* For FIELD_DECLs, this is the
> RECORD_TYPE, UNION_TYPE, or QUAL_UNION_TYPE node that the field is
> a member of. For VAR_DECL, PARM_DECL, FUNCTION_DECL, LABEL_DECL,
> and CONST_DECL nodes, this points to either the FUNCTION_DECL for
> the
> containing function, the RECORD_TYPE or UNION_TYPE for the
> containing
> type, or NULL_TREE if the given decl has "file scope". */
> #define DECL_CONTEXT(NODE) (DECL_CHECK (NODE)->decl.context)
>
>
> DECL_CONTEXT on a contained function_decl should give you the
> containing function_decl (or NULL_TREE if it's not contained/is file
> scope), as the comment says.
> Does it not work?
> I haven't really been following till now.
> --Dan
>
>
No, DECL_CONTEXT seems to be NULL all the time when ENCODE_SECTION is
called, even on contained function DECLs. Version 3.2. This is my
problem. I can't find out the scope of the DECL because of this.