Purify's Uninit Memory Read (UMR) on class/structure padding

940 views Asked by At

I experience quite annoying side-effect of class/structure padding with Purify. E.g.

struct something {
    int field1;
    char field2;
};

/* ... */

struct something smth, smth2;
smth.field1 = 1;
smth.field2 = 'A';

smth2 = smth;

The last line would highly likely trigger UMR warning saying that 3 bytes of initialized memory are accessed. This is obviously a false positive: there are no user data in the last three bytes of the struct, it's just a padding.

Often the warnings very very quickly fill up log files making it very hard to see the other, real problems.

Does anybody know any way to suppress the false positives?

1

There are 1 answers

6
schot On BEST ANSWER

I have no experience with purify, but perhaps explicitly initialising the first struct removes this warning:

struct something smth = {0};
struct something smth2;

I assume your structs have block scope (not file). If they have file scope the zero initialising is implicit.