https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121479
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- That differs between C and C++, in C++ x in that case is a constant expression and __builtin_constant_p will be certainly true, in C it is not a constant expression and it is solely an extension and optimization when it is treated as a constant expression.