diff options
author | Joel Hutton <Joel.Hutton@arm.com> | 2019-07-31 08:56:35 +0000 |
---|---|---|
committer | Kyrylo Tkachov <ktkachov@gcc.gnu.org> | 2019-07-31 08:56:35 +0000 |
commit | f0efd92502a0eb33c8f8f9e1ea03b25a714b2d72 (patch) | |
tree | 07a1f2d0cb396e93b11d345531d37071cc7a521b | |
parent | ce52e0ffb4f1ea7bd4fb99aea5dda75d260e438f (diff) | |
download | gcc-f0efd92502a0eb33c8f8f9e1ea03b25a714b2d72.zip gcc-f0efd92502a0eb33c8f8f9e1ea03b25a714b2d72.tar.gz gcc-f0efd92502a0eb33c8f8f9e1ea03b25a714b2d72.tar.bz2 |
[Arm][CMSE]Add warn_unused_return attribute to cmse functions
At present it is possible to call the CMSE functions for checking
addresses (such as cmse_check_address_range) and forget to check/use
the return value. This patch makes the interfaces more robust against
programmer error by marking these functions with the warn_unused_result
attribute. With this set, any use of these functions that does not use
the result will produce a warning.
This produces a warning on default warn levels when the result of the
cmse functions is not used.
For the following function:
void foo()
{
int *data;
cmse_check_address_range((int*)data, 0, 0);
}
The following warning is emitted:
warning: ignoring return value of 'cmse_check_address_range' declared
with attribute 'warn_unused_result' [-Wunused-result]
6 | cmse_check_address_range((int*)data, 0, 0);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
gcc/ChangeLog:
2019-07-31 Joel Hutton <Joel.Hutton@arm.com>
* config/arm/arm_cmse.h (cmse_nonsecure_caller): Add
warn_unused_result attribute.
(cmse_check_address_range): Add warn_unused_result attribute.
libgcc/ChangeLog:
2019-07-31 Joel Hutton <Joel.Hutton@arm.com>
* config/arm/cmse.c (cmse_check_address_range): Add
warn_unused_result attribute.
2019-07-31 Joel Hutton <Joel.Hutton@arm.com>
* gcc.target/arm/cmse/cmse-17.c: New test.
From-SVN: r273924
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/config/arm/arm_cmse.h | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/arm/cmse/cmse-17.c | 10 | ||||
-rw-r--r-- | libgcc/ChangeLog | 5 | ||||
-rw-r--r-- | libgcc/config/arm/cmse.c | 1 |
6 files changed, 28 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6c3fb2c..af3089a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-07-31 Joel Hutton <Joel.Hutton@arm.com> + + * config/arm/arm_cmse.h (cmse_nonsecure_caller): Add + warn_unused_result attribute. + (cmse_check_address_range): Add warn_unused_result attribute. + 2019-07-31 Richard Biener <rguenther@suse.de> PR tree-optimization/91257 diff --git a/gcc/config/arm/arm_cmse.h b/gcc/config/arm/arm_cmse.h index b543cbf..a72c46f 100644 --- a/gcc/config/arm/arm_cmse.h +++ b/gcc/config/arm/arm_cmse.h @@ -164,6 +164,7 @@ __CMSE_TT_ASM (at) /* FIXME: diagnose use outside cmse_nonsecure_entry functions. */ __extension__ static __inline int __attribute__ ((__always_inline__)) +__attribute__ ((warn_unused_result)) cmse_nonsecure_caller (void) { return __builtin_arm_cmse_nonsecure_caller (); @@ -184,6 +185,7 @@ cmse_nonsecure_caller (void) #define CMSE_MPU_READ 8 __extension__ void * +__attribute__ ((warn_unused_result)) cmse_check_address_range (void *, size_t, int); #define cmse_check_pointed_object(p, f) \ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2610036..3d44853 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2019-07-31 Joel Hutton <Joel.Hutton@arm.com> + + * gcc.target/arm/cmse/cmse-17.c: New test. + 2019-07-30 Martin Sebor <msebor@redhat.com> PR testsuite/91258 diff --git a/gcc/testsuite/gcc.target/arm/cmse/cmse-17.c b/gcc/testsuite/gcc.target/arm/cmse/cmse-17.c new file mode 100644 index 0000000..a2cce09 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/cmse/cmse-17.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-mcmse"} */ + +#include <arm_cmse.h> + +void foo() +{ + int *data; + cmse_check_address_range((int*)data, 0, 0); /* { dg-warning "ignoring return value" } */ +} diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 7997ad8..c9aea1d 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,8 @@ +2019-07-31 Joel Hutton <Joel.Hutton@arm.com> + + * config/arm/cmse.c (cmse_check_address_range): Add + warn_unused_result attribute. + 2019-07-22 Martin Liska <mliska@suse.cz> * config/pa/stublib.c: Remove stub symbol __gnu_lto_v1. diff --git a/libgcc/config/arm/cmse.c b/libgcc/config/arm/cmse.c index 34a46fd..0c5a3ea 100644 --- a/libgcc/config/arm/cmse.c +++ b/libgcc/config/arm/cmse.c @@ -30,6 +30,7 @@ address range. See ACLE changes for ARMv8-M. */ void * +__attribute__ ((warn_unused_result)) cmse_check_address_range (void *p, size_t size, int flags) { cmse_address_info_t permb, perme; |