versioner: assorted fixes.

Zero initialize the contents of ArchMap, keep track of the symbol name
in Declaration, remove unnecessary copies in loops.

Change-Id: I47b07755846f252b83ffc4c89547a34b2f7ab868
diff --git a/tools/versioner/src/Arch.h b/tools/versioner/src/Arch.h
index 7fdd17d..fbf7773 100644
--- a/tools/versioner/src/Arch.h
+++ b/tools/versioner/src/Arch.h
@@ -76,7 +76,7 @@
   }
 
  private:
-  std::array<T, size_t(Arch::x86_64) + 1> data_;
+  std::array<T, size_t(Arch::x86_64) + 1> data_ = {};
 };
 
 template <typename T>
diff --git a/tools/versioner/src/DeclarationDatabase.cpp b/tools/versioner/src/DeclarationDatabase.cpp
index 85ad9ba..8e8d84f 100644
--- a/tools/versioner/src/DeclarationDatabase.cpp
+++ b/tools/versioner/src/DeclarationDatabase.cpp
@@ -196,6 +196,7 @@
     auto declaration_it = symbol_it->second.declarations.find(location);
     if (declaration_it == symbol_it->second.declarations.end()) {
       Declaration declaration;
+      declaration.name = declaration_name;
       declaration.location = location;
       declaration.is_extern = is_extern;
       declaration.is_definition = is_definition;
@@ -335,7 +336,7 @@
     ss << to_string(decl_av.global_availability) << ", ";
   }
 
-  for (auto it : decl_av.arch_availability) {
+  for (const auto& it : decl_av.arch_availability) {
     if (!it.second.empty()) {
       ss << to_string(it.first) << ": " << to_string(it.second) << ", ";
     }
diff --git a/tools/versioner/src/DeclarationDatabase.h b/tools/versioner/src/DeclarationDatabase.h
index ac5de27..bba826d 100644
--- a/tools/versioner/src/DeclarationDatabase.h
+++ b/tools/versioner/src/DeclarationDatabase.h
@@ -92,7 +92,7 @@
       return false;
     }
 
-    for (auto it : arch_availability) {
+    for (const auto& it : arch_availability) {
       if (!it.second.empty()) {
         return false;
       }
@@ -142,6 +142,7 @@
 std::string to_string(const Location& loc);
 
 struct Declaration {
+  std::string name;
   Location location;
 
   bool is_extern;