Index: lldb/packages/Python/lldbsuite/test/commands/expression/call-overridden-method/TestCallOverriddenMethod.py =================================================================== --- lldb/packages/Python/lldbsuite/test/commands/expression/call-overridden-method/TestCallOverriddenMethod.py +++ lldb/packages/Python/lldbsuite/test/commands/expression/call-overridden-method/TestCallOverriddenMethod.py @@ -49,3 +49,7 @@ # Test calling the base class. self.expect("expr realbase.foo()", substrs=["1"]) + + # Test with locally constructed instances. + self.expect("expr Base().foo()", substrs=["1"]) + self.expect("expr Derived().foo()", substrs=["2"]) Index: lldb/packages/Python/lldbsuite/test/commands/expression/call-overridden-method/main.cpp =================================================================== --- lldb/packages/Python/lldbsuite/test/commands/expression/call-overridden-method/main.cpp +++ lldb/packages/Python/lldbsuite/test/commands/expression/call-overridden-method/main.cpp @@ -11,6 +11,7 @@ int main() { Base realbase; + realbase.foo(); Derived d; Base *b = &d; return 0; // Set breakpoint here Index: lldb/packages/Python/lldbsuite/test/commands/expression/ignore-artificial-constructors/TestIgnoreArtificialConstructors.py =================================================================== --- /dev/null +++ lldb/packages/Python/lldbsuite/test/commands/expression/ignore-artificial-constructors/TestIgnoreArtificialConstructors.py @@ -0,0 +1,4 @@ +from lldbsuite.test import lldbinline +from lldbsuite.test import decorators + +lldbinline.MakeInlineTest(__file__, globals(), None) Index: lldb/packages/Python/lldbsuite/test/commands/expression/ignore-artificial-constructors/main.cpp =================================================================== --- /dev/null +++ lldb/packages/Python/lldbsuite/test/commands/expression/ignore-artificial-constructors/main.cpp @@ -0,0 +1,10 @@ +struct Foo { + // Triggers that we emit an artificial constructor for Foo. + virtual ~Foo() = default; +}; + +int main() { + Foo f; + // Try to construct foo in our expression. + return 0; //%self.expect("expr Foo()", substrs=["(Foo) $0 = {}"]) +} Index: lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp =================================================================== --- lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp +++ lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp @@ -1398,8 +1398,11 @@ is_attr_used, attrs.is_artificial); type_handled = cxx_method_decl != NULL; + // Artificial methods are always handled even when don't + // create a new declaration for them. + type_handled |= attrs.is_artificial; - if (type_handled) { + if (cxx_method_decl) { LinkDeclContextToDIE( ClangASTContext::GetAsDeclContext(cxx_method_decl), die);