Sometimes the debug information includes artifically-
generated special member functions (constructors,
destructors, etc.) for classes that don't really have
them. We needed to mark these as artificial to reflect
the debug information; this bug does that for
constructors and destructors.
The "etc." case (certain assignment operators, mostly)
remains to be fixed.
llvm-svn: 143526
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
index 1b8e776..d10e254 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
@@ -4298,6 +4298,7 @@
bool is_static = false;
bool is_virtual = false;
bool is_explicit = false;
+ bool is_artificial = false;
dw_offset_t specification_die_offset = DW_INVALID_OFFSET;
dw_offset_t abstract_origin_die_offset = DW_INVALID_OFFSET;
@@ -4332,6 +4333,8 @@
case DW_AT_inline: is_inline = form_value.Unsigned() != 0; break;
case DW_AT_virtuality: is_virtual = form_value.Unsigned() != 0; break;
case DW_AT_explicit: is_explicit = form_value.Unsigned() != 0; break;
+ case DW_AT_artificial: is_artificial = form_value.Unsigned() != 0; break;
+
case DW_AT_external:
if (form_value.Unsigned())
@@ -4351,11 +4354,9 @@
abstract_origin_die_offset = form_value.Reference(dwarf_cu);
break;
-
case DW_AT_allocated:
case DW_AT_associated:
case DW_AT_address_class:
- case DW_AT_artificial:
case DW_AT_calling_convention:
case DW_AT_data_location:
case DW_AT_elemental:
@@ -4580,7 +4581,8 @@
is_static,
is_inline,
is_explicit,
- is_attr_used);
+ is_attr_used,
+ is_artificial);
LinkDeclContextToDIE(ClangASTContext::GetAsDeclContext(cxx_method_decl), die);
type_handled = cxx_method_decl != NULL;