versioner: properly handle declarations with no identifier.
Some declarations, like bitfield members, don't need identifiers.
Bug: https://github.com/android-ndk/ndk/issues/440
Test: ran versioner with -x c++ on a manually reduced <linux/timex.h>
Change-Id: Ic7eea780762cff653c54fdde4d10df203d630c25
diff --git a/tools/versioner/src/DeclarationDatabase.cpp b/tools/versioner/src/DeclarationDatabase.cpp
index 247e58b..aef4f55 100644
--- a/tools/versioner/src/DeclarationDatabase.cpp
+++ b/tools/versioner/src/DeclarationDatabase.cpp
@@ -54,17 +54,19 @@
}
}
- if (mangler->shouldMangleDeclName(decl)) {
- std::string mangled;
- llvm::raw_string_ostream ss(mangled);
- mangler->mangleName(decl, ss);
- return mangled;
- }
-
+ // The decl might not have a name (e.g. bitfields).
if (auto identifier = decl->getIdentifier()) {
+ if (mangler->shouldMangleDeclName(decl)) {
+ std::string mangled;
+ llvm::raw_string_ostream ss(mangled);
+ mangler->mangleName(decl, ss);
+ return mangled;
+ }
+
return identifier->getName();
}
- return "<error>";
+
+ return "<unnamed>";
}
bool VisitDecl(Decl* decl) {