Files
clang-p2996/lldb/test/API/functionalities/data-formatter/data-formatter-cpp/main.cpp
Michael Buch b642fd5ee2 [lldb][TypeSystemClang] Format pointers to member functions as eFormatHex
Before this patch, LLDB used to format pointers to members, such as,
```
void (Foo::*pointer_to_member_func)() = &Foo::member_func;
```
as `eFormatBytes`. E.g.,
```
(lldb) v pointer_to_member_func
(void (Foo::*)()) $1 = 94 3f 00 00 01 00 00 00 00 00 00 00 00 00 00 00
```

This patch makes sure we format pointers to member functions the same
way we do regular function pointers.

After this patch we format member pointers as:
```
(lldb) v pointer_to_member_func
(void (Foo::*)()) ::pointer_to_member_func = 0x00000000000000000000000100003f94
```

Differential Revision: https://reviews.llvm.org/D145241
2023-03-03 17:44:36 +00:00

120 lines
2.9 KiB
C++

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
typedef float RealNumber; // should show as char
typedef RealNumber Temperature; // should show as float
typedef RealNumber Speed; // should show as hex
typedef int Counter; // should show as int
typedef int BitField; // should show as hex
typedef BitField SignalMask; // should show as hex
typedef BitField Modifiers; // should show as hex
typedef Counter Accumulator; // should show as int
typedef int Type1; // should show as char
typedef Type1 Type2; // should show as hex
typedef Type2 Type3; // should show as char
typedef Type3 Type4; // should show as char
typedef int ChildType; // should show as int
typedef int AnotherChildType; // should show as int
struct TestPoint {
int x;
int y;
TestPoint(int X = 3, int Y = 2) : x(X), y(Y) {}
};
typedef float ShowMyGuts;
struct i_am_cool
{
int integer;
ShowMyGuts floating;
char character;
i_am_cool(int I, ShowMyGuts F, char C) :
integer(I), floating(F), character(C) {}
i_am_cool() : integer(1), floating(2), character('3') {}
};
struct i_am_cooler
{
i_am_cool first_cool;
i_am_cool second_cool;
ShowMyGuts floating;
i_am_cooler(int I1, int I2, float F1, float F2, char C1, char C2) :
first_cool(I1,F1,C1),
second_cool(I2,F2,C2),
floating((F1 + F2)/2) {}
};
struct IUseCharStar
{
const char* pointer;
IUseCharStar() : pointer("Hello world") {}
char const *member_func(int) { return ""; }
};
int main (int argc, const char * argv[])
{
int iAmInt = 1;
const float& IAmFloat = float(2.45);
RealNumber RNILookChar = 3.14;
Temperature TMILookFloat = 4.97;
Speed SPILookHex = 5.55;
Counter CTILookInt = 6;
BitField BFILookHex = 7;
SignalMask SMILookHex = 8;
Modifiers MFILookHex = 9;
Accumulator* ACILookInt = new Accumulator(10);
const Type1& T1ILookChar = 11;
Type2 T2ILookHex = 12;
Type3 T3ILookChar = 13;
Type4 T4ILookChar = 14;
AnotherChildType AHILookInt = 15;
Speed* SPPtrILookHex = new Speed(16);
TestPoint iAmSomewhere(4,6);
i_am_cool *cool_pointer = (i_am_cool*)malloc(sizeof(i_am_cool)*3);
cool_pointer[0] = i_am_cool(3,-3.141592,'E');
cool_pointer[1] = i_am_cool(0,-3.141592,'E');
cool_pointer[2] = i_am_cool(0,-3.141592,'E');
i_am_cool cool_array[5];
cool_array[3].floating = 5.25;
cool_array[4].integer = 6;
cool_array[2].character = 'Q';
int int_array[] = {1,2,3,4,5};
IUseCharStar iEncapsulateCharStar;
char strarr[32] = "Hello world!";
char* strptr = "Hello world!";
i_am_cooler the_coolest_guy(1,2,3.14,6.28,'E','G');
const char *IUseCharStar::*member_ptr = &IUseCharStar::pointer;
const char *(IUseCharStar::*member_func_ptr)(int) =
&IUseCharStar::member_func;
auto &ref_to_member_func_ptr = member_func_ptr;
return 0; // Set break point at this line.
}