[llvm-bugs] [Bug 27567] New: Member expressions have wrong debug column information

via llvm-bugs llvm-bugs at lists.llvm.org
Thu Apr 28 18:54:01 PDT 2016


https://llvm.org/bugs/show_bug.cgi?id=27567

            Bug ID: 27567
           Summary: Member expressions have wrong debug column information
           Product: clang
           Version: unspecified
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: LLVM Codegen
          Assignee: unassignedclangbugs at nondot.org
          Reporter: hfinkel at anl.gov
                CC: llvm-bugs at lists.llvm.org
    Classification: Unclassified

Consider the following:
$ cat -n /tmp/i.cpp 
     1    void ext();
     2    
     3    struct Bar {
     4      void bar() { ext(); }
     5    };
     6    
     7    struct Foo {
     8      Bar *b;
     9    
    10      Bar *foo() { return b; }
    11    };
    12    
    13    void test(Foo *f) {
    14      f->foo()->bar();
    15    }
    16    

Running:

$ clang -g /tmp/i.cpp -S -emit-llvm -o - 
we see...

define void @_Z4testP3Foo(%struct.Foo* %f) #0 !dbg !6 {
  ...
  %call = call %struct.Bar* @_ZN3Foo3fooEv(%struct.Foo* %0), !dbg !27
  call void @_ZN3Bar3barEv(%struct.Bar* %call), !dbg !28
  ...
!27 = !DILocation(line: 14, column: 3, scope: !6)
!28 = !DILocation(line: 14, column: 3, scope: !29)

so the two call instructions both point to the 'f' in 'f->foo()->bar()', not to
the calls to 'foo()' and 'bar()' themselves.

Running:

$ clang -g /tmp/i.cpp -S -emit-llvm -o - -Xclang -ast-dump
we see...

`-FunctionDecl 0x5ce7cd0 <line:13:1, line:15:1> line:13:6 test 'void (struct
Foo *)'
  |-ParmVarDecl 0x5ce7c08 <col:11, col:16> col:16 used f 'struct Foo *'
  `-CompoundStmt 0x5ce7e80 <col:19, line:15:1>
    `-CXXMemberCallExpr 0x5ce7e58 <line:14:3, col:17> 'void'
      `-MemberExpr 0x5ce7e20 <col:3, col:13> '<bound member function type>'
->bar 0x5ce7640
        `-CXXMemberCallExpr 0x5ce7df8 <col:3, col:10> 'struct Bar *'
          `-MemberExpr 0x5ce7dc0 <col:3, col:6> '<bound member function type>'
->foo 0x5ce7a80
            `-ImplicitCastExpr 0x5ce7da8 <col:3> 'struct Foo *'
<LValueToRValue>
              `-DeclRefExpr 0x5ce7d80 <col:3> 'struct Foo *' lvalue ParmVar
0x5ce7c08 'f' 'struct Foo *'

So the correct column numbers, 6 and 13, are the second location in the
MemberExpr nodes, not the first. Those second locations should end up in the
debug info.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20160429/091797b7/attachment.html>


More information about the llvm-bugs mailing list