@@ -1591,23 +1591,41 @@ LLVMRustUnpackSMDiagnostic(LLVMSMDiagnosticRef DRef, RustStringRef MessageOut,
15911591 return true ;
15921592}
15931593
1594- extern " C" LLVMValueRef LLVMRustBuildMemCpy (LLVMBuilderRef B, LLVMValueRef Dst,
1595- unsigned DstAlign, LLVMValueRef Src,
1596- unsigned SrcAlign,
1597- LLVMValueRef Size,
1598- bool IsVolatile) {
1599- return wrap (unwrap (B)->CreateMemCpy (unwrap (Dst), MaybeAlign (DstAlign),
1600- unwrap (Src), MaybeAlign (SrcAlign),
1601- unwrap (Size), IsVolatile));
1594+ enum class LLVMPreserveCheriTags {
1595+ Unknown,
1596+ Required,
1597+ Unnecessary,
1598+ };
1599+
1600+ static PreserveCheriTags fromRust (LLVMPreserveCheriTags PreserveTags) {
1601+ switch (PreserveTags) {
1602+ case LLVMPreserveCheriTags::Unknown:
1603+ return PreserveCheriTags::Unknown;
1604+ case LLVMPreserveCheriTags::Required:
1605+ return PreserveCheriTags::Required;
1606+ case LLVMPreserveCheriTags::Unnecessary:
1607+ return PreserveCheriTags::Unnecessary;
1608+ }
1609+
1610+ report_fatal_error (" Invalid LLVMPreserveCheriTags value!" );
1611+ }
1612+
1613+ extern " C" LLVMValueRef
1614+ LLVMRustBuildMemCpy (LLVMBuilderRef B, LLVMValueRef Dst, unsigned DstAlign,
1615+ LLVMValueRef Src, unsigned SrcAlign, LLVMValueRef Size,
1616+ LLVMPreserveCheriTags PreserveTags, bool IsVolatile) {
1617+ return wrap (unwrap (B)->CreateMemCpy (
1618+ unwrap (Dst), MaybeAlign (DstAlign), unwrap (Src), MaybeAlign (SrcAlign),
1619+ unwrap (Size), fromRust (PreserveTags), IsVolatile));
16021620}
16031621
16041622extern " C" LLVMValueRef
16051623LLVMRustBuildMemMove (LLVMBuilderRef B, LLVMValueRef Dst, unsigned DstAlign,
16061624 LLVMValueRef Src, unsigned SrcAlign, LLVMValueRef Size,
1607- bool IsVolatile) {
1608- return wrap (unwrap (B)->CreateMemMove (unwrap (Dst), MaybeAlign (DstAlign),
1609- unwrap (Src), MaybeAlign (SrcAlign),
1610- unwrap (Size), IsVolatile));
1625+ LLVMPreserveCheriTags PreserveTags, bool IsVolatile) {
1626+ return wrap (unwrap (B)->CreateMemMove (
1627+ unwrap (Dst), MaybeAlign (DstAlign), unwrap (Src), MaybeAlign (SrcAlign),
1628+ unwrap (Size), fromRust (PreserveTags ), IsVolatile));
16111629}
16121630
16131631extern " C" LLVMValueRef LLVMRustBuildMemSet (LLVMBuilderRef B, LLVMValueRef Dst,
0 commit comments