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;