diff --git a/clang-tidy/bugprone/InfiniteLoopCheck.cpp b/clang-tidy/bugprone/InfiniteLoopCheck.cpp
index d48a2c0..81ae45a 100644
--- a/clang-tidy/bugprone/InfiniteLoopCheck.cpp
+++ b/clang-tidy/bugprone/InfiniteLoopCheck.cpp
@@ -24,7 +24,7 @@
                     callExpr(Internal, callee(functionDecl(isNoReturn())))));
 }
 
-/// \brief Return whether `S` is a reference to the declaration of `Var`.
+/// Return whether `S` is a reference to the declaration of `Var`.
 static bool isAccessForVar(const Stmt *S, const VarDecl *Var) {
   if (const auto *DRE = dyn_cast<DeclRefExpr>(S))
     return DRE->getDecl() == Var;
@@ -32,7 +32,7 @@
   return false;
 }
 
-/// \brief Return whether `Var` has a pointer of reference in `S`.
+/// Return whether `Var` has a pointer or reference in `S`.
 static bool isPtrOrReferenceForVar(const Stmt *S, const VarDecl *Var) {
   if (const auto *DS = dyn_cast<DeclStmt>(S)) {
     for (const Decl *D : DS->getDeclGroup()) {
@@ -50,7 +50,7 @@
   return false;
 }
 
-/// \brief Return whether `Var` has a pointer of reference in `S`.
+/// Return whether `Var` has a pointer or reference in `S`.
 static bool hasPtrOrReferenceInStmt(const Stmt *S, const VarDecl *Var) {
   if (isPtrOrReferenceForVar(S, Var))
     return true;
@@ -66,13 +66,13 @@
   return false;
 }
 
-/// \brief Return whether `Var` has a pointer of reference in `Func`.
+/// Return whether `Var` has a pointer or reference in `Func`.
 static bool hasPtrOrReferenceInFunc(const FunctionDecl *Func,
                                     const VarDecl *Var) {
   return hasPtrOrReferenceInStmt(Func->getBody(), Var);
 }
 
-/// \brief Return whether `Var` was changed in `LoopStmt`.
+/// Return whether `Var` was changed in `LoopStmt`.
 static bool isChanged(const Stmt *LoopStmt, const VarDecl *Var,
                       ASTContext *Context) {
   if (const auto *ForLoop = dyn_cast<ForStmt>(LoopStmt))
@@ -88,8 +88,7 @@
   return ExprMutationAnalyzer(*LoopStmt, *Context).isMutated(Var);
 }
 
-/// \brief Return whether `Cond` is a variable that is possibly changed in
-/// `LoopStmt`.
+/// Return whether `Cond` is a variable that is possibly changed in `LoopStmt`.
 static bool isVarThatIsPossiblyChanged(const FunctionDecl *Func,
                                        const Stmt *LoopStmt, const Stmt *Cond,
                                        ASTContext *Context) {
@@ -116,7 +115,7 @@
   return false;
 }
 
-/// \brief Return whether at least one variable of `Cond` changed in `LoopStmt`.
+/// Return whether at least one variable of `Cond` changed in `LoopStmt`.
 static bool isAtLeastOneCondVarChanged(const FunctionDecl *Func,
                                        const Stmt *LoopStmt, const Stmt *Cond,
                                        ASTContext *Context) {
@@ -133,7 +132,7 @@
   return false;
 }
 
-/// \brief Return the variable names in `Cond`.
+/// Return the variable names in `Cond`.
 static std::string getCondVarNames(const Stmt *Cond) {
   if (const auto *DRE = dyn_cast<DeclRefExpr>(Cond)) {
     if (const auto *Var = dyn_cast<VarDecl>(DRE->getDecl()))
diff --git a/docs/clang-tidy/checks/bugprone-infinite-loop.rst b/docs/clang-tidy/checks/bugprone-infinite-loop.rst
index 6307afe..89502c1 100644
--- a/docs/clang-tidy/checks/bugprone-infinite-loop.rst
+++ b/docs/clang-tidy/checks/bugprone-infinite-loop.rst
@@ -15,7 +15,7 @@
 the condition:
 
 - It is a local variable.
-- It has no reference or pointer aliases
+- It has no reference or pointer aliases.
 - It is not a structure or class member.
 
 Furthermore, the condition must not contain a function call to consider the loop
diff --git a/test/clang-tidy/bugprone-infinite-loop.cpp b/test/clang-tidy/bugprone-infinite-loop.cpp
index e6b85c1..0ff82df 100644
--- a/test/clang-tidy/bugprone-infinite-loop.cpp
+++ b/test/clang-tidy/bugprone-infinite-loop.cpp
@@ -140,6 +140,29 @@
   } while (i < Limit);
 }
 
+void escape_after1() {
+  int i = 0;
+  int j = 0;
+  int Limit = 10;
+
+  while (i < Limit) {
+    // False negative, but difficult to detect without CFG-based analysis
+  }
+  int *p = &i;
+}
+
+void escape_after2() {
+  int i = 0;
+  int j = 0;
+  int Limit = 10;
+
+  while (i < Limit) {
+    // False negative, but difficult to detect without CFG-based analysis
+  }
+  int &ii = i;
+}
+-
+
 int glob;
 
 void global1(int &x) {
