[PATCH] D80508: [AST] Fix the source range for TagDecl if there is no matched } brace.
Sam McCall via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu May 28 03:13:02 PDT 2020
sammccall added a comment.
Argh I never submitted these comments, sorry.
================
Comment at: clang/lib/AST/Decl.cpp:4129
SourceRange TagDecl::getSourceRange() const {
- SourceLocation RBraceLoc = BraceRange.getEnd();
- SourceLocation E = RBraceLoc.isValid() ? RBraceLoc : getLocation();
+ SourceLocation E = BraceRange.getBegin().isValid() ?
+ BraceRange.getEnd() : getLocation();
----------------
I'm confused about this change.
We were using BR.end if it was valid, now we're using it if BR.start is valid. So this changes behavior in two cases:
- BR.start is valid, BR.end is invalid: old was {getOuterLocStart(), getLocation()}. new is {getOuterLocStart(), invalid}
- BR.end is valid, BR.start is invalid: old was {getOuterLocStart(), BraceRange.getEnd()}. new is {getOuterLocStart(), getLocation()}
These both seem worse to me, what am I missing?
Patch description refers to the first case, I wonder if this is just a bug in clangd cancelling out a bad AST (does it just mark tokens until EOF if the end location is invalid?)
================
Comment at: clang/test/AST/ast-dump-invalid-brace.cpp:6
+ int abc;
+// }
----------------
or `// missing: }`
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D80508/new/
https://reviews.llvm.org/D80508
More information about the cfe-commits
mailing list