mirror of
https://github.com/intel/llvm.git
synced 2026-02-02 18:18:09 +08:00
Move Sema::isTemplateParameterDecl to Decl::isTemplateParameter, where it belongs
llvm-svn: 60708
This commit is contained in:
@@ -211,6 +211,10 @@ public:
|
||||
static bool CollectingStats(bool Enable = false);
|
||||
static void PrintStats();
|
||||
|
||||
/// isTemplateParameter - Determines whether this declartion is a
|
||||
/// template parameter.
|
||||
bool isTemplateParameter() const;
|
||||
|
||||
// Implement isa/cast/dyncast/etc.
|
||||
static bool classof(const Decl *) { return true; }
|
||||
static DeclContext *castToDeclContext(const Decl *);
|
||||
@@ -388,6 +392,11 @@ template<> struct DeclContext::KindTrait<DeclContext> {
|
||||
static Decl::Kind getKind(const DeclContext *D) { return D->DeclKind; }
|
||||
};
|
||||
|
||||
inline bool Decl::isTemplateParameter() const {
|
||||
return getKind() == TemplateTypeParm || getKind() == NonTypeTemplateParm;
|
||||
}
|
||||
|
||||
|
||||
} // end clang.
|
||||
|
||||
namespace llvm {
|
||||
|
||||
@@ -995,7 +995,6 @@ public:
|
||||
//===--------------------------------------------------------------------===//
|
||||
// C++ Templates [C++ 14]
|
||||
//
|
||||
bool isTemplateParameterDecl(Decl *D);
|
||||
bool DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl);
|
||||
virtual DeclTy *ActOnTypeParameter(Scope *S, bool Typename,
|
||||
SourceLocation KeyLoc,
|
||||
|
||||
@@ -868,7 +868,7 @@ Sema::ActOnDeclarator(Scope *S, Declarator &D, DeclTy *lastDecl) {
|
||||
}
|
||||
}
|
||||
|
||||
if (PrevDecl && isTemplateParameterDecl(PrevDecl)) {
|
||||
if (PrevDecl && PrevDecl->isTemplateParameter()) {
|
||||
// Maybe we will complain about the shadowed template parameter.
|
||||
InvalidDecl = InvalidDecl
|
||||
|| DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
|
||||
@@ -2035,7 +2035,7 @@ Sema::ActOnParamDeclarator(Scope *S, Declarator &D) {
|
||||
// among each other. Here they can only shadow globals, which is ok.
|
||||
IdentifierInfo *II = D.getIdentifier();
|
||||
if (Decl *PrevDecl = LookupDecl(II, Decl::IDNS_Ordinary, S)) {
|
||||
if (isTemplateParameterDecl(PrevDecl)) {
|
||||
if (PrevDecl->isTemplateParameter()) {
|
||||
// Maybe we will complain about the shadowed template parameter.
|
||||
DiagnoseTemplateParameterShadow(D.getIdentifierLoc(), PrevDecl);
|
||||
// Just pretend that we didn't see the previous declaration.
|
||||
@@ -2299,7 +2299,7 @@ Sema::DeclTy *Sema::ActOnTag(Scope *S, unsigned TagType, TagKind TK,
|
||||
PrevDecl = dyn_cast_or_null<ScopedDecl>(LookupDecl(Name, Decl::IDNS_Tag,S));
|
||||
}
|
||||
|
||||
if (PrevDecl && isTemplateParameterDecl(PrevDecl)) {
|
||||
if (PrevDecl && PrevDecl->isTemplateParameter()) {
|
||||
// Maybe we will complain about the shadowed template parameter.
|
||||
DiagnoseTemplateParameterShadow(NameLoc, PrevDecl);
|
||||
// Just pretend that we didn't see the previous declaration.
|
||||
@@ -2442,7 +2442,7 @@ Sema::DeclTy *Sema::ActOnTagStruct(Scope *S, TagDecl::TagKind Kind, TagKind TK,
|
||||
PrevDecl = dyn_cast_or_null<ScopedDecl>(LookupDecl(Name, Decl::IDNS_Tag,S));
|
||||
}
|
||||
|
||||
if (PrevDecl && isTemplateParameterDecl(PrevDecl)) {
|
||||
if (PrevDecl && PrevDecl->isTemplateParameter()) {
|
||||
// Maybe we will complain about the shadowed template parameter.
|
||||
DiagnoseTemplateParameterShadow(NameLoc, PrevDecl);
|
||||
// Just pretend that we didn't see the previous declaration.
|
||||
@@ -2959,7 +2959,7 @@ Sema::DeclTy *Sema::ActOnEnumConstant(Scope *S, DeclTy *theEnumDecl,
|
||||
// Verify that there isn't already something declared with this name in this
|
||||
// scope.
|
||||
Decl *PrevDecl = LookupDecl(Id, Decl::IDNS_Ordinary, S);
|
||||
if (PrevDecl && isTemplateParameterDecl(PrevDecl)) {
|
||||
if (PrevDecl && PrevDecl->isTemplateParameter()) {
|
||||
// Maybe we will complain about the shadowed template parameter.
|
||||
DiagnoseTemplateParameterShadow(IdLoc, PrevDecl);
|
||||
// Just pretend that we didn't see the previous declaration.
|
||||
|
||||
@@ -66,7 +66,7 @@ ActOnStartClassInterface(SourceLocation AtInterfaceLoc,
|
||||
|
||||
// Check for another declaration kind with the same name.
|
||||
Decl *PrevDecl = LookupDecl(ClassName, Decl::IDNS_Ordinary, TUScope);
|
||||
if (PrevDecl && isTemplateParameterDecl(PrevDecl)) {
|
||||
if (PrevDecl && PrevDecl->isTemplateParameter()) {
|
||||
// Maybe we will complain about the shadowed template parameter.
|
||||
DiagnoseTemplateParameterShadow(ClassLoc, PrevDecl);
|
||||
// Just pretend that we didn't see the previous declaration.
|
||||
@@ -826,7 +826,7 @@ Sema::ActOnForwardClassDeclaration(SourceLocation AtClassLoc,
|
||||
for (unsigned i = 0; i != NumElts; ++i) {
|
||||
// Check for another declaration kind with the same name.
|
||||
Decl *PrevDecl = LookupDecl(IdentList[i], Decl::IDNS_Ordinary, TUScope);
|
||||
if (PrevDecl && isTemplateParameterDecl(PrevDecl)) {
|
||||
if (PrevDecl && PrevDecl->isTemplateParameter()) {
|
||||
// Maybe we will complain about the shadowed template parameter.
|
||||
DiagnoseTemplateParameterShadow(AtClassLoc, PrevDecl);
|
||||
// Just pretend that we didn't see the previous declaration.
|
||||
|
||||
@@ -18,18 +18,12 @@
|
||||
|
||||
using namespace clang;
|
||||
|
||||
/// isTemplateParameterDecl - Determines whether the given declaration
|
||||
/// 'D' names a template parameter.
|
||||
bool Sema::isTemplateParameterDecl(Decl *D) {
|
||||
return isa<TemplateTypeParmDecl>(D) || isa<NonTypeTemplateParmDecl>(D);
|
||||
}
|
||||
|
||||
/// DiagnoseTemplateParameterShadow - Produce a diagnostic complaining
|
||||
/// that the template parameter 'PrevDecl' is being shadowed by a new
|
||||
/// declaration at location Loc. Returns true to indicate that this is
|
||||
/// an error, and false otherwise.
|
||||
bool Sema::DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl) {
|
||||
assert(isTemplateParameterDecl(PrevDecl) && "Not a template parameter");
|
||||
assert(PrevDecl->isTemplateParameter() && "Not a template parameter");
|
||||
|
||||
// Microsoft Visual C++ permits template parameters to be shadowed.
|
||||
if (getLangOptions().Microsoft)
|
||||
@@ -63,7 +57,7 @@ Sema::DeclTy *Sema::ActOnTypeParameter(Scope *S, bool Typename,
|
||||
|
||||
if (ParamName) {
|
||||
Decl *PrevDecl = LookupDecl(ParamName, Decl::IDNS_Tag, S);
|
||||
if (PrevDecl && isTemplateParameterDecl(PrevDecl))
|
||||
if (PrevDecl && PrevDecl->isTemplateParameter())
|
||||
Invalid = Invalid || DiagnoseTemplateParameterShadow(ParamNameLoc,
|
||||
PrevDecl);
|
||||
}
|
||||
@@ -97,7 +91,7 @@ Sema::DeclTy *Sema::ActOnNonTypeTemplateParameter(Scope *S, Declarator &D) {
|
||||
IdentifierInfo *ParamName = D.getIdentifier();
|
||||
if (ParamName) {
|
||||
Decl *PrevDecl = LookupDecl(ParamName, Decl::IDNS_Tag, S);
|
||||
if (PrevDecl && isTemplateParameterDecl(PrevDecl))
|
||||
if (PrevDecl && PrevDecl->isTemplateParameter())
|
||||
Invalid = Invalid || DiagnoseTemplateParameterShadow(D.getIdentifierLoc(),
|
||||
PrevDecl);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user