This doesn't look quite right. For a case like: void f() { for (int n = 0; n != 3; ++n) { for (; ({ continue; true; });) ; } } the `continue` continues the outer loop. Your patch would reject it. http://llvm-reviews.chandlerc.com/D2018