From 703af8df0684788380872778a6b6dcdb364944eb Mon Sep 17 00:00:00 2001 From: Kevin Bracey Date: Thu, 13 Jun 2019 12:16:16 +0300 Subject: [PATCH] mbed_toolchain: Use C++11/C11 attributes Newer language standards have standard forms for `MBED_NORETURN` and `MBED_ALIGN` attributes. Use them when available. C++14 also adds `[[deprecated]]`, but as it needs to go in the middle of structure definitions as `class [[deprecated]] MyClass`, it's not a total drop-in-replacemend for `MBED_DEPRECATED`, so that is not attempted here. Using standard forms increases the chances that code analysis tools such Coverity will recognise them - particularly important for "no return". --- platform/mbed_toolchain.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/platform/mbed_toolchain.h b/platform/mbed_toolchain.h index b513c71fef..0b51f77a69 100644 --- a/platform/mbed_toolchain.h +++ b/platform/mbed_toolchain.h @@ -72,7 +72,11 @@ * @endcode */ #ifndef MBED_ALIGN -#if defined(__ICCARM__) +#if __cplusplus >= 201103 && !defined __CC_ARM +#define MBED_ALIGN(N) alignas(N) +#elif __STDC_VERSION__ >= 201112 && !defined __CC_ARM +#define MBED_ALIGN(N) _Alignas(N) +#elif defined(__ICCARM__) #define MBED_ALIGN(N) _Pragma(MBED_STRINGIFY(data_alignment=N)) #else #define MBED_ALIGN(N) __attribute__((aligned(N))) @@ -298,7 +302,11 @@ * @endcode */ #ifndef MBED_NORETURN -#if defined(__GNUC__) || defined(__clang__) || defined(__CC_ARM) +#if __cplusplus >= 201103 +#define MBED_NORETURN [[noreturn]] +#elif __STDC_VERSION__ >= 201112 +#define MBED_NORETURN _Noreturn +#elif defined(__GNUC__) || defined(__clang__) || defined(__CC_ARM) #define MBED_NORETURN __attribute__((noreturn)) #elif defined(__ICCARM__) #define MBED_NORETURN __noreturn