mirror of
https://github.com/intel/llvm.git
synced 2026-02-06 15:18:53 +08:00
[BasicAA] Ignore CanBeFreed in minimal extent reasoning
When determining NoAlias based on object size and dereferenceability information, we can ignore frees for the same reason we can ignore possible null pointers (if null is not a valid pointer): Actually accessing the null pointer / freed pointer would be immediate UB, and AA results are only valid under the assumption of an access. This addresses a minor regression from D110745. Differential Revision: https://reviews.llvm.org/D111028
This commit is contained in:
@@ -204,12 +204,12 @@ static uint64_t getMinimalExtentFrom(const Value &V,
|
||||
bool NullIsValidLoc) {
|
||||
// If we have dereferenceability information we know a lower bound for the
|
||||
// extent as accesses for a lower offset would be valid. We need to exclude
|
||||
// the "or null" part if null is a valid pointer.
|
||||
// the "or null" part if null is a valid pointer. We can ignore frees, as an
|
||||
// access after free would be undefined behavior.
|
||||
bool CanBeNull, CanBeFreed;
|
||||
uint64_t DerefBytes =
|
||||
V.getPointerDereferenceableBytes(DL, CanBeNull, CanBeFreed);
|
||||
DerefBytes = (CanBeNull && NullIsValidLoc) ? 0 : DerefBytes;
|
||||
DerefBytes = CanBeFreed ? 0 : DerefBytes;
|
||||
// If queried with a precise location size, we assume that location size to be
|
||||
// accessed, thus valid.
|
||||
if (LocSize.isPrecise())
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
; RUN: opt -basic-aa -print-all-alias-modref-info -aa-eval < %s 2>&1 | FileCheck %s
|
||||
; RUN: opt -basic-aa -print-all-alias-modref-info -aa-eval -use-dereferenceable-at-point-semantics=1 < %s 2>&1 | FileCheck %s
|
||||
|
||||
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user