root/usr/src/tools/smatch/src/validation/typeof-mods.c
#define __noderef       __attribute__((noderef))
#define __bitwise       __attribute__((bitwise))
#define __nocast        __attribute__((nocast))
#define __safe          __attribute__((safe))

static void test_spec(void)
{
        unsigned int obj, *ptr;
        typeof(obj) var = obj;
        typeof(ptr) ptr2 = ptr;
        typeof(*ptr) var2 = obj;
        typeof(*ptr) *ptr3 = ptr;
        typeof(obj) *ptr4 = ptr;
        obj = obj;
        ptr = ptr;
        ptr = &obj;
        obj = *ptr;
}

static void test_const(void)
{
        const int obj, *ptr;
        typeof(obj) var = obj;
        typeof(ptr) ptr2 = ptr;
        typeof(*ptr) var2 = obj;
        typeof(*ptr) *ptr3 = ptr;
        typeof(obj) *ptr4 = ptr;
        ptr = ptr;
        ptr = &obj;
}

static void test_volatile(void)
{
        volatile int obj, *ptr;
        typeof(obj) var = obj;
        typeof(ptr) ptr2 = ptr;
        typeof(*ptr) var2 = obj;
        typeof(*ptr) *ptr3 = ptr;
        typeof(obj) *ptr4 = ptr;
        obj = obj;
        ptr = ptr;
        ptr = &obj;
        obj = *ptr;
}

static void test_restrict(void)
{
        int *restrict obj, *restrict *ptr;
        typeof(obj) var = obj;
        typeof(ptr) ptr2 = ptr;
        typeof(*ptr) var2 = obj;
        typeof(*ptr) *ptr3 = ptr;
        typeof(obj) *ptr4 = ptr;
        obj = obj;
        ptr = ptr;
        ptr = &obj;
        obj = *ptr;
}

static void test_atomic(void)
{
        int _Atomic obj, *ptr;
        typeof(obj) var = obj;
        typeof(ptr) ptr2 = ptr;
        typeof(*ptr) var2 = obj;
        typeof(*ptr) *ptr3 = ptr;
        typeof(obj) *ptr4 = ptr;
        obj = obj;
        ptr = ptr;
        ptr = &obj;
        obj = *ptr;
}

static void test_bitwise(void)
{
        typedef int __bitwise type_t;
        type_t obj, *ptr;
        typeof(obj) var = obj;
        typeof(ptr) ptr2 = ptr;
        typeof(*ptr) var2 = obj;
        typeof(*ptr) *ptr3 = ptr;
        typeof(obj) *ptr4 = ptr;
        obj = obj;
        ptr = ptr;
        ptr = &obj;
        obj = *ptr;
}

static void test_static(void)
{
        static int obj, *ptr;
        typeof(obj) var = obj;
        typeof(ptr) ptr2 = ptr;
        typeof(*ptr) var2 = obj;
        typeof(*ptr) *ptr3 = ptr;
        typeof(obj) *ptr4 = ptr;
        obj = obj;
        ptr = ptr;
        ptr = &obj;
        obj = *ptr;
}

static void test_tls(void)
{
        __thread int obj, *ptr;
        typeof(obj) var = obj;
        typeof(ptr) ptr2 = ptr;
        typeof(*ptr) var2 = obj;
        typeof(*ptr) *ptr3 = ptr;
        typeof(obj) *ptr4 = ptr;
        obj = obj;
        ptr = ptr;
        ptr = &obj;
        obj = *ptr;
}

static void test_nocast(void)
{
        int __nocast obj, *ptr;
        typeof(obj) var = obj;
        typeof(ptr) ptr2 = ptr;
        typeof(*ptr) var2 = obj;
        typeof(*ptr) *ptr3 = ptr;
        typeof(obj) *ptr4 = ptr;
        obj = obj;
        ptr = ptr;
        ptr = &obj;
        obj = *ptr;
}

/*
 * check-name: typeof-mods
 *
 * check-error-start
 * check-error-end
 */