short a[14] = { 1, 2 }; short b[15] = { 3, 4 }; int foo () { void (*fna) (void) = (void (*) (void)) a; void (*fnb) (void) = (void (*) (void)) b; fna (); fnb (); return a[1] == b[1]; } fails on ppc64, because call_indirect_aix64bit pattern uses "m" constraint for 64-bit loads instead of "Y" constraint.
Created attachment 29373 [details] gcc48-pr56228.patch Untested fix.
The proposed patch LGTM.
Author: jakub Date: Thu Feb 7 08:04:58 2013 New Revision: 195840 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=195840 Log: PR target/56228 * config/rs6000/rs6000.md (ptrm): New mode attr. (call_indirect_aix<ptrsize>, call_indirect_aix<ptrsize>_nor11, call_value_indirect_aix<pttrsize>, call_value_indirect_aix<pttrsize>_nor11): Use <ptrm> instead of m in constraints. * gcc.dg/pr56228.c: New test. Added: trunk/gcc/testsuite/gcc.dg/pr56228.c Modified: trunk/gcc/ChangeLog trunk/gcc/config/rs6000/rs6000.md trunk/gcc/testsuite/ChangeLog
Fixed.