While other answers correctly explain the situation from a user's perspective, it is worth noting, that the "cleverness" of analyzing such flows is not at the discretion of a compiler but precisely defined by the rules of JLS. In particular, §14.21 contains this:
An expression statement can complete normally iff it is reachable.
A method invocation like throwIAE()
is an expression statement, and because it is reachable in the example, it can also "complete normally". Because of that, the method body can "complete normally", which according to §8.4.7 is illegal for a method with a non-void return type (which is to say, such methods must return a value on all possible paths).
I other words, JLS defines that all method invocations are treated equally during flow analysis, and there is no such concept as "method-that-always-throws".