Re: [PATCH 08/14] sched: add latency tracing for -deadline tasks.

From: Steven Rostedt
Date: Wed Nov 27 2013 - 10:56:24 EST


On Wed, 27 Nov 2013 16:46:00 +0100
Ingo Molnar <mingo@xxxxxxxxxx> wrote:

>
> * Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote:
>
> > On Wed, Nov 27, 2013 at 04:35:19PM +0100, Ingo Molnar wrote:
> > > So why does GCC then behave like this:
> >
> > I think because its a much saner behaviour; also it might still be the
> > spec actually says this, its a somewhat opaque text.
> >
> > Anyway, yes GCC seems to behave as we 'expect' it to; I just can't find
> > the language spec actually guaranteeing this.
>
> So from C99 standard Â6.7.8 (Initialization)/21:
>
> "If there are fewer initializers in a brace-enclosed list than
> there are elements or members of an aggregate, or fewer characters
> in a string literal used to initialize an array of known size than
> there are elements in the array, the remainder of the aggregate
> shall be initialized implicitly the same as objects that have static
> storage duration."
>
> static initialization == zeroing in this case.
>

The confusion here is that the above looks to be talking about arrays.
But it really doesn't specify structures.

But searching the internet, it looks as though most people believe it
applies to structures, and any compiler that does otherwise will most
likely break applications.

That is, this looks to be one of the gray areas that the compiler
writers just happen to do what's most sane. And they probably assume
it's talking about structures as well, hence the lack of warnings.

It gets confusing, as the doc also shows:

struct { int a[3], b; } w[] = { { 1 }, 2 };

Then points out that w.a[0] is 1 and w.b[0] is 2, and all other
elements are zero.

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