@@ -687,7 +687,7 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
687687 }
688688 } ;
689689
690- let ( fn_abi, llfn, instance) = common:: build_langcall ( bx, Some ( span) , lang_item) ;
690+ let ( fn_abi, llfn, instance) = common:: build_langcall ( bx, Some ( span) , lang_item, None ) ;
691691
692692 // Codegen the actual panic invoke/call.
693693 let merging_succ =
@@ -707,7 +707,8 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
707707 self . set_debug_loc ( bx, terminator. source_info ) ;
708708
709709 // Obtain the panic entry point.
710- let ( fn_abi, llfn, instance) = common:: build_langcall ( bx, Some ( span) , reason. lang_item ( ) ) ;
710+ let ( fn_abi, llfn, instance) =
711+ common:: build_langcall ( bx, Some ( span) , reason. lang_item ( ) , None ) ;
711712
712713 // Codegen the actual panic invoke/call.
713714 let merging_succ = helper. do_call (
@@ -769,8 +770,12 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
769770 let msg = bx. const_str ( & msg_str) ;
770771
771772 // Obtain the panic entry point.
772- let ( fn_abi, llfn, instance) =
773- common:: build_langcall ( bx, Some ( source_info. span ) , LangItem :: PanicNounwind ) ;
773+ let ( fn_abi, llfn, instance) = common:: build_langcall (
774+ bx,
775+ Some ( source_info. span ) ,
776+ LangItem :: PanicNounwind ,
777+ None ,
778+ ) ;
774779
775780 // Codegen the actual panic invoke/call.
776781 helper. do_call (
@@ -1289,6 +1294,17 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
12891294 ) -> MergingSucc {
12901295 debug ! ( "codegen_terminator: {:?}" , terminator) ;
12911296
1297+ if bx. tcx ( ) . may_insert_niche_checks ( ) {
1298+ if let mir:: TerminatorKind :: Return = terminator. kind {
1299+ let op = mir:: Operand :: Copy ( mir:: Place :: return_place ( ) ) ;
1300+ let ty = op. ty ( self . mir , bx. tcx ( ) ) ;
1301+ let ty = self . monomorphize ( ty) ;
1302+ if let Some ( niche) = bx. layout_of ( ty) . largest_niche {
1303+ self . codegen_niche_check ( bx, op, niche, terminator. source_info ) ;
1304+ }
1305+ }
1306+ }
1307+
12921308 let helper = TerminatorCodegenHelper { bb, terminator } ;
12931309
12941310 let mergeable_succ = || {
@@ -1557,7 +1573,7 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
15571573 tuple. layout . fields . count ( )
15581574 }
15591575
1560- fn get_caller_location (
1576+ pub fn get_caller_location (
15611577 & mut self ,
15621578 bx : & mut Bx ,
15631579 source_info : mir:: SourceInfo ,
@@ -1698,12 +1714,12 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
16981714
16991715 self . set_debug_loc ( & mut bx, mir:: SourceInfo :: outermost ( self . mir . span ) ) ;
17001716
1701- let ( fn_abi, fn_ptr, instance) = common:: build_langcall ( & bx, None , reason. lang_item ( ) ) ;
1717+ let ( fn_abi, fn_ptr, instance) =
1718+ common:: build_langcall ( & bx, None , reason. lang_item ( ) , None ) ;
17021719 if is_call_from_compiler_builtins_to_upstream_monomorphization ( bx. tcx ( ) , instance) {
17031720 bx. abort ( ) ;
17041721 } else {
17051722 let fn_ty = bx. fn_decl_backend_type ( fn_abi) ;
1706-
17071723 let llret = bx. call ( fn_ty, None , Some ( fn_abi) , fn_ptr, & [ ] , funclet. as_ref ( ) , None ) ;
17081724 bx. apply_attrs_to_cleanup_callsite ( llret) ;
17091725 }
0 commit comments