Just to note that by far and away, the most common cause of an ICE is a missing error message. Others are related to unstable features, which isn't particularly fair, since they're unstable for a reason. The remainder tend to be caused by odd combinations of features we didn't think of (which more often than not tend to be constructions with simple, working equivalents), often they become a question of "do we want to support this or not".
Trust me, there are far worse things lurking in the compiler than a few improperly-handled error cases.
Trust me, there are far worse things lurking in the compiler than a few improperly-handled error cases.