#else
#define cast_sign_compatible(type, expr) \
(sizeof(*(type)0) == 1 && sizeof(*(expr)) == 1)
-#define cast_const_compat1(expr, type) \
- (sizeof(*(expr)) == sizeof(*(type)0))
-#define cast_const_compat2(expr, type) \
- (sizeof(**(expr)) == sizeof(**(type)0))
-#define cast_const_compat3(expr, type) \
- (sizeof(***(expr)) == sizeof(***(type)0))
+#define cast_const_compat1(expr, type) (1)
+#define cast_const_compat2(expr, type) (1)
+#define cast_const_compat3(expr, type) (1)
#endif
#endif /* CCAN_CAST_H */
+++ /dev/null
-#include <ccan/cast/cast.h>
-#include <stdlib.h>
-
-/* Note: this *isn't* sizeof(char) on all platforms. */
-struct char_struct {
- char c;
-};
-
-int main(int argc, char *argv[])
-{
- char *uc;
- const
-#ifdef FAIL
- struct char_struct
-#else
- char
-#endif
- *p = NULL;
-
- uc = cast_const(char *, p);
- return 0;
-}
-
-#ifdef FAIL
-#if !HAVE_TYPEOF||!HAVE_BUILTIN_CHOOSE_EXPR||!HAVE_BUILTIN_TYPES_COMPATIBLE_P
-#error "Unfortunately we don't fail if cast_const can only use size"
-#endif
-#endif
#include <ccan/cast/cast.h>
#include <stdlib.h>
+/* Note: this *isn't* sizeof(char) on all platforms. */
+struct char_struct {
+ char c;
+};
+
int main(int argc, char *argv[])
{
char *uc;
- const
+ const
#ifdef FAIL
- int
+ struct char_struct
#else
char
#endif
uc = cast_const(char *, p);
return 0;
}
+
+#ifdef FAIL
+#if !HAVE_TYPEOF||!HAVE_BUILTIN_CHOOSE_EXPR||!HAVE_BUILTIN_TYPES_COMPATIBLE_P
+#error "Unfortunately we don't fail if cast_const can only use size"
+#endif
+#endif
+++ /dev/null
-#include <ccan/cast/cast.h>
-#include <stdlib.h>
-
-/* Note: this *isn't* sizeof(char) on all platforms. */
-struct char_struct {
- char c;
-};
-
-int main(int argc, char *argv[])
-{
- char **uc;
- const
-#ifdef FAIL
- struct char_struct
-#else
- char
-#endif
- **p = NULL;
-
- uc = cast_const2(char **, p);
- return 0;
-}
-
-#ifdef FAIL
-#if !HAVE_TYPEOF||!HAVE_BUILTIN_CHOOSE_EXPR||!HAVE_BUILTIN_TYPES_COMPATIBLE_P
-#error "Unfortunately we don't fail if cast_const can only use size"
-#endif
-#endif
#include <ccan/cast/cast.h>
#include <stdlib.h>
+/* Note: this *isn't* sizeof(char) on all platforms. */
+struct char_struct {
+ char c;
+};
+
int main(int argc, char *argv[])
{
char **uc;
- const
+ const
#ifdef FAIL
- int
+ struct char_struct
#else
char
#endif
uc = cast_const2(char **, p);
return 0;
}
+
+#ifdef FAIL
+#if !HAVE_TYPEOF||!HAVE_BUILTIN_CHOOSE_EXPR||!HAVE_BUILTIN_TYPES_COMPATIBLE_P
+#error "Unfortunately we don't fail if cast_const can only use size"
+#endif
+#endif
+++ /dev/null
-#include <ccan/cast/cast.h>
-#include <stdlib.h>
-
-/* Note: this *isn't* sizeof(char) on all platforms. */
-struct char_struct {
- char c;
-};
-
-int main(int argc, char *argv[])
-{
- char ***uc;
- const
-#ifdef FAIL
- struct char_struct
-#else
- char
-#endif
- ***p = NULL;
-
- uc = cast_const3(char ***, p);
- return 0;
-}
-
-#ifdef FAIL
-#if !HAVE_TYPEOF||!HAVE_BUILTIN_CHOOSE_EXPR||!HAVE_BUILTIN_TYPES_COMPATIBLE_P
-#error "Unfortunately we don't fail if cast_const can only use size"
-#endif
-#endif
#include <ccan/cast/cast.h>
#include <stdlib.h>
+/* Note: this *isn't* sizeof(char) on all platforms. */
+struct char_struct {
+ char c;
+};
+
int main(int argc, char *argv[])
{
char ***uc;
- const
+ const
#ifdef FAIL
- int
+ struct char_struct
#else
char
#endif
uc = cast_const3(char ***, p);
return 0;
}
+
+#ifdef FAIL
+#if !HAVE_TYPEOF||!HAVE_BUILTIN_CHOOSE_EXPR||!HAVE_BUILTIN_TYPES_COMPATIBLE_P
+#error "Unfortunately we don't fail if cast_const can only use size"
+#endif
+#endif
uc = cast_signed(unsigned char *, p);
return 0;
}
+
+#ifdef FAIL
+#if !HAVE_TYPEOF||!HAVE_BUILTIN_CHOOSE_EXPR||!HAVE_BUILTIN_TYPES_COMPATIBLE_P
+#error "Unfortunately we don't fail if cast_const can only use size"
+#endif
+#endif
--- /dev/null
+#include <ccan/cast/cast.h>
+
+static void *remove_void(const void *p)
+{
+ return cast_const(void *, p);
+}
+
+int main(void)
+{
+ void *p = remove_void("foo");
+ return !p;
+}