------- Comment #2 from sje at cup dot hp dot com 2006-02-03 18:44 ------- It looks like we have an interaction between the alignment attribute and the IA64 calling conventions. In this example GCC is treating my_t type as an aligned pointer and not as a pointer to aligned data. Is that what you intend?
Assuming we do want an aligned pointer I think the pointers should be passed in r36 and r37, not r36 and r38. the IA64 runtime document says pointers are passed in the next available register. It is only values with size greater than 64 bits where you might skip a register in order to use the next even register. Of course the runtime document doesn't explicitly talk about what to do when a type is given an alignment different than its natural alignment. I also wonder if this program is something GCC should be warning about. We are declaring f to take a my_t type (aligned pointer) and passing it a regular pointer. This is a different type. Should GCC issue a warning? -- sje at cup dot hp dot com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |sje at cup dot hp dot com Status|UNCONFIRMED |NEW Ever Confirmed|0 |1 Last reconfirmed|0000-00-00 00:00:00 |2006-02-03 18:44:13 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25372