summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorAlexey Samsonov <vonosmas@gmail.com>2014-08-28 23:17:55 +0000
committerAlexey Samsonov <vonosmas@gmail.com>2014-08-28 23:17:55 +0000
commit1cf6af652fbfffd6f1244225b64d393cb3caf1ce (patch)
tree0c7fab672ea73d91d0e55bb78efa900c1062678f /clang
parent5afc294ba4884f8c7e2bf4bea0da454f4ff0b75b (diff)
downloadbcm5719-llvm-1cf6af652fbfffd6f1244225b64d393cb3caf1ce.tar.gz
bcm5719-llvm-1cf6af652fbfffd6f1244225b64d393cb3caf1ce.zip
Don't load ill-formed AmbiguityKind in Sema::Lookup.
This bug was reported by UBSan. llvm-svn: 216695
Diffstat (limited to 'clang')
-rw-r--r--clang/include/clang/Sema/Lookup.h8
1 files changed, 7 insertions, 1 deletions
diff --git a/clang/include/clang/Sema/Lookup.h b/clang/include/clang/Sema/Lookup.h
index 00cc164d964..e050c7ddbf1 100644
--- a/clang/include/clang/Sema/Lookup.h
+++ b/clang/include/clang/Sema/Lookup.h
@@ -424,13 +424,19 @@ public:
Paths = nullptr;
}
} else {
- AmbiguityKind SavedAK = Ambiguity;
+ AmbiguityKind SavedAK;
+ bool WasAmbiguous = false;
+ if (ResultKind == Ambiguous) {
+ SavedAK = Ambiguity;
+ WasAmbiguous = true;
+ }
ResultKind = Found;
resolveKind();
// If we didn't make the lookup unambiguous, restore the old
// ambiguity kind.
if (ResultKind == Ambiguous) {
+ assert(WasAmbiguous);
Ambiguity = SavedAK;
} else if (Paths) {
deletePaths(Paths);
OpenPOWER on IntegriCloud