X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=cfg%2Fcompiler.h;h=e9d7567ccc090905b8b24a10ffbd66f0e35cdbaf;hb=4144653aea67c800a8219abd3b36e27ae6ab1bd3;hp=d4e7e7b182014db97e0a11d56f8de014dd5395ab;hpb=e90c88081bdd417cf61fe9130aacaa6e5eae2a17;p=bertos.git diff --git a/cfg/compiler.h b/cfg/compiler.h index d4e7e7b1..e9d7567c 100755 --- a/cfg/compiler.h +++ b/cfg/compiler.h @@ -14,6 +14,18 @@ /*#* *#* $Log$ + *#* Revision 1.14 2006/02/23 08:36:33 bernie + *#* Emulate __func__ on MSVC. + *#* + *#* Revision 1.13 2006/02/23 07:37:37 bernie + *#* Compile fix for MSVC. + *#* + *#* Revision 1.12 2006/02/21 16:06:31 bernie + *#* Fix ssize_t redefinitions on glibc systems. + *#* + *#* Revision 1.11 2006/02/20 14:34:58 bernie + *#* Use portable type checking. + *#* *#* Revision 1.10 2006/02/15 09:12:01 bernie *#* Fixes for ARM/IAR support. *#* @@ -172,6 +184,9 @@ #define snprintf _snprintf #define vsnprintf _vsnprintf + /* MSVC doesn't support C99's __func__, but has a similar extension. */ + #define __func__ __FUNCTION__ + #elif defined(__GNUC__) /* Compiler features */ @@ -198,10 +213,18 @@ #define DEPRECATED __attribute__((__deprecated__)) #endif + #ifndef __cplusplus + #define ASSERT_TYPE_EQUAL(var1, var2) \ + STATIC_ASSERT(__builtin_types_compatible_p(typeof(var1), typeof(var2))) + #define ASSERT_TYPE_IS(var, type) \ + STATIC_ASSERT(__builtin_types_compatible_p(typeof(var), type)) + #endif + /* Include some standard C89/C99 stuff */ #include #include #include + #include /* for ssize_t */ #ifndef __cplusplus /* @@ -340,7 +363,7 @@ #endif -#if defined(_MSC_VER) +#if defined(_MSC_VER) \ || ((defined(__IAR_SYSTEMS_ICC) || defined(__IAR_SYSTEMS_ICC__)) && CPU_I196) /*! * \name ISO C99 fixed-size types @@ -407,8 +430,8 @@ typedef unsigned char page_t; /*!< Type for banked memory pages. */ * * We check for some common definitions to avoid redefinitions: * - * glibc, avr-libc: _SIZE_T_DEFINED - * Darwin libc: _BSD_SIZE_T_DEFINED_ + * glibc, avr-libc: _SIZE_T_DEFINED, __ssize_t_defined + * Darwin libc: _BSD_SIZE_T_DEFINED_, _SIZE_T * IAR ARM: _SIZE_T * * \{ @@ -423,7 +446,7 @@ typedef unsigned char page_t; /*!< Type for banked memory pages. */ #endif #endif -#if !(defined(ssize_t) || defined(__ssize_t_defined)) +#if !(defined(ssize_t) || defined(_SSIZE_T) || defined(__ssize_t_defined)) #if CPU_X86 /* 32bit or 64bit (32bit for _WIN64). */ typedef long ssize_t; @@ -479,6 +502,18 @@ typedef unsigned char page_t; /*!< Type for banked memory pages. */ /*! Issue a compilation error if the \a condition is false */ #define STATIC_ASSERT(condition) \ - UNUSED_VAR(extern char,PP_CAT(CT_ASSERT___, __LINE__)[(condition) ? 1 : -1]) + UNUSED_VAR(extern char, STATIC_ASSERTION_FAILED__[(condition) ? 1 : -1]) + +#ifndef ASSERT_TYPE_EQUAL +/*! Ensure two variables have the same type. */ +#define ASSERT_TYPE_EQUAL(var1, var2) \ + do { (void)(&(var1) == &(var2)); } while(0) +#endif + +#ifndef ASSERT_TYPE_IS +/*! Ensure variable is of specified type. */ +#define ASSERT_TYPE_IS(var, type) \ + do { (void)(&var == (type *)0); } while(0) +#endif #endif /* DEVLIB_COMPILER_H */