diff --git a/configure.ac b/configure.ac
index 5e539e1b612851d1e0811a847b90b76ba9987893..712ede4b3d35b26e97698ad481b3fd1e98f9e201 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,4 @@
 dnl -*- mode: shell-script; sh-indentation: 2; -*-
-dnl $Id$
 
 dnl Process this file with autoconf to produce a configure script.
 
@@ -130,6 +129,42 @@ AC_C_BIGENDIAN
 
 AC_REPLACE_FUNCS(memxor)
 
+# Check for gcc's __attribute__ construction
+AC_CACHE_CHECK(for __attribute__,
+	       lsh_cv_c_attribute,
+[ AC_TRY_COMPILE([
+#include <stdlib.h>
+],
+[
+static void foo(void) __attribute__ ((noreturn));
+
+static void __attribute__ ((noreturn))
+foo(void)
+{
+  exit(1);
+}
+],
+lsh_cv_c_attribute=yes,
+lsh_cv_c_attribute=no)])
+
+AH_TEMPLATE([HAVE_GCC_ATTRIBUTE],
+	    [Define if the compiler understands __attribute__])
+if test "x$lsh_cv_c_attribute" = "xyes"; then
+  AC_DEFINE(HAVE_GCC_ATTRIBUTE)
+fi
+
+AH_BOTTOM(
+[#if __GNUC__ && HAVE_GCC_ATTRIBUTE
+# define NORETURN __attribute__ ((__noreturn__))
+# define PRINTF_STYLE(f, a) __attribute__ ((__format__ (__printf__, f, a)))
+# define UNUSED __attribute__ ((__unused__))
+#else
+# define NORETURN
+# define PRINTF_STYLE(f, a)
+# define UNUSED
+#endif
+])
+
 # Checks for libraries
 AC_CHECK_LIB(gmp, __gmpz_getlimbn,,
     [AC_MSG_WARN(