[PATCH] validation: add check for typeof() and address spaces
Dan Carpenter <[email protected]>
| Newsgroups | org.kernel.vger.linux-sparse |
|---|---|
| Message-ID | <[email protected]> |
The typeof() key word should preserve the address space and typeof_unqual() should not. Add a check to verify this works as expected. Signed-off-by: Dan Carpenter <[email protected]> --- validation/typeof-as.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 validation/typeof-as.c diff --git a/validation/typeof-as.c b/validation/typeof-as.c new file mode 100644 index 000000000000..563685281d92 --- /dev/null +++ b/validation/typeof-as.c @@ -0,0 +1,32 @@ +#define __seg_gs __attribute__((address_space(__seg_gs))) +static int __seg_gs m; + +static int __seg_gs bad_manual (void) +{ + return (*(int *)&m); +} + +static int __seg_gs good_manual (void) +{ + return (*(int __seg_gs *)&m); +} + +static int bad_typeof (void) +{ + return (*(typeof_unqual(m) *)&m); +} + +static int __seg_gs good_typeof (void) +{ + return (*(volatile typeof(m) *)&m); +} + +/* + * check-name: typeof address space + * check-command: ./sparse typeof-as.c + * + * check-error-start +typeof-as.c:6:19: warning: cast removes address space '__seg_gs' of expression +typeof-as.c:16:19: warning: cast removes address space '__seg_gs' of expression + * check-error-end + */ -- 2.51.0