Index: llvm/lib/IR/Verifier.cpp =================================================================== --- llvm/lib/IR/Verifier.cpp +++ llvm/lib/IR/Verifier.cpp @@ -931,6 +931,20 @@ N.getRawExtraData()); } + if (N.getTag() == dwarf::DW_TAG_set_type) { + if (auto *T = N.getRawBaseType()) { + auto *Enum = dyn_cast_or_null(T); + auto *Basic = dyn_cast_or_null(T); + AssertDI((Enum && Enum->getTag() == dwarf::DW_TAG_enumeration_type) || + (Basic && (Basic->getEncoding() == dwarf::DW_ATE_unsigned || + Basic->getEncoding() == dwarf::DW_ATE_signed || + Basic->getEncoding() == dwarf::DW_ATE_unsigned_char || + Basic->getEncoding() == dwarf::DW_ATE_signed_char) + ), + "invalid set base type", &N, T); + } + } + AssertDI(isScope(N.getRawScope()), "invalid scope", &N, N.getRawScope()); AssertDI(isType(N.getRawBaseType()), "invalid base type", &N, N.getRawBaseType());