root/usr/src/tools/smatch/src/validation/bitwise-cast.c
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;
}

/* Explicit case of nonzero forced, legal */
static __be32 quuy(void)
{
        return (__attribute__((force)) __be32) 1730;
}

/*
 * 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
 */