Jump statements (``++return++``, ``++break++`` and ``++continue++``) and ``++throw++`` expressions move control flow out of the current code block. So any statements that come after a jump are dead code.

== Noncompliant Code Example

----
function fun(a) {
  var i = 10;
  return i + a; 
  i++;             // Noncompliant; this is never executed
}
----

== Compliant Solution

----
function fun(int a) {
  var i = 10;
  return i + a;
}
----

== Exceptions

This rule ignores unreachable ``++break++`` statements in ``++switch++`` clauses.

----
switch (x) {
  case 42:
     return 43;
     break;   // Compliant
  default:
    doSomething();
}
----

Hoisted variables declarations without initialization are always considered reachable.

----
function bar() {
  return x = function() {
    x.foo = 42;
  }
  var x;
}
----

include::../see.adoc[]
