[PATCH] D111829: [Sanitizers] Replaced getMaxPointerSizeInBits with getPointerSizeInBits, which was causing failures for 32bit x86.
Kirill Stoimenov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Oct 15 15:55:47 PDT 2021
kstoimenov updated this revision to Diff 380113.
kstoimenov added a comment.
Made the test run using FileCheck and changed one place to use DL.getPointerTypeSizeInBits(AI.getType()).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D111829/new/
https://reviews.llvm.org/D111829
Files:
llvm/lib/Analysis/StackSafetyAnalysis.cpp
llvm/test/Analysis/StackSafetyAnalysis/i386-bug-fix.ll
Index: llvm/test/Analysis/StackSafetyAnalysis/i386-bug-fix.ll
===================================================================
--- /dev/null
+++ llvm/test/Analysis/StackSafetyAnalysis/i386-bug-fix.ll
@@ -0,0 +1,22 @@
+; 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-unknown-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
+}
Index: llvm/lib/Analysis/StackSafetyAnalysis.cpp
===================================================================
--- llvm/lib/Analysis/StackSafetyAnalysis.cpp
+++ llvm/lib/Analysis/StackSafetyAnalysis.cpp
@@ -154,7 +154,7 @@
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())
@@ -752,10 +752,8 @@
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()) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D111829.380113.patch
Type: text/x-patch
Size: 2136 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20211015/4e1d4b1f/attachment.bin>
More information about the llvm-commits
mailing list