summaryrefslogtreecommitdiffstats
path: root/test-attribute.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2020-06-22 20:00:38 +0000
committerIngo Schwarze <schwarze@openbsd.org>2020-06-22 20:00:38 +0000
commit992351efb7c048f2feace7e85c00a1735739edcf (patch)
treeb53548bb95a750eb0ffdf178fea1584bf8e54ee5 /test-attribute.c
parent23725517c855826c2ed76257c280b26e55e87c09 (diff)
downloadmandoc-992351efb7c048f2feace7e85c00a1735739edcf.tar.gz
Provide a real feature test for __attribute__().
Looking at version numbers like __GNUC__ is always a bad idea. Believe it or not, this even makes ./configure shorter by one line.
Diffstat (limited to 'test-attribute.c')
-rw-r--r--test-attribute.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/test-attribute.c b/test-attribute.c
new file mode 100644
index 00000000..ea1a111a
--- /dev/null
+++ b/test-attribute.c
@@ -0,0 +1,48 @@
+/* $Id$ */
+/*
+ * Copyright (c) 2020 Ingo Schwarze <schwarze@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+void var_arg(const char *, ...)
+ __attribute__((__format__ (__printf__, 1, 2)));
+void no_ret(int)
+ __attribute__((__noreturn__));
+
+void
+var_arg(const char *fmt, ...)
+{
+ va_list ap;
+
+ va_start(ap, fmt);
+ vprintf(fmt, ap);
+ va_end(ap);
+}
+
+void
+no_ret(int i)
+{
+ exit(i);
+}
+
+int
+main(void)
+{
+ var_arg("Test output: %d\n", 42);
+ no_ret(0);
+}