https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112296
--- Comment #9 from Richard Henderson <rth at gcc dot gnu.org> --- > Thanks. So yes, > > macro(x++); > > incrementing x twice would have been odd - but that's the usual bug > in this kind of macro definition. Fixing it by throwing away > side-effects (and always going the out_of_line_function (x) path!) > for the __builtin_constant_p argument is an odd choice. In the beginning __builtin_constant_p was resolved immediately, so formulating this as #define macro(x) \ ({ __typeof(x) _x = (x); \ __builtin_constant_p(_x) }) would always return false, defeating the purpose. > The execute.exp testcase suggests the intention but the testcases > verification is somewhat incomplete (it lacks verifying the side-effects > are gone). That's probably my omission. ;-)