@@ -589,57 +589,101 @@ fn parse_sanitize_attr(
589589    if  let  Some ( list)  = attr. meta_item_list ( )  { 
590590        for  item in  list. iter ( )  { 
591591            let  MetaItemInner :: MetaItem ( set)  = item else  { 
592-                 tcx. dcx ( ) . emit_err ( errors:: InvalidSanitize  {  span :  attr. span ( )  } ) ; 
592+                 tcx. dcx ( ) . emit_err ( errors:: InvalidSanitizer  {  span :  attr. span ( )  } ) ; 
593593                break ; 
594594            } ; 
595595            let  segments = set. path . segments . iter ( ) . map ( |x| x. ident . name ) . collect :: < Vec < _ > > ( ) ; 
596596            match  segments. as_slice ( )  { 
597597                // Similar to clang, sanitize(address = ..) and 
598598                // sanitize(kernel_address = ..) control both ASan and KASan 
599599                // Source: https://reviews.llvm.org/D44981. 
600-                 [ sym:: address]  | [ sym:: kernel_address]  if  set. value_str ( )  == Some ( sym:: off)  => { 
601-                     result |= SanitizerSet :: ADDRESS  | SanitizerSet :: KERNELADDRESS 
602-                 } 
603-                 [ sym:: address]  | [ sym:: kernel_address]  if  set. value_str ( )  == Some ( sym:: on)  => { 
604-                     result &= !SanitizerSet :: ADDRESS ; 
605-                     result &= !SanitizerSet :: KERNELADDRESS ; 
606-                 } 
607-                 [ sym:: cfi]  if  set. value_str ( )  == Some ( sym:: off)  => result |= SanitizerSet :: CFI , 
608-                 [ sym:: cfi]  if  set. value_str ( )  == Some ( sym:: on)  => result &= !SanitizerSet :: CFI , 
609-                 [ sym:: kcfi]  if  set. value_str ( )  == Some ( sym:: off)  => result |= SanitizerSet :: KCFI , 
610-                 [ sym:: kcfi]  if  set. value_str ( )  == Some ( sym:: on)  => result &= !SanitizerSet :: KCFI , 
611-                 [ sym:: memory]  if  set. value_str ( )  == Some ( sym:: off)  => { 
612-                     result |= SanitizerSet :: MEMORY 
613-                 } 
614-                 [ sym:: memory]  if  set. value_str ( )  == Some ( sym:: on)  => { 
615-                     result &= !SanitizerSet :: MEMORY 
616-                 } 
617-                 [ sym:: memtag]  if  set. value_str ( )  == Some ( sym:: off)  => { 
618-                     result |= SanitizerSet :: MEMTAG 
619-                 } 
620-                 [ sym:: memtag]  if  set. value_str ( )  == Some ( sym:: on)  => { 
621-                     result &= !SanitizerSet :: MEMTAG 
622-                 } 
623-                 [ sym:: shadow_call_stack]  if  set. value_str ( )  == Some ( sym:: off)  => { 
624-                     result |= SanitizerSet :: SHADOWCALLSTACK 
625-                 } 
626-                 [ sym:: shadow_call_stack]  if  set. value_str ( )  == Some ( sym:: on)  => { 
627-                     result &= !SanitizerSet :: SHADOWCALLSTACK 
628-                 } 
629-                 [ sym:: thread]  if  set. value_str ( )  == Some ( sym:: off)  => { 
630-                     result |= SanitizerSet :: THREAD 
631-                 } 
632-                 [ sym:: thread]  if  set. value_str ( )  == Some ( sym:: on)  => { 
633-                     result &= !SanitizerSet :: THREAD 
634-                 } 
635-                 [ sym:: hwaddress]  if  set. value_str ( )  == Some ( sym:: off)  => { 
636-                     result |= SanitizerSet :: HWADDRESS 
637-                 } 
638-                 [ sym:: hwaddress]  if  set. value_str ( )  == Some ( sym:: on)  => { 
639-                     result &= !SanitizerSet :: HWADDRESS 
640-                 } 
600+                 [ sym:: address]  | [ sym:: kernel_address]  => match  set. value_str ( )  { 
601+                     Some ( sym:: off)  => result |= SanitizerSet :: ADDRESS  | SanitizerSet :: KERNELADDRESS , 
602+                     Some ( sym:: on)  => { 
603+                         result &= !SanitizerSet :: ADDRESS ; 
604+                         result &= !SanitizerSet :: KERNELADDRESS ; 
605+                     } 
606+                     _ => { 
607+                         let  sanitizer = segments. as_slice ( ) [ 0 ] ; 
608+                         tcx. dcx ( ) . emit_err ( errors:: InvalidSanitizerSetting  { 
609+                             span :  set. span , 
610+                             sanitizer, 
611+                         } ) ; 
612+                     } 
613+                 } , 
614+                 [ sym:: cfi]  => match  set. value_str ( )  { 
615+                     Some ( sym:: off)  => result |= SanitizerSet :: CFI , 
616+                     Some ( sym:: on)  => result &= !SanitizerSet :: CFI , 
617+                     _ => { 
618+                         tcx. dcx ( ) . emit_err ( errors:: InvalidSanitizerSetting  { 
619+                             span :  set. span , 
620+                             sanitizer :  sym:: cfi, 
621+                         } ) ; 
622+                     } 
623+                 } , 
624+                 [ sym:: kcfi]  => match  set. value_str ( )  { 
625+                     Some ( sym:: off)  => result |= SanitizerSet :: KCFI , 
626+                     Some ( sym:: on)  => result &= !SanitizerSet :: KCFI , 
627+                     _ => { 
628+                         tcx. dcx ( ) . emit_err ( errors:: InvalidSanitizerSetting  { 
629+                             span :  set. span , 
630+                             sanitizer :  sym:: kcfi, 
631+                         } ) ; 
632+                     } 
633+                 } , 
634+                 [ sym:: memory]  => match  set. value_str ( )  { 
635+                     Some ( sym:: off)  => result |= SanitizerSet :: MEMORY , 
636+                     Some ( sym:: on)  => result &= !SanitizerSet :: MEMORY , 
637+                     _ => { 
638+                         tcx. dcx ( ) . emit_err ( errors:: InvalidSanitizerSetting  { 
639+                             span :  set. span , 
640+                             sanitizer :  sym:: memory, 
641+                         } ) ; 
642+                     } 
643+                 } , 
644+                 [ sym:: memtag]  => match  set. value_str ( )  { 
645+                     Some ( sym:: off)  => result |= SanitizerSet :: MEMTAG , 
646+                     Some ( sym:: on)  => result &= !SanitizerSet :: MEMTAG , 
647+                     _ => { 
648+                         tcx. dcx ( ) . emit_err ( errors:: InvalidSanitizerSetting  { 
649+                             span :  set. span , 
650+                             sanitizer :  sym:: memtag, 
651+                         } ) ; 
652+                     } 
653+                 } , 
654+                 [ sym:: shadow_call_stack]  => match  set. value_str ( )  { 
655+                     Some ( sym:: off)  => result |= SanitizerSet :: SHADOWCALLSTACK , 
656+                     Some ( sym:: on)  => result &= !SanitizerSet :: SHADOWCALLSTACK , 
657+                     _ => { 
658+                         tcx. dcx ( ) . emit_err ( errors:: InvalidSanitizerSetting  { 
659+                             span :  set. span , 
660+                             sanitizer :  sym:: shadow_call_stack, 
661+                         } ) ; 
662+                     } 
663+                 } , 
664+                 [ sym:: thread]  => match  set. value_str ( )  { 
665+                     Some ( sym:: off)  => result |= SanitizerSet :: THREAD , 
666+                     Some ( sym:: on)  => result &= !SanitizerSet :: THREAD , 
667+                     _ => { 
668+                         tcx. dcx ( ) . emit_err ( errors:: InvalidSanitizerSetting  { 
669+                             span :  set. span , 
670+                             sanitizer :  sym:: thread, 
671+                         } ) ; 
672+                     } 
673+                 } , 
674+ 
675+                 [ sym:: hwaddress]  => match  set. value_str ( )  { 
676+                     Some ( sym:: off)  => result |= SanitizerSet :: HWADDRESS , 
677+                     Some ( sym:: on)  => result &= !SanitizerSet :: HWADDRESS , 
678+                     _ => { 
679+                         tcx. dcx ( ) . emit_err ( errors:: InvalidSanitizerSetting  { 
680+                             span :  set. span , 
681+                             sanitizer :  sym:: hwaddress, 
682+                         } ) ; 
683+                     } 
684+                 } , 
641685                _ => { 
642-                     tcx. dcx ( ) . emit_err ( errors:: InvalidSanitize  {  span :  attr. span ( )  } ) ; 
686+                     tcx. dcx ( ) . emit_err ( errors:: InvalidSanitizer  {  span :  attr. span ( )  } ) ; 
643687                } 
644688            } 
645689        } 
0 commit comments