Is there any way to give a warning when a nested function use its parent function's local variable value.

Mark Farnell mark.farnell@gmail.com
Sun Nov 23 08:00:00 GMT 2014


I don't think you need a warning in this particular case, perhaps a
better way would be for the compiler to enforce a rule that forbids
access of function pointers of inner functions that referencing local
variables of its parent function.

For example, both:

void *foo(int x)
{
    int a;
    void foo2(int i)
    {
        // I want warning for the below code.
        if (i == a){}
        x += i;
        a += i;
    }
    foo2(a);

    return foo2;
}

and:

void *bar;

void foo(int x)
{
    int a;
    void foo2(int i)
    {
        // I want warning for the below code.
        if (i == a){}
        x += i;
        a += i;
    }
    foo2(a);

    bar = foo2;
}


should return an error.


On Sun, Nov 23, 2014 at 7:25 PM, xinglp <xinglp@gmail.com> wrote:
> Such as this code
>
> void foo(int x)
> {
>     int a;
>     void foo2(int i)
>     {
>         // I want warning for the below code.
>         if (i == a){}
>         x += i;
>         a += i;
>     }
>     foo2(a);
> }
>
> Because I use nested function for better code orgnization and callback. Thanks.



More information about the Gcc-help mailing list