aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/validation
diff options
Diffstat (limited to 'validation')
-rw-r--r--validation/bitwise-cast.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/validation/bitwise-cast.c b/validation/bitwise-cast.c
new file mode 100644
index 00000000..baeca29e
--- /dev/null
+++ b/validation/bitwise-cast.c
@@ -0,0 +1,44 @@
+typedef unsigned int u32;
+typedef u32 __attribute__((bitwise)) __be32;
+
+/* Implicit casts of 0, legal */
+static __be32 foo(void)
+{
+ __be32 x = 0;
+
+ return 0;
+}
+
+/* Explicit cast of 0, legal */
+static __be32 bar(void)
+{
+ return (__be32)0;
+}
+
+/* Implicit casts of nonzero, bad */
+static __be32 baz(void)
+{
+ __be32 x = 0x2a;
+
+ return 99;
+}
+
+/* Explicit cast of nonzero, bad */
+static __be32 quux(void)
+{
+ return (__be32)1729;
+}
+
+/*
+ * check-name: conversions to bitwise types
+ * check-command: sparse -Wbitwise $file
+ * check-error-start
+bitwise-cast.c:21:20: warning: incorrect type in initializer (different base types)
+bitwise-cast.c:21:20: expected restricted __be32 [usertype] x
+bitwise-cast.c:21:20: got int
+bitwise-cast.c:23:16: warning: incorrect type in return expression (different base types)
+bitwise-cast.c:23:16: expected restricted __be32
+bitwise-cast.c:23:16: got int
+bitwise-cast.c:29:17: warning: cast to restricted __be32
+ * check-error-end
+ */