@@ -803,38 +803,55 @@ impl<'a> CrateLoader<'a> {
803
803
return
804
804
}
805
805
806
+ let any_unsupported = self . sess . crate_types . borrow ( ) . iter ( ) . any ( |ct| {
807
+ match * ct {
808
+ config:: CrateType :: Executable |
809
+ config:: CrateType :: Staticlib |
810
+ config:: CrateType :: Cdylib |
811
+ config:: CrateType :: Dylib |
812
+ config:: CrateType :: Rlib => false ,
813
+ _ => true ,
814
+ }
815
+ } ) ;
816
+ if any_unsupported {
817
+ self . sess . err ( "Only executables, staticlibs, cdylibs, dylibs and rlibs can be compiled \
818
+ with `-Z sanitizer`") ;
819
+ self . sess . injected_sanitizer_runtime . set ( None ) ;
820
+ return
821
+ }
822
+
806
823
let mut uses_std = false ;
807
824
self . cstore . iter_crate_data ( |_, data| {
808
825
if data. name == sym:: std {
809
826
uses_std = true ;
810
827
}
811
828
} ) ;
829
+ if !uses_std {
830
+ self . sess . err ( "Must link std to be compiled with `-Z sanitizer`" ) ;
831
+ return
832
+ }
812
833
813
- if uses_std {
814
- let name = match * sanitizer {
815
- Sanitizer :: Address => "rustc_asan" ,
816
- Sanitizer :: Leak => "rustc_lsan" ,
817
- Sanitizer :: Memory => "rustc_msan" ,
818
- Sanitizer :: Thread => "rustc_tsan" ,
819
- } ;
820
- info ! ( "loading sanitizer: {}" , name) ;
834
+ let name = match * sanitizer {
835
+ Sanitizer :: Address => "rustc_asan" ,
836
+ Sanitizer :: Leak => "rustc_lsan" ,
837
+ Sanitizer :: Memory => "rustc_msan" ,
838
+ Sanitizer :: Thread => "rustc_tsan" ,
839
+ } ;
840
+ info ! ( "loading sanitizer: {}" , name) ;
821
841
822
- let symbol = Symbol :: intern ( name) ;
823
- let dep_kind = DepKind :: Implicit ;
824
- let ( cnum, data) =
825
- self . resolve_crate ( & None , symbol, symbol, None , None , DUMMY_SP ,
826
- PathKind :: Crate , dep_kind)
827
- . unwrap_or_else ( |err| err. report ( ) ) ;
842
+ let symbol = Symbol :: intern ( name) ;
843
+ let dep_kind = DepKind :: Implicit ;
844
+ let ( cnum, data) =
845
+ self . resolve_crate ( & None , symbol, symbol, None , None , DUMMY_SP ,
846
+ PathKind :: Crate , dep_kind)
847
+ . unwrap_or_else ( |err| err. report ( ) ) ;
828
848
829
- // Sanity check the loaded crate to ensure it is indeed a sanitizer runtime
830
- if !data. root . sanitizer_runtime {
831
- self . sess . err ( & format ! ( "the crate `{}` is not a sanitizer runtime" ,
832
- name) ) ;
833
- }
834
- self . sess . injected_sanitizer_runtime . set ( Some ( cnum) ) ;
835
- } else {
836
- self . sess . err ( "Must link std to be compiled with `-Z sanitizer`" ) ;
849
+ // Sanity check the loaded crate to ensure it is indeed a sanitizer runtime
850
+ if !data. root . sanitizer_runtime {
851
+ self . sess . err ( & format ! ( "the crate `{}` is not a sanitizer runtime" ,
852
+ name) ) ;
837
853
}
854
+ self . sess . injected_sanitizer_runtime . set ( Some ( cnum) ) ;
838
855
}
839
856
840
857
fn inject_profiler_runtime ( & mut self ) {
0 commit comments