This revision was automatically updated to reflect the committed changes. Closed by commit rL277339: [clang-tidy] Prepare modernize-loop-convert for upcoming changes in D22566 (authored by mboehme).
Changed prior to commit: https://reviews.llvm.org/D22903?vs=65877&id=66303#toc Repository: rL LLVM https://reviews.llvm.org/D22903 Files: clang-tools-extra/trunk/clang-tidy/modernize/LoopConvertUtils.cpp Index: clang-tools-extra/trunk/clang-tidy/modernize/LoopConvertUtils.cpp =================================================================== --- clang-tools-extra/trunk/clang-tidy/modernize/LoopConvertUtils.cpp +++ clang-tools-extra/trunk/clang-tidy/modernize/LoopConvertUtils.cpp @@ -805,6 +805,18 @@ } bool ForLoopIndexUseVisitor::TraverseStmt(Stmt *S) { + // If this is an initialization expression for a lambda capture, prune the + // traversal so that we don't end up diagnosing the contained DeclRefExpr as + // inconsistent usage. No need to record the usage here -- this is done in + // TraverseLambdaCapture(). + if (const auto *LE = dyn_cast_or_null<LambdaExpr>(NextStmtParent)) { + // Any child of a LambdaExpr that isn't the body is an initialization + // expression. + if (S != LE->getBody()) { + return true; + } + } + // All this pointer swapping is a mechanism for tracking immediate parentage // of Stmts. const Stmt *OldNextParent = NextStmtParent;
Index: clang-tools-extra/trunk/clang-tidy/modernize/LoopConvertUtils.cpp =================================================================== --- clang-tools-extra/trunk/clang-tidy/modernize/LoopConvertUtils.cpp +++ clang-tools-extra/trunk/clang-tidy/modernize/LoopConvertUtils.cpp @@ -805,6 +805,18 @@ } bool ForLoopIndexUseVisitor::TraverseStmt(Stmt *S) { + // If this is an initialization expression for a lambda capture, prune the + // traversal so that we don't end up diagnosing the contained DeclRefExpr as + // inconsistent usage. No need to record the usage here -- this is done in + // TraverseLambdaCapture(). + if (const auto *LE = dyn_cast_or_null<LambdaExpr>(NextStmtParent)) { + // Any child of a LambdaExpr that isn't the body is an initialization + // expression. + if (S != LE->getBody()) { + return true; + } + } + // All this pointer swapping is a mechanism for tracking immediate parentage // of Stmts. const Stmt *OldNextParent = NextStmtParent;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits