Add the <stdalign.h> header for C11 conformance.
authorSascha Wildner <saw@online.de>
Mon, 21 Apr 2014 14:08:47 +0000 (16:08 +0200)
committerSascha Wildner <saw@online.de>
Wed, 30 Apr 2014 09:38:28 +0000 (11:38 +0200)
Per clause 7.15 from the final draft.

Along with it, add some helper macros to <sys/cdefs.h>.

While here, adjust an #ifdef in <sys/cdefs.h>.

Taken-from: FreeBSD

include/Makefile
include/stdalign.h [new file with mode: 0644]
sys/sys/cdefs.h

index 4d7701a..f781d88 100644 (file)
@@ -20,7 +20,7 @@ INCS= a.out.h ar.h assert.h bitstring.h cpio.h ctype.h db.h \
        ranlib.h readpassphrase.h regex.h \
        res_update.h resolv.h re_comp.h rmd160.h \
        runetype.h search.h setjmp.h sgtty.h \
-       signal.h spawn.h stab.h stdarg.h stdbool.h \
+       signal.h spawn.h stab.h stdalign.h stdarg.h stdbool.h \
        stddef.h stdint.h stdio.h stdlib.h \
        string.h stringlist.h strings.h struct.h sysexits.h \
        tar.h tgmath.h time.h \
diff --git a/include/stdalign.h b/include/stdalign.h
new file mode 100644 (file)
index 0000000..37a93fa
--- /dev/null
@@ -0,0 +1,47 @@
+/*-
+ * Copyright (c) 2012 Ed Schouten <ed@FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD: head/include/stdalign.h 228879 2011-12-25 20:51:40Z ed $
+ */
+
+#ifndef __alignas_is_defined
+#define        __alignas_is_defined    1
+
+#if !defined(__cplusplus) || __cplusplus < 201103L
+#include <sys/cdefs.h>
+#define        alignas                 _Alignas
+#endif
+
+#endif /* !__alignas_is_defined */
+
+#ifndef __alignof_is_defined
+#define        __alignof_is_defined    1
+
+#if !defined(__cplusplus) || __cplusplus < 201103L
+#include <sys/cdefs.h>
+#define        alignof                 _Alignof
+#endif
+
+#endif /* !__alignof_is_defined */
index d7d0c3d..9f3d7ac 100644 (file)
 #define        __DEQUALIFY(type, var)  ((type)(uintptr_t)(const volatile void *)(var))
 #endif
 
+/*
+ * Keywords added in C11.
+ */
+
+#if !__GNUC_PREREQ__(2, 95)
+#define        __alignof(x)    __offsetof(struct { char __a; x __b; }, __b)
+#endif
+
 /*
  * Keywords added in C11.
  */
 
 #if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 201112L
 
-#define        _Noreturn               __dead2
+#if !__has_extension(c_alignas)
+#if (defined(__cplusplus) && __cplusplus >= 201103L) || \
+    __has_extension(cxx_alignas)
+#define        _Alignas(x)             alignas(x)
+#else
+/* XXX: Only emulates _Alignas(constant-expression); not _Alignas(type-name). */
+#define        _Alignas(x)             __aligned(x)
+#endif
+#endif
 
-#endif /* __STDC_VERSION__ || __STDC_VERSION__ < 201112L */
+#if defined(__cplusplus) && __cplusplus >= 201103L
+#define        _Alignof(x)             alignof(x)
+#else
+#define        _Alignof(x)             __alignof(x)
+#endif
+
+#define        _Noreturn               __dead2
 
 #if !__has_extension(c_static_assert)
 #if (defined(__cplusplus) && __cplusplus >= 201103L) || \
 #endif
 #endif
 
+#endif /* __STDC_VERSION__ || __STDC_VERSION__ < 201112L */
+
 #if defined(_KERNEL) && !defined(CTASSERT)
 #define        CTASSERT(x)             _Static_assert(x, \
                                    "compile-time assertion failed")