[Bug c++/78655] gcc doesn't exploit the fact that the result of pointer addition can not be nullptr
vanyacpp at gmail dot com
gcc-bugzilla@gcc.gnu.org
Tue Dec 6 22:03:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78655
--- Comment #4 from Ivan Sorokin <vanyacpp at gmail dot com> ---
(In reply to Richard Biener from comment #1)
> + if (flag_delete_null_pointer_checks
> + && is_gimple_assign (stmt)
> + && is_gimple_assign (stmt)
Duplicate conjunct.
> + && gimple_assign_rhs_code (stmt) == POINTER_PLUS_EXPR
> + && tree_expr_nonzero_p (gimple_assign_rhs2 (stmt)))
> + return true;
> +
> return false;
> }
I thought a bit more about the issue. I think that not only the result of
pointer-integer addition, but also its argument are values that could be proven
non-zero. Consider the following example:
bool f(int* a)
{
bool x = a == nullptr;
a += 10;
return x;
}
In this example x could be proven to be false. Because if it is true then
(a+=10) causes undefined behavior. At the moment clang doesn't optimize this. I
don't any real example when this is needed. Just the way this optimization can
be made more widely applicable.
More information about the Gcc-bugs
mailing list