On 04/06/17 21:14, Richard Biener wrote: > On April 6, 2017 7:39:14 PM GMT+02:00, Bernd Edlinger > <bernd.edlin...@hotmail.de> wrote: >> On 04/06/17 16:17, Florian Weimer wrote: >>>> Here is what I want to write in the doc: >>>> >>>> @item typeless_storage >>>> @cindex @code{typeless_storage} type attribute >>>> A type declared with this attribute behaves like a character type >>>> with respect to aliasing semantics. >>>> This is attribute is similar to the @code{may_alias} attribute, >>>> except that it is not restricted to pointers. >>> >>> As Jakub pointed out, this is not what we need here. An object of >> type >>> char does *not* have untyped storage. Accessing it as a different >> type >>> is still undefined. >>> >> >> but, do you agree that this is valid in C11? >> >> typedef char char_a[4]; >> >> int >> main (void) >> { >> char_a a = {1,2,3,4}; >> short *b = (short *) &a; >> >> b[1] = 0; >> >> if (a[0] == 1 && a[1] == 2 && a[2] == 3 && a[3] == 4) >> abort(); >> >> exit(0); >> } >> >> >> all I want to do is replace "char" with a different type. > > Why?
- It feels more othogonal this way. - Otherwise malloc would have magic power, in creating objects with no declared type. - And implementing something like malloc in plain C would actually be forbidden, which is ridiculous, because I already have done it. - It was easy to implement in the middle end. - It feels useful in C and C++. - Jason says :) Bernd. > > Richard.