diff options
author | Haojian Wu <hokein.wu@gmail.com> | 2021-02-08 15:04:48 +0100 |
---|---|---|
committer | Haojian Wu <hokein.wu@gmail.com> | 2021-02-11 09:53:52 +0100 |
commit | e159a3ced4c54b539c165b1cc26424fa0b34d53e (patch) | |
tree | e3929638044d9b4f3ccbce40881f95169bfd16c9 /clang/lib/Tooling/Syntax/BuildTree.cpp | |
parent | 35a5e883906f11b63b60574d8737791448dd478f (diff) | |
download | llvm-e159a3ced4c54b539c165b1cc26424fa0b34d53e.zip llvm-e159a3ced4c54b539c165b1cc26424fa0b34d53e.tar.gz llvm-e159a3ced4c54b539c165b1cc26424fa0b34d53e.tar.bz2 |
[Syntax] Remove a strict valid source location assertion for TypeLoc.
The EndLoc of a type loc can be invalid for broken code.
Also extend the existing test to support error code with `error-ok`
annotation.
Differential Revision: https://reviews.llvm.org/D96261
Diffstat (limited to 'clang/lib/Tooling/Syntax/BuildTree.cpp')
-rw-r--r-- | clang/lib/Tooling/Syntax/BuildTree.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/clang/lib/Tooling/Syntax/BuildTree.cpp b/clang/lib/Tooling/Syntax/BuildTree.cpp index 62573b6..a5cb293 100644 --- a/clang/lib/Tooling/Syntax/BuildTree.cpp +++ b/clang/lib/Tooling/Syntax/BuildTree.cpp @@ -294,11 +294,12 @@ static SourceRange getDeclaratorRange(const SourceManager &SM, TypeLoc T, SourceRange Initializer) { SourceLocation Start = GetStartLoc().Visit(T); SourceLocation End = T.getEndLoc(); - assert(End.isValid()); if (Name.isValid()) { if (Start.isInvalid()) Start = Name; - if (SM.isBeforeInTranslationUnit(End, Name)) + // End of TypeLoc could be invalid if the type is invalid, fallback to the + // NameLoc. + if (End.isInvalid() || SM.isBeforeInTranslationUnit(End, Name)) End = Name; } if (Initializer.isValid()) { |