[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