// Turn on C99 for .hc code. This gives us the INFINITY and NAN
// constants from math.h, which we occasionally need to use in .hc (#1861)
# define _ISOC99_SOURCE
-
-// Turning on _ISOC99_SOURCE means S_ISSOCK gets defined on Linux
-# define _BSD_SOURCE
#endif
#if IN_STG_CODE == 0
#define BITS_PER_BYTE 8
#define BITS_IN(x) (BITS_PER_BYTE * sizeof(x))
+/* Compute offsets of struct fields
+ */
+#define STG_FIELD_OFFSET(s_type, field) ((StgWord)&(((s_type*)0)->field))
+
/*
* 'Portable' inlining:
* INLINE_HEADER is for inline functions in header files (macros)
// __attribute__((gnu_inline)). So when we don't have this, we use
// ordinary static inline.
//
-#if defined(__GNUC_GNU_INLINE__)
+// Apple's gcc defines __GNUC_GNU_INLINE__ without providing
+// gnu_inline, so we exclude MacOS X and fall through to the safe
+// version.
+//
+#if defined(__GNUC_GNU_INLINE__) && !defined(__APPLE__)
# if defined(KEEP_INLINES)
# define EXTERN_INLINE inline
# else