[Lldb-commits] [lldb] r188124 - Fixed a case where GCC was emitting a DW_TAG_class_type that has a DW_AT_declaration set to true, yet the class actually contains a definition for the class in that DIE.
Malea, Daniel
daniel.malea at intel.com
Mon Sep 16 12:12:01 PDT 2013
Hi Greg,
This commit seems to introduce a few errors on the buildbots in the following tests:
- TestDynamicValue
- TestVirtual
http://lab.llvm.org:8011/builders/lldb-x86_64-linux/builds/6709
When you have a moment, can you take a look?
Thanks,
Dan
-----Original Message-----
From: lldb-commits-bounces at cs.uiuc.edu [mailto:lldb-commits-bounces at cs.uiuc.edu] On Behalf Of Greg Clayton
Sent: Friday, August 9, 2013 8:10 PM
To: lldb-commits at cs.uiuc.edu
Subject: [Lldb-commits] [lldb] r188124 - Fixed a case where GCC was emitting a DW_TAG_class_type that has a DW_AT_declaration set to true, yet the class actually contains a definition for the class in that DIE.
Author: gclayton
Date: Fri Aug 9 19:09:35 2013
New Revision: 188124
URL: http://llvm.org/viewvc/llvm-project?rev=188124&view=rev
Log:
Fixed a case where GCC was emitting a DW_TAG_class_type that has a DW_AT_declaration set to true, yet the class actually contains a definition for the class in that DIE.
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=188124&r1=188123&r2=188124&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp Fri Aug 9 19:09:35 2013
@@ -6193,6 +6193,30 @@ SymbolFileDWARF::ParseType (const Symbol
GetUniqueDWARFASTTypeMap().Insert (type_name_const_str,
unique_ast_entry);
+ if (is_forward_declaration && die->HasChildren())
+ {
+ // Check to see if the DIE actually has a definition, some version of GCC will
+ // emit DIEs with DW_AT_declaration set to true, but yet still have subprogram,
+ // members, or inheritance, so we can't trust it
+ const DWARFDebugInfoEntry *child_die = die->GetFirstChild();
+ while (child_die)
+ {
+ switch (child_die->Tag())
+ {
+ case DW_TAG_inheritance:
+ case DW_TAG_subprogram:
+ case DW_TAG_member:
+ case DW_TAG_APPLE_property:
+ child_die = NULL;
+ is_forward_declaration = false;
+ break;
+ default:
+ child_die = child_die->GetSibling();
+ break;
+ }
+ }
+ }
+
if (!is_forward_declaration)
{
// Always start the definition for a class type so that
_______________________________________________
lldb-commits mailing list
lldb-commits at cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits
More information about the lldb-commits
mailing list