[Lldb-commits] [lldb] r113730 - in /lldb/trunk/test/class_static: ./ Makefile main.cpp

Greg Clayton gclayton at apple.com
Sun Sep 12 17:50:27 PDT 2010


Author: gclayton
Date: Sun Sep 12 19:50:27 2010
New Revision: 113730

URL: http://llvm.org/viewvc/llvm-project?rev=113730&view=rev
Log:
I made this example after noting that I was unable to display an unsized
static class array. It turns out that gcc 4.2 will emit DWARF that correctly
describes the PointType, but it will incorrectly emit debug info for the
"g_points" array where the following things are wrong:
 - the DW_TAG_array_type won't have a subrange info
 - the DW_TAG_variable for "g_points" won't have a valid byte size, so even
   though we know the size of PointType, we can't infer the actual size
   of the array by dividing the size of the variable by the number of
   elements.

We want to make sure clang and llvm-gcc handle this correctly.


Added:
    lldb/trunk/test/class_static/
    lldb/trunk/test/class_static/Makefile
    lldb/trunk/test/class_static/main.cpp

Added: lldb/trunk/test/class_static/Makefile
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/class_static/Makefile?rev=113730&view=auto
==============================================================================
--- lldb/trunk/test/class_static/Makefile (added)
+++ lldb/trunk/test/class_static/Makefile Sun Sep 12 19:50:27 2010
@@ -0,0 +1,5 @@
+LEVEL = ../make
+
+CXX_SOURCES := main.cpp
+
+include $(LEVEL)/Makefile.rules

Added: lldb/trunk/test/class_static/main.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/class_static/main.cpp?rev=113730&view=auto
==============================================================================
--- lldb/trunk/test/class_static/main.cpp (added)
+++ lldb/trunk/test/class_static/main.cpp Sun Sep 12 19:50:27 2010
@@ -0,0 +1,44 @@
+//===-- main.cpp ------------------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// I made this example after noting that I was unable to display an unsized
+// static class array. It turns out that gcc 4.2 will emit DWARF that correctly
+// describes the PointType, but it will incorrectly emit debug info for the
+// "g_points" array where the following things are wrong:
+//  - the DW_TAG_array_type won't have a subrange info
+//  - the DW_TAG_variable for "g_points" won't have a valid byte size, so even
+//    though we know the size of PointType, we can't infer the actual size
+//    of the array by dividing the size of the variable by the number of
+//    elements.
+
+#include <stdio.h>
+
+typedef struct PointType
+{
+    int x, y;
+} PointType;
+
+class A
+{
+public:
+    static PointType g_points[];
+};
+
+PointType A::g_points[] = 
+{
+    {    1,    2 },
+    {   11,   22 }
+};
+
+int
+main ()
+{
+    printf ("A::g_points[2].x = %i\n", A::g_points[2].x);
+    return 0;
+}





More information about the lldb-commits mailing list