#define BINARY_TREE_PARENT_CORRECT(son, parent) ((son) ? (son->parent == parent) : 1) It turns out that the parent in son->parent which means a struct member will also be replaced by the parent in son, parent.
The gcc version is 4.1.2.
Do you think it's a bug or expected behavior?