@@ -18,11 +18,10 @@ pub(crate) fn validate_cmse_abi<'tcx>(
18
18
abi : ExternAbi ,
19
19
fn_sig : ty:: PolyFnSig < ' tcx > ,
20
20
) {
21
- match abi {
22
- ExternAbi :: CmseNonSecureCall => {
23
- let hir_node = tcx. hir_node ( hir_id) ;
24
- let hir:: Node :: Ty ( hir:: Ty { kind : hir:: TyKind :: FnPtr ( fn_ptr_ty) , .. } ) = hir_node
25
- else {
21
+ let fn_decl = match abi {
22
+ ExternAbi :: CmseNonSecureCall => match tcx. hir_node ( hir_id) {
23
+ hir:: Node :: Ty ( hir:: Ty { kind : hir:: TyKind :: FnPtr ( fn_ptr_ty) , .. } ) => fn_ptr_ty. decl ,
24
+ _ => {
26
25
let span = match tcx. parent_hir_node ( hir_id) {
27
26
hir:: Node :: Item ( hir:: Item {
28
27
kind : hir:: ItemKind :: ForeignMod { .. } ,
@@ -39,26 +38,10 @@ pub(crate) fn validate_cmse_abi<'tcx>(
39
38
)
40
39
. emit ( ) ;
41
40
return ;
42
- } ;
43
-
44
- if let Err ( ( span, layout_err) ) =
45
- is_valid_cmse_inputs ( tcx, dcx, fn_sig, fn_ptr_ty. decl , abi)
46
- {
47
- if should_emit_layout_error ( abi, layout_err) {
48
- dcx. emit_err ( errors:: CmseGeneric { span, abi } ) ;
49
- }
50
- }
51
-
52
- if let Err ( layout_err) = is_valid_cmse_output ( tcx, dcx, fn_sig, fn_ptr_ty. decl , abi) {
53
- if should_emit_layout_error ( abi, layout_err) {
54
- let span = fn_ptr_ty. decl . output . span ( ) ;
55
- dcx. emit_err ( errors:: CmseGeneric { span, abi } ) ;
56
- }
57
41
}
58
- }
42
+ } ,
59
43
ExternAbi :: CmseNonSecureEntry => {
60
- let hir_node = tcx. hir_node ( hir_id) ;
61
- let Some ( hir:: FnSig { decl, .. } ) = hir_node. fn_sig ( ) else {
44
+ let Some ( hir:: FnSig { decl, .. } ) = tcx. hir_node ( hir_id) . fn_sig ( ) else {
62
45
// might happen when this ABI is used incorrectly. That will be handled elsewhere
63
46
return ;
64
47
} ;
@@ -69,19 +52,21 @@ pub(crate) fn validate_cmse_abi<'tcx>(
69
52
return ;
70
53
}
71
54
72
- if let Err ( ( span, layout_err) ) = is_valid_cmse_inputs ( tcx, dcx, fn_sig, decl, abi) {
73
- if should_emit_layout_error ( abi, layout_err) {
74
- dcx. emit_err ( errors:: CmseGeneric { span, abi } ) ;
75
- }
76
- }
55
+ decl
56
+ }
57
+ _ => return ,
58
+ } ;
77
59
78
- if let Err ( layout_err) = is_valid_cmse_output ( tcx, dcx, fn_sig, decl, abi) {
79
- if should_emit_layout_error ( abi, layout_err) {
80
- dcx. emit_err ( errors:: CmseGeneric { span : decl. output . span ( ) , abi } ) ;
81
- }
82
- }
60
+ if let Err ( ( span, layout_err) ) = is_valid_cmse_inputs ( tcx, dcx, fn_sig, fn_decl, abi) {
61
+ if should_emit_layout_error ( abi, layout_err) {
62
+ dcx. emit_err ( errors:: CmseGeneric { span, abi } ) ;
63
+ }
64
+ }
65
+
66
+ if let Err ( layout_err) = is_valid_cmse_output ( tcx, dcx, fn_sig, fn_decl, abi) {
67
+ if should_emit_layout_error ( abi, layout_err) {
68
+ dcx. emit_err ( errors:: CmseGeneric { span : fn_decl. output . span ( ) , abi } ) ;
83
69
}
84
- _ => ( ) ,
85
70
}
86
71
}
87
72
0 commit comments