From 0a19d78b228a2d2e7b5e2341edf45b5ee669196a Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 15 Jun 2023 16:09:33 -0300 Subject: [PATCH] Revert the .inline semantics change (#22104) --- changelogs/changelog_2_0_0.md | 2 -- lib/nimbase.h | 31 +++++++++++-------------------- 2 files changed, 11 insertions(+), 22 deletions(-) diff --git a/changelogs/changelog_2_0_0.md b/changelogs/changelog_2_0_0.md index fa25728591..5707cf9550 100644 --- a/changelogs/changelog_2_0_0.md +++ b/changelogs/changelog_2_0_0.md @@ -256,8 +256,6 @@ 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. - - `strutils.split` and `strutils.rsplit` now forbid an empty separator. - Relative imports will not resolve to searched paths anymore, e.g. `import ./tables` now reports an error properly. diff --git a/lib/nimbase.h b/lib/nimbase.h index 1b9268881e..3a1289b6fa 100644 --- a/lib/nimbase.h +++ b/lib/nimbase.h @@ -84,29 +84,20 @@ __AVR__ # define __DECLSPEC_SUPPORTED 1 #endif - -/* 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 -#elif defined(__AVR__) /* Atmel Advanced Virtual RISC */ +/* calling convention mess ----------------------------------------------- */ +#if defined(__GNUC__) || defined(__TINYC__) + /* these should support C99's inline */ # define N_INLINE(rettype, name) inline rettype name -#else /* Unsupported C compilers */ -# define N_INLINE(rettype, name) 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. */ +# define N_INLINE(rettype, name) __inline rettype name +#else /* others are less picky: */ +# define N_INLINE(rettype, name) rettype __inline name #endif - #define N_INLINE_PTR(rettype, name) rettype (*name) #if defined(__cplusplus)