What happens if I send a ping to a host that is off? Do I get an ICMP message with "host unreachable"? Does ICMP say nothing at all because the packet was correctly delivered even though it was not processed by the destination host? I don't know how ICMP reacts in these cases.
ICMP doesn't do anything because there is no host to generate ICMP messages back to the source.
The ping application will time out. I think most implementations have a default two-second timeout, but you can probably override that. An implementation of ping is going to have the features that the author of that tool version built in.