Index: clang/lib/CodeGen/CGExprAgg.cpp =================================================================== --- clang/lib/CodeGen/CGExprAgg.cpp +++ clang/lib/CodeGen/CGExprAgg.cpp @@ -678,16 +678,16 @@ /// Attempt to look through various unimportant expressions to find a /// cast of the given kind. static Expr *findPeephole(Expr *op, CastKind kind) { - while (true) { - op = op->IgnoreParens(); - if (CastExpr *castE = dyn_cast(op)) { - if (castE->getCastKind() == kind) - return castE->getSubExpr(); - if (castE->getCastKind() == CK_NoOp) - continue; - } - return nullptr; + while (CastExpr *castE = dyn_cast(op->IgnoreParens())) { + if (castE->getCastKind() == kind) + return castE->getSubExpr(); + + if (castE->getCastKind() != CK_NoOp || castE == op) + break; + + op = castE; } + return nullptr; } void AggExprEmitter::VisitCastExpr(CastExpr *E) {