# New Ticket Created by William Herrera
# Please include the string: [perl #53684]
# in the subject line of all future correspondence about this issue.
# URL: http://rt.perl.org/rt3/Ticket/Display.html?id=53684
/* compiler.h
* Copyright (C) 2007-2008, The Perl Foundation.
* SVN Info
* $Id: compiler.h 26630 2008-03-29 20:42:36Z chromatic $
* Overview:
* defines compiler capabilities
*/
#ifndef PARROT_COMPILER_H_GUARD
#define PARROT_COMPILER_H_GUARD
/*
* This set of macros define capabilities that may or may not be available
* for a given compiler. They are based on GCC's __attribute__ functionality.
*/
/*
* Microsoft provides two annotations mechanisms. __declspec, which has been
* around for a while, and Microsoft's standard source code annotation
* language (SAL), introduced with Visual C++ 8.0.
* See http://msdn2.microsoft.com/en-us/library/ms235402(VS.80).aspx,
* http://msdn2.microsoft.com/en-us/library/dabb5z75(VS.80).aspx.
*/
#if defined(_MSC_VER) (_MSC_VER 1300)
# define PARROT_HAS_SAL 1
# include sal.h
#else
# define PARROT_HAS_SAL 0
#endif
#ifdef HASATTRIBUTE_NEVER_WORKS
# error This attribute can never succeed. Something has mis-sniffed your
configuration.
#endif
#ifdef HASATTRIBUTE_DEPRECATED
# ifdef _MSC_VER
#define __attribute__deprecated__ __declspec(deprecated)
# else
#define __attribute__deprecated__ __attribute__((__deprecated__))
# endif
#endif
#ifdef HASATTRIBUTE_FORMAT
# define __attribute__format__(x, y, z)__attribute__((__format__((x), (y),
(z
#endif
#ifdef HASATTRIBUTE_MALLOC
# define __attribute__malloc__ __attribute__((__malloc__))
#endif
#ifdef HASATTRIBUTE_NONNULL
# define __attribute__nonnull__(a) __attribute__((__nonnull__(a)))
#endif
#ifdef HASATTRIBUTE_NORETURN
# ifdef _MSC_VER
#define __attribute__noreturn__ __declspec(noreturn)
# else
#define __attribute__noreturn__ __attribute__((__noreturn__))
# endif
#endif
#ifdef HASATTRIBUTE_PURE
# define __attribute__pure__ __attribute__((__pure__))
#endif
#ifdef HASATTRIBUTE_CONST
# define __attribute__const__ __attribute__((__const__))
#endif
#ifdef HASATTRIBUTE_UNUSED
# define __attribute__unused__ __attribute__((__unused__))
#endif
#ifdef HASATTRIBUTE_WARN_UNUSED_RESULT
# define __attribute__warn_unused_result__
__attribute__((__warn_unused_result__))
#endif
/* If we haven't defined the attributes yet, define them to blank. */
#ifndef __attribute__deprecated__
# define __attribute__deprecated__
#endif
#ifndef __attribute__format__
# define __attribute__format__(x, y, z)
#endif
#ifndef __attribute__malloc__
# define __attribute__malloc__
#endif
#ifndef __attribute__nonnull__
# define __attribute__nonnull__(a)
#endif
#ifndef __attribute__noreturn__
# define __attribute__noreturn__
#endif
#ifndef __attribute__const__
# define __attribute__const__
#endif
#ifndef __attribute__pure__
# define __attribute__pure__
#endif
#ifndef __attribute__unused__
# define __attribute__unused__
#endif
#ifndef __attribute__warn_unused_result__
# define __attribute__warn_unused_result__
#endif
/* Shim arguments are arguments that must be included in your function,
* but serve no purpose inside. Mark them with the SHIM() macro so that
* the compiler and/or lint know that it's OK it's unused. Shim arguments
* get _unused added to them so that you can't accidentally use them
* without removing the shim designation.
*/
#define SHIM(a) /[EMAIL PROTECTED]@*/ /[EMAIL PROTECTED]@*/ a##_unused
__attribute__unused__
/* UNUSED() is the old way we handled shim arguments Should still be
used in cases where the argument should, at some point be used.
*/
#define UNUSED(a) if (0) (void)(a);
#if PARROT_HAS_SAL
# define PARROT_CAN_RETURN_NULL /[EMAIL PROTECTED]@*/ __maybenull
# define PARROT_CANNOT_RETURN_NULL /[EMAIL PROTECTED]@*/ __notnull
#else
# define PARROT_CAN_RETURN_NULL /[EMAIL PROTECTED]@*/
# define PARROT_CANNOT_RETURN_NULL /[EMAIL PROTECTED]@*/
#endif
#define PARROT_DEPRECATED __attribute__deprecated__
#define PARROT_IGNORABLE_RESULT
#define PARROT_WARN_UNUSED_RESULT __attribute__warn_unused_result__
#define PARROT_PURE_FUNCTION__attribute__pure__
__attribute__warn_unused_result__
#define PARROT_CONST_FUNCTION __attribute__const__
__attribute__warn_unused_result__
#define PARROT_DOES_NOT_RETURN /[EMAIL PROTECTED]@*/
__attribute__noreturn__
#define PARROT_DOES_NOT_RETURN_WHEN_FALSE /[EMAIL PROTECTED]@*/
#define PARROT_MALLOC /[EMAIL PROTECTED]@*/
__attribute__malloc__ __attribute__warn_unused_result__
/* Function argument instrumentation */
/* For explanations of the annotations, see
http://www.splint.org/manual/manual.html */
#if PARROT_HAS_SAL
# define NOTNULL(x) /[EMAIL PROTECTED]@*/ __notnull x
/* The pointer passed may not be NULL