@@ -62,11 +62,32 @@ fromRust(LLVMRustCounterMappingRegionKind Kind) {
6262 report_fatal_error (" Bad LLVMRustCounterMappingRegionKind!" );
6363}
6464
65+ #if LLVM_VERSION_GE(18, 0)
66+ // FFI equivalent of struct `llvm::coverage::CounterMappingRegion::MCDCParameters`
67+ // https://github.com/llvm/llvm-project/blob/ac406b481794efbc66122495d0973ae91c1bb046/llvm/include/llvm/ProfileData/Coverage/CoverageMapping.h#L253
68+ struct LLVMRustMCDCParameters {
69+ uint32_t BitmapIdx;
70+ uint32_t NumConditions;
71+ uint32_t ID;
72+ uint32_t TrueID;
73+ uint32_t FalseID;
74+ };
75+
76+ static coverage::CounterMappingRegion::MCDCParameters fromRust (
77+ LLVMRustMCDCParameters Params) {
78+ return {Params.BitmapIdx , Params.NumConditions , Params.ID , Params.TrueID ,
79+ Params.FalseID };
80+ }
81+ #endif
82+
6583// FFI equivalent of struct `llvm::coverage::CounterMappingRegion`
6684// https://github.com/rust-lang/llvm-project/blob/ea6fa9c2/llvm/include/llvm/ProfileData/Coverage/CoverageMapping.h#L211-L304
6785struct LLVMRustCounterMappingRegion {
6886 LLVMRustCounter Count;
6987 LLVMRustCounter FalseCount;
88+ #if LLVM_VERSION_GE(18, 0)
89+ LLVMRustMCDCParameters MCDCParams;
90+ #endif
7091 uint32_t FileID;
7192 uint32_t ExpandedFileID;
7293 uint32_t LineStart;
@@ -139,6 +160,9 @@ extern "C" void LLVMRustCoverageWriteMappingToBuffer(
139160 RustMappingRegions, NumMappingRegions)) {
140161 MappingRegions.emplace_back (
141162 fromRust (Region.Count ), fromRust (Region.FalseCount ),
163+ #if LLVM_VERSION_GE(18, 0)
164+ fromRust (Region.MCDCParams ),
165+ #endif
142166 Region.FileID , Region.ExpandedFileID ,
143167 Region.LineStart , Region.ColumnStart , Region.LineEnd , Region.ColumnEnd ,
144168 fromRust (Region.Kind ));
0 commit comments