ICMP message is not generated on header checksum errors
The source address to which ICMP would send a message is in the IP header, and if the header has an error, the source address in the header cannot be relied upon to be correct. The higher-layer protocols will need to deal with such lost packets in their own fashion.
If a datagram carrying an ICMP message causes an error, no error
message is sent.
What RFC 792, Internet Control Message Protocol says about this is:
To avoid the infinite regress of messages about messages etc., no ICMP
messages are sent about ICMP messages.
That is not strictly true in every case. There are multiple versions of traceroute that use ICMP, and they depend on ICMP error messages for timeout (TTL expired) to be sent back to the source. Also, ping uses an ICMP echo reply to an ICMP echo request.