@@ -37,19 +37,27 @@ impl<'tcx> MirPass<'tcx> for InstSimplify {
3737 }
3838
3939 fn run_pass ( & self , tcx : TyCtxt < ' tcx > , body : & mut Body < ' tcx > ) {
40+ let def_id = body. source . def_id ( ) ;
4041 let ctx = InstSimplifyContext {
4142 tcx,
4243 local_decls : & body. local_decls ,
43- param_env : tcx. param_env_reveal_all_normalized ( body . source . def_id ( ) ) ,
44+ param_env : tcx. param_env_reveal_all_normalized ( def_id) ,
4445 } ;
4546 let preserve_ub_checks =
4647 attr:: contains_name ( tcx. hir ( ) . krate_attrs ( ) , sym:: rustc_preserve_ub_checks) ;
48+ let remove_ub_checks = tcx. has_attr ( def_id, sym:: rustc_no_ubchecks) ;
4749 for block in body. basic_blocks . as_mut ( ) {
4850 for statement in block. statements . iter_mut ( ) {
4951 match statement. kind {
5052 StatementKind :: Assign ( box ( _place, ref mut rvalue) ) => {
51- if !preserve_ub_checks {
52- ctx. simplify_ub_check ( & statement. source_info , rvalue) ;
53+ if remove_ub_checks {
54+ ctx. simplify_ub_check ( & statement. source_info , rvalue, false ) ;
55+ } else if !preserve_ub_checks {
56+ ctx. simplify_ub_check (
57+ & statement. source_info ,
58+ rvalue,
59+ tcx. sess . ub_checks ( ) ,
60+ ) ;
5361 }
5462 ctx. simplify_bool_cmp ( & statement. source_info , rvalue) ;
5563 ctx. simplify_ref_deref ( & statement. source_info , rvalue) ;
@@ -199,9 +207,14 @@ impl<'tcx> InstSimplifyContext<'tcx, '_> {
199207 }
200208 }
201209
202- fn simplify_ub_check ( & self , source_info : & SourceInfo , rvalue : & mut Rvalue < ' tcx > ) {
210+ fn simplify_ub_check (
211+ & self ,
212+ source_info : & SourceInfo ,
213+ rvalue : & mut Rvalue < ' tcx > ,
214+ ub_checks : bool ,
215+ ) {
203216 if let Rvalue :: NullaryOp ( NullOp :: UbChecks , _) = * rvalue {
204- let const_ = Const :: from_bool ( self . tcx , self . tcx . sess . ub_checks ( ) ) ;
217+ let const_ = Const :: from_bool ( self . tcx , ub_checks) ;
205218 let constant = ConstOperand { span : source_info. span , const_, user_ty : None } ;
206219 * rvalue = Rvalue :: Use ( Operand :: Constant ( Box :: new ( constant) ) ) ;
207220 }
0 commit comments