Refactor pragma inline (#21930)

* Add __force_inline support
This commit is contained in:
Juan Carlos
2023-05-27 15:52:08 -03:00
committed by GitHub
parent d5ba14db61
commit b96c501836
2 changed files with 23 additions and 11 deletions

View File

@@ -253,6 +253,9 @@
declared when they are not available on the backend. Previously it would call
`doAssert false` at runtime despite the condition being compile-time.
- Pragma `{.inline.}` generates `__forceinline` if `__has_attribute(__forceinline)` for GCC and Clang.
## Standard library additions and changes
[//]: # "Changes:"

View File

@@ -84,20 +84,29 @@ __AVR__
# define __DECLSPEC_SUPPORTED 1
#endif
/* calling convention mess ----------------------------------------------- */
#if defined(__GNUC__) || defined(__TINYC__)
/* these should support C99's inline */
# define N_INLINE(rettype, name) inline rettype name
#elif defined(__BORLANDC__) || defined(_MSC_VER)
/* Borland's compiler is really STRANGE here; note that the __fastcall
keyword cannot be before the return type, but __inline cannot be after
the return type, so we do not handle this mess in the code generator
but rather here. */
/* Calling conventions and inline attributes for the supported C compilers */
#if defined(__GNUC__) || defined(__clang__) /* GCC and Clang */
# if __has_attribute(__forceinline)
# define N_INLINE(rettype, name) __attribute__((__forceinline)) rettype name
# else
# define N_INLINE(rettype, name) inline rettype name
# endif
#elif defined(_MSC_VER) /* MSVC */
# if _MSC_VER > 1200
# define N_INLINE(rettype, name) __forceinline rettype name
# else
# define N_INLINE(rettype, name) inline rettype name
# endif
#elif defined(__TINYC__) || defined(__BORLANDC__) /* TinyC and BorlandC */
# define N_INLINE(rettype, name) __inline rettype name
#else /* others are less picky: */
# define N_INLINE(rettype, name) rettype __inline name
#elif defined(__AVR__) /* Atmel Advanced Virtual RISC */
# define N_INLINE(rettype, name) inline rettype name
#else /* Unsupported C compilers */
# define N_INLINE(rettype, name) rettype name
#endif
#define N_INLINE_PTR(rettype, name) rettype (*name)
#if defined(__cplusplus)