]> granicus.if.org Git - clang/commitdiff
[clang-diff] Fix getRelativeName
authorJohannes Altmanninger <aclopte@gmail.com>
Tue, 22 Aug 2017 08:59:13 +0000 (08:59 +0000)
committerJohannes Altmanninger <aclopte@gmail.com>
Tue, 22 Aug 2017 08:59:13 +0000 (08:59 +0000)
Handle the case when DeclContext is null.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@311434 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Tooling/ASTDiff/ASTDiff.cpp

index 2dcd1a28563b59f63f22cc41356ede995e9b8c7d..747c67ecdcb65a7814a24b114938e4e72adea2b7 100644 (file)
@@ -372,7 +372,10 @@ int SyntaxTree::Impl::findPositionInParent(NodeId Id, bool Shifted) const {
 std::string
 SyntaxTree::Impl::getRelativeName(const NamedDecl *ND,
                                   const DeclContext *Context) const {
+  std::string Val = ND->getQualifiedNameAsString();
   std::string ContextPrefix;
+  if (!Context)
+    return Val;
   if (auto *Namespace = dyn_cast<NamespaceDecl>(Context))
     ContextPrefix = Namespace->getQualifiedNameAsString();
   else if (auto *Record = dyn_cast<RecordDecl>(Context))
@@ -380,7 +383,6 @@ SyntaxTree::Impl::getRelativeName(const NamedDecl *ND,
   else if (AST.getLangOpts().CPlusPlus11)
     if (auto *Tag = dyn_cast<TagDecl>(Context))
       ContextPrefix = Tag->getQualifiedNameAsString();
-  std::string Val = ND->getQualifiedNameAsString();
   // Strip the qualifier, if Val refers to somthing in the current scope.
   // But leave one leading ':' in place, so that we know that this is a
   // relative path.
@@ -404,7 +406,7 @@ static const DeclContext *getEnclosingDeclContext(ASTContext &AST,
       return D->getDeclContext();
     S = P.get<Stmt>();
   }
-  llvm_unreachable("Could not find Decl ancestor.");
+  return nullptr;
 }
 
 std::string SyntaxTree::Impl::getNodeValue(NodeId Id) const {