diff options
| author | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2016-11-24 18:09:45 +0100 |
|---|---|---|
| committer | Christopher Li <sparse@chrisli.org> | 2017-02-13 09:34:44 +0800 |
| commit | 8c5fa9ab6b0f92a0f1dc91859fba4075371b4eac (patch) | |
| tree | 09ecb3c2e74697f8aa543db9ee9436bd4c9b7e61 /validation | |
| parent | 01f2bb996b81d440d5bb1e8dd8d3b52930314965 (diff) | |
| download | sparse-dev-8c5fa9ab6b0f92a0f1dc91859fba4075371b4eac.tar.gz | |
testsuite: test modifiers preserved by '&' operator
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Signed-off-by: Christopher Li <sparse@chrisli.org>
Diffstat (limited to 'validation')
| -rw-r--r-- | validation/ptr-inherit.c | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/validation/ptr-inherit.c b/validation/ptr-inherit.c new file mode 100644 index 00000000..58524a71 --- /dev/null +++ b/validation/ptr-inherit.c @@ -0,0 +1,80 @@ +#define __user __attribute__((address_space(1))) +#define __noderef __attribute__((noderef)) +#define __bitwise __attribute__((bitwise)) +#define __nocast __attribute__((nocast)) +#define __safe __attribute__((safe)) + + +/* Should be inherited? */ +static void test_const(void) +{ + const int o; + int *p = &o; /* check-should-fail */ +} + +static void test_volatile(void) +{ + volatile int o; + int *p = &o; /* check-should-fail */ +} + +static void test_noderef(void) +{ + int __noderef o; + int *p = &o; /* check-should-fail */ +} + +static void test_bitwise(void) +{ + int __bitwise o; + int *p = &o; /* check-should-fail */ +} + +static void test_user(void) +{ + int __user o; + int *p = &o; /* check-should-fail */ +} + +static void test_nocast(void) +{ + int __nocast o; + int __nocast *p = &o; /* check-should-pass */ +} + +/* Should be ignored? */ +static void test_static(void) +{ + /* storage is not inherited */ + static int o; + int *p = &o; /* check-should-pass */ +} + +static void test_tls(void) +{ + /* storage is not inherited */ + static __thread int o; + int *p = &o; /* check-should-pass */ +} + +/* + * check-name: ptr-inherit.c + * + * check-error-start +ptr-inherit.c:12:19: warning: incorrect type in initializer (different modifiers) +ptr-inherit.c:12:19: expected int *p +ptr-inherit.c:12:19: got int const *<noident> +ptr-inherit.c:18:19: warning: incorrect type in initializer (different modifiers) +ptr-inherit.c:18:19: expected int *p +ptr-inherit.c:18:19: got int volatile *<noident> +ptr-inherit.c:24:19: warning: incorrect type in initializer (different modifiers) +ptr-inherit.c:24:19: expected int *p +ptr-inherit.c:24:19: got int [noderef] *<noident> +ptr-inherit.c:30:19: warning: incorrect type in initializer (different base types) +ptr-inherit.c:30:19: expected int *p +ptr-inherit.c:30:19: got restricted int *<noident> +ptr-inherit.c:36:19: warning: incorrect type in initializer (different address spaces) +ptr-inherit.c:36:19: expected int *p +ptr-inherit.c:36:19: got int <asn:1>*<noident> + * check-error-end + */ |
