Author: Luke Petre Date: 2021-10-26T14:03:29-04:00 New Revision: a9db0a804a5335b6534995c54ab9d6fcef06e739
URL: https://github.com/llvm/llvm-project/commit/a9db0a804a5335b6534995c54ab9d6fcef06e739 DIFF: https://github.com/llvm/llvm-project/commit/a9db0a804a5335b6534995c54ab9d6fcef06e739.diff LOG: [AST] Fix the EndLoc calculation for ObjCObjectPointer There is an issue where the AST code does not compute the correct SourceRange for a ObjCObjectPointer. >From Richard Smith (ie @zygoloid) in discord: I think the problem is that we set an invalid location for the * (because there isn't one): https://github.com/llvm/llvm-project/blob/main/clang/lib/Sema/SemaType.cpp#L1121 And then we use the default getLocalSourceRangeImpl for a PointerLikeTypeLoc that just assumes the * location is the type's end location: https://github.com/llvm/llvm-project/blob/main/clang/include/clang/AST/TypeLoc.h#L1293 Possibly we should be special-casing that here: https://github.com/llvm/llvm-project/blob/main/clang/lib/AST/TypeLoc.cpp#L228 My change: introduces a AST dump test to show the issue in the first commit special cases ObjCObjectPointerType in the second commit to correctly compute the end location Added: Modified: clang/lib/AST/TypeLoc.cpp clang/test/AST/ast-dump-decl.mm Removed: ################################################################################ diff --git a/clang/lib/AST/TypeLoc.cpp b/clang/lib/AST/TypeLoc.cpp index e943c873f1fad..712fcac26c95c 100644 --- a/clang/lib/AST/TypeLoc.cpp +++ b/clang/lib/AST/TypeLoc.cpp @@ -257,6 +257,7 @@ SourceLocation TypeLoc::getEndLoc() const { if (!Last) Last = Cur; break; + case ObjCObjectPointer: case Qualified: case Elaborated: break; diff --git a/clang/test/AST/ast-dump-decl.mm b/clang/test/AST/ast-dump-decl.mm index 7dc60e198aaaa..26756722bfdd8 100644 --- a/clang/test/AST/ast-dump-decl.mm +++ b/clang/test/AST/ast-dump-decl.mm @@ -55,4 +55,11 @@ void f() { // CHECK-NEXT: CXXThisExpr {{.*}} <col:8> 'Test *' this } void yada(); + // CHECK: CXXMethodDecl {{.*}} <line:[[@LINE-1]]:3, col:13> col:8 used yada 'void ()' }; + +@protocol P +@end; + +using TestAlias = id<P>; +// CHECK: TypeAliasDecl {{.+}} <{{.+}}:[[@LINE-1]]:1, col:23> col:7 TestAlias 'id<P>' _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits