Messages in this thread | | | Date | Mon, 24 Jul 2006 14:28:03 +0100 | From | "Catalin Marinas" <> | Subject | Re: [PATCH 2.6.17-rc6 7/9] Remove some of the kmemleak false positives |
| |
On 24/07/06, Ingo Molnar <mingo@elte.hu> wrote: > update: there's also a neat gcc extension trick suggested by Arjan: > __builtin_classify_type(). This converts types into integers!
It's not really reliable as it doesn't distinguish well between types. All the structures, no matter what they contain, have the same id (which I think only refers to the fact that it is built-in type, pointer or structure, without differentiation).
The attached code gives the following results:
typeof(a) = 12, sizeof(a) = 136 typeof(b) = 12, sizeof(b) = 8 typeof(c) = 1, sizeof(c) = 4 typeof(d) = 1, sizeof(d) = 4 typeof(e) = 1, sizeof(e) = 4 typeof(f) = 1, sizeof(f) = 1 typeof(g) = 5, sizeof(g) = 4 typeof(h) = 5, sizeof(h) = 4
-- Catalin #include <stdio.h>
struct A { void *a; long b; char c[128]; };
struct B { long a; void *b; };
enum C { a, b };
#define PRINT_TYPE(val) \ printf("typeof(" #val ") = %d, sizeof(" #val ") = %d\n", \ __builtin_classify_type(val), \ sizeof(val))
int main() { struct A a; struct B b; enum C c; int d; long e; char f; int *g; char *h;
PRINT_TYPE(a); PRINT_TYPE(b); PRINT_TYPE(c); PRINT_TYPE(d); PRINT_TYPE(e); PRINT_TYPE(f); PRINT_TYPE(g); PRINT_TYPE(h);
return 0; }
| |