https://gcc.gnu.org/bugzilla/show_bug.cgi?id=14505
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Severity|minor |enhancement
--- Comment #8 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Jakub Jelinek from comment #6)
> Try:
> int
> foo ()
> {
> static int a;
> static const int b = 3;
> static const char c[3] = "ab";
> static const char *d = "cd";
> static const char *const e = "ef";
> return 1 * __builtin_constant_p (&a)
> + 2 * __builtin_constant_p (&b)
> + 4 *__builtin_constant_p (c)
> + 8 * __builtin_constant_p (c[0])
> + 16 *__builtin_constant_p (d)
> + 32 * __builtin_constant_p (d[0])
> + 64 *__builtin_constant_p (e)
> + 128 * __builtin_constant_p (e[0]);
> }
What we get now is dependent on the optimization level and if it is C or C++
mode and even what version of the compiler (GCC 8+ has stablized it seems
though).
GCC 8+:
-O0 -O1+
c 0 232 (8+32+64+128)
c++ 64 232
GCC 6/7:
c 0 168 (8+32+128)
c++ 64 232
GCC 4.5-5.x:
c/c++ 0 168
GCC ???-4.4.x:
c 0 200 (128+64+8)
c++ 0 136 (128+8)
4.1.2:
c 0 64
c++ 0 128
clang:
c 192 232
c++11+ 200 232
c++98 192 232
192 = 128+64; 200 = 128+64+8