]> git.draconx.ca Git - dxcommon.git/blobdiff - tests/macros.at
Add configure tests for C11-ish _Alignof and _Alignas.
[dxcommon.git] / tests / macros.at
index 9aadd038faca7ea15e06601776d22dcca3cf6dac..6da14b3867dbd325273d1f1632fa0ab82f22f36b 100644 (file)
@@ -1,4 +1,4 @@
-dnl Copyright © 2014-2015, 2018-2019, 2021-2023 Nick Bowler
+dnl Copyright © 2014-2015, 2018-2019, 2021-2024 Nick Bowler
 dnl
 dnl License WTFPL2: Do What The Fuck You Want To Public License, version 2.
 dnl This is free software: you are free to do what the fuck you want to.
@@ -650,8 +650,7 @@ AT_CHECK([grep HAVE_FOR_DECLS config.h], [0],
 TEST_CONFIGURE([CC="$CC -std=gnu99"])
 AT_CHECK([grep HAVE_FOR_DECLS config.h], [0],
 [[#define HAVE_FOR_DECLS 1
-]])
-])
+]])])
 
 AT_SETUP([DX_C_FOR_DECLARATIONS (<autoconf-2.70)])
 AT_KEYWORDS([DX_C_FOR_DECLARATIONS macro])
@@ -674,3 +673,114 @@ TEST_FIND_AUTOCONF([default 2.71 2.72 2.73 2.74],
   [AS_VERSION_COMPARE(["$acver"], [2.70], [continue], [continue], [])])
 TEST_DX_C_FOR_DECLARATIONS
 AT_CLEANUP
+
+m4_define([TEST_DX_C_ALIGNOF],
+[cat "$srcdir/m4/align.m4" >aclocal.m4
+AT_DATA([config.h.in],
+[[#undef _Alignof
+#undef _Alignas
+]])
+TEST_CONFIGURE_AC([m4_ifnblank([$1], [$1])
+[AC_CONFIG_HEADERS([config.h])
+DX_C_ALIGNOF
+]])
+AT_CHECK([$AUTOCONF], [0], [], [stderr])
+AT_DATA([test.c],
+[[#if __STDC_VERSION__ < 201112
+#error nope
+char nope[-1];
+#endif
+char yup;
+]])
+AT_CHECK([$CC -c -std=gnu11 -pedantic-errors test.c || exit 77],
+  [0], [ignore], [ignore])
+TEST_CONFIGURE([CC="$CC" CFLAGS="-std=gnu89 -pedantic-errors"])
+AT_CHECK([grep _Align config.h], [0],
+[[#define _Alignof(T) offsetof(struct { char a; T b; }, b)
+/* #undef _Alignas */
+]])
+TEST_CONFIGURE([CC="$CC -std=gnu11"])
+AT_CHECK([grep _Align config.h], [0],
+[[/* #undef _Alignof */
+/* #undef _Alignas */
+]])])
+
+AT_SETUP([DX_C_ALIGNOF (<autoconf-2.70)])
+AT_KEYWORDS([DX_C_ALIGNOF macro])
+TEST_FIND_AUTOCONF([default 2.69 2.68],
+  [AS_VERSION_COMPARE(["$acver"], [2.70], [], [continue], [continue])])
+TEST_DX_C_FOR_DECLARATIONS([[AC_PROG_CC]])
+AT_CLEANUP
+
+AT_SETUP([DX_C_ALIGNOF (=autoconf-2.70)])
+AT_KEYWORDS([DX_C_ALIGNOF macro])
+TEST_FIND_AUTOCONF([default 2.70],
+  [AS_VERSION_COMPARE(["$acver"], [2.70], [continue], [], [continue])])
+TEST_DX_C_ALIGNOF
+AT_CLEANUP
+
+AT_SETUP([DX_C_ALIGNOF (>autoconf-2.70)])
+AT_KEYWORDS([DX_C_ALIGNOF macro])
+TEST_FIND_AUTOCONF([default 2.71 2.72 2.73 2.74],
+  [AS_VERSION_COMPARE(["$acver"], [2.70], [continue], [continue], [])])
+TEST_DX_C_ALIGNOF([[AC_PROG_CC]])
+AT_CLEANUP
+
+m4_define([TEST_DX_C_ALIGNAS],
+[cat "$srcdir/m4/align.m4" >aclocal.m4
+AT_DATA([config.h.in],
+[[#undef _Alignas
+#undef _Alignof
+]])
+TEST_CONFIGURE_AC([m4_ifnblank([$1], [$1])
+[AC_CONFIG_HEADERS([config.h])
+AC_COMPUTE_INT([dummy], [0], [@&t@], [dummy=0]) # ensure main CC probes finish
+AC_ARG_ENABLE([break-cc], [], [CC=false]) # before we force everything to fail
+DX_C_ALIGNAS
+]])
+AT_CHECK([$AUTOCONF], [0], [], [stderr])
+AT_DATA([test.c],
+[[#if __STDC_VERSION__ < 201112
+#error nope
+char nope[-1];
+#endif
+char yup;
+]])
+AT_CHECK([$CC -c -std=gnu11 -pedantic-errors test.c || exit 77],
+  [0], [ignore], [ignore])
+TEST_CONFIGURE([CC="$CC" CFLAGS="-std=gnu89 -pedantic-errors"])
+AT_CHECK([grep _Align config.h], [0],
+[[#define _Alignas(X) __attribute__((__aligned__(X)))
+/* #undef _Alignof */
+]])
+TEST_CONFIGURE([CC="$CC -std=gnu11"])
+AT_CHECK([grep _Align config.h], [0],
+[[/* #undef _Alignas */
+/* #undef _Alignof */
+]])
+TEST_CONFIGURE([CC="$CC" CFLAGS="-std=gnu89 -pedantic-errors" --enable-break-cc])
+AT_CHECK([grep _Align config.h], [0],
+[[#define _Alignas(X) /**/
+/* #undef _Alignof */
+]])])
+
+AT_SETUP([DX_C_ALIGNAS (<autoconf-2.70)])
+AT_KEYWORDS([DX_C_ALIGNAS macro])
+TEST_FIND_AUTOCONF([default 2.69 2.68],
+  [AS_VERSION_COMPARE(["$acver"], [2.70], [], [continue], [continue])])
+TEST_DX_C_ALIGNAS([[AC_PROG_CC]])
+AT_CLEANUP
+
+AT_SETUP([DX_C_ALIGNAS (=autoconf-2.70)])
+AT_KEYWORDS([DX_C_ALIGNAS macro])
+TEST_FIND_AUTOCONF([default 2.70],
+  [AS_VERSION_COMPARE(["$acver"], [2.70], [continue], [], [continue])])
+TEST_DX_C_ALIGNAS
+AT_CLEANUP
+
+AT_SETUP([DX_C_ALIGNAS (>autoconf-2.70)])
+AT_KEYWORDS([DX_C_ALIGNAS macro])
+TEST_FIND_AUTOCONF([default 2.71 2.72 2.73 2.74],
+  [AS_VERSION_COMPARE(["$acver"], [2.70], [continue], [continue], [])])
+TEST_DX_C_ALIGNAS([[AC_PROG_CC]])
+AT_CLEANUP