[PATCH] D94391: CGDebugInfo: Drop Loc.isInvalid() special case from getLineNumber

Fangrui Song via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Jan 12 12:32:34 PST 2021


MaskRay added a comment.

In D94391#2493978 <https://reviews.llvm.org/D94391#2493978>, @dblaikie wrote:

> In D94391#2491229 <https://reviews.llvm.org/D94391#2491229>, @MaskRay wrote:
>
>> In D94391#2491178 <https://reviews.llvm.org/D94391#2491178>, @dblaikie wrote:
>>
>>> Any particular bug you're trying to fix? (this looks like it changes the debug locations, so it would need tests)
>>>
>>> Not necessarily clear that these are better debug locations?
>>
>> No particular bug. `CGDebugInfo::getLineNumber` returning CurLoc just looks strange. (The CurLoc may be far below (irrelevant) when getLineNumber is called.)
>>
>> This patch is hopefully NFC. Dropping `CurLoc` from `getLineNumber(RD->getLocation().isValid() ? RD->getLocation() : CurLoc)` will cause a difference, which may reveal missing `SourceLocation` information in ObjC constructs.
>
> Ah, OK. Yeah, I don't have strong feelings about this - a bit hesitant to make the change without a stronger motivation though. Perhaps other reviewers have some thoughts to contribute (also maybe @JDevlieghere ).

Using `CurLoc` in `getLineNumber` is not ideal. Trying to fix one call site reveals a probably unsatisfactory debug location for ObjC `ImplicitParamDecl`.
The location is set to the closing brace. I do not investigate further as I know nearly nothing about ObjC...

  --- a/clang/test/CodeGenObjC/debug-info-blocks.m
  +++ b/clang/test/CodeGenObjC/debug-info-blocks.m
  @@ -65,7 +65,7 @@ static void run(void (^block)(void))
         // CHECK-DAG: !DILocalVariable(arg: 2, scope: ![[COPY_SP]], {{.*}}, flags: DIFlagArtificial)
         // CHECK-DAG: !DILocalVariable(arg: 1, scope: ![[DESTROY_SP]], {{.*}}, flags: DIFlagArtificial)
         run(^{
  -          // CHECK-DAG: ![[SELF]] = !DILocalVariable(name: "self", scope:{{.*}}, line: [[@LINE+4]],
  +          // CHECK-DAG: ![[SELF]] = !DILocalVariable(name: "self", scope:{{.*}}, line: [[@LINE-7]],
             // CHECK-DAG: ![[D]] = !DILocalVariable(name: "d", scope:{{.*}}, line: [[@LINE+1]],
             NSMutableDictionary *d = [[NSMutableDictionary alloc] init]; 
             ivar = 42 + (int)[d count];


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D94391/new/

https://reviews.llvm.org/D94391



More information about the cfe-commits mailing list