/* { dg-do run } */ /* { dg-options "-O2" } */ typedef unsigned long int mp_limb_t; typedef const mp_limb_t * mp_srcptr; __attribute__((noipa)) int refmpn_tstbit_bad (mp_srcptr ptr, unsigned long bit) { return (((ptr)[(bit)/(32 - 0)] & (((mp_limb_t) 1L) << ((bit)%(32 - 0)))) != 0); } __attribute__((noipa, optimize(0))) int refmpn_tstbit_good (mp_srcptr ptr, unsigned long bit) { return (((ptr)[(bit)/(32 - 0)] & (((mp_limb_t) 1L) << ((bit)%(32 - 0)))) != 0); } __attribute__((noipa)) int refmpn_tstbit (mp_srcptr ptr, unsigned long bit) { if (refmpn_tstbit_bad (ptr, bit) != refmpn_tstbit_good (ptr, bit)) { __builtin_trap(); } return refmpn_tstbit_bad (ptr, bit); } int main(){ unsigned long num[] = { 0x3801ff9f, 0x0, 0x0, 0x0 }; refmpn_tstbit(num, 0); }