Re: [tip:x86/mm] x86, mm: Use a bitfield to mask nuisance get_user()warnings
From: H. Peter Anvin
Date: Tue Feb 12 2013 - 13:26:15 EST
I just thought up this variant, I'm about to test it, but H.J., do you
see any problems with it?
#define itype(x) \
__typeof__(__builtin_choose_expr(sizeof(*(x)) > sizeof(0UL), 0ULL, 0UL))
I tried it out with a small test program (attached), and it seems to
work. Next for using it in the kernel...
-hpa
#include <stdio.h>
#include <stdlib.h>
#define itype(x) __typeof__(__builtin_choose_expr(sizeof(*(x)) > sizeof(0UL), 0ULL, 0UL))
int main(void)
{
const char *a;
const short *b;
const int *c;
const long *d;
const long long *e;
const void **p;
itype(a) aa;
itype(b) bb;
itype(c) cc;
itype(d) dd;
itype(e) ee;
itype(p) pp;
aa = 1;
bb = 2;
cc = 3;
dd = 4;
ee = 5;
pp = 6;
printf("a = %zu\n", sizeof(aa));
printf("b = %zu\n", sizeof(bb));
printf("c = %zu\n", sizeof(cc));
printf("d = %zu\n", sizeof(dd));
printf("e = %zu\n", sizeof(ee));
printf("p = %zu\n", sizeof(pp));
return 0;
}