@@ -30,8 +30,9 @@ use proc_macro::bridge::client::ProcMacro;
3030use std:: error:: Error ;
3131use std:: ops:: Fn ;
3232use std:: path:: Path ;
33+ use std:: str:: FromStr ;
3334use std:: time:: Duration ;
34- use std:: { cmp, iter} ;
35+ use std:: { cmp, env , iter} ;
3536
3637/// The backend's way to give the crate store access to the metadata in a library.
3738/// Note that it returns the raw metadata bytes stored in the library file, whether
@@ -989,13 +990,53 @@ impl<'a, 'tcx> CrateLoader<'a, 'tcx> {
989990 }
990991 }
991992
993+ fn report_future_incompatible_deps ( & self , krate : & ast:: Crate ) {
994+ let name = self . tcx . crate_name ( LOCAL_CRATE ) ;
995+
996+ if name. as_str ( ) == "wasm_bindgen" {
997+ if !env:: var ( "CARGO_PKG_VERSION_MAJOR" )
998+ . ok ( )
999+ . and_then ( |major| u64:: from_str ( & major) . ok ( ) )
1000+ . is_some_and ( |major| major == 0 )
1001+ {
1002+ return ;
1003+ }
1004+ if !env:: var ( "CARGO_PKG_VERSION_MINOR" )
1005+ . ok ( )
1006+ . and_then ( |minor| u64:: from_str ( & minor) . ok ( ) )
1007+ . is_some_and ( |minor| minor <= 2 )
1008+ {
1009+ return ;
1010+ }
1011+ if !env:: var ( "CARGO_PKG_VERSION_PATCH" )
1012+ . ok ( )
1013+ . and_then ( |patch| u64:: from_str ( & patch) . ok ( ) )
1014+ . is_some_and ( |minor| minor <= 87 )
1015+ {
1016+ return ;
1017+ }
1018+
1019+ // Make a point span rather than covering the whole file
1020+ let span = krate. spans . inner_span . shrink_to_lo ( ) ;
1021+
1022+ self . sess . parse_sess . buffer_lint (
1023+ lint:: builtin:: WASM_C_ABI ,
1024+ span,
1025+ ast:: CRATE_NODE_ID ,
1026+ "older versions of the `wasm-bindgen` crate will be incompatible with future versions of Rust; \
1027+ please update to `wasm-bindgen` v0.2.88". to_string ( ) ,
1028+ ) ;
1029+ }
1030+ }
1031+
9921032 pub fn postprocess ( & mut self , krate : & ast:: Crate ) {
9931033 self . inject_forced_externs ( ) ;
9941034 self . inject_profiler_runtime ( krate) ;
9951035 self . inject_allocator_crate ( krate) ;
9961036 self . inject_panic_runtime ( krate) ;
9971037
9981038 self . report_unused_deps ( krate) ;
1039+ self . report_future_incompatible_deps ( krate) ;
9991040
10001041 info ! ( "{:?}" , CrateDump ( self . cstore) ) ;
10011042 }
0 commit comments