http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50476

--- Comment #3 from Rui Maciel <rui.maciel at gmail dot com> 2012-05-09 
11:47:49 UTC ---
(In reply to comment #2)
> I think it is only undefined behaviour to access the pointer after the
> life-time of y has finished, however, the following probably isn't, no?
> 
> void g()
> {
>   ...
>    *x = 2;
>    ...
> }

As x hasn't been declared at that point, it should throw a compiler error.

If x was a global pointer which was declared previously then a similar problem
would arise.  Take, for example, the following code:

<code>
#include <stdio.h>

int *x = 0;

void f(void)
{
        int a = 2;
        x = &a; 
}

int main(void)
{
        f();

        printf("Value: %d\n",*x);

        return 0;
}
</code>

Again, x is set to the address of a local variable, which is then accessed at a
point where the local variable's lifetime has ended.  This behaviour is
explicitly left undefined in ISO 9899:1999 6.2.4 2.  Therefore, it would be
nice if the compiler warned about that.


> void f()
> {
>    ...
>    x = &y;
>    ...
>    g();
>    ...
>    x = NULL;
> }
> 
> The C/C++ FE cannot distinguish between these two cases. 
> 
> Do you have a suggestion about how to implement this? 

>From the user's point of view, it would be nice if the compiler warned if an
object was being accessed after its lifetime.  This should happen at least when
the user explicitly specified the use of a standard which stated that this
behaviour is undefined.

Granted, this might not be an easy thing to implement.  As I don't have any
knowledge on gcc's inner workings, I'm not in a position to suggest how this
might be done.

Reply via email to