lkml.org 
[lkml]   [2006]   [Jul]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [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;
}
\
 
 \ /
  Last update: 2006-07-24 15:31    [W:0.076 / U:1.724 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site