Fawzi Mohamed wrote:
one could argue that the unsafe operation is memset.

That's right.


The compiler always initializes a struct, so that what you describe should never happen in a safe program.

Right.


Still as you say the following example that might indeed considered a bug:

S s1=void,s2=void;
s1.s=0; s1.d=0;
s2.s=0; s2.d=0;
assert(s1 == s2);

here the assert might fail depending on the previous content of the memory.
I am not sure of what is the best solution, I am not sure that defining a special comparison operation by default for each struct is the correct solution (it can be quite some bloat), please note that a user defined comparison function will not have these problems.

No, it's not a bug in the language, it's a bug in the user code. Using =void is an advanced feature, and it requires the user to know what he's doing with it. That's why it isn't allowed in safe mode.


Still I agree that traking down a bug due to this might be very ugly...

The idea with =void initializations is that they are findable using grep, and so can be singled out for special attention when there is a problem.

Reply via email to