[Bug c/47273] References to unaligned packed structure members not allowed
waldemarbancewicz at ruggedcom dot com
gcc-bugzilla@gcc.gnu.org
Fri Jan 14 14:20:00 GMT 2011
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47273
--- Comment #4 from Waldemar Valdas Bancewicz <waldemarbancewicz at ruggedcom dot com> 2011-01-14 14:04:19 UTC ---
The reason pointers and references are treated differently:
Consider the following code fragment:
struct s {
char a;
int b;
int* GetValp() { return &b; }
//int& GetValr() { return b; }
} __attribute__((packed));
The GetValp code will compile to something like:
if &b is aligned
return address of b
else
do aligned read before pointer and after pointer, bitshift and mask each read
and merge to get data
However, GetValr, by returning a reference, always assumes that the reference
is aligned. Since we are returning a reference to a packed structure member,
the compiler will not allow this. Therefore, if the user is absolutely sure the
reference is aligned, using references gives a slight performance boost over
pointers. However, this performance gain only happens on some architectures.
Hence my request to add a g++ compiler option to disable this optimization.
More information about the Gcc-bugs
mailing list