@@ -356,8 +356,12 @@ impl Session {
356
356
self . instrument_coverage ( ) && self . opts . unstable_opts . coverage_options . mcdc
357
357
}
358
358
359
+ pub fn is_sanitizer_address_enabled ( & self ) -> bool {
360
+ self . opts . cg . sanitizer . contains ( SanitizerSet :: ADDRESS )
361
+ }
362
+
359
363
pub fn is_sanitizer_cfi_enabled ( & self ) -> bool {
360
- self . opts . unstable_opts . sanitizer . contains ( SanitizerSet :: CFI )
364
+ self . opts . cg . sanitizer . contains ( SanitizerSet :: CFI )
361
365
}
362
366
363
367
pub fn is_sanitizer_cfi_canonical_jump_tables_disabled ( & self ) -> bool {
@@ -377,7 +381,19 @@ impl Session {
377
381
}
378
382
379
383
pub fn is_sanitizer_kcfi_enabled ( & self ) -> bool {
380
- self . opts . unstable_opts . sanitizer . contains ( SanitizerSet :: KCFI )
384
+ self . opts . cg . sanitizer . contains ( SanitizerSet :: KCFI )
385
+ }
386
+
387
+ pub fn is_sanitizer_memory_enabled ( & self ) -> bool {
388
+ self . opts . cg . sanitizer . contains ( SanitizerSet :: MEMORY )
389
+ }
390
+
391
+ pub fn is_sanitizer_memory_track_origins_enabled ( & self ) -> bool {
392
+ self . opts . unstable_opts . sanitizer_memory_track_origins != 0
393
+ }
394
+
395
+ pub fn is_sanitizer_thread_enabled ( & self ) -> bool {
396
+ self . opts . cg . sanitizer . contains ( SanitizerSet :: THREAD )
381
397
}
382
398
383
399
pub fn is_split_lto_unit_enabled ( & self ) -> bool {
@@ -595,7 +611,7 @@ impl Session {
595
611
// AddressSanitizer and KernelAddressSanitizer uses lifetimes to detect use after scope bugs.
596
612
// MemorySanitizer uses lifetimes to detect use of uninitialized stack variables.
597
613
// HWAddressSanitizer will use lifetimes to detect use after scope bugs in the future.
598
- || self . opts . unstable_opts . sanitizer . intersects ( SanitizerSet :: ADDRESS | SanitizerSet :: KERNELADDRESS | SanitizerSet :: MEMORY | SanitizerSet :: HWADDRESS )
614
+ || self . opts . cg . sanitizer . intersects ( SanitizerSet :: ADDRESS | SanitizerSet :: KERNELADDRESS | SanitizerSet :: MEMORY | SanitizerSet :: HWADDRESS )
599
615
}
600
616
601
617
pub fn diagnostic_width ( & self ) -> usize {
@@ -722,7 +738,7 @@ impl Session {
722
738
let more_names = self . opts . output_types . contains_key ( & OutputType :: LlvmAssembly )
723
739
|| self . opts . output_types . contains_key ( & OutputType :: Bitcode )
724
740
// AddressSanitizer and MemorySanitizer use alloca name when reporting an issue.
725
- || self . opts . unstable_opts . sanitizer . intersects ( SanitizerSet :: ADDRESS | SanitizerSet :: MEMORY ) ;
741
+ || self . opts . cg . sanitizer . intersects ( SanitizerSet :: ADDRESS | SanitizerSet :: MEMORY ) ;
726
742
!more_names
727
743
}
728
744
}
@@ -1167,8 +1183,12 @@ fn validate_commandline_args_with_session_available(sess: &Session) {
1167
1183
}
1168
1184
1169
1185
// Sanitizers can only be used on platforms that we know have working sanitizer codegen.
1170
- let supported_sanitizers = sess. target . options . supported_sanitizers ;
1171
- let unsupported_sanitizers = sess. opts . unstable_opts . sanitizer - supported_sanitizers;
1186
+ let supported_sanitizers = if sess. unstable_options ( ) {
1187
+ sess. target . options . supported_sanitizers . supported_sanitizers ( )
1188
+ } else {
1189
+ sess. target . options . supported_sanitizers . stable_sanitizers ( )
1190
+ } ;
1191
+ let unsupported_sanitizers = sess. opts . cg . sanitizer - supported_sanitizers;
1172
1192
match unsupported_sanitizers. into_iter ( ) . count ( ) {
1173
1193
0 => { }
1174
1194
1 => {
@@ -1182,7 +1202,7 @@ fn validate_commandline_args_with_session_available(sess: &Session) {
1182
1202
}
1183
1203
}
1184
1204
// Cannot mix and match sanitizers.
1185
- let mut sanitizer_iter = sess. opts . unstable_opts . sanitizer . into_iter ( ) ;
1205
+ let mut sanitizer_iter = sess. opts . cg . sanitizer . into_iter ( ) ;
1186
1206
if let ( Some ( first) , Some ( second) ) = ( sanitizer_iter. next ( ) , sanitizer_iter. next ( ) ) {
1187
1207
sess. dcx ( ) . emit_err ( errors:: CannotMixAndMatchSanitizers {
1188
1208
first : first. to_string ( ) ,
@@ -1191,10 +1211,7 @@ fn validate_commandline_args_with_session_available(sess: &Session) {
1191
1211
}
1192
1212
1193
1213
// Cannot enable crt-static with sanitizers on Linux
1194
- if sess. crt_static ( None )
1195
- && !sess. opts . unstable_opts . sanitizer . is_empty ( )
1196
- && !sess. target . is_like_msvc
1197
- {
1214
+ if sess. crt_static ( None ) && !sess. opts . cg . sanitizer . is_empty ( ) && !sess. target . is_like_msvc {
1198
1215
sess. dcx ( ) . emit_err ( errors:: CannotEnableCrtStaticLinux ) ;
1199
1216
}
1200
1217
0 commit comments