Index: llvm/lib/IR/Core.cpp =================================================================== --- llvm/lib/IR/Core.cpp +++ llvm/lib/IR/Core.cpp @@ -1096,6 +1096,14 @@ return wrap(ConstantPointerNull::get(unwrap(Ty))); } +LLVMBool LLVMIsUnknownProvenance(LLVMValueRef Val) { + return isa(unwrap(Val)); +} + +LLVMValueRef LLVMGetUnknownProvenance(LLVMTypeRef Ty) { + return wrap(UnknownProvenance::get(unwrap(Ty))); +} + /*--.. Operations on metadata nodes ........................................--*/ LLVMMetadataRef LLVMMDStringInContext2(LLVMContextRef C, const char *Str, Index: llvm/tools/llvm-c-test/echo.cpp =================================================================== --- llvm/tools/llvm-c-test/echo.cpp +++ llvm/tools/llvm-c-test/echo.cpp @@ -347,6 +347,12 @@ return LLVMGetUndef(TypeCloner(M).Clone(Cst)); } + // Try unknown_provenance + if (LLVMIsUnknownProvenance(Cst)) { + check_value_kind(Cst, LLVMUnknownProvenanceValueKind); + return LLVMGetUnknownProvenance(TypeCloner(M).Clone(Cst)); + } + // Try poison if (LLVMIsPoison(Cst)) { check_value_kind(Cst, LLVMPoisonValueValueKind);