diff options
| author | Alexey Samsonov <vonosmas@gmail.com> | 2014-08-28 23:17:55 +0000 |
|---|---|---|
| committer | Alexey Samsonov <vonosmas@gmail.com> | 2014-08-28 23:17:55 +0000 |
| commit | 1cf6af652fbfffd6f1244225b64d393cb3caf1ce (patch) | |
| tree | 0c7fab672ea73d91d0e55bb78efa900c1062678f /clang | |
| parent | 5afc294ba4884f8c7e2bf4bea0da454f4ff0b75b (diff) | |
| download | bcm5719-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.h | 8 |
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); |

