ccompile.h revision 05c2421435747d58bdc8212e3253bdd321948b8a
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2004 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
/*
* Copyright 2015 EveryCity Ltd. All rights reserved.
*/
#ifndef _SYS_CCOMPILE_H
#define _SYS_CCOMPILE_H
/*
* This file contains definitions designed to enable different compilers
* to be used harmoniously on Solaris systems.
*/
#ifdef __cplusplus
extern "C" {
#endif
/*
* Allow for version tests for compiler bugs and features.
*/
#if defined(__GNUC__)
#define __GNUC_VERSION \
#else
#define __GNUC_VERSION 0
#endif
#if defined(__ATTRIBUTE_IMPLEMENTED) || defined(__GNUC__)
/*
* analogous to lint's PRINTFLIKEn
*/
#define __sun_attr___PRINTFLIKE__(__n) \
#define __sun_attr___VPRINTFLIKE__(__n) \
/*
* Handle the kernel printf routines that can take '%b' too
*/
#if __GNUC_VERSION < 30402
/*
* XX64 at least this doesn't work correctly yet with 3.4.1 anyway!
*/
#else
#define __sun_attr___KPRINTFLIKE__(__n) \
#define __sun_attr___KVPRINTFLIKE__(__n) \
#endif
/*
* This one's pretty obvious -- the function never returns
*/
/*
* The function is 'extern inline' and expects GNU C89 behaviour, not C99
* behaviour.
*
* Should only be used on 'extern inline' definitions for GCC.
*/
#if __GNUC_VERSION >= 40200
#else
#define __sun_attr___gnu_inline__
#endif
/*
* The function has control flow such that it may return multiple times (in
* the manner of setjmp or vfork)
*/
#if __GNUC_VERSION >= 40100
#else
#define __sun_attr___returns_twice__
#endif
/*
* This is an appropriate label for functions that do not
* modify their arguments, e.g. strlen()
*/
/*
* This is a stronger form of __pure__. Can be used for functions
* that do not modify their arguments and don't depend on global
* memory.
*/
/*
* structure packing like #pragma pack(1)
*/
/*
* This attribute, attached to a variable, means that the variable is meant to
* be possibly unused. GCC will not produce a warning for this variable.
*/
#if __GNUC_VERSION >= 20700
#else
#define __sun_attr___unused__
#endif
#else /* __ATTRIBUTE_IMPLEMENTED || __GNUC__ */
#define __sun_attr__(__a)
#endif /* __ATTRIBUTE_IMPLEMENTED || __GNUC__ */
/*
* Shorthand versions for readability
*/
#ifdef __cplusplus
}
#endif
#endif /* _SYS_CCOMPILE_H */