[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