diff --git a/profile_reader.cc b/profile_reader.cc index 745e95d..3f198d2 100644 --- a/profile_reader.cc +++ b/profile_reader.cc @@ -132,7 +132,7 @@ void AutoFDOProfileReader::ReadNameTable() { } uint32_t name_vector_size = gcov_read_unsigned(); for (uint32_t i = 0; i < name_vector_size; i++) { - const char *name = gcov_read_string(); + std::string name = gcov_read_string(); uint32_t file_index = absl::GetFlag(FLAGS_gcov_version) >= 3 ? gcov_read_unsigned() : -1; names_.emplace_back(name, file_index); diff --git a/profile_writer.cc b/profile_writer.cc index 8482642..0c5fe86 100644 --- a/profile_writer.cc +++ b/profile_writer.cc @@ -124,13 +124,17 @@ class SourceProfileWriter: public SymbolTraverser { virtual void VisitTopSymbol(const std::string &name, const Symbol *node) { gcov_write_counter(node->head_count); - gcov_write_unsigned(GetStringIndex(Symbol::Name(name.c_str()))); + unsigned NameIdx = GetStringIndex(Symbol::Name(name.c_str())); + CHECK(NameIdx != 0 && "name index 0 should never be present as a top-level symbol!"); + gcov_write_unsigned(NameIdx); } virtual void VisitCallsite(const Callsite &callsite) { uint64_t value = callsite.location; gcov_write_unsigned(SourceInfo::GenerateCompressedOffset(value)); - gcov_write_unsigned(GetStringIndex(Symbol::Name(callsite.callee_name))); + unsigned NameIdx = GetStringIndex(Symbol::Name(callsite.callee_name)); + CHECK(NameIdx != 0 && "name index 0 should never be present as a callee!"); + gcov_write_unsigned(NameIdx); } private: diff --git a/symbol_map.h b/symbol_map.h index 9e47211..b9c56df 100644 --- a/symbol_map.h +++ b/symbol_map.h @@ -177,7 +177,8 @@ class Symbol { ~Symbol(); static std::string Name(const char *name) { - return (name && strlen(name) > 0) ? name : "noname"; + CHECK(name && strlen(name) > 0 && "Empty string should never occur in profile!"); + return name; } std::string name() const { return Name(info.func_name); }