lpetre created this revision. lpetre updated this revision to Diff 381958. lpetre added a comment. lpetre updated this revision to Diff 381960. lpetre retitled this revision from "Fix the EndLoc calculation for ObjCObjectPointer" to "[AST] Fix the EndLoc calculation for ObjCObjectPointer". lpetre edited the summary of this revision. lpetre added a reviewer: rsmith. lpetre added a project: clang. lpetre published this revision for review. Herald added a subscriber: cfe-commits.
Updating diff with full commit range My initial arc diff only picked up the final commit, now running for all commits lpetre added a comment. Trying again to include both commits 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 Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D112101 Files: clang/lib/AST/TypeLoc.cpp clang/test/AST/ast-dump-decl.mm Index: clang/test/AST/ast-dump-decl.mm =================================================================== --- clang/test/AST/ast-dump-decl.mm +++ clang/test/AST/ast-dump-decl.mm @@ -55,4 +55,11 @@ // 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>' Index: clang/lib/AST/TypeLoc.cpp =================================================================== --- clang/lib/AST/TypeLoc.cpp +++ clang/lib/AST/TypeLoc.cpp @@ -257,6 +257,7 @@ if (!Last) Last = Cur; break; + case ObjCObjectPointer: case Qualified: case Elaborated: break;
Index: clang/test/AST/ast-dump-decl.mm =================================================================== --- clang/test/AST/ast-dump-decl.mm +++ clang/test/AST/ast-dump-decl.mm @@ -55,4 +55,11 @@ // 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>' Index: clang/lib/AST/TypeLoc.cpp =================================================================== --- clang/lib/AST/TypeLoc.cpp +++ clang/lib/AST/TypeLoc.cpp @@ -257,6 +257,7 @@ if (!Last) Last = Cur; break; + case ObjCObjectPointer: case Qualified: case Elaborated: break;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits