aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Tooling/Syntax/BuildTree.cpp
diff options
context:
space:
mode:
authorHaojian Wu <hokein.wu@gmail.com>2021-02-08 15:04:48 +0100
committerHaojian Wu <hokein.wu@gmail.com>2021-02-11 09:53:52 +0100
commite159a3ced4c54b539c165b1cc26424fa0b34d53e (patch)
treee3929638044d9b4f3ccbce40881f95169bfd16c9 /clang/lib/Tooling/Syntax/BuildTree.cpp
parent35a5e883906f11b63b60574d8737791448dd478f (diff)
downloadllvm-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.cpp5
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()) {