@@ -1462,13 +1462,17 @@ pub(crate) fn expr_to_vir_with_adjustments<'tcx>(
14621462 if let Some ( ( fun, typ_args) ) = f {
14631463 let autospec_usage =
14641464 if bctx. in_ghost { AutospecUsage :: IfMarked } else { AutospecUsage :: Final } ;
1465+ let call_target_attrs = vir:: ast:: CallTargetAttrs {
1466+ autospec : autospec_usage,
1467+ const_var : false ,
1468+ assume_external_allowed : false ,
1469+ } ;
14651470 let call_target = CallTarget :: Fun (
14661471 vir:: ast:: CallTargetKind :: Static ,
14671472 fun,
14681473 typ_args,
14691474 Arc :: new ( vec ! [ ] ) ,
1470- autospec_usage,
1471- false ,
1475+ call_target_attrs,
14721476 ) ;
14731477 let arg = arg. consume ( bctx, get_inner_ty ( ) ) ;
14741478 let args = Arc :: new ( vec ! [ arg. clone( ) ] ) ;
@@ -2071,14 +2075,18 @@ pub(crate) fn expr_to_vir_innermost<'tcx>(
20712075 ) ?;
20722076
20732077 let typ_args = Arc :: new ( vec ! [ tup_typ, ret_typ, fun_typ] ) ;
2078+ let call_target_attrs = vir:: ast:: CallTargetAttrs {
2079+ autospec : AutospecUsage :: Final ,
2080+ const_var : false ,
2081+ assume_external_allowed : false ,
2082+ } ;
20742083 (
20752084 CallTarget :: Fun (
20762085 kind,
20772086 helper_fun,
20782087 typ_args,
20792088 impl_paths,
2080- AutospecUsage :: Final ,
2081- false ,
2089+ call_target_attrs,
20822090 ) ,
20832091 vec ! [ vir_fun, tup] ,
20842092 rcall,
@@ -2134,13 +2142,17 @@ pub(crate) fn expr_to_vir_innermost<'tcx>(
21342142 } ;
21352143 let autospec_usage =
21362144 if bctx. in_ghost { AutospecUsage :: IfMarked } else { AutospecUsage :: Final } ;
2145+ let call_target_attrs = vir:: ast:: CallTargetAttrs {
2146+ autospec : autospec_usage,
2147+ const_var : false ,
2148+ assume_external_allowed : false ,
2149+ } ;
21372150 let call_target = CallTarget :: Fun (
21382151 vir:: ast:: CallTargetKind :: Static ,
21392152 fun,
21402153 typ_args,
21412154 Arc :: new ( vec ! [ ] ) ,
2142- autospec_usage,
2143- false ,
2155+ call_target_attrs,
21442156 ) ;
21452157 let args = Arc :: new ( vec ! [ arg_vir. clone( ) ] ) ;
21462158 mk_expr ( ExprX :: Call ( call_target, args, None ) )
@@ -2231,13 +2243,17 @@ pub(crate) fn expr_to_vir_innermost<'tcx>(
22312243 let typ_args = Arc :: new ( vec ! [ from_typ, to_typ] ) ;
22322244 let autospec_usage =
22332245 if bctx. in_ghost { AutospecUsage :: IfMarked } else { AutospecUsage :: Final } ;
2246+ let call_target_attrs = vir:: ast:: CallTargetAttrs {
2247+ autospec : autospec_usage,
2248+ const_var : false ,
2249+ assume_external_allowed : false ,
2250+ } ;
22342251 let call_target = CallTarget :: Fun (
22352252 vir:: ast:: CallTargetKind :: Static ,
22362253 fun,
22372254 typ_args,
22382255 Arc :: new ( vec ! [ ] ) ,
2239- autospec_usage,
2240- false ,
2256+ call_target_attrs,
22412257 ) ;
22422258 let args = Arc :: new ( vec ! [ source_vir_expr. clone( ) ] ) ;
22432259 mk_expr ( ExprX :: Call ( call_target, args, None ) )
@@ -2992,6 +3008,11 @@ pub(crate) fn expr_to_vir_innermost<'tcx>(
29923008 None
29933009 } ;
29943010
3011+ let call_target_attrs = vir:: ast:: CallTargetAttrs {
3012+ autospec : AutospecUsage :: Final ,
3013+ const_var : false ,
3014+ assume_external_allowed : false ,
3015+ } ;
29953016 let call_target = if let Some ( ( fun, typ_args) ) = fun_typ_args {
29963017 // special fast path
29973018 CallTarget :: Fun (
@@ -3001,8 +3022,7 @@ pub(crate) fn expr_to_vir_innermost<'tcx>(
30013022 // arbitrary impl_path
30023023 // REVIEW: why is this needed?
30033024 Arc :: new ( vec ! [ ImplPath :: TraitImplPath ( vir:: def:: prefix_spec_fn_type( 0 ) ) ] ) ,
3004- AutospecUsage :: Final ,
3005- false ,
3025+ call_target_attrs,
30063026 )
30073027 } else {
30083028 // general Index trait case
@@ -3011,14 +3031,7 @@ pub(crate) fn expr_to_vir_innermost<'tcx>(
30113031 let typ_args =
30123032 Arc :: new ( vec ! [ undecorate_typ( & tgt_vir. typ) , idx_vir. typ. clone( ) ] ) ;
30133033 let fun = vir:: fun!( CrateId :: Core => "ops" , "index" , "Index" , "index" ) ;
3014- CallTarget :: Fun (
3015- target_kind,
3016- fun,
3017- typ_args,
3018- impl_paths,
3019- AutospecUsage :: Final ,
3020- false ,
3021- )
3034+ CallTarget :: Fun ( target_kind, fun, typ_args, impl_paths, call_target_attrs)
30223035 } ;
30233036
30243037 // tgt[idx] is equivalent to either *index(tgt, idx) or *index_mut(tgt, idx)
@@ -3842,13 +3855,17 @@ pub(crate) fn maybe_do_ptr_cast<'tcx>(
38423855 Some ( PtrCastKind :: Complex ( fun, typ_args, clip) ) => {
38433856 let autospec_usage =
38443857 if bctx. in_ghost { AutospecUsage :: IfMarked } else { AutospecUsage :: Final } ;
3858+ let call_target_attrs = vir:: ast:: CallTargetAttrs {
3859+ autospec : autospec_usage,
3860+ const_var : false ,
3861+ assume_external_allowed : false ,
3862+ } ;
38453863 let call_target = CallTarget :: Fun (
38463864 vir:: ast:: CallTargetKind :: Static ,
38473865 fun,
38483866 typ_args,
38493867 Arc :: new ( vec ! [ ] ) ,
3850- autospec_usage,
3851- false ,
3868+ call_target_attrs,
38523869 ) ;
38533870 let args = Arc :: new ( vec ! [ src_vir. clone( ) ] ) ;
38543871 let x = ExprX :: Call ( call_target, args, None ) ;
0 commit comments