aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Hutton <Joel.Hutton@arm.com>2019-07-31 08:56:35 +0000
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>2019-07-31 08:56:35 +0000
commitf0efd92502a0eb33c8f8f9e1ea03b25a714b2d72 (patch)
tree07a1f2d0cb396e93b11d345531d37071cc7a521b
parentce52e0ffb4f1ea7bd4fb99aea5dda75d260e438f (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/config/arm/arm_cmse.h2
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.target/arm/cmse/cmse-17.c10
-rw-r--r--libgcc/ChangeLog5
-rw-r--r--libgcc/config/arm/cmse.c1
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;