@@ -1316,6 +1316,32 @@ bitflags::bitflags! {
13161316rustc_data_structures:: external_bitflags_debug! { SanitizerSet }
13171317
13181318impl 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+
13191345 /// Return sanitizer's name
13201346 ///
13211347 /// Returns none if the flags is a set of sanitizers numbering not exactly one.
@@ -1336,6 +1362,13 @@ impl SanitizerSet {
13361362 _ => return None ,
13371363 } )
13381364 }
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+ }
13391372}
13401373
13411374/// Formats a sanitizer set as a comma separated list of sanitizers' names.
0 commit comments