[Lldb-commits] [lldb] r157220 - in /lldb/trunk: source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp test/lang/cpp/rvalue-references/ test/lang/cpp/rvalue-references/Makefile test/lang/cpp/rvalue-references/TestRvalueReferences.py test/lang/cpp/rvalue-references/main.cpp

Sean Callanan scallanan at apple.com
Mon May 21 16:31:52 PDT 2012


Author: spyffe
Date: Mon May 21 18:31:51 2012
New Revision: 157220

URL: http://llvm.org/viewvc/llvm-project?rev=157220&view=rev
Log:
Added support for rvalue references in debug information
(actually, mainly just hooked up support that was already
there).  Added a test case, although it's expected to fail
right now unless you're using top-of-tree LLVM.

Added:
    lldb/trunk/test/lang/cpp/rvalue-references/
    lldb/trunk/test/lang/cpp/rvalue-references/Makefile
    lldb/trunk/test/lang/cpp/rvalue-references/TestRvalueReferences.py
    lldb/trunk/test/lang/cpp/rvalue-references/main.cpp
Modified:
    lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp

Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp?rev=157220&r1=157219&r2=157220&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp Mon May 21 18:31:51 2012
@@ -5091,6 +5091,7 @@
             case DW_TAG_base_type:
             case DW_TAG_pointer_type:
             case DW_TAG_reference_type:
+            case DW_TAG_rvalue_reference_type:
             case DW_TAG_typedef:
             case DW_TAG_const_type:
             case DW_TAG_restrict_type:
@@ -5165,12 +5166,13 @@
                                                                                    byte_size * 8);
                         break;
 
-                    case DW_TAG_pointer_type:   encoding_data_type = Type::eEncodingIsPointerUID;           break;
-                    case DW_TAG_reference_type: encoding_data_type = Type::eEncodingIsLValueReferenceUID;   break;
-                    case DW_TAG_typedef:        encoding_data_type = Type::eEncodingIsTypedefUID;           break;
-                    case DW_TAG_const_type:     encoding_data_type = Type::eEncodingIsConstUID;             break;
-                    case DW_TAG_restrict_type:  encoding_data_type = Type::eEncodingIsRestrictUID;          break;
-                    case DW_TAG_volatile_type:  encoding_data_type = Type::eEncodingIsVolatileUID;          break;
+                    case DW_TAG_pointer_type:           encoding_data_type = Type::eEncodingIsPointerUID;           break;
+                    case DW_TAG_reference_type:         encoding_data_type = Type::eEncodingIsLValueReferenceUID;   break;
+                    case DW_TAG_rvalue_reference_type:  encoding_data_type = Type::eEncodingIsRValueReferenceUID;   break;
+                    case DW_TAG_typedef:                encoding_data_type = Type::eEncodingIsTypedefUID;           break;
+                    case DW_TAG_const_type:             encoding_data_type = Type::eEncodingIsConstUID;             break;
+                    case DW_TAG_restrict_type:          encoding_data_type = Type::eEncodingIsRestrictUID;          break;
+                    case DW_TAG_volatile_type:          encoding_data_type = Type::eEncodingIsVolatileUID;          break;
                     }
 
                     if (clang_type == NULL && (encoding_data_type == Type::eEncodingIsPointerUID || encoding_data_type == Type::eEncodingIsTypedefUID))

Added: lldb/trunk/test/lang/cpp/rvalue-references/Makefile
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/lang/cpp/rvalue-references/Makefile?rev=157220&view=auto
==============================================================================
--- lldb/trunk/test/lang/cpp/rvalue-references/Makefile (added)
+++ lldb/trunk/test/lang/cpp/rvalue-references/Makefile Mon May 21 18:31:51 2012
@@ -0,0 +1,7 @@
+LEVEL = ../../../make
+
+CXX_SOURCES := main.cpp
+
+CXXFLAGS = -std=c++11
+
+include $(LEVEL)/Makefile.rules

Added: lldb/trunk/test/lang/cpp/rvalue-references/TestRvalueReferences.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/lang/cpp/rvalue-references/TestRvalueReferences.py?rev=157220&view=auto
==============================================================================
--- lldb/trunk/test/lang/cpp/rvalue-references/TestRvalueReferences.py (added)
+++ lldb/trunk/test/lang/cpp/rvalue-references/TestRvalueReferences.py Mon May 21 18:31:51 2012
@@ -0,0 +1,65 @@
+"""
+Tests that rvalue references are supported in C++
+"""
+
+from lldbtest import *
+
+class CPPThisTestCase(TestBase):
+    
+    mydir = os.path.join("lang", "cpp", "rvalue-references")
+    
+    @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin")
+    #rdar://problem/11479676
+    @expectedFailureClang
+    @dsym_test
+    def test_with_dsym_and_run_command(self):
+        """Test that rvalues are supported in the C++ expression parser"""
+        self.buildDsym()
+        self.static_method_commands()
+
+    #rdar://problem/11479676
+    @expectedFailureClang
+    @dwarf_test
+    def test_with_dwarf_and_run_command(self):
+        """Test that rvalues are supported in the C++ expression parser"""
+        self.buildDwarf()
+        self.static_method_commands()
+
+    def setUp(self):
+        TestBase.setUp(self)
+    
+    def set_breakpoint(self, line):
+        self.expect("breakpoint set -f main.cpp -l %d" % line,
+                    BREAKPOINT_CREATED,
+                    startstr = "Breakpoint created")
+    
+    def static_method_commands(self):
+        """Test that rvalues are supported in the C++ expression parser"""
+        self.runCmd("file a.out", CURRENT_EXECUTABLE_SET)
+
+        self.set_breakpoint(line_number('main.cpp', '// breakpoint 1'))
+        self.set_breakpoint(line_number('main.cpp', '// breakpoint 2'))
+
+        self.runCmd("process launch", RUN_SUCCEEDED)
+
+        self.expect("expression -- i",
+                    startstr = "(int &&) $0 =",
+                    substrs = ["3"])
+
+        self.expect("breakpoint delete 1")
+
+        self.runCmd("process continue")
+        
+        self.expect("expression -- foo(2)")
+
+        self.expect("expression -- int &&j = 3; foo(j)",
+                    error = True)
+
+        self.expect("expression -- int &&k = 6; k",
+                    startstr = "(int) $1 = 6")
+        
+if __name__ == '__main__':
+    import atexit
+    lldb.SBDebugger.Initialize()
+    atexit.register(lambda: lldb.SBDebugger.Terminate())
+    unittest2.main()

Added: lldb/trunk/test/lang/cpp/rvalue-references/main.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/lang/cpp/rvalue-references/main.cpp?rev=157220&view=auto
==============================================================================
--- lldb/trunk/test/lang/cpp/rvalue-references/main.cpp (added)
+++ lldb/trunk/test/lang/cpp/rvalue-references/main.cpp Mon May 21 18:31:51 2012
@@ -0,0 +1,12 @@
+#include <stdio.h>
+
+void foo (int &&i)
+{
+  printf("%d\n", i); // breakpoint 1
+}
+
+int main()
+{
+  foo(3);
+  return 0; // breakpoint 2
+}





More information about the lldb-commits mailing list