Solution 3 ---------- 1) The pointer information of q(q -> z) is reached at the in of the statement if(*q). Therefore, copy propagation takes place and *q is replaced by variable z. The optimization is correct as q->z and is not modified before reaching statement if(*q). 2) In program 2, The pointer information reaching at in of statement are q->z and q->y. Therefore, *q in if(*q) can be replaced by z or y. Copy propagation is suppressed as we do not have definite points-to information for q reaching statement if(*q).