diff options
-rw-r--r-- | clang/include/clang/AST/DeclCXX.h | 12 | ||||
-rw-r--r-- | clang/include/clang/AST/DeclNodes.def | 1 | ||||
-rw-r--r-- | clang/lib/AST/DeclCXX.cpp | 7 |
3 files changed, 20 insertions, 0 deletions
diff --git a/clang/include/clang/AST/DeclCXX.h b/clang/include/clang/AST/DeclCXX.h index 4dbfe4db0bd..f7b5eb5fa16 100644 --- a/clang/include/clang/AST/DeclCXX.h +++ b/clang/include/clang/AST/DeclCXX.h @@ -1026,6 +1026,7 @@ public: static bool classof(const NamespaceAliasDecl *D) { return true; } }; +/// StaticAssertDecl - Represents a C++0x static_assert declaration. class StaticAssertDecl : public Decl { Expr *AssertExpr; StringLiteral *Message; @@ -1054,6 +1055,17 @@ public: static bool classof(StaticAssertDecl *D) { return true; } }; +/// CXXTempVarDecl - Represents an implicit C++ temporary variable declaration. +class CXXTempVarDecl : public VarDecl { +protected: + CXXTempVarDecl(DeclContext *DC, QualType T) + : VarDecl(CXXTempVar, DC, SourceLocation(), 0, T, None) {} + +public: + static CXXTempVarDecl *Create(ASTContext &C, DeclContext *DC, + QualType T); +}; + /// Insertion operator for diagnostics. This allows sending AccessSpecifier's /// into a diagnostic with <<. const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB, diff --git a/clang/include/clang/AST/DeclNodes.def b/clang/include/clang/AST/DeclNodes.def index bbe36242b1c..3b48b2196e1 100644 --- a/clang/include/clang/AST/DeclNodes.def +++ b/clang/include/clang/AST/DeclNodes.def @@ -102,6 +102,7 @@ ABSTRACT_DECL(Named, Decl) DECL(ParmVar, VarDecl) DECL(OriginalParmVar, ParmVarDecl) DECL(NonTypeTemplateParm, VarDecl) + DECL(CXXTempVar, VarDecl) DECL(Template, NamedDecl) DECL(FunctionTemplate, TemplateDecl) DECL(ClassTemplate, TemplateDecl) diff --git a/clang/lib/AST/DeclCXX.cpp b/clang/lib/AST/DeclCXX.cpp index a5d133c643f..34d746433e1 100644 --- a/clang/lib/AST/DeclCXX.cpp +++ b/clang/lib/AST/DeclCXX.cpp @@ -375,6 +375,13 @@ void StaticAssertDecl::Destroy(ASTContext& C) { StaticAssertDecl::~StaticAssertDecl() { } +CXXTempVarDecl *CXXTempVarDecl::Create(ASTContext &C, DeclContext *DC, + QualType T) { + assert(isa<CXXRecordDecl>(T->getAsRecordType()->getDecl()) && + "CXXTempVarDecl must have a C++ record type!"); + return new (C) CXXTempVarDecl(DC, T); +} + static const char *getAccessName(AccessSpecifier AS) { switch (AS) { default: |