[Lldb-commits] [lldb] r330450 - Fix a crash when resolving overloads of C++ virtual methods.
Adrian Prantl via lldb-commits
lldb-commits at lists.llvm.org
Fri Apr 20 10:14:05 PDT 2018
Author: adrian
Date: Fri Apr 20 10:14:05 2018
New Revision: 330450
URL: http://llvm.org/viewvc/llvm-project?rev=330450&view=rev
Log:
Fix a crash when resolving overloads of C++ virtual methods.
The isOverload() method needs to account for situations where the two
methods being compared don't have the same number of arguments.
rdar://problem/39542960
Added:
lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/virtual-overload/
lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/virtual-overload/Makefile
lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/virtual-overload/TestVirtualOverload.py
lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/virtual-overload/main.cpp
Modified:
lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
Added: lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/virtual-overload/Makefile
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/virtual-overload/Makefile?rev=330450&view=auto
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/virtual-overload/Makefile (added)
+++ lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/virtual-overload/Makefile Fri Apr 20 10:14:05 2018
@@ -0,0 +1,5 @@
+LEVEL = ../../../make
+
+CXX_SOURCES := main.cpp
+
+include $(LEVEL)/Makefile.rules
Added: lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/virtual-overload/TestVirtualOverload.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/virtual-overload/TestVirtualOverload.py?rev=330450&view=auto
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/virtual-overload/TestVirtualOverload.py (added)
+++ lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/virtual-overload/TestVirtualOverload.py Fri Apr 20 10:14:05 2018
@@ -0,0 +1,3 @@
+from lldbsuite.test import lldbinline
+
+lldbinline.MakeInlineTest(__file__, globals())
Added: lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/virtual-overload/main.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/virtual-overload/main.cpp?rev=330450&view=auto
==============================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/virtual-overload/main.cpp (added)
+++ lldb/trunk/packages/Python/lldbsuite/test/lang/cpp/virtual-overload/main.cpp Fri Apr 20 10:14:05 2018
@@ -0,0 +1,17 @@
+// Test that lldb doesn't get confused by an overload of a virtual
+// function of the same name.
+struct Base {
+ virtual void f(int i) {}
+ virtual ~Base() {}
+};
+
+struct Derived : Base {
+ virtual void f(int i, int j) {}
+};
+
+int main(int argc, char **argv) {
+ Derived obj;
+ obj.f(1, 2); //% self.expect("fr var", "not crashing", substrs = ["obj"])
+ return 0;
+}
+
Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp?rev=330450&r1=330449&r2=330450&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp Fri Apr 20 10:14:05 2018
@@ -2170,7 +2170,10 @@ static bool isOverload(clang::CXXMethodD
m2p.getUnqualifiedType());
};
- return !std::equal(m1Type->param_type_begin(), m1Type->param_type_end(),
+ // FIXME: In C++14 and later, we can just pass m2Type->param_type_end()
+ // as a fourth parameter to std::equal().
+ return (m1->getNumParams() != m2->getNumParams()) ||
+ !std::equal(m1Type->param_type_begin(), m1Type->param_type_end(),
m2Type->param_type_begin(), compareArgTypes);
}
More information about the lldb-commits
mailing list