Index: llvm/lib/IR/Verifier.cpp =================================================================== --- llvm/lib/IR/Verifier.cpp +++ llvm/lib/IR/Verifier.cpp @@ -6061,9 +6061,12 @@ CheckDI(isa(DAI->getRawAssignID()), "invalid llvm.dbg.assign intrinsic DIAssignID", &DII, DAI->getRawAssignID()); - CheckDI(isa(DAI->getRawAddress()), - "invalid llvm.dbg.assign intrinsic address)", &DII, - DAI->getRawAddress()); + const auto *RawAddr = DAI->getRawAddress(); + CheckDI( + isa(RawAddr) || + (isa(RawAddr) && !cast(RawAddr)->getNumOperands()), + "invalid llvm.dbg.assign intrinsic address", &DII, + DAI->getRawAddress()); CheckDI(isa(DAI->getRawAddressExpression()), "invalid llvm.dbg.assign intrinsic address expression", &DII, DAI->getRawAddressExpression()); Index: llvm/test/DebugInfo/Generic/assignment-tracking/parse-and-verify/verify.ll =================================================================== --- llvm/test/DebugInfo/Generic/assignment-tracking/parse-and-verify/verify.ll +++ llvm/test/DebugInfo/Generic/assignment-tracking/parse-and-verify/verify.ll @@ -31,6 +31,9 @@ call void @llvm.dbg.assign(metadata !14, metadata !10, metadata !DIExpression(), metadata !2, metadata ptr undef, metadata !DIExpression()), !dbg !13 ; CHECK: invalid llvm.dbg.assign intrinsic address call void @llvm.dbg.assign(metadata !14, metadata !10, metadata !DIExpression(), metadata !14, metadata !3, metadata !DIExpression()), !dbg !13 + ;; Empty metadata debug operands are allowed. + ; CHECK-NOT: invalid llvm.dbg.assign + call void @llvm.dbg.assign(metadata !14, metadata !10, metadata !DIExpression(), metadata !14, metadata !2, metadata !DIExpression()), !dbg !13 ; CHECK: invalid llvm.dbg.assign intrinsic address expression call void @llvm.dbg.assign(metadata !14, metadata !10, metadata !DIExpression(), metadata !14, metadata ptr undef, metadata !2), !dbg !13 ret void