@@ -569,57 +569,101 @@ fn parse_sanitize_attr(
569569    if  let  Some ( list)  = attr. meta_item_list ( )  { 
570570        for  item in  list. iter ( )  { 
571571            let  MetaItemInner :: MetaItem ( set)  = item else  { 
572-                 tcx. dcx ( ) . emit_err ( errors:: InvalidSanitize  {  span :  attr. span ( )  } ) ; 
572+                 tcx. dcx ( ) . emit_err ( errors:: InvalidSanitizer  {  span :  attr. span ( )  } ) ; 
573573                break ; 
574574            } ; 
575575            let  segments = set. path . segments . iter ( ) . map ( |x| x. ident . name ) . collect :: < Vec < _ > > ( ) ; 
576576            match  segments. as_slice ( )  { 
577577                // Similar to clang, sanitize(address = ..) and 
578578                // sanitize(kernel_address = ..) control both ASan and KASan 
579579                // Source: https://reviews.llvm.org/D44981. 
580-                 [ sym:: address]  | [ sym:: kernel_address]  if  set. value_str ( )  == Some ( sym:: off)  => { 
581-                     result |= SanitizerSet :: ADDRESS  | SanitizerSet :: KERNELADDRESS 
582-                 } 
583-                 [ sym:: address]  | [ sym:: kernel_address]  if  set. value_str ( )  == Some ( sym:: on)  => { 
584-                     result &= !SanitizerSet :: ADDRESS ; 
585-                     result &= !SanitizerSet :: KERNELADDRESS ; 
586-                 } 
587-                 [ sym:: cfi]  if  set. value_str ( )  == Some ( sym:: off)  => result |= SanitizerSet :: CFI , 
588-                 [ sym:: cfi]  if  set. value_str ( )  == Some ( sym:: on)  => result &= !SanitizerSet :: CFI , 
589-                 [ sym:: kcfi]  if  set. value_str ( )  == Some ( sym:: off)  => result |= SanitizerSet :: KCFI , 
590-                 [ sym:: kcfi]  if  set. value_str ( )  == Some ( sym:: on)  => result &= !SanitizerSet :: KCFI , 
591-                 [ sym:: memory]  if  set. value_str ( )  == Some ( sym:: off)  => { 
592-                     result |= SanitizerSet :: MEMORY 
593-                 } 
594-                 [ sym:: memory]  if  set. value_str ( )  == Some ( sym:: on)  => { 
595-                     result &= !SanitizerSet :: MEMORY 
596-                 } 
597-                 [ sym:: memtag]  if  set. value_str ( )  == Some ( sym:: off)  => { 
598-                     result |= SanitizerSet :: MEMTAG 
599-                 } 
600-                 [ sym:: memtag]  if  set. value_str ( )  == Some ( sym:: on)  => { 
601-                     result &= !SanitizerSet :: MEMTAG 
602-                 } 
603-                 [ sym:: shadow_call_stack]  if  set. value_str ( )  == Some ( sym:: off)  => { 
604-                     result |= SanitizerSet :: SHADOWCALLSTACK 
605-                 } 
606-                 [ sym:: shadow_call_stack]  if  set. value_str ( )  == Some ( sym:: on)  => { 
607-                     result &= !SanitizerSet :: SHADOWCALLSTACK 
608-                 } 
609-                 [ sym:: thread]  if  set. value_str ( )  == Some ( sym:: off)  => { 
610-                     result |= SanitizerSet :: THREAD 
611-                 } 
612-                 [ sym:: thread]  if  set. value_str ( )  == Some ( sym:: on)  => { 
613-                     result &= !SanitizerSet :: THREAD 
614-                 } 
615-                 [ sym:: hwaddress]  if  set. value_str ( )  == Some ( sym:: off)  => { 
616-                     result |= SanitizerSet :: HWADDRESS 
617-                 } 
618-                 [ sym:: hwaddress]  if  set. value_str ( )  == Some ( sym:: on)  => { 
619-                     result &= !SanitizerSet :: HWADDRESS 
620-                 } 
580+                 [ sym:: address]  | [ sym:: kernel_address]  => match  set. value_str ( )  { 
581+                     Some ( sym:: off)  => result |= SanitizerSet :: ADDRESS  | SanitizerSet :: KERNELADDRESS , 
582+                     Some ( sym:: on)  => { 
583+                         result &= !SanitizerSet :: ADDRESS ; 
584+                         result &= !SanitizerSet :: KERNELADDRESS ; 
585+                     } 
586+                     _ => { 
587+                         let  sanitizer = segments. as_slice ( ) [ 0 ] ; 
588+                         tcx. dcx ( ) . emit_err ( errors:: InvalidSanitizerSetting  { 
589+                             span :  set. span , 
590+                             sanitizer, 
591+                         } ) ; 
592+                     } 
593+                 } , 
594+                 [ sym:: cfi]  => match  set. value_str ( )  { 
595+                     Some ( sym:: off)  => result |= SanitizerSet :: CFI , 
596+                     Some ( sym:: on)  => result &= !SanitizerSet :: CFI , 
597+                     _ => { 
598+                         tcx. dcx ( ) . emit_err ( errors:: InvalidSanitizerSetting  { 
599+                             span :  set. span , 
600+                             sanitizer :  sym:: cfi, 
601+                         } ) ; 
602+                     } 
603+                 } , 
604+                 [ sym:: kcfi]  => match  set. value_str ( )  { 
605+                     Some ( sym:: off)  => result |= SanitizerSet :: KCFI , 
606+                     Some ( sym:: on)  => result &= !SanitizerSet :: KCFI , 
607+                     _ => { 
608+                         tcx. dcx ( ) . emit_err ( errors:: InvalidSanitizerSetting  { 
609+                             span :  set. span , 
610+                             sanitizer :  sym:: kcfi, 
611+                         } ) ; 
612+                     } 
613+                 } , 
614+                 [ sym:: memory]  => match  set. value_str ( )  { 
615+                     Some ( sym:: off)  => result |= SanitizerSet :: MEMORY , 
616+                     Some ( sym:: on)  => result &= !SanitizerSet :: MEMORY , 
617+                     _ => { 
618+                         tcx. dcx ( ) . emit_err ( errors:: InvalidSanitizerSetting  { 
619+                             span :  set. span , 
620+                             sanitizer :  sym:: memory, 
621+                         } ) ; 
622+                     } 
623+                 } , 
624+                 [ sym:: memtag]  => match  set. value_str ( )  { 
625+                     Some ( sym:: off)  => result |= SanitizerSet :: MEMTAG , 
626+                     Some ( sym:: on)  => result &= !SanitizerSet :: MEMTAG , 
627+                     _ => { 
628+                         tcx. dcx ( ) . emit_err ( errors:: InvalidSanitizerSetting  { 
629+                             span :  set. span , 
630+                             sanitizer :  sym:: memtag, 
631+                         } ) ; 
632+                     } 
633+                 } , 
634+                 [ sym:: shadow_call_stack]  => match  set. value_str ( )  { 
635+                     Some ( sym:: off)  => result |= SanitizerSet :: SHADOWCALLSTACK , 
636+                     Some ( sym:: on)  => result &= !SanitizerSet :: SHADOWCALLSTACK , 
637+                     _ => { 
638+                         tcx. dcx ( ) . emit_err ( errors:: InvalidSanitizerSetting  { 
639+                             span :  set. span , 
640+                             sanitizer :  sym:: shadow_call_stack, 
641+                         } ) ; 
642+                     } 
643+                 } , 
644+                 [ sym:: thread]  => match  set. value_str ( )  { 
645+                     Some ( sym:: off)  => result |= SanitizerSet :: THREAD , 
646+                     Some ( sym:: on)  => result &= !SanitizerSet :: THREAD , 
647+                     _ => { 
648+                         tcx. dcx ( ) . emit_err ( errors:: InvalidSanitizerSetting  { 
649+                             span :  set. span , 
650+                             sanitizer :  sym:: thread, 
651+                         } ) ; 
652+                     } 
653+                 } , 
654+ 
655+                 [ sym:: hwaddress]  => match  set. value_str ( )  { 
656+                     Some ( sym:: off)  => result |= SanitizerSet :: HWADDRESS , 
657+                     Some ( sym:: on)  => result &= !SanitizerSet :: HWADDRESS , 
658+                     _ => { 
659+                         tcx. dcx ( ) . emit_err ( errors:: InvalidSanitizerSetting  { 
660+                             span :  set. span , 
661+                             sanitizer :  sym:: hwaddress, 
662+                         } ) ; 
663+                     } 
664+                 } , 
621665                _ => { 
622-                     tcx. dcx ( ) . emit_err ( errors:: InvalidSanitize  {  span :  attr. span ( )  } ) ; 
666+                     tcx. dcx ( ) . emit_err ( errors:: InvalidSanitizer  {  span :  attr. span ( )  } ) ; 
623667                } 
624668            } 
625669        } 
0 commit comments