http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53189
Richard Earnshaw <rearnsha at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|ASSIGNED |RESOLVED Resolution|--- |FIXED Target Milestone|--- |4.9.0 --- Comment #3 from Richard Earnshaw <rearnsha at gcc dot gnu.org> --- Fixed on trunk. #define test(X) long long operator X(struct a a, int c){ return a.b X 1;} struct a { long long b; }; test(&) test(|) test(+) test(-) test(^) Compiling -O2 and removing the fluff gives: _Zan1ai: and r0, r0, #1 mov r1, #0 bx lr _Zor1ai: orr r0, r0, #1 bx lr _Zpl1ai: adds r0, r0, #1 adc r1, r1, #0 bx lr _Zmi1ai: subs r0, r0, #1 sbc r1, r1, #0 bx lr _Zeo1ai: eor r0, r0, #1 bx lr