зеркало из https://github.com/microsoft/clang-1.git
Remove ASTContext::getCanonicalDecl() and use Decl::getCanonicalDecl in its place.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@76274 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
b57a4fe73b
Коммит
97fbaa2a38
|
@ -643,19 +643,6 @@ public:
|
|||
return T1.getUnqualifiedType() == T2.getUnqualifiedType();
|
||||
}
|
||||
|
||||
/// \brief Retrieves the "canonical" declaration of the given declaration.
|
||||
Decl *getCanonicalDecl(Decl *D);
|
||||
|
||||
/// \brief Retrieves the "canonical" declaration of the given tag
|
||||
/// declaration.
|
||||
///
|
||||
/// The canonical declaration for the given tag declaration is
|
||||
/// either the definition of the tag (if it is a complete type) or
|
||||
/// the first declaration of that tag.
|
||||
TagDecl *getCanonicalDecl(TagDecl *Tag) {
|
||||
return cast<TagDecl>(getCanonicalDecl((Decl *)Tag));
|
||||
}
|
||||
|
||||
/// \brief Retrieves the "canonical" declaration of
|
||||
|
||||
/// \brief Retrieves the "canonical" nested name specifier for a
|
||||
|
|
|
@ -2082,17 +2082,11 @@ QualType ASTContext::getCanonicalType(QualType T) {
|
|||
VAT->getBracketsRange());
|
||||
}
|
||||
|
||||
Decl *ASTContext::getCanonicalDecl(Decl *D) {
|
||||
if (!D)
|
||||
return 0;
|
||||
return D->getCanonicalDecl();
|
||||
}
|
||||
|
||||
TemplateName ASTContext::getCanonicalTemplateName(TemplateName Name) {
|
||||
// If this template name refers to a template, the canonical
|
||||
// template name merely stores the template itself.
|
||||
if (TemplateDecl *Template = Name.getAsTemplateDecl())
|
||||
return TemplateName(cast<TemplateDecl>(getCanonicalDecl(Template)));
|
||||
return TemplateName(cast<TemplateDecl>(Template->getCanonicalDecl()));
|
||||
|
||||
DependentTemplateName *DTN = Name.getAsDependentTemplateName();
|
||||
assert(DTN && "Non-dependent template names must refer to template decls.");
|
||||
|
|
|
@ -200,7 +200,7 @@ QualType ClassTemplateDecl::getInjectedClassNameType(ASTContext &Context) {
|
|||
TemplateTemplateParmDecl *TTP = cast<TemplateTemplateParmDecl>(*Param);
|
||||
TemplateArgs.push_back(TemplateArgument(TTP->getLocation(), TTP));
|
||||
CanonTemplateArgs.push_back(TemplateArgument(TTP->getLocation(),
|
||||
Context.getCanonicalDecl(TTP)));
|
||||
TTP->getCanonicalDecl()));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -217,7 +217,7 @@ MergeLookupResults(ASTContext &Context, LookupResultsTy &Results) {
|
|||
NamedDecl *ND = I->getAsDecl()->getUnderlyingDecl();
|
||||
|
||||
if (TagDecl *TD = dyn_cast<TagDecl>(ND)) {
|
||||
TagFound = Context.getCanonicalDecl(TD);
|
||||
TagFound = TD->getCanonicalDecl();
|
||||
TagNames += FoundDecls.insert(TagFound)? 1 : 0;
|
||||
} else if (ND->isFunctionOrFunctionTemplate())
|
||||
Functions += FoundDecls.insert(ND)? 1 : 0;
|
||||
|
|
|
@ -3764,7 +3764,7 @@ Sema::ResolveAddressOfOverloadedFunction(Expr *From, QualType ToType,
|
|||
assert(FunctionType
|
||||
== Context.getCanonicalType(Specialization->getType()));
|
||||
Matches.insert(
|
||||
cast<FunctionDecl>(Context.getCanonicalDecl(Specialization)));
|
||||
cast<FunctionDecl>(Specialization->getCanonicalDecl()));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3778,7 +3778,7 @@ Sema::ResolveAddressOfOverloadedFunction(Expr *From, QualType ToType,
|
|||
|
||||
if (FunctionDecl *FunDecl = dyn_cast<FunctionDecl>(*Fun)) {
|
||||
if (FunctionType == Context.getCanonicalType(FunDecl->getType())) {
|
||||
Matches.insert(cast<FunctionDecl>(Context.getCanonicalDecl(*Fun)));
|
||||
Matches.insert(cast<FunctionDecl>(Fun->getCanonicalDecl()));
|
||||
FoundNonTemplateFunction = true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -56,7 +56,7 @@ TemplateNameKind Sema::isTemplateName(const IdentifierInfo &II, Scope *S,
|
|||
// which could be the current specialization or another
|
||||
// specialization.
|
||||
if (Record->isInjectedClassName()) {
|
||||
Record = cast<CXXRecordDecl>(Context.getCanonicalDecl(Record));
|
||||
Record = cast<CXXRecordDecl>(Record->getCanonicalDecl());
|
||||
if ((Template = Record->getDescribedClassTemplate()))
|
||||
TNK = TNK_Type_template;
|
||||
else if (ClassTemplateSpecializationDecl *Spec
|
||||
|
@ -795,7 +795,7 @@ static void CanonicalizeTemplateArguments(const TemplateArgument *TemplateArgs,
|
|||
case TemplateArgument::Declaration:
|
||||
Canonical.push_back(
|
||||
TemplateArgument(SourceLocation(),
|
||||
Context.getCanonicalDecl(TemplateArgs[Idx].getAsDecl())));
|
||||
TemplateArgs[Idx].getAsDecl()->getCanonicalDecl()));
|
||||
break;
|
||||
|
||||
case TemplateArgument::Integral:
|
||||
|
@ -1278,7 +1278,7 @@ bool Sema::CheckTemplateArgumentList(TemplateDecl *Template,
|
|||
|
||||
// Add the converted template argument.
|
||||
Decl *D
|
||||
= Context.getCanonicalDecl(cast<DeclRefExpr>(ArgExpr)->getDecl());
|
||||
= cast<DeclRefExpr>(ArgExpr)->getDecl()->getCanonicalDecl();
|
||||
Converted.Append(TemplateArgument(Arg.getLocation(), D));
|
||||
continue;
|
||||
}
|
||||
|
@ -1702,7 +1702,8 @@ bool Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param,
|
|||
if (CheckTemplateArgumentPointerToMember(Arg, Member))
|
||||
return true;
|
||||
|
||||
Member = cast_or_null<NamedDecl>(Context.getCanonicalDecl(Member));
|
||||
if (Member)
|
||||
Member = cast<NamedDecl>(Member->getCanonicalDecl());
|
||||
Converted = TemplateArgument(StartLoc, Member);
|
||||
return false;
|
||||
}
|
||||
|
@ -1711,7 +1712,8 @@ bool Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param,
|
|||
if (CheckTemplateArgumentAddressOfObjectOrFunction(Arg, Entity))
|
||||
return true;
|
||||
|
||||
Entity = cast_or_null<NamedDecl>(Context.getCanonicalDecl(Entity));
|
||||
if (Entity)
|
||||
Entity = cast<NamedDecl>(Entity->getCanonicalDecl());
|
||||
Converted = TemplateArgument(StartLoc, Entity);
|
||||
return false;
|
||||
}
|
||||
|
@ -1750,7 +1752,8 @@ bool Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param,
|
|||
if (CheckTemplateArgumentAddressOfObjectOrFunction(Arg, Entity))
|
||||
return true;
|
||||
|
||||
Entity = cast_or_null<NamedDecl>(Context.getCanonicalDecl(Entity));
|
||||
if (Entity)
|
||||
Entity = cast<NamedDecl>(Entity->getCanonicalDecl());
|
||||
Converted = TemplateArgument(StartLoc, Entity);
|
||||
return false;
|
||||
}
|
||||
|
@ -1791,7 +1794,7 @@ bool Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param,
|
|||
if (CheckTemplateArgumentAddressOfObjectOrFunction(Arg, Entity))
|
||||
return true;
|
||||
|
||||
Entity = cast<NamedDecl>(Context.getCanonicalDecl(Entity));
|
||||
Entity = cast<NamedDecl>(Entity->getCanonicalDecl());
|
||||
Converted = TemplateArgument(StartLoc, Entity);
|
||||
return false;
|
||||
}
|
||||
|
@ -1820,7 +1823,8 @@ bool Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param,
|
|||
if (CheckTemplateArgumentPointerToMember(Arg, Member))
|
||||
return true;
|
||||
|
||||
Member = cast_or_null<NamedDecl>(Context.getCanonicalDecl(Member));
|
||||
if (Member)
|
||||
Member = cast<NamedDecl>(Member->getCanonicalDecl());
|
||||
Converted = TemplateArgument(StartLoc, Member);
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -170,8 +170,8 @@ DeduceTemplateArguments(ASTContext &Context,
|
|||
return Sema::TDK_Inconsistent;
|
||||
}
|
||||
|
||||
ParamDecl = cast<TemplateDecl>(Context.getCanonicalDecl(ParamDecl));
|
||||
ArgDecl = cast<TemplateDecl>(Context.getCanonicalDecl(ArgDecl));
|
||||
ParamDecl = cast<TemplateDecl>(ParamDecl->getCanonicalDecl());
|
||||
ArgDecl = cast<TemplateDecl>(ArgDecl->getCanonicalDecl());
|
||||
if (ParamDecl != ArgDecl) {
|
||||
// FIXME: fill in Info.Param/Info.FirstArg
|
||||
return Sema::TDK_Inconsistent;
|
||||
|
@ -799,8 +799,8 @@ static bool isSameTemplateArg(ASTContext &Context,
|
|||
Context.getCanonicalType(Y.getAsType());
|
||||
|
||||
case TemplateArgument::Declaration:
|
||||
return Context.getCanonicalDecl(X.getAsDecl()) ==
|
||||
Context.getCanonicalDecl(Y.getAsDecl());
|
||||
return X.getAsDecl()->getCanonicalDecl() ==
|
||||
Y.getAsDecl()->getCanonicalDecl();
|
||||
|
||||
case TemplateArgument::Integral:
|
||||
return *X.getAsIntegral() == *Y.getAsIntegral();
|
||||
|
|
|
@ -968,7 +968,7 @@ Sema::InstantiateClassTemplateSpecialization(
|
|||
bool ExplicitInstantiation) {
|
||||
// Perform the actual instantiation on the canonical declaration.
|
||||
ClassTemplateSpec = cast<ClassTemplateSpecializationDecl>(
|
||||
Context.getCanonicalDecl(ClassTemplateSpec));
|
||||
ClassTemplateSpec->getCanonicalDecl());
|
||||
|
||||
// We can only instantiate something that hasn't already been
|
||||
// instantiated or specialized. Fail without any diagnostics: our
|
||||
|
|
|
@ -781,16 +781,16 @@ static bool isInstantiationOf(ASTContext &Ctx, NamedDecl *D, Decl *Other) {
|
|||
return false;
|
||||
|
||||
if (CXXRecordDecl *Record = dyn_cast<CXXRecordDecl>(Other))
|
||||
return Ctx.getCanonicalDecl(Record->getInstantiatedFromMemberClass())
|
||||
== Ctx.getCanonicalDecl(D);
|
||||
return Record->getInstantiatedFromMemberClass()->getCanonicalDecl()
|
||||
== D->getCanonicalDecl();
|
||||
|
||||
if (FunctionDecl *Function = dyn_cast<FunctionDecl>(Other))
|
||||
return Ctx.getCanonicalDecl(Function->getInstantiatedFromMemberFunction())
|
||||
== Ctx.getCanonicalDecl(D);
|
||||
return Function->getInstantiatedFromMemberFunction()->getCanonicalDecl()
|
||||
== D->getCanonicalDecl();
|
||||
|
||||
if (EnumDecl *Enum = dyn_cast<EnumDecl>(Other))
|
||||
return Ctx.getCanonicalDecl(Enum->getInstantiatedFromMemberEnum())
|
||||
== Ctx.getCanonicalDecl(D);
|
||||
return Enum->getInstantiatedFromMemberEnum()->getCanonicalDecl()
|
||||
== D->getCanonicalDecl();
|
||||
|
||||
// FIXME: How can we find instantiations of anonymous unions?
|
||||
|
||||
|
@ -891,8 +891,8 @@ NamedDecl * Sema::InstantiateCurrentDeclRef(NamedDecl *D) {
|
|||
DC = DC->getParent()) {
|
||||
if (ClassTemplateSpecializationDecl *Spec
|
||||
= dyn_cast<ClassTemplateSpecializationDecl>(DC))
|
||||
if (Context.getCanonicalDecl(Spec->getSpecializedTemplate())
|
||||
== Context.getCanonicalDecl(ClassTemplate))
|
||||
if (Spec->getSpecializedTemplate()->getCanonicalDecl()
|
||||
== ClassTemplate->getCanonicalDecl())
|
||||
return Spec;
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче