| Index: src/common/dwarf_cu_to_module.cc
|
| diff --git a/src/common/dwarf_cu_to_module.cc b/src/common/dwarf_cu_to_module.cc
|
| index c52dffb339b75ff51ddac281d1e8fb6f661bbfd1..99a7bf30cce69bbe608869e1b1e088eb3fe532ea 100644
|
| --- a/src/common/dwarf_cu_to_module.cc
|
| +++ b/src/common/dwarf_cu_to_module.cc
|
| @@ -384,17 +384,17 @@ string DwarfCUToModule::GenericDIEHandler::ComputeQualifiedName() {
|
| qualified_name = &specification_->qualified_name;
|
| }
|
|
|
| - const string *unqualified_name;
|
| + const string *unqualified_name = NULL;
|
| const string *enclosing_name;
|
| if (!qualified_name) {
|
| - // Find our unqualified name. If the DIE has its own DW_AT_name
|
| - // attribute, then use that; otherwise, check our specification.
|
| - if (name_attribute_.empty() && specification_)
|
| - unqualified_name = &specification_->unqualified_name;
|
| - else
|
| + // Find the unqualified name. If the DIE has its own DW_AT_name
|
| + // attribute, then use that; otherwise, check the specification.
|
| + if (!name_attribute_.empty())
|
| unqualified_name = &name_attribute_;
|
| + else if (specification_)
|
| + unqualified_name = &specification_->unqualified_name;
|
|
|
| - // Find the name of our enclosing context. If we have a
|
| + // Find the name of the enclosing context. If this DIE has a
|
| // specification, it's the specification's enclosing context that
|
| // counts; otherwise, use this DIE's context.
|
| if (specification_)
|
| @@ -408,7 +408,7 @@ string DwarfCUToModule::GenericDIEHandler::ComputeQualifiedName() {
|
| string return_value;
|
| if (qualified_name) {
|
| return_value = *qualified_name;
|
| - } else {
|
| + } else if (unqualified_name && enclosing_name) {
|
| // Combine the enclosing name and unqualified name to produce our
|
| // own fully-qualified name.
|
| return_value = cu_context_->language->MakeQualifiedName(*enclosing_name,
|
| @@ -417,7 +417,7 @@ string DwarfCUToModule::GenericDIEHandler::ComputeQualifiedName() {
|
|
|
| // If this DIE was marked as a declaration, record its names in the
|
| // specification table.
|
| - if (declaration_) {
|
| + if (declaration_ && qualified_name || (unqualified_name && enclosing_name)) {
|
| Specification spec;
|
| if (qualified_name) {
|
| spec.qualified_name = *qualified_name;
|
|
|