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
  • [PATCH] D112101: ... Luke Petre via Phabricator via cfe-commits

Reply via email to