Index: include/pub_tool_libcassert.h
===================================================================
--- include/pub_tool_libcassert.h	(revision 10969)
+++ include/pub_tool_libcassert.h	(working copy)
@@ -33,15 +33,17 @@
 
 #define tl_assert(expr)                                                 \
   ((void) ((expr) ? 0 :                                                 \
-           (VG_(assert_fail) (/*isCore?*/False, #expr,                  \
-                              __FILE__, __LINE__, __PRETTY_FUNCTION__,  \
-                              ""),                                      \
+           (VG_(assert_fail) (/*isCore?*/False, (const Char*) #expr,    \
+                              (const Char*)__FILE__, __LINE__,          \
+                              (const Char*)__PRETTY_FUNCTION__,         \
+                              (const HChar*)""),                        \
                               0)))
 
 #define tl_assert2(expr, format, args...)                               \
   ((void) ((expr) ? 0 :                                                 \
-           (VG_(assert_fail) (/*isCore?*/False, #expr,                  \
-                              __FILE__, __LINE__, __PRETTY_FUNCTION__,  \
+           (VG_(assert_fail) (/*isCore?*/False, (const Char*)#expr,     \
+                              (const Char*)__FILE__, __LINE__,          \
+                              (const Char*)__PRETTY_FUNCTION__,         \
                               format, ##args),                          \
                               0)))
 
Index: include/vki/vki-x86-linux.h
===================================================================
--- include/vki/vki-x86-linux.h	(revision 10969)
+++ include/vki/vki-x86-linux.h	(working copy)
@@ -479,12 +479,11 @@
 	 ((nr)   << _VKI_IOC_NRSHIFT) | \
 	 ((size) << _VKI_IOC_SIZESHIFT))
 
-/* provoke compile error for invalid uses of size argument */
-extern unsigned int __vki_invalid_size_argument_for_IOC;
+/* provoke compile error (div by zero) for invalid uses of size argument */
 #define _VKI_IOC_TYPECHECK(t) \
-	((sizeof(t) == sizeof(t[1]) && \
-	  sizeof(t) < (1 << _VKI_IOC_SIZEBITS)) ? \
-	  sizeof(t) : __vki_invalid_size_argument_for_IOC)
+	(sizeof(t) / \
+         (sizeof(t) == sizeof(t[1]) && \
+	  sizeof(t) < (1 << _VKI_IOC_SIZEBITS)))
 
 /* used to create numbers */
 #define _VKI_IO(type,nr)	_VKI_IOC(_VKI_IOC_NONE,(type),(nr),0)
Index: include/pub_tool_basics.h
===================================================================
--- include/pub_tool_basics.h	(revision 10969)
+++ include/pub_tool_basics.h	(working copy)
@@ -193,15 +193,18 @@
    SysRes;
 #elif defined(VGO_darwin)
 typedef
+   enum {
+     SysRes_MACH=40,  // MACH, result is _wLO
+     SysRes_MDEP,     // MDEP, result is _wLO
+     SysRes_UNIX_OK,  // UNIX, success, result is _wHI:_wLO
+     SysRes_UNIX_ERR  // UNIX, error,   error  is _wHI:_wLO
+   } SysResRet;
+
+typedef
    struct {
       UWord _wLO;
       UWord _wHI;
-      enum { 
-         SysRes_MACH=40,  // MACH, result is _wLO
-         SysRes_MDEP,     // MDEP, result is _wLO
-         SysRes_UNIX_OK,  // UNIX, success, result is _wHI:_wLO
-         SysRes_UNIX_ERR  // UNIX, error,   error  is _wHI:_wLO
-      } _mode;
+      SysResRet _mode;
    }
    SysRes;
 #else