r305104 - [ODRHash] Skip inline namespaces when hashing.
Richard Trieu via cfe-commits
cfe-commits at lists.llvm.org
Fri Jun 9 13:11:52 PDT 2017
Author: rtrieu
Date: Fri Jun 9 15:11:51 2017
New Revision: 305104
URL: http://llvm.org/viewvc/llvm-project?rev=305104&view=rev
Log:
[ODRHash] Skip inline namespaces when hashing.
Speculatively try to fix the underlying issue from r304592, of underlying types
being confused when inline namespaces are used.
Modified:
cfe/trunk/lib/AST/ODRHash.cpp
cfe/trunk/lib/AST/StmtProfile.cpp
Modified: cfe/trunk/lib/AST/ODRHash.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ODRHash.cpp?rev=305104&r1=305103&r2=305104&view=diff
==============================================================================
--- cfe/trunk/lib/AST/ODRHash.cpp (original)
+++ cfe/trunk/lib/AST/ODRHash.cpp Fri Jun 9 15:11:51 2017
@@ -82,13 +82,25 @@ void ODRHash::AddDeclarationName(Declara
}
void ODRHash::AddNestedNameSpecifier(const NestedNameSpecifier *NNS) {
- assert(NNS && "Expecting non-null pointer.");
- const auto *Prefix = NNS->getPrefix();
- AddBoolean(Prefix);
- if (Prefix) {
- AddNestedNameSpecifier(Prefix);
+ // Unlike the other pointer handling functions, allow null pointers here.
+ if (!NNS) {
+ AddBoolean(false);
+ return;
}
+
+ // Skip inlined namespaces.
auto Kind = NNS->getKind();
+ if (Kind == NestedNameSpecifier::Namespace) {
+ if (NNS->getAsNamespace()->isInline()) {
+ return AddNestedNameSpecifier(NNS->getPrefix());
+ }
+ }
+
+ AddBoolean(true);
+
+ // Process prefix
+ AddNestedNameSpecifier(NNS->getPrefix());
+
ID.AddInteger(Kind);
switch (Kind) {
case NestedNameSpecifier::Identifier:
@@ -381,10 +393,7 @@ public:
}
void AddNestedNameSpecifier(const NestedNameSpecifier *NNS) {
- Hash.AddBoolean(NNS);
- if (NNS) {
- Hash.AddNestedNameSpecifier(NNS);
- }
+ Hash.AddNestedNameSpecifier(NNS);
}
void AddIdentifierInfo(const IdentifierInfo *II) {
Modified: cfe/trunk/lib/AST/StmtProfile.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/StmtProfile.cpp?rev=305104&r1=305103&r2=305104&view=diff
==============================================================================
--- cfe/trunk/lib/AST/StmtProfile.cpp (original)
+++ cfe/trunk/lib/AST/StmtProfile.cpp Fri Jun 9 15:11:51 2017
@@ -186,10 +186,7 @@ namespace {
Hash.AddTemplateName(Name);
}
void VisitNestedNameSpecifier(NestedNameSpecifier *NNS) override {
- ID.AddBoolean(NNS);
- if (NNS) {
- Hash.AddNestedNameSpecifier(NNS);
- }
+ Hash.AddNestedNameSpecifier(NNS);
}
};
}
More information about the cfe-commits
mailing list