Messages in this thread | | | Subject | Re: Invalid compilation without -fno-strict-aliasing | From | Falk Hueffner <> | Date | 26 Feb 2003 17:04:05 +0100 |
| |
Horst von Brand <vonbrand@inf.utfsm.cl> writes:
> Jean Tourrilhes <jt@bougret.hpl.hp.com> said: > > if((stream + event_len) < ends) { > > iwe->len = event_len; > > memcpy(stream, (char *) iwe, event_len); > > stream += event_len; > > } > > return stream; > > } > > The compiler is free to assume char *stream and struct iw_event *iwe > point to separate areas of memory, due to strict aliasing.
The relevant paragraph of the C99 standard is:
An object shall have its stored value accessed only by an lvalue expression that has one of the following types:
-- a type compatible with the effective type of the object, -- a qualified version of a type compatible with the effective type of the object, -- a type that is the signed or unsigned type corresponding to the effective type of the object, -- a type that is the signed or unsigned type corresponding to a qualified version of the effective type of the object, -- an aggregate or union type that includes one of the aforementioned types among its members (including, recursively, a member of a subaggregate or contained union), or -- a character type.
I can't really spot any lvalue here that might violate this rule. It would be nice if somebody could report a bug with a testcase.
-- Falk - 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/
| |