@@ -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 }
@@ -91,12 +91,16 @@ fn delete_dirty_work_product(sess: &Session, swp: SerializedWorkProduct) {
9191 work_product:: delete_workproduct_files ( sess, & swp. work_product ) ;
9292}
9393
94- fn load_dep_graph ( sess : & Session ) -> LoadResult < ( Arc < SerializedDepGraph > , WorkProductMap ) > {
94+ fn load_dep_graph (
95+ sess : & Session ,
96+ ) -> LoadResult < ( Arc < SerializedDepGraph < DepsType > > , WorkProductMap ) > {
9597 let prof = sess. prof . clone ( ) ;
9698
9799 if sess. opts . incremental . is_none ( ) {
98100 // No incremental compilation.
99- return LoadResult :: Ok { data : Default :: default ( ) } ;
101+ return LoadResult :: Ok {
102+ data : ( Arc :: new ( SerializedDepGraph :: empty ( sess) ) , Default :: default ( ) ) ,
103+ } ;
100104 }
101105
102106 let _timer = sess. prof . generic_activity ( "incr_comp_prepare_load_dep_graph" ) ;
@@ -171,7 +175,7 @@ fn load_dep_graph(sess: &Session) -> LoadResult<(Arc<SerializedDepGraph>, WorkPr
171175 return LoadResult :: DataOutOfDate ;
172176 }
173177
174- let dep_graph = SerializedDepGraph :: decode :: < DepsType > ( & mut decoder) ;
178+ let dep_graph = SerializedDepGraph :: decode ( & mut decoder, sess ) ;
175179
176180 LoadResult :: Ok { data : ( dep_graph, prev_work_products) }
177181 }
@@ -228,7 +232,8 @@ pub fn setup_dep_graph(
228232 }
229233
230234 res. and_then ( |result| {
231- let ( prev_graph, prev_work_products) = result. open ( sess) ;
235+ let ( prev_graph, prev_work_products) =
236+ result. open ( sess, || ( Arc :: new ( SerializedDepGraph :: empty ( sess) ) , Default :: default ( ) ) ) ;
232237 build_dep_graph ( sess, prev_graph, prev_work_products)
233238 } )
234239 . unwrap_or_else ( DepGraph :: new_disabled)
0 commit comments