Messages in this thread | | | Date | Wed, 27 Nov 2013 11:33:21 -0500 | From | Steven Rostedt <> | Subject | Re: [PATCH 08/14] sched: add latency tracing for -deadline tasks. |
| |
On Wed, 27 Nov 2013 17:13:08 +0100 Ingo Molnar <mingo@kernel.org> wrote:
> > * Steven Rostedt <rostedt@goodmis.org> wrote: > > > On Wed, 27 Nov 2013 16:46:00 +0100 > > Ingo Molnar <mingo@kernel.org> wrote: > > > > > > > > * Peter Zijlstra <peterz@infradead.org> 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. > > It talks about neither 'arrays' nor 'structures', it talks about > 'aggregates' - which is defined as _both_: 'structures and arrays'.
Yeah, I misread it. I was reading the array section for awhile, and got confused.
> > That's what compiler legalese brings you ;-)
Yep.
> > > 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. > > I don't think it's grey, I think it's pretty well specified. > > > It gets confusing, as the doc also shows: > > > > struct { int a[3], b; } w[] = { { 1 }, 2 }; > > I don't think this is valid syntax, I think this needs one more set of > braces: > > 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. > > If by 'w.a[0]' you mean 'w[0].a[0]', and if by 'w.b[0]' you mean > 'w[0].b' then yes, this comes from the definition and it's what I'd > call 'obvious' initialization behavior. > > What makes it confusing to you?
Well, because it's mixing arrays and structures, and I was on the misconception that the paragraph was talking about just arrays.
Can I just have my turkey now?
-- Steve -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |