diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.cpp b/clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.cpp index 8a628317a302fc..a5d9275afaf793 100644 --- a/clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.cpp +++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/InitVariablesCheck.cpp @@ -29,11 +29,15 @@ InitVariablesCheck::InitVariablesCheck(StringRef Name, MathHeader(Options.get("MathHeader", "math.h")) {} void InitVariablesCheck::registerMatchers(MatchFinder *Finder) { - Finder->addMatcher(varDecl(unless(hasInitializer(anything())), - unless(isInstantiated()), isLocalVarDecl(), - unless(isStaticLocal()), isDefinition()) - .bind("vardecl"), - this); + std::string BadDecl = "badDecl"; + Finder->addMatcher( + varDecl(unless(hasInitializer(anything())), unless(isInstantiated()), + isLocalVarDecl(), unless(isStaticLocal()), isDefinition(), + optionally(hasParent(declStmt(hasParent( + cxxForRangeStmt(hasLoopVariable(varDecl().bind(BadDecl))))))), + unless(equalsBoundNode(BadDecl))) + .bind("vardecl"), + this); } void InitVariablesCheck::registerPPCallbacks(const SourceManager &SM, diff --git a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-init-variables.cpp b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-init-variables.cpp index d43e44808a49a5..4c92e1976f9172 100644 --- a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-init-variables.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-init-variables.cpp @@ -78,3 +78,9 @@ void init_unit_tests() { int parens(42); int braces{42}; } + +template +void f(RANGE r) { + for (char c : r) { + } +}