[llvm] 2dc5682 - Verifier: Add check for DICompositeType elements being null
David Blaikie via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 17 11:18:36 PST 2025
Author: David Blaikie
Date: 2025-01-17T19:18:25Z
New Revision: 2dc5682dacab2dbb52a771746fdede0e938fc6e9
URL: https://github.com/llvm/llvm-project/commit/2dc5682dacab2dbb52a771746fdede0e938fc6e9
DIFF: https://github.com/llvm/llvm-project/commit/2dc5682dacab2dbb52a771746fdede0e938fc6e9.diff
LOG: Verifier: Add check for DICompositeType elements being null
Came up recently with some nodebug case on codeview, that caused a null
entry in elements and crashed LLVM.
Original clang fix to avoid generating IR like this: 504dd577675e8c85cdc8525990a7c8b517a38a89
Added:
llvm/test/Verifier/dicompositetype-elements-null.ll
Modified:
llvm/lib/IR/Verifier.cpp
Removed:
################################################################################
diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp
index 7b6f7b5aa6171a..00280dbe5300b2 100644
--- a/llvm/lib/IR/Verifier.cpp
+++ b/llvm/lib/IR/Verifier.cpp
@@ -1319,6 +1319,8 @@ void Verifier::visitDICompositeType(const DICompositeType &N) {
unsigned DIBlockByRefStruct = 1 << 4;
CheckDI((N.getFlags() & DIBlockByRefStruct) == 0,
"DIBlockByRefStruct on DICompositeType is no longer supported", &N);
+ CheckDI(llvm::all_of(N.getElements(), [](const DINode *N) { return N; }),
+ "DISubprogram contains null entry in `elements` field", &N);
if (N.isVector()) {
const DINodeArray Elements = N.getElements();
diff --git a/llvm/test/Verifier/dicompositetype-elements-null.ll b/llvm/test/Verifier/dicompositetype-elements-null.ll
new file mode 100644
index 00000000000000..c0aca47852bac0
--- /dev/null
+++ b/llvm/test/Verifier/dicompositetype-elements-null.ll
@@ -0,0 +1,6 @@
+; RUN: not opt -S < %s 2>&1 | FileCheck %s
+
+!named = !{!0}
+; CHECK: DISubprogram contains null entry in `elements` field
+!0 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "t1", elements: !1)
+!1 = !{null}
More information about the llvm-commits
mailing list