@@ -342,7 +342,7 @@ fn exported_symbols_provider_local(
342342 } ) ) ; 
343343 } 
344344 MonoItem :: Fn ( Instance  { 
345-  def :  InstanceKind :: AsyncDropGlueCtorShim ( _,  Some ( ty ) ) , 
345+  def :  InstanceKind :: AsyncDropGlueCtorShim ( _,  ty ) , 
346346 args, 
347347 } )  => { 
348348 // A little sanity-check 
@@ -353,6 +353,13 @@ fn exported_symbols_provider_local(
353353 used :  false , 
354354 } ) ) ; 
355355 } 
356+  MonoItem :: Fn ( Instance  {  def :  InstanceKind :: AsyncDropGlue ( _,  ty) ,  args :  _ } )  => { 
357+  symbols. push ( ( ExportedSymbol :: AsyncDropGlue ( ty) ,  SymbolExportInfo  { 
358+  level :  SymbolExportLevel :: Rust , 
359+  kind :  SymbolExportKind :: Text , 
360+  used :  false , 
361+  } ) ) ; 
362+  } 
356363 _ => { 
357364 // Any other symbols don't qualify for sharing 
358365 } 
@@ -376,6 +383,7 @@ fn upstream_monomorphizations_provider(
376383
377384 let  drop_in_place_fn_def_id = tcx. lang_items ( ) . drop_in_place_fn ( ) ; 
378385 let  async_drop_in_place_fn_def_id = tcx. lang_items ( ) . async_drop_in_place_fn ( ) ; 
386+  let  async_drop_in_place_poll_fn_def_id = tcx. lang_items ( ) . async_drop_in_place_poll_fn ( ) ; 
379387
380388 for  & cnum in  cnums. iter ( )  { 
381389 for  ( exported_symbol,  _)  in  tcx. exported_symbols ( cnum) . iter ( )  { 
@@ -394,8 +402,13 @@ fn upstream_monomorphizations_provider(
394402 if  let  Some ( async_drop_in_place_fn_def_id)  = async_drop_in_place_fn_def_id { 
395403 ( async_drop_in_place_fn_def_id,  tcx. mk_args ( & [ ty. into ( ) ] ) ) 
396404 }  else  { 
397-  // `drop_in_place` in place does not exist, don't try 
398-  // to use it. 
405+  continue ; 
406+  } 
407+  } 
408+  ExportedSymbol :: AsyncDropGlue ( ty)  => { 
409+  if  let  Some ( poll_fn_def_id)  = async_drop_in_place_poll_fn_def_id { 
410+  ( poll_fn_def_id,  tcx. mk_args ( & [ ty. into ( ) ] ) ) 
411+  }  else  { 
399412 continue ; 
400413 } 
401414 } 
@@ -547,6 +560,13 @@ pub(crate) fn symbol_name_for_instance_in_crate<'tcx>(
547560 instantiating_crate, 
548561 ) 
549562 } 
563+  ExportedSymbol :: AsyncDropGlue ( ty)  => { 
564+  rustc_symbol_mangling:: symbol_name_for_instance_in_crate ( 
565+  tcx, 
566+  Instance :: resolve_async_drop_in_place_poll ( tcx,  ty) , 
567+  instantiating_crate, 
568+  ) 
569+  } 
550570 ExportedSymbol :: NoDefId ( symbol_name)  => symbol_name. to_string ( ) , 
551571 } 
552572} 
@@ -598,6 +618,7 @@ pub(crate) fn linking_symbol_name_for_instance_in_crate<'tcx>(
598618 // AsyncDropGlueCtorShim always use the Rust calling convention and thus follow the 
599619 // target's default symbol decoration scheme. 
600620 ExportedSymbol :: AsyncDropGlueCtorShim ( ..)  => None , 
621+  ExportedSymbol :: AsyncDropGlue ( ..)  => None , 
601622 // NoDefId always follow the target's default symbol decoration scheme. 
602623 ExportedSymbol :: NoDefId ( ..)  => None , 
603624 // ThreadLocalShim always follow the target's default symbol decoration scheme. 
0 commit comments