[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.

Greg Clayton gclayton at apple.com
Mon Sep 16 15:16:22 PDT 2013


I believe 190811 just fixed this. Please let me know your results!

On Sep 16, 2013, at 12:12 PM, Malea, Daniel <daniel.malea at intel.com> wrote:

> 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