Index: clang/lib/AST/ASTImporterLookupTable.cpp =================================================================== --- clang/lib/AST/ASTImporterLookupTable.cpp +++ clang/lib/AST/ASTImporterLookupTable.cpp @@ -14,6 +14,7 @@ #include "clang/AST/ASTImporterLookupTable.h" #include "clang/AST/Decl.h" #include "clang/AST/RecursiveASTVisitor.h" +#include "clang/AST/ParentMapContext.h" #include "llvm/Support/FormatVariadic.h" namespace clang { @@ -38,6 +39,10 @@ } bool VisitNamedDecl(NamedDecl *D) { + auto Parents = D->getASTContext().getParents(*D); + if (!Parents.empty() && nullptr != Parents.begin()->get()) { + return true; + } LT.add(D); return true; } Index: clang/test/Analysis/Inputs/ctu-friend-template-other.cpp =================================================================== --- /dev/null +++ clang/test/Analysis/Inputs/ctu-friend-template-other.cpp @@ -0,0 +1,6 @@ +#include "ctu-friend-template.h" + +void bar(){ + __1::A a1(0); + a1.foo(); +} Index: clang/test/Analysis/Inputs/ctu-friend-template.h =================================================================== --- /dev/null +++ clang/test/Analysis/Inputs/ctu-friend-template.h @@ -0,0 +1,20 @@ +namespace __1{ + +template +class A; + +template +class A{ +public: + template + friend class A; + + A(T x):x(x){} + + void foo(){} + +private: + T x; +}; + +} Index: clang/test/Analysis/Inputs/ctu-friend-template.cpp.externalDefMap-dump.txt =================================================================== --- /dev/null +++ clang/test/Analysis/Inputs/ctu-friend-template.cpp.externalDefMap-dump.txt @@ -0,0 +1 @@ +9:c:@F@bar# ctu-friend-template-other.cpp.ast Index: clang/test/Analysis/ctu-friend-template.cpp =================================================================== --- /dev/null +++ clang/test/Analysis/ctu-friend-template.cpp @@ -0,0 +1,21 @@ +// RUN: rm -rf %t && mkdir %t +// RUN: mkdir -p %t/ctudir +// RUN: %clang_cc1 -std=c++14 -triple x86_64-pc-linux-gnu \ +// RUN: -emit-pch -o %t/ctudir/ctu-friend-template-other.cpp.ast %S/Inputs/ctu-friend-template-other.cpp +// RUN: cp %S/Inputs/ctu-friend-template.cpp.externalDefMap-dump.txt %t/ctudir/externalDefMap.txt +// RUN: %clang_analyze_cc1 -std=c++14 -triple x86_64-pc-linux-gnu \ +// RUN: -analyzer-checker=core,debug.ExprInspection \ +// RUN: -analyzer-config experimental-enable-naive-ctu-analysis=true \ +// RUN: -analyzer-config ctu-dir=%t/ctudir \ +// RUN: -Werror=ctu \ +// RUN: -verify %s + +// CHECK: CTU loaded AST file + +#include "Inputs/ctu-friend-template.h" + +void bar(); + +int main(){ + bar(); // expected-no-diagnostics +}