Whenever possible, statements with no effect are discarded. But if they
are nested within another construct which cannot be discarded for some
reason, they are instead replaced with an empty statement, generated by
build_empty_stmt
. Initially, all empty statements were shared,
after the pattern of the Java front end, but this caused a lot of trouble in
practice.
An empty statement is represented as (void)0
.