1- use rustc_hir:: attrs:: { CoverageAttrKind , OptimizeAttr , SanitizerSet , UsedBy } ;
1+ use rustc_hir:: attrs:: { CoverageAttrKind , OptimizeAttr , RtsanSetting , SanitizerSet , UsedBy } ;
22use rustc_session:: parse:: feature_err;
33
44use super :: prelude:: * ;
@@ -592,7 +592,8 @@ impl<S: Stage> SingleAttributeParser<S> for SanitizeParser {
592592 r#"memory = "on|off""# ,
593593 r#"memtag = "on|off""# ,
594594 r#"shadow_call_stack = "on|off""# ,
595- r#"thread = "on|off""#
595+ r#"thread = "on|off""# ,
596+ r#"realtime = "nonblocking|blocking|caller""# ,
596597 ] ) ;
597598
598599 const ATTRIBUTE_ORDER : AttributeOrder = AttributeOrder :: KeepOutermost ;
@@ -606,6 +607,7 @@ impl<S: Stage> SingleAttributeParser<S> for SanitizeParser {
606607
607608 let mut on_set = SanitizerSet :: empty ( ) ;
608609 let mut off_set = SanitizerSet :: empty ( ) ;
610+ let mut rtsan = None ;
609611
610612 for item in list. mixed ( ) {
611613 let Some ( item) = item. meta_item ( ) else {
@@ -654,6 +656,17 @@ impl<S: Stage> SingleAttributeParser<S> for SanitizeParser {
654656 Some ( sym:: shadow_call_stack) => apply ( SanitizerSet :: SHADOWCALLSTACK ) ,
655657 Some ( sym:: thread) => apply ( SanitizerSet :: THREAD ) ,
656658 Some ( sym:: hwaddress) => apply ( SanitizerSet :: HWADDRESS ) ,
659+ Some ( sym:: realtime) => match value. value_as_str ( ) {
660+ Some ( sym:: nonblocking) => rtsan = Some ( RtsanSetting :: Nonblocking ) ,
661+ Some ( sym:: blocking) => rtsan = Some ( RtsanSetting :: Blocking ) ,
662+ Some ( sym:: caller) => rtsan = Some ( RtsanSetting :: Caller ) ,
663+ _ => {
664+ cx. expected_specific_argument_strings (
665+ value. value_span ,
666+ & [ sym:: nonblocking, sym:: blocking, sym:: caller] ,
667+ ) ;
668+ }
669+ } ,
657670 _ => {
658671 cx. expected_specific_argument_strings (
659672 item. path ( ) . span ( ) ,
@@ -666,13 +679,14 @@ impl<S: Stage> SingleAttributeParser<S> for SanitizeParser {
666679 sym:: shadow_call_stack,
667680 sym:: thread,
668681 sym:: hwaddress,
682+ sym:: realtime,
669683 ] ,
670684 ) ;
671685 continue ;
672686 }
673687 }
674688 }
675689
676- Some ( AttributeKind :: Sanitize { on_set, off_set, span : cx. attr_span } )
690+ Some ( AttributeKind :: Sanitize { on_set, off_set, rtsan , span : cx. attr_span } )
677691 }
678692}
0 commit comments