[Bug c/91554] if (!__builtin_constant_p (fn_arg)) warning_function() works in inline when fn_arg is int, not when it is void *
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Aug 27 13:34:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91554
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
It's obviously
8462 /* If this expression has side effects, show we don't know it to be a
8463 constant. Likewise if it's a pointer or aggregate type since in
8464 those case we only want literals, since those are only optimized
8465 when generating RTL, not later.
8466 And finally, if we are compiling an initializer, not code, we
8467 need to return a definite result now; there's not going to be any
8468 more optimization done. */
8469 if (TREE_SIDE_EFFECTS (arg)
8470 || AGGREGATE_TYPE_P (TREE_TYPE (arg))
8471 || POINTER_TYPE_P (TREE_TYPE (arg))
8472 || cfun == 0
8473 || folding_initializer
8474 || force_folding_builtin_constant_p)
8475 return integer_zero_node;
that causes this, I guess you want to use
__builtin_constant_p (b != 0)
instead. The docs don't explain what a "constant at compile time" is
so whether for example the address of a global or the address of an
automatic var would be "constant". But I'd say the above incorrectly
disregards the NULL-pointer case.
More information about the Gcc-bugs
mailing list