|
|
|
|
|
by thayne
688 days ago
|
|
To explain why it can be removed in the former: Since it is UB to dereference a null pointer, the compiler can assume that ptr isn't null after it is dereferenced[1]. Therefore, the if condition will always be false. In fact if ptr is null, unless the foo field has a very large offset, the behavior you would probably expect would be for the dereference to segfault before reaching the if, so it doesn't really matter if it is optimized away. |
|
There are cases in which the optimization can result in behavior other than segfaulting, see https://research.swtch.com/ub#null