[PATCH] D152151: AutoUpgrade: Fix crash when tbaa has an empty argument
Matt Arsenault via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 5 16:19:22 PDT 2023
arsenm updated this revision to Diff 528620.
arsenm added a comment.
Add verifier error
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D152151/new/
https://reviews.llvm.org/D152151
Files:
llvm/lib/IR/AutoUpgrade.cpp
llvm/lib/IR/Verifier.cpp
llvm/test/Verifier/tbaa.ll
Index: llvm/test/Verifier/tbaa.ll
===================================================================
--- llvm/test/Verifier/tbaa.ll
+++ llvm/test/Verifier/tbaa.ll
@@ -37,6 +37,9 @@
; CHECK: Access type node must be a valid scalar type
; CHECK-NEXT: store i32 9, ptr %ptr, align 4, !tbaa !{{[0-9]+}}
+; CHECK: TBAA metadata cannot have 0 operands
+; CHECK-NEXT: store i32 10, ptr %ptr, align 4, !tbaa !{{[0-9]+}}
+
store i32 0, ptr %ptr, !tbaa !{!3, !2, i64 40, i64 0, i64 1, i64 2}
store i32 1, ptr %ptr, !tbaa !{!3, !2, i64 40, !"immutable"}
store i32 2, ptr %ptr, !tbaa !{!3, !2, i64 40, i64 4}
@@ -47,6 +50,7 @@
store i32 7, ptr %ptr, !tbaa !{!3, !12, i32 40, i64 0}, !metadata !42
store i32 8, ptr %ptr, !tbaa !{!13, !1, i64 0}
store i32 9, ptr %ptr, !tbaa !{!14, !14, i64 0}
+ store i32 10, ptr %ptr, !tbaa !15
ret void
}
!42 = !{!"Do no strip this!"}
@@ -121,3 +125,4 @@
!12 = !{!"bad-scalar-2", !3, i64 0}
!13 = !{!1, !1, i64 0}
!14 = !{!"bad-scalar-2", !13}
+!15 = !{}
Index: llvm/lib/IR/Verifier.cpp
===================================================================
--- llvm/lib/IR/Verifier.cpp
+++ llvm/lib/IR/Verifier.cpp
@@ -6824,6 +6824,9 @@
}
bool TBAAVerifier::visitTBAAMetadata(Instruction &I, const MDNode *MD) {
+ CheckTBAA(MD->getNumOperands() > 0, "TBAA metadata cannot have 0 operands",
+ &I, MD);
+
CheckTBAA(isa<LoadInst>(I) || isa<StoreInst>(I) || isa<CallInst>(I) ||
isa<VAArgInst>(I) || isa<AtomicRMWInst>(I) ||
isa<AtomicCmpXchgInst>(I),
Index: llvm/lib/IR/AutoUpgrade.cpp
===================================================================
--- llvm/lib/IR/AutoUpgrade.cpp
+++ llvm/lib/IR/AutoUpgrade.cpp
@@ -4453,12 +4453,16 @@
}
MDNode *llvm::UpgradeTBAANode(MDNode &MD) {
+ const unsigned NumOperands = MD.getNumOperands();
+ if (NumOperands == 0)
+ return &MD; // Invalid, punt to a verifier error.
+
// Check if the tag uses struct-path aware TBAA format.
- if (isa<MDNode>(MD.getOperand(0)) && MD.getNumOperands() >= 3)
+ if (isa<MDNode>(MD.getOperand(0)) && NumOperands >= 3)
return &MD;
auto &Context = MD.getContext();
- if (MD.getNumOperands() == 3) {
+ if (NumOperands == 3) {
Metadata *Elts[] = {MD.getOperand(0), MD.getOperand(1)};
MDNode *ScalarType = MDNode::get(Context, Elts);
// Create a MDNode <ScalarType, ScalarType, offset 0, const>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D152151.528620.patch
Type: text/x-patch
Size: 2412 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230605/fb61c635/attachment.bin>
More information about the llvm-commits
mailing list