diff --git a/clang/lib/StaticAnalyzer/Core/LoopUnrolling.cpp b/clang/lib/StaticAnalyzer/Core/LoopUnrolling.cpp --- a/clang/lib/StaticAnalyzer/Core/LoopUnrolling.cpp +++ b/clang/lib/StaticAnalyzer/Core/LoopUnrolling.cpp @@ -160,8 +160,8 @@ } static bool isPossiblyEscaped(const VarDecl *VD, ExplodedNode *N) { - // Global variables assumed as escaped variables. - if (VD->hasGlobalStorage()) + // Global variables and parameters assumed as escaped variables. + if (VD->hasGlobalStorage() || VD->getKind() == Decl::ParmVar) return true; while (!N->pred_empty()) { diff --git a/clang/test/Analysis/loop-unrolling.cpp b/clang/test/Analysis/loop-unrolling.cpp --- a/clang/test/Analysis/loop-unrolling.cpp +++ b/clang/test/Analysis/loop-unrolling.cpp @@ -499,3 +499,9 @@ clang_analyzer_numTimesReached(); // expected-warning {{6}} } } + +void arg_as_loop_counter(int i) { + for (i = 0; i < 10; ++i) { + (void)i; + } +}