Skip to content

Commit

Permalink
[Sanitizers] Replaced getMaxPointerSizeInBits with getPointerSizeInBi…
Browse files Browse the repository at this point in the history
…ts, which was causing failures for 32bit x86.

Reviewed By: vitalybuka

Differential Revision: https://reviews.llvm.org/D111829
  • Loading branch information
kstoimenov committed Oct 18, 2021
1 parent 1fb24fe commit 62627c7
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 5 deletions.
8 changes: 3 additions & 5 deletions llvm/lib/Analysis/StackSafetyAnalysis.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ raw_ostream &operator<<(raw_ostream &OS, const UseInfo<CalleeTy> &U) {
ConstantRange getStaticAllocaSizeRange(const AllocaInst &AI) {
const DataLayout &DL = AI.getModule()->getDataLayout();
TypeSize TS = DL.getTypeAllocSize(AI.getAllocatedType());
unsigned PointerSize = DL.getMaxPointerSizeInBits();
unsigned PointerSize = DL.getPointerTypeSizeInBits(AI.getType());
// Fallback to empty range for alloca size.
ConstantRange R = ConstantRange::getEmpty(PointerSize);
if (TS.isScalable())
Expand Down Expand Up @@ -752,10 +752,8 @@ GVToSSI createGlobalStackSafetyInfo(
KV.second.Calls.clear();
}

uint32_t PointerSize = Copy.begin()
->first->getParent()
->getDataLayout()
.getMaxPointerSizeInBits();
uint32_t PointerSize =
Copy.begin()->first->getParent()->getDataLayout().getPointerSizeInBits();
StackSafetyDataFlowAnalysis<GlobalValue> SSDFA(PointerSize, std::move(Copy));

for (auto &F : SSDFA.run()) {
Expand Down
24 changes: 24 additions & 0 deletions llvm/test/Analysis/StackSafetyAnalysis/i386-bug-fix.ll
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
; REQUIRES: i386-pc-linux-gnu

; RUN: opt passes="print-stack-safety" -disable-output -mtriple=i386-pc-linux-gnu %s 2>&1 | FileCheck %s --check-prefixes=CHECK

; CHECK: @main
; CHECK-NEXT: args uses:
; CHECK-NEXT: argv[]: empty-set
; CHECK-NEXT: allocas uses:
; CHECK-NEXT: [4]: [0,4)
; CHECK-NEXT: [32]: full-set
; CHECK-NEXT: safe accesses:

target datalayout = "e-m:e-p:32:32-p270:32:32-p271:32:32-p272:64:64-f64:32:64-f80:32-n8:16:32-S128"
target triple = "i386-pc-linux-gnu"

; Function Attrs: mustprogress norecurse sanitize_address uwtable
define dso_local i32 @main(i32 %argc, i8** %argv) {
entry:
%0 = alloca i32, align 4
%1 = alloca i8, i64 32, align 32
%2 = ptrtoint i8* %1 to i32
store i32 %2, i32* %0, align 4
ret i32 0
}

0 comments on commit 62627c7

Please sign in to comment.