1// I made this example after noting that I was unable to display an unsized
2// static class array. It turns out that gcc 4.2 will emit DWARF that correctly
3// describes the PointType, but it will incorrectly emit debug info for the
4// "g_points" array where the following things are wrong:
5// - the DW_TAG_array_type won't have a subrange info
6// - the DW_TAG_variable for "g_points" won't have a valid byte size, so even
7// though we know the size of PointType, we can't infer the actual size
8// of the array by dividing the size of the variable by the number of
9// elements.
10
11#include <stdio.h>
12
13typedef struct PointType
14{
15 int x, y;
16} PointType;
17
18class A
19{
20public:
21 static PointType g_points[];
22};
23
24// Make sure similar names don't confuse us:
25
26class AA
27{
28public:
29 static PointType g_points[];
30};
31
32PointType A::g_points[] =
33{
34 { .x: 1, .y: 2 },
35 { .x: 11, .y: 22 }
36};
37static PointType g_points[] =
38{
39 { .x: 3, .y: 4 },
40 { .x: 33, .y: 44 }
41};
42
43PointType AA::g_points[] =
44{
45 { .x: 5, .y: 6 },
46 { .x: 55, .y: 66 }
47};
48
49int
50main (int argc, char const *argv[])
51{
52 const char *hello_world = "Hello, world!";
53 printf (format: "A::g_points[1].x = %i\n", A::g_points[1].x); // Set break point at this line.
54 printf (format: "AA::g_points[1].x = %i\n", AA::g_points[1].x);
55 printf (format: "::g_points[1].x = %i\n", g_points[1].x);
56 printf (format: "%s\n", hello_world);
57 return 0;
58}
59

source code of lldb/test/API/lang/cpp/class_static/main.cpp