and even this works:

triton:~> cat test.c

struct foo {
        int a;
        int b;
};

int litter_our_stack(void)
{
        volatile struct foo x = { .a = 1, .b = 2 };

        return x.b;
}

int test_code(void)
{
        volatile struct foo x = { .a = 1, /* .b not initialized explicitly */ };

        return x.b;
}

int main(void)
{
        return litter_our_stack() + test_code();
}

triton:~> gcc -Wall -Wextra -O0 -o test test.c; ./test; echo $?
2
triton:~> 


The result is 2, so x.b in test_code() got explicitly set to 0.

If it was uninitialized, not only would we expect a compiler warning, 
but we'd also get a result of '4'. (the two functions have the same 
stack depth, so 'litter_our_stack()' initializes .b to 2.)

-O0 guarantees that GCC just dumbly implements these functions without 
any optimizations.

Thanks,

        ngo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to