On Wednesday 07 February 2007 2:14 pm, Phil Endecott wrote: > David Brownell wrote: > > On Wednesday 07 February 2007 10:41 am, Phil Endecott wr > >> void inc(int* i) { > >> (*i)++; > >> } > > >> here's a quote from Paul Brook > >> (http://gcc.gnu.org/ml/gcc-help/2006-12/msg00115.html): > >> > >> " the compiler is allowed to assume that the low 2 bits of an int* > >> are zero. " > > > > Unless it's declared as packed ... a fact which is 100% clear in the > > definition of "packed". > > Dave, how would you propose to re-write my "inc" function (above) to > declare i as a "packed int*"? I have tried various things like
Did you try typedef int unaligned_int __attribute__((aligned(1))); and suchlike? I was a bit loose above. The constraint is really about alignment, and what's 100% clear is that there _is_ such a constraint on those pointers, because they're from a struct declared as "packed". The normal GCC rules ("natural alignment" of pointer target) do not apply. If GCC doesn't allow that, or doesn't recognize that a pointer to an unaligned int can't be used where a "normal" pointer is needed, then the issue would appear to be that the best GCC can do is warn when you take the address of such an unaligned field. > > void inc(int __attribute__((packed)) * i) > void inc(int * __attribute__((packed)) i) > void inc(int * i __attribute__((packed))) > void inc(int __attribute__((aligned(1))) * i) > void inc(int * __attribute__((aligned(1))) i) > void inc(int * i __attribute__((aligned(1)))) > > and I get variously > > warning: ‘packed’ attribute ignored > error: alignment may not be specified for ‘i’ > > or no message at all, and I only ever get loadword-add-storeword code > generated. My feeling is that there is no way to declare a "packed" or > "unaligned" pointer to an int, and so Paul is right. He's clearly wrong about the semantics GCC has defined; that's not debatable. The documentation/specification is unambiguous. What he may be right about is the semantics GCC _implemented_ which, of course, are a horse of a different rainbow. I have no idea what kind of attributes pointers carry around inside GCC. - Dave ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier. Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel