summaryrefslogtreecommitdiffstats
path: root/clang/lib/Analysis/ThreadSafety.cpp
diff options
context:
space:
mode:
authorAaron Ballman <aaron@aaronballman.com>2018-08-24 18:48:35 +0000
committerAaron Ballman <aaron@aaronballman.com>2018-08-24 18:48:35 +0000
commit57deab77decaaa5c3d93d573b9f79885664d1aa5 (patch)
treeeb95efd951687de5724edb0f405ae45c4d5c4654 /clang/lib/Analysis/ThreadSafety.cpp
parent0f3d8e236043f71962adbaab13f73b05a38a3efc (diff)
downloadbcm5719-llvm-57deab77decaaa5c3d93d573b9f79885664d1aa5.tar.gz
bcm5719-llvm-57deab77decaaa5c3d93d573b9f79885664d1aa5.zip
Thread safety analysis no longer hands when analyzing a self-referencing initializer.
This fixes PR38640. llvm-svn: 340636
Diffstat (limited to 'clang/lib/Analysis/ThreadSafety.cpp')
-rw-r--r--clang/lib/Analysis/ThreadSafety.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/clang/lib/Analysis/ThreadSafety.cpp b/clang/lib/Analysis/ThreadSafety.cpp
index 74648dfb5eb..88b3f3c2c10 100644
--- a/clang/lib/Analysis/ThreadSafety.cpp
+++ b/clang/lib/Analysis/ThreadSafety.cpp
@@ -1656,6 +1656,9 @@ void BuildLockset::checkAccess(const Expr *Exp, AccessKind AK,
const auto *VD = dyn_cast<VarDecl>(DRE->getDecl()->getCanonicalDecl());
if (VD && VD->isLocalVarDecl() && VD->getType()->isReferenceType()) {
if (const auto *E = VD->getInit()) {
+ // Guard against self-initialization. e.g., int &i = i;
+ if (E == Exp)
+ break;
Exp = E;
continue;
}
OpenPOWER on IntegriCloud