[PATCH] D67803: [lldb] Fix that importing decls in a TagDecl end up in wrong declaration context (partly reverts D61333)
Raphael Isemann via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 23 00:26:33 PDT 2019
This revision was automatically updated to reflect the committed changes.
Closed by commit rL372549: [lldb] Fix that importing decls in a TagDecl end up in wrong declaration… (authored by teemperor, committed by ).
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
Changed prior to commit:
https://reviews.llvm.org/D67803?vs=220956&id=221258#toc
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D67803/new/
https://reviews.llvm.org/D67803
Files:
lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/map/TestDataFormatterLibccMap.py
lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp
Index: lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp
===================================================================
--- lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp
+++ lldb/trunk/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp
@@ -650,6 +650,20 @@
m_ast_importer_sp->RequireCompleteType(copied_field_type);
}
+ auto decl_context_non_const = const_cast<DeclContext *>(decl_context);
+
+ // The decl ended up in the wrong DeclContext. Let's fix that so
+ // the decl we copied will actually be found.
+ // FIXME: This is a horrible hack that shouldn't be necessary. However
+ // it seems our current setup sometimes fails to copy decls to the right
+ // place. See rdar://55129537.
+ if (copied_decl->getDeclContext() != decl_context) {
+ assert(copied_decl->getDeclContext()->containsDecl(copied_decl));
+ copied_decl->getDeclContext()->removeDecl(copied_decl);
+ copied_decl->setDeclContext(decl_context_non_const);
+ assert(!decl_context_non_const->containsDecl(copied_decl));
+ decl_context_non_const->addDeclInternal(copied_decl);
+ }
} else {
SkippedDecls = true;
}
Index: lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/map/TestDataFormatterLibccMap.py
===================================================================
--- lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/map/TestDataFormatterLibccMap.py
+++ lldb/trunk/packages/Python/lldbsuite/test/functionalities/data-formatter/data-formatter-stl/libcxx/map/TestDataFormatterLibccMap.py
@@ -52,13 +52,26 @@
self.addTearDownHook(cleanup)
ns = self.namespace
- self.expect('frame variable ii',
+ self.expect('p ii',
+ substrs=['%s::map' % ns,
+ 'size=0',
+ '{}'])
+ self.expect('frame var ii',
substrs=['%s::map' % ns,
'size=0',
'{}'])
lldbutil.continue_to_breakpoint(self.process(), bkpt)
+ self.expect('p ii',
+ substrs=['%s::map' % ns, 'size=2',
+ '[0] = ',
+ 'first = 0',
+ 'second = 0',
+ '[1] = ',
+ 'first = 1',
+ 'second = 1'])
+
self.expect('frame variable ii',
substrs=['%s::map' % ns, 'size=2',
'[0] = ',
@@ -81,7 +94,7 @@
lldbutil.continue_to_breakpoint(self.process(), bkpt)
- self.expect("frame variable ii",
+ self.expect("p ii",
substrs=['%s::map' % ns, 'size=8',
'[5] = ',
'first = 5',
@@ -90,7 +103,7 @@
'first = 7',
'second = 1'])
- self.expect("p ii",
+ self.expect("frame var ii",
substrs=['%s::map' % ns, 'size=8',
'[5] = ',
'first = 5',
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D67803.221258.patch
Type: text/x-patch
Size: 3319 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190923/a3ff32f3/attachment.bin>
More information about the llvm-commits
mailing list