From owner-svn-src-all@FreeBSD.ORG Tue Dec 13 19:37:27 2011 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 97B041065673; Tue, 13 Dec 2011 19:37:27 +0000 (UTC) (envelope-from ed@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 875E58FC13; Tue, 13 Dec 2011 19:37:27 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBDJbRDB064235; Tue, 13 Dec 2011 19:37:27 GMT (envelope-from ed@svn.freebsd.org) Received: (from ed@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBDJbRLn064233; Tue, 13 Dec 2011 19:37:27 GMT (envelope-from ed@svn.freebsd.org) Message-Id: <201112131937.pBDJbRLn064233@svn.freebsd.org> From: Ed Schouten Date: Tue, 13 Dec 2011 19:37:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r228477 - head/sys/sys X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 13 Dec 2011 19:37:27 -0000 Author: ed Date: Tue Dec 13 19:37:27 2011 New Revision: 228477 URL: http://svn.freebsd.org/changeset/base/228477 Log: Make support for C1X keywords more complete. - _Alignof(), which returns the aligment of a certain type. - _Static_assert(), which can be used to check compile-time assertions. - _Thread_local, which uses TLS on a variable. MFC after: 3 months Reviewed by: mdf Modified: head/sys/sys/cdefs.h Modified: head/sys/sys/cdefs.h ============================================================================== --- head/sys/sys/cdefs.h Tue Dec 13 18:11:25 2011 (r228476) +++ head/sys/sys/cdefs.h Tue Dec 13 19:37:27 2011 (r228477) @@ -218,15 +218,34 @@ #endif #endif - +/* + * Keywords added in C1X. + */ #if defined(__cplusplus) && __cplusplus >= 201103L +#define _Alignof(e) alignof(e) #define _Noreturn [[noreturn]] +#define _Static_assert(e, s) static_assert(e, s) +#define _Thread_local thread_local #elif defined(__STDC_VERSION__) && __STDC_VERSION__ > 201000L -/* Do nothing - _Noreturn is a keyword */ -#elif defined(__GNUC__) +/* Do nothing. They are language keywords. */ +#else +/* Not supported. Implement them manually. */ +#ifdef __GNUC__ +#define _Alignof(e) __alignof__(e) #define _Noreturn __attribute__((__noreturn__)) +#define _Thread_local __thread #else +#define _Alignof(e) __offsetof(struct { char __a; e __b; }, __b) #define _Noreturn +#define _Thread_local +#endif +#ifdef __COUNTER__ +#define _Static_assert(e, s) __Static_assert(e, __COUNTER__) +#else +#define _Static_assert(e, s) __Static_assert(e, __LINE__) +#endif +#define __Static_assert(e, c) ___Static_assert(e, c) +#define ___Static_assert(e, c) typedef char __assert ## c[(e) ? 1 : -1] #endif #if __GNUC_PREREQ__(2, 96)