File tree 2 files changed +25
-3
lines changed
2 files changed +25
-3
lines changed Original file line number Diff line number Diff line change @@ -2965,14 +2965,35 @@ pub(crate) macro const_eval_select {
2965
2965
$( #[ $compiletime_attr: meta] ) * $compiletime: block
2966
2966
else
2967
2967
$( #[ $runtime_attr: meta] ) * $runtime: block
2968
+ ) => {
2969
+ // Use the `noinline` arm, after adding explicit `inline` attributes
2970
+ $crate:: intrinsics:: const_eval_select!(
2971
+ @capture { $( $arg : $ty = $val) , * } $( -> $ret) ? :
2972
+ #[ noinline]
2973
+ if const
2974
+ #[ inline] // prevent codegen on this function
2975
+ $( #[ $compiletime_attr] ) *
2976
+ $compiletime
2977
+ else
2978
+ #[ inline] // avoid the overhead of an extra fn call
2979
+ $( #[ $runtime_attr] ) *
2980
+ $runtime
2981
+ )
2982
+ } ,
2983
+ // With a leading #[noinline], we don't add inline attributes
2984
+ (
2985
+ @capture { $( $arg: ident : $ty: ty = $val: expr) , * $( , ) ? } $( -> $ret: ty ) ? :
2986
+ #[ noinline]
2987
+ if const
2988
+ $( #[ $compiletime_attr: meta] ) * $compiletime: block
2989
+ else
2990
+ $( #[ $runtime_attr: meta] ) * $runtime: block
2968
2991
) => { {
2969
- #[ inline] // avoid the overhead of an extra fn call
2970
2992
$( #[ $runtime_attr] ) *
2971
2993
fn runtime( $( $arg: $ty) , * ) $( -> $ret ) ? {
2972
2994
$runtime
2973
2995
}
2974
2996
2975
- #[ inline] // prevent codegen on this function
2976
2997
$( #[ $compiletime_attr] ) *
2977
2998
const fn compiletime( $( $arg: $ty) , * ) $( -> $ret ) ? {
2978
2999
// Don't warn if one of the arguments is unused.
Original file line number Diff line number Diff line change @@ -211,7 +211,8 @@ pub macro const_panic {
211
211
#[ cfg_attr( bootstrap, rustc_const_stable( feature = "const_panic" , since = "CURRENT_RUSTC_VERSION" ) ) ]
212
212
const fn do_panic ( $( $arg: $ty) , * ) -> ! {
213
213
$crate:: intrinsics:: const_eval_select!(
214
- @capture { $( $arg: $ty) , * } -> !:
214
+ @capture { $( $arg: $ty = $arg) , * } -> !:
215
+ #[ noinline]
215
216
if const #[ track_caller] {
216
217
$crate :: panic!( $const_msg)
217
218
} else #[ track_caller] {
You can’t perform that action at this time.
0 commit comments