This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: struct __attribute((packed));
>>>>> "E" == E Weddington <ericw@evcohs.com> writes:
E> Paul Koning wrote: According to the docs here:
E> <http://gcc.gnu.org/onlinedocs/gcc-3.4.3/gcc/Type-Attributes.html#Type-Attributes>
>>
E> what about doing something like this?:
>>
E> typedef int packed_int __attribute__ ((aligned (1)));
>>
E> packed_int *ppi;
>> That would make sense, but it has never worked for me. It seems
>> that attributes don't apply to type names, only to variables and
>> members.
>>
>>
>>
E> What?! That whole section in the docs talks about attributes on
E> types. If it doesn't work as described, then the docs need some
E> serious rework.
I'd rather the compiler got the work than the docs.
Maybe it's better in newer versions; I don't have anything newer than
3.4.1 built right now.
Test program:
typedef int pi __attribute__((packed));
void set(void *p, int v)
{
pi *ppi;
ppi = (pi *) p;
*ppi = v;
}
On 3.3.3, this compiles without any warnings (in spite of -Wall) but
the store is an aligned store (MIPS "sw" instruction).
With 3.4.1, I get this:
test.c:1: warning: `packed' attribute ignored
Sigh.
And yes, I agree with Dave that having attributes work syntactically
the same as CV-modifiers -- so they can be directly applied to the
pointed-to type in pointer declarations -- would be a Good Thing.
paul