From cc66db9ace7a9ed3d91f499a76022dc58505edf2 Mon Sep 17 00:00:00 2001 From: jcoleman Date: Sat, 29 Jan 2022 11:28:45 -0500 Subject: [PATCH v1] Support pg_attribute_aligned and noretur in MSVC --- config/c-compiler.m4 | 2 ++ configure | 2 ++ src/include/c.h | 8 ++++++++ 3 files changed, 12 insertions(+) diff --git a/config/c-compiler.m4 b/config/c-compiler.m4 index 69efc5bb10..000b075312 100644 --- a/config/c-compiler.m4 +++ b/config/c-compiler.m4 @@ -139,6 +139,8 @@ if test x"$pgac_cv__128bit_int" = xyes ; then /* This must match the corresponding code in c.h: */ #if defined(__GNUC__) || defined(__SUNPRO_C) || defined(__IBMC__) #define pg_attribute_aligned(a) __attribute__((aligned(a))) +#elif defined(_MSC_VER) +#define pg_attribute_aligned(a) __declspec(align(a)) #endif typedef __int128 int128a #if defined(pg_attribute_aligned) diff --git a/configure b/configure index f325bd85b8..5488574c02 100755 --- a/configure +++ b/configure @@ -17643,6 +17643,8 @@ else /* This must match the corresponding code in c.h: */ #if defined(__GNUC__) || defined(__SUNPRO_C) || defined(__IBMC__) #define pg_attribute_aligned(a) __attribute__((aligned(a))) +#elif defined(_MSC_VER) +#define pg_attribute_aligned(a) __declspec(align(a)) #endif typedef __int128 int128a #if defined(pg_attribute_aligned) diff --git a/src/include/c.h b/src/include/c.h index 101ba41331..551edb0d70 100644 --- a/src/include/c.h +++ b/src/include/c.h @@ -181,6 +181,14 @@ #define pg_attribute_noreturn() __attribute__((noreturn)) #define pg_attribute_packed() __attribute__((packed)) #define HAVE_PG_ATTRIBUTE_NORETURN 1 +/* + * MSVC supports aligned and noreturn + * Packing is also possible but only by wrapping the entire struct definition + * which doesn't fit into our current macro declarations. + */ +#elif defined(_MSC_VER) +#define pg_attribute_aligned(a) __declspec(align(a)) +#define pg_attribute_noreturn() __declspec(noreturn) #else /* * NB: aligned and packed are not given default definitions because they -- 2.32.1 (Apple Git-133)