Skip to content

[lldb] std::unordered_map const pointer presentation is different from non-const pointer #146040

Open
@nd-work

Description

@nd-work

This is similar to #145847 but for pointers.

To reproduce, debug the program:

#include <unordered_map>

int main() {
  std::unordered_map<int, int> m;
  m[1] = 2;
  std::unordered_map<int, int> *ptr = &m;
  const std::unordered_map<int, int> *const_ptr = &m;
  return 0; //break
}

Once the breakpoint is reached print ptr and const_ptr.

Expected: they are shown in the same way.

Actual: they are shown differently:

> lldb a.out
(lldb) target create "a.out"
Current executable set to '/path/to/a.out' (arm64).
(lldb) version
lldb version 21.0.0git ([email protected]:llvm/llvm-project.git revision 8f71650baaeec599aae9443fbe2c3cd6b5611844)
  clang revision 8f71650baaeec599aae9443fbe2c3cd6b5611844
  llvm revision 8f71650baaeec599aae9443fbe2c3cd6b5611844
(lldb) b main.cpp:8
Breakpoint 1: where = a.out`main + 88 at main.cpp:8:3, address = 0x0000000100000540
(lldb) run
Process 40225 launched: '/path/to/a.out' (arm64)
Process 40225 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
    frame #0: 0x0000000100000540 a.out`main at main.cpp:8:3
   5   	  m[1] = 2;
   6   	  std::unordered_map<int, int> *ptr = &m;
   7   	  const std::unordered_map<int, int> *const_ptr = &m;
-> 8   	  return 0; //break
   9   	}
(lldb) frame var ptr -P 1
(std::unordered_map<int, int> *) ptr = 0x000000016fdff040 size=1 {
  [0] = (first = 1, second = 2)
}
(lldb) frame var const_ptr -P 1
(const std::unordered_map<int, int> *) const_ptr = 0x000000016fdff040 size=1 {
  [0] = {
    __cc_ = (first = 1, second = 2)
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions