Permalink
Browse files

Move static asserts to vas.h, and decouple from OS #includes

  • Loading branch information...
bsdphk committed Nov 6, 2018
1 parent 3e0cdae commit 3ef62a623a1e8ebfd4eb1dfd53410445fb468c2a
Showing with 27 additions and 31 deletions.
  1. +3 −0 flint.lnt
  2. +22 −0 include/vas.h
  3. +1 −30 include/vdef.h
  4. +1 −1 lib/libvcc/vsctool.py
@@ -112,6 +112,9 @@
-emacro(527, WRONG) // unreachable code
-emacro(774, VALID_OBJ) // boolean always true
-emacro(506, v_static_assert) // Constant value Boolean
-esym(751, __vassert_*) // local typedef '___' (___) not referenced
///////////////////////////////////////////////////////////////////////
// Places where we use x<<0 for reasons of symmetry
@@ -90,4 +90,26 @@ do { \
"", VAS_INCOMPLETE); \
} while (0)
/*
* Most of this nightmare is stolen from FreeBSD's <cdefs.h>
*/
#ifndef __has_extension
# define __has_extension(x) 0
#endif
#if __has_extension(c_static_assert)
# define v_static_assert _Static_assert
#elif __GNUC_PREREQ__(4,6) && !defined(__cplusplus)
# define v_static_assert _Static_assert
#else
# if defined(__COUNTER__)
# define v_static_assert(x, y) __v_static_assert(x, __COUNTER__)
# else
# define v_static_assert(x, y) __v_static_assert(x, __LINE__)
# endif
# define __v_static_assert(x, y) ___v_static_assert(x, y)
# define ___v_static_assert(x, y) \
typedef char __vassert_## y[(x) ? 1 : -1] v_unused_
#endif
#endif
@@ -73,9 +73,7 @@
# endif
#endif
#ifdef __printflike
# define v_printflike_(f,a) __printflike(f,a)
#elif __GNUC_PREREQ__(2, 95) || defined(__INTEL_COMPILER)
#if __GNUC_PREREQ__(2, 95) || defined(__INTEL_COMPILER)
# define v_printflike_(f,a) __attribute__((format(printf, f, a)))
#else
# define v_printflike_(f,a)
@@ -139,33 +137,6 @@
# define v_unused_
#endif
/*
* Most of this nightmare is stolen from FreeBSD's <cdefs.h>
*/
#ifndef __has_extension
# define __has_extension(x) 0
#endif
#if defined(_Static_assert)
/* Nothing, somebody already did this for us */
#elif __has_extension(c_static_assert)
/* Nothing, we should be fine */
#elif (defined(__cplusplus) && __cplusplus >= 201103L) || \
__has_extension(cxx_static_assert)
# define _Static_assert(x, y) static_assert(x, y)
#elif __GNUC_PREREQ__(4,6) && !defined(__cplusplus)
/* Nothing, gcc 4.6 and higher has _Static_assert built-in */
#else
# if defined(__COUNTER__)
# define _Static_assert(x, y) __Static_assert(x, __COUNTER__)
# else
# define _Static_assert(x, y) __Static_assert(x, __LINE__)
# endif
# define __Static_assert(x, y) ___Static_assert(x, y)
# define ___Static_assert(x, y) \
typedef char __assert_## y[(x) ? 1 : -1] v_unused_
#endif
/* VTIM API overhaul WIP */
typedef double vtim_mono;
typedef double vtim_real;
@@ -219,7 +219,7 @@ def emit_h(self):
def emit_c_paranoia(self, fo):
'''Emit asserts to make sure compiler gets same byte index'''
fo.write("#define PARANOIA(a,n)\t\t\t\t\\\n")
fo.write(" _Static_assert(\t\t\t\t\\\n")
fo.write(" v_static_assert(\t\t\t\t\\\n")
fo.write("\toffsetof(" + self.struct + ", a) == n,\t\\\n")
fo.write("\t\"VSC element '\" #a \"' at wrong offset\")\n\n")

0 comments on commit 3ef62a6

Please sign in to comment.