diff options
author | rdivacky <rdivacky@FreeBSD.org> | 2009-10-15 07:44:25 +0000 |
---|---|---|
committer | rdivacky <rdivacky@FreeBSD.org> | 2009-10-15 07:44:25 +0000 |
commit | 67e5495076feb6c1338273ace96b58da95cdaf61 (patch) | |
tree | badd8f913c2a7db8d5fbe7d83c862e35e403fd41 /lib/AST/Decl.cpp | |
parent | 9092c3e0fa01f3139b016d05d267a89e3b07747a (diff) | |
download | FreeBSD-src-67e5495076feb6c1338273ace96b58da95cdaf61.zip FreeBSD-src-67e5495076feb6c1338273ace96b58da95cdaf61.tar.gz |
Update clang to 84175.
Diffstat (limited to 'lib/AST/Decl.cpp')
-rw-r--r-- | lib/AST/Decl.cpp | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp index 429729e..da7959b 100644 --- a/lib/AST/Decl.cpp +++ b/lib/AST/Decl.cpp @@ -373,14 +373,30 @@ SourceRange VarDecl::getSourceRange() const { return SourceRange(getLocation(), getLocation()); } -VarDecl *VarDecl::getInstantiatedFromStaticDataMember() { +bool VarDecl::isOutOfLine() const { + if (!isStaticDataMember()) + return false; + + if (Decl::isOutOfLine()) + return true; + + // If this static data member was instantiated from a static data member of + // a class template, check whether that static data member was defined + // out-of-line. + if (VarDecl *VD = getInstantiatedFromStaticDataMember()) + return VD->isOutOfLine(); + + return false; +} + +VarDecl *VarDecl::getInstantiatedFromStaticDataMember() const { if (MemberSpecializationInfo *MSI = getMemberSpecializationInfo()) return cast<VarDecl>(MSI->getInstantiatedFrom()); return 0; } -TemplateSpecializationKind VarDecl::getTemplateSpecializationKind() { +TemplateSpecializationKind VarDecl::getTemplateSpecializationKind() const { if (MemberSpecializationInfo *MSI = getASTContext().getInstantiatedFromStaticDataMember(this)) return MSI->getTemplateSpecializationKind(); @@ -388,7 +404,7 @@ TemplateSpecializationKind VarDecl::getTemplateSpecializationKind() { return TSK_Undeclared; } -MemberSpecializationInfo *VarDecl::getMemberSpecializationInfo() { +MemberSpecializationInfo *VarDecl::getMemberSpecializationInfo() const { return getASTContext().getInstantiatedFromStaticDataMember(this); } @@ -809,7 +825,6 @@ FunctionDecl::setTemplateSpecializationKind(TemplateSpecializationKind TSK) { } bool FunctionDecl::isOutOfLine() const { - // FIXME: Should we restrict this to member functions? if (Decl::isOutOfLine()) return true; |