| /* { dg-do compile } */ |
| /* { dg-options "-mcmse" } */ |
| |
| struct span { |
| int a, b; |
| }; |
| struct span2 { |
| float a, b, c, d; |
| }; |
| |
| union test_union |
| { |
| long long a; |
| int b; |
| struct span2 c; |
| } test_union; |
| |
| void __attribute__ ((cmse_nonsecure_entry)) |
| foo (long long a, int b, long long c) {} /* { dg-error "not available to functions with arguments passed on the stack" } */ |
| |
| void __attribute__ ((cmse_nonsecure_entry)) |
| bar (long long a, int b, struct span c) {} /* { dg-error "not available to functions with arguments passed on the stack" } */ |
| |
| void __attribute__ ((cmse_nonsecure_entry)) |
| baz (int a, ...) {} /* { dg-error "not available to functions with variable number of arguments" } */ |
| |
| struct span __attribute__ ((cmse_nonsecure_entry)) |
| qux (void) { /* { dg-error "not available to functions that return value on the stack" } */ |
| struct span ret = {0, 0}; |
| return ret; |
| } |
| |
| void __attribute__ ((cmse_nonsecure_entry)) |
| norf (struct span2 a) {} |
| |
| void __attribute__ ((cmse_nonsecure_entry)) |
| foo2 (long long a, int b, union test_union c) {} /* { dg-error "not available to functions with arguments passed on the stack" } */ |
| |
| typedef void __attribute__ ((cmse_nonsecure_call)) bar2 (long long a, int b, long long c); /* { dg-error "not available to functions with arguments passed on the stack" } */ |
| |
| typedef void __attribute__ ((cmse_nonsecure_call)) baz2 (long long a, int b, struct span c); /* { dg-error "not available to functions with arguments passed on the stack" } */ |
| |
| typedef struct span __attribute__ ((cmse_nonsecure_call)) qux2 (void); /* { dg-error "not available to functions that return value on the stack" } */ |
| |
| typedef void __attribute__ ((cmse_nonsecure_call)) norf2 (int a, ...); /* { dg-error "not available to functions with variable number of arguments" } */ |