>>>>> "E" == E Weddington <[EMAIL PROTECTED]> 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

Reply via email to