diff --git a/tools/versioner/src/Android.bp b/tools/versioner/src/Android.bp
index 6e1d750..d1362d0 100644
--- a/tools/versioner/src/Android.bp
+++ b/tools/versioner/src/Android.bp
@@ -37,6 +37,7 @@
     target: {
         host: {
             cppflags: [
+                "-std=gnu++1z",
                 "-fno-rtti",
             ],
         },
diff --git a/tools/versioner/src/DeclarationDatabase.cpp b/tools/versioner/src/DeclarationDatabase.cpp
index e9ba37e..247e58b 100644
--- a/tools/versioner/src/DeclarationDatabase.cpp
+++ b/tools/versioner/src/DeclarationDatabase.cpp
@@ -61,11 +61,10 @@
       return mangled;
     }
 
-    auto identifier = decl->getIdentifier();
-    if (!identifier) {
-      return "<error>";
+    if (auto identifier = decl->getIdentifier()) {
+      return identifier->getName();
     }
-    return identifier->getName();
+    return "<error>";
   }
 
   bool VisitDecl(Decl* decl) {
@@ -172,18 +171,16 @@
               &arch_availability[Arch::x86_64].introduced } },
         };
 
-        auto it = prefix_map.find(fragments[0]);
-        if (it == prefix_map.end()) {
-          continue;
-        }
-        int value;
-        if (fragments[1].getAsInteger(10, value)) {
-          errx(1, "invalid __ANDROID_AVAILABILITY_DUMP__ annotation: '%s'",
-               annotation.str().c_str());
-        }
+        if (auto it = prefix_map.find(fragments[0]); it != prefix_map.end()) {
+          int value;
+          if (fragments[1].getAsInteger(10, value)) {
+            errx(1, "invalid __ANDROID_AVAILABILITY_DUMP__ annotation: '%s'",
+                 annotation.str().c_str());
+          }
 
-        for (int* ptr : it->second) {
-          *ptr = value;
+          for (int* ptr : it->second) {
+            *ptr = value;
+          }
         }
       }
     }
@@ -196,8 +193,16 @@
     }
 
     // Find or insert an entry for the declaration.
-    auto declaration_it = symbol_it->second.declarations.find(location);
-    if (declaration_it == symbol_it->second.declarations.end()) {
+    if (auto declaration_it = symbol_it->second.declarations.find(location);
+        declaration_it != symbol_it->second.declarations.end()) {
+      if (declaration_it->second.is_extern != is_extern ||
+          declaration_it->second.is_definition != is_definition ||
+          declaration_it->second.no_guard != no_guard) {
+        errx(1, "varying declaration of '%s' at %s:%u:%u", declaration_name.c_str(),
+             location.filename.c_str(), location.start.line, location.start.column);
+      }
+      declaration_it->second.availability.insert(std::make_pair(type, availability));
+    } else {
       Declaration declaration;
       declaration.name = declaration_name;
       declaration.location = location;
@@ -206,14 +211,6 @@
       declaration.no_guard = no_guard;
       declaration.availability.insert(std::make_pair(type, availability));
       symbol_it->second.declarations.insert(std::make_pair(location, declaration));
-    } else {
-      if (declaration_it->second.is_extern != is_extern ||
-          declaration_it->second.is_definition != is_definition ||
-          declaration_it->second.no_guard != no_guard) {
-        errx(1, "varying declaration of '%s' at %s:%u:%u", declaration_name.c_str(),
-             location.filename.c_str(), location.start.line, location.start.column);
-      }
-      declaration_it->second.availability.insert(std::make_pair(type, availability));
     }
 
     return true;
diff --git a/tools/versioner/src/versioner.cpp b/tools/versioner/src/versioner.cpp
index 6c287d9..e39bec0 100644
--- a/tools/versioner/src/versioner.cpp
+++ b/tools/versioner/src/versioner.cpp
@@ -382,8 +382,8 @@
     const std::string& symbol_name = it.first;
 
     bool symbol_error = false;
-    auto missing_it = missing_availability.find(symbol_name);
-    if (missing_it != missing_availability.end()) {
+    if (auto missing_it = missing_availability.find(symbol_name);
+        missing_it != missing_availability.end()) {
       printf("%s: declaration marked available but symbol missing in [%s]\n", symbol_name.c_str(),
              Join(missing_it->second, ", ").c_str());
       symbol_error = true;
@@ -391,8 +391,8 @@
     }
 
     if (strict) {
-      auto extra_it = extra_availability.find(symbol_name);
-      if (extra_it != extra_availability.end()) {
+      if (auto extra_it = extra_availability.find(symbol_name);
+          extra_it != extra_availability.end()) {
         printf("%s: declaration marked unavailable but symbol available in [%s]\n",
                symbol_name.c_str(), Join(extra_it->second, ", ").c_str());
         symbol_error = true;
@@ -401,11 +401,12 @@
     }
 
     if (symbol_error) {
-      auto symbol_it = header_database->symbols.find(symbol_name);
-      if (symbol_it == header_database->symbols.end()) {
+      if (auto symbol_it = header_database->symbols.find(symbol_name);
+          symbol_it != header_database->symbols.end()) {
+        symbol_it->second.dump(cwd);
+      } else {
         errx(1, "failed to find symbol in header database");
       }
-      symbol_it->second.dump(cwd);
     }
   }
 
