@@ -1316,6 +1316,32 @@ bitflags::bitflags! {
1316
1316
rustc_data_structures:: external_bitflags_debug! { SanitizerSet }
1317
1317
1318
1318
impl SanitizerSet {
1319
+ const MUTUALLY_EXCLUSIVE : & ' static [ ( SanitizerSet , SanitizerSet ) ] = & [
1320
+ ( SanitizerSet :: MEMORY , SanitizerSet :: ADDRESS ) ,
1321
+ ( SanitizerSet :: MEMORY , SanitizerSet :: LEAK ) ,
1322
+ ( SanitizerSet :: THREAD , SanitizerSet :: ADDRESS ) ,
1323
+ ( SanitizerSet :: THREAD , SanitizerSet :: LEAK ) ,
1324
+ ( SanitizerSet :: THREAD , SanitizerSet :: MEMORY ) ,
1325
+ ( SanitizerSet :: HWADDRESS , SanitizerSet :: ADDRESS ) ,
1326
+ ( SanitizerSet :: HWADDRESS , SanitizerSet :: MEMORY ) ,
1327
+ ( SanitizerSet :: HWADDRESS , SanitizerSet :: THREAD ) ,
1328
+ ( SanitizerSet :: MEMTAG , SanitizerSet :: ADDRESS ) ,
1329
+ ( SanitizerSet :: MEMTAG , SanitizerSet :: HWADDRESS ) ,
1330
+ ( SanitizerSet :: KCFI , SanitizerSet :: CFI ) ,
1331
+ ( SanitizerSet :: KERNELADDRESS , SanitizerSet :: ADDRESS ) ,
1332
+ ( SanitizerSet :: KERNELADDRESS , SanitizerSet :: LEAK ) ,
1333
+ ( SanitizerSet :: KERNELADDRESS , SanitizerSet :: MEMORY ) ,
1334
+ ( SanitizerSet :: KERNELADDRESS , SanitizerSet :: THREAD ) ,
1335
+ ( SanitizerSet :: KERNELADDRESS , SanitizerSet :: HWADDRESS ) ,
1336
+ ( SanitizerSet :: KERNELADDRESS , SanitizerSet :: MEMTAG ) ,
1337
+ ( SanitizerSet :: SAFESTACK , SanitizerSet :: ADDRESS ) ,
1338
+ ( SanitizerSet :: SAFESTACK , SanitizerSet :: LEAK ) ,
1339
+ ( SanitizerSet :: SAFESTACK , SanitizerSet :: MEMORY ) ,
1340
+ ( SanitizerSet :: SAFESTACK , SanitizerSet :: THREAD ) ,
1341
+ ( SanitizerSet :: SAFESTACK , SanitizerSet :: HWADDRESS ) ,
1342
+ ( SanitizerSet :: SAFESTACK , SanitizerSet :: KERNELADDRESS ) ,
1343
+ ] ;
1344
+
1319
1345
/// Return sanitizer's name
1320
1346
///
1321
1347
/// Returns none if the flags is a set of sanitizers numbering not exactly one.
@@ -1336,6 +1362,13 @@ impl SanitizerSet {
1336
1362
_ => return None ,
1337
1363
} )
1338
1364
}
1365
+
1366
+ pub fn mutually_exclusive ( self ) -> Option < ( SanitizerSet , SanitizerSet ) > {
1367
+ Self :: MUTUALLY_EXCLUSIVE
1368
+ . into_iter ( )
1369
+ . find ( |& ( a, b) | self . contains ( * a) && self . contains ( * b) )
1370
+ . copied ( )
1371
+ }
1339
1372
}
1340
1373
1341
1374
/// Formats a sanitizer set as a comma separated list of sanitizers' names.
0 commit comments