CarlosAlbertoEnciso added a comment.

Hi Tamas,

Thanks very much for your message.

In https://reviews.llvm.org/D39239#910797, @tberghammer wrote:

> - Can you do a diff of the debug_info dump before and after your change? 
> Understanding what have changed should give us a pretty good clue about the 
> issue.


For this specific case, the debug_info is the same before and after my change, 
as the patch affects only unscoped enums.

  DW_TAG_compile_unit "main.cpp"
    DW_AT_producer "clang version 6.0.0 (trunk 316983)"
    DW_AT_comp_dir 
"/home/carlos/llvm-root/llvm/tools/lldb/packages/Python/lldbsuite/test/lang/cpp/template"
    ...
    DW_TAG_enumeration_type "EnumType"
      DW_AT_enum_class DW_FORM_flag_present
      DW_TAG_enumerator "Member"
      DW_TAG_enumerator "Subclass"
      ...
    DW_TAG_class_type "EnumTemplate<EnumType::Member>"
      ...
    DW_TAG_class_type "EnumTemplate<EnumType::Subclass>"
      ...

The DW_AT_name string for the templates are correctly generated, including the 
scoped information.

> - My first guess is that after your change we emit DW_TAG_enumeration_type 
> for scoped enums (what seems to be the correct thing to do) instead of 
> something else (not sure what) and you have to update 
> https://github.com/llvm-mirror/lldb/blob/master/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp#L1512
>  to handle it correctly.

Thanks for the link.

Looking at:
https://github.com/llvm-mirror/lldb/blob/master/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp#L1512

  const char *DWARFDebugInfoEntry::GetQualifiedName(
      SymbolFileDWARF *dwarf2Data, DWARFCompileUnit *cu,
      const DWARFAttributes &attributes, std::string &storage) const {
  
    const char *name = GetName(dwarf2Data, cu);
    ...
    return storage.c_str();
  }

The values for 'name' and 'storage' are correct and include the full qualified 
name: 'EnumTemplate<EnumType::Member>'.

https://github.com/llvm-mirror/lldb/blob/master/source/Plugins/SymbolFile/DWARF/DWARFASTParserClang.cpp#L926

During the processing of DW_TAG_enumeration_type, it seems that 
'DW_AT_enum_class' is not processed.

  DW_TAG_enumeration_type "EnumType"
    ...
    DW_AT_enum_class DW_FORM_flag_present  
    ...
    DW_TAG_enumerator "Member"
    DW_TAG_enumerator "Subclass"

which at the end can have an impact on the name generated for the enumerators 
to be:

"EnumTemplate<EnumType::Member>"

or

"EnumTemplate<Member>"

Thanks.


https://reviews.llvm.org/D39239



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to