зеркало из https://github.com/microsoft/clang-1.git
Properly match instantiations of member function templates to the function templates from which they were instantiated
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82969 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
3f396029a5
Коммит
0d69653342
|
@ -1222,6 +1222,19 @@ static bool isInstantiationOf(ClassTemplateDecl *Pattern,
|
|||
return false;
|
||||
}
|
||||
|
||||
static bool isInstantiationOf(FunctionTemplateDecl *Pattern,
|
||||
FunctionTemplateDecl *Instance) {
|
||||
Pattern = Pattern->getCanonicalDecl();
|
||||
|
||||
do {
|
||||
Instance = Instance->getCanonicalDecl();
|
||||
if (Pattern == Instance) return true;
|
||||
Instance = Instance->getInstantiatedFromMemberTemplate();
|
||||
} while (Instance);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool isInstantiationOf(CXXRecordDecl *Pattern,
|
||||
CXXRecordDecl *Instance) {
|
||||
Pattern = Pattern->getCanonicalDecl();
|
||||
|
@ -1309,6 +1322,9 @@ static bool isInstantiationOf(ASTContext &Ctx, NamedDecl *D, Decl *Other) {
|
|||
if (ClassTemplateDecl *Temp = dyn_cast<ClassTemplateDecl>(Other))
|
||||
return isInstantiationOf(cast<ClassTemplateDecl>(D), Temp);
|
||||
|
||||
if (FunctionTemplateDecl *Temp = dyn_cast<FunctionTemplateDecl>(Other))
|
||||
return isInstantiationOf(cast<FunctionTemplateDecl>(D), Temp);
|
||||
|
||||
if (FieldDecl *Field = dyn_cast<FieldDecl>(Other)) {
|
||||
if (!Field->getDeclName()) {
|
||||
// This is an unnamed field.
|
||||
|
|
Загрузка…
Ссылка в новой задаче