HomePhabricator

[InstSimplify] Don't fold gep p, -p to null

Authored by nikic on Thu, Dec 24, 8:04 AM.

Description

[InstSimplify] Don't fold gep p, -p to null

This is a partial fix for https://bugs.llvm.org/show_bug.cgi?id=44403.
Folding gep p, q-p to q is only legal if p and q have the same
provenance. This fold should probably be guarded by something like
getUnderlyingObject(p) == getUnderlyingObject(q).

This patch is a partial fix that removes the special handling for
gep p, 0-p, which will fold to a null pointer, which would certainly
not pass an underlying object check (unless p is also null, in which
case this would fold trivially anyway). Folding to a null pointer
is particularly problematic due to the special handling it receives
in many places, making end-to-end miscompiles more likely.

Differential Revision: https://reviews.llvm.org/D93820

Details

Committed
nikicTue, Jan 12, 11:24 AM
Differential Revision
D93820: [InstSimplify] Don't fold gep p, -p to null
Parents
rG79f99ba65d96: [libcxx] Port to OpenBSD
Branches
Unknown
Tags
Unknown