@@ -35,9 +35,9 @@ pub enum LoadResult<T> {
3535 LoadDepGraph ( PathBuf , std:: io:: Error ) ,
3636}
3737
38- impl < T : Default > LoadResult < T > {
38+ impl < T > LoadResult < T > {
3939 /// Accesses the data returned in [`LoadResult::Ok`].
40- pub fn open ( self , sess : & Session ) -> T {
40+ pub fn open ( self , sess : & Session , fallback : impl FnOnce ( ) -> T ) -> T {
4141 // Check for errors when using `-Zassert-incremental-state`
4242 match ( sess. opts . assert_incr_state , & self ) {
4343 ( Some ( IncrementalStateAssertion :: NotLoaded ) , LoadResult :: Ok { .. } ) => {
@@ -55,14 +55,14 @@ impl<T: Default> LoadResult<T> {
5555 match self {
5656 LoadResult :: LoadDepGraph ( path, err) => {
5757 sess. dcx ( ) . emit_warn ( errors:: LoadDepGraph { path, err } ) ;
58- Default :: default ( )
58+ fallback ( )
5959 }
6060 LoadResult :: DataOutOfDate => {
6161 if let Err ( err) = delete_all_session_dir_contents ( sess) {
6262 sess. dcx ( )
6363 . emit_err ( errors:: DeleteIncompatible { path : dep_graph_path ( sess) , err } ) ;
6464 }
65- Default :: default ( )
65+ fallback ( )
6666 }
6767 LoadResult :: Ok { data } => data,
6868 }
@@ -93,13 +93,15 @@ fn delete_dirty_work_product(sess: &Session, swp: SerializedWorkProduct) {
9393
9494fn load_dep_graph (
9595 sess : & Session ,
96- deps : & DepsType ,
97- ) -> LoadResult < ( Arc < SerializedDepGraph > , WorkProductMap ) > {
96+ deps : & Arc < DepsType > ,
97+ ) -> LoadResult < ( Arc < SerializedDepGraph < DepsType > > , WorkProductMap ) > {
9898 let prof = sess. prof . clone ( ) ;
9999
100100 if sess. opts . incremental . is_none ( ) {
101101 // No incremental compilation.
102- return LoadResult :: Ok { data : Default :: default ( ) } ;
102+ return LoadResult :: Ok {
103+ data : ( Arc :: new ( SerializedDepGraph :: empty ( deps, sess) ) , Default :: default ( ) ) ,
104+ } ;
103105 }
104106
105107 let _timer = sess. prof . generic_activity ( "incr_comp_prepare_load_dep_graph" ) ;
@@ -174,7 +176,7 @@ fn load_dep_graph(
174176 return LoadResult :: DataOutOfDate ;
175177 }
176178
177- let dep_graph = SerializedDepGraph :: decode :: < DepsType > ( & mut decoder, deps) ;
179+ let dep_graph = SerializedDepGraph :: decode ( & mut decoder, deps, sess ) ;
178180
179181 LoadResult :: Ok { data : ( dep_graph, prev_work_products) }
180182 }
@@ -208,7 +210,7 @@ pub fn load_query_result_cache(sess: &Session) -> Option<OnDiskCache> {
208210
209211/// Setups the dependency graph by loading an existing graph from disk and set up streaming of a
210212/// new graph to an incremental session directory.
211- pub fn setup_dep_graph ( sess : & Session , crate_name : Symbol , deps : & DepsType ) -> DepGraph {
213+ pub fn setup_dep_graph ( sess : & Session , crate_name : Symbol , deps : & Arc < DepsType > ) -> DepGraph {
212214 // `load_dep_graph` can only be called after `prepare_session_directory`.
213215 prepare_session_directory ( sess, crate_name) ;
214216
@@ -227,7 +229,8 @@ pub fn setup_dep_graph(sess: &Session, crate_name: Symbol, deps: &DepsType) -> D
227229 }
228230
229231 res. and_then ( |result| {
230- let ( prev_graph, prev_work_products) = result. open ( sess) ;
232+ let ( prev_graph, prev_work_products) = result
233+ . open ( sess, || ( Arc :: new ( SerializedDepGraph :: empty ( deps, sess) ) , Default :: default ( ) ) ) ;
231234 build_dep_graph ( sess, prev_graph, prev_work_products)
232235 } )
233236 . unwrap_or_else ( DepGraph :: new_disabled)
0 commit comments