File tree 2 files changed +38
-0
lines changed
2 files changed +38
-0
lines changed Original file line number Diff line number Diff line change
1
+ //! Unstable module containing the unstable contracts lang items and attribute macros.
2
+
3
+ /// Emitted by rustc as a desugaring of `#[requires(PRED)] fn foo(x: X) { ... }`
4
+ /// into: `fn foo(x: X) { check_requires(|| PRED) ... }`
5
+ #[ cfg( not( bootstrap) ) ]
6
+ #[ unstable( feature = "rustc_contracts" , issue = "none" /* compiler-team#759 */ ) ]
7
+ #[ lang = "contract_check_requires" ]
8
+ #[ track_caller]
9
+ pub fn check_requires < C : FnOnce ( ) -> bool > ( c : C ) {
10
+ if core:: intrinsics:: contract_checks ( ) {
11
+ assert ! ( core:: intrinsics:: contract_check_requires( c) , "failed requires check" ) ;
12
+ }
13
+ }
14
+
15
+ /// Emitted by rustc as a desugaring of `#[ensures(PRED)] fn foo() -> R { ... [return R;] ... }`
16
+ /// into: `fn foo() { let _check = build_check_ensures(|ret| PRED) ... [return _check(R);] ... }`
17
+ /// (including the implicit return of the tail expression, if any).
18
+ #[ cfg( not( bootstrap) ) ]
19
+ #[ unstable( feature = "rustc_contracts" , issue = "none" /* compiler-team#759 */ ) ]
20
+ #[ lang = "contract_build_check_ensures" ]
21
+ #[ track_caller]
22
+ pub fn build_check_ensures < Ret , C > ( c : C ) -> impl ( FnOnce ( Ret ) -> Ret ) + Copy
23
+ where
24
+ C : for < ' a > FnOnce ( & ' a Ret ) -> bool + Copy + ' static ,
25
+ {
26
+ #[ track_caller]
27
+ move |ret| {
28
+ if core:: intrinsics:: contract_checks ( ) {
29
+ assert ! ( core:: intrinsics:: contract_check_ensures( & ret, c) , "failed ensures check" ) ;
30
+ }
31
+ ret
32
+ }
33
+ }
Original file line number Diff line number Diff line change 114
114
#![ feature( bstr) ]
115
115
#![ feature( bstr_internals) ]
116
116
#![ feature( const_carrying_mul_add) ]
117
+ #![ feature( closure_track_caller) ]
117
118
#![ feature( const_eval_select) ]
118
119
#![ feature( core_intrinsics) ]
119
120
#![ feature( coverage_attribute) ]
@@ -247,6 +248,10 @@ pub mod autodiff {
247
248
pub use crate :: macros:: builtin:: autodiff;
248
249
}
249
250
251
+ #[ cfg( not( bootstrap) ) ]
252
+ #[ unstable( feature = "rustc_contracts" , issue = "none" ) ]
253
+ pub mod contracts;
254
+
250
255
#[ unstable( feature = "cfg_match" , issue = "115585" ) ]
251
256
pub use crate :: macros:: cfg_match;
252
257
You can’t perform that action at this time.
0 commit comments