aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-08-29 01:31:33 +0000
committerAnders Carlsson <andersca@mac.com>2009-08-29 01:31:33 +0000
commit8c57a66a2aa59939a902ffa8c4ad0ddd5b949a21 (patch)
tree64b25bc8023eee21b12a2354d76b363f026535cc
parent54f70e19c872f5f3fa66343ce4a1a5e0c707eb09 (diff)
Store the SourceLocation of right parentheses in member initializers. Patch by Anders Johnsen!
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80416 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/clang/AST/DeclCXX.h8
-rw-r--r--lib/AST/DeclCXX.cpp11
-rw-r--r--lib/Sema/SemaDeclCXX.cpp4
3 files changed, 15 insertions, 8 deletions
diff --git a/include/clang/AST/DeclCXX.h b/include/clang/AST/DeclCXX.h
index c89ba8597a..0c7fc6ceb2 100644
--- a/include/clang/AST/DeclCXX.h
+++ b/include/clang/AST/DeclCXX.h
@@ -841,18 +841,21 @@ class CXXBaseOrMemberInitializer {
/// IdLoc - Location of the id in ctor-initializer list.
SourceLocation IdLoc;
+ /// RParenLoc - Location of the right paren of the ctor-initializer.
+ SourceLocation RParenLoc;
+
public:
/// CXXBaseOrMemberInitializer - Creates a new base-class initializer.
explicit
CXXBaseOrMemberInitializer(QualType BaseType, Expr **Args, unsigned NumArgs,
CXXConstructorDecl *C,
- SourceLocation L);
+ SourceLocation L, SourceLocation R);
/// CXXBaseOrMemberInitializer - Creates a new member initializer.
explicit
CXXBaseOrMemberInitializer(FieldDecl *Member, Expr **Args, unsigned NumArgs,
CXXConstructorDecl *C,
- SourceLocation L);
+ SourceLocation L, SourceLocation R);
/// ~CXXBaseOrMemberInitializer - Destroy the base or member initializer.
~CXXBaseOrMemberInitializer();
@@ -923,6 +926,7 @@ public:
const CXXConstructorDecl *getConstructor() const { return CtorToCall; }
SourceLocation getSourceLocation() const { return IdLoc; }
+ SourceLocation getRParenLoc() const { return RParenLoc; }
/// arg_begin() - Retrieve an iterator to the first initializer argument.
arg_iterator arg_begin() { return Args; }
diff --git a/lib/AST/DeclCXX.cpp b/lib/AST/DeclCXX.cpp
index d41e0965bc..3717126ec8 100644
--- a/lib/AST/DeclCXX.cpp
+++ b/lib/AST/DeclCXX.cpp
@@ -400,8 +400,8 @@ QualType CXXMethodDecl::getThisType(ASTContext &C) const {
CXXBaseOrMemberInitializer::
CXXBaseOrMemberInitializer(QualType BaseType, Expr **Args, unsigned NumArgs,
CXXConstructorDecl *C,
- SourceLocation L)
- : Args(0), NumArgs(0), IdLoc(L) {
+ SourceLocation L, SourceLocation R)
+ : Args(0), NumArgs(0), IdLoc(L), RParenLoc(R) {
BaseOrMember = reinterpret_cast<uintptr_t>(BaseType.getTypePtr());
assert((BaseOrMember & 0x01) == 0 && "Invalid base class type pointer");
BaseOrMember |= 0x01;
@@ -419,8 +419,8 @@ CXXBaseOrMemberInitializer(QualType BaseType, Expr **Args, unsigned NumArgs,
CXXBaseOrMemberInitializer::
CXXBaseOrMemberInitializer(FieldDecl *Member, Expr **Args, unsigned NumArgs,
CXXConstructorDecl *C,
- SourceLocation L)
- : Args(0), NumArgs(0), IdLoc(L) {
+ SourceLocation L, SourceLocation R)
+ : Args(0), NumArgs(0), IdLoc(L), RParenLoc(R) {
BaseOrMember = reinterpret_cast<uintptr_t>(Member);
assert((BaseOrMember & 0x01) == 0 && "Invalid member pointer");
@@ -622,6 +622,7 @@ CXXConstructorDecl::setBaseOrMemberInitializers(
CXXBaseOrMemberInitializer *Member =
new (C) CXXBaseOrMemberInitializer(VBase->getType(), 0, 0,
VBaseDecl->getDefaultConstructor(C),
+ SourceLocation(),
SourceLocation());
AllToInit.push_back(Member);
}
@@ -648,6 +649,7 @@ CXXConstructorDecl::setBaseOrMemberInitializers(
CXXBaseOrMemberInitializer *Member =
new (C) CXXBaseOrMemberInitializer(Base->getType(), 0, 0,
BaseDecl->getDefaultConstructor(C),
+ SourceLocation(),
SourceLocation());
AllToInit.push_back(Member);
}
@@ -690,6 +692,7 @@ CXXConstructorDecl::setBaseOrMemberInitializers(
CXXBaseOrMemberInitializer *Member =
new (C) CXXBaseOrMemberInitializer((*Field), 0, 0,
Ctor,
+ SourceLocation(),
SourceLocation());
AllToInit.push_back(Member);
}
diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp
index 377a9deb41..89ea7cce27 100644
--- a/lib/Sema/SemaDeclCXX.cpp
+++ b/lib/Sema/SemaDeclCXX.cpp
@@ -797,7 +797,7 @@ Sema::BuildMemberInitializer(FieldDecl *Member, Expr **Args,
}
// FIXME: Perform direct initialization of the member.
return new (Context) CXXBaseOrMemberInitializer(Member, (Expr **)Args,
- NumArgs, C, IdLoc);
+ NumArgs, C, IdLoc, RParenLoc);
}
Sema::MemInitResult
@@ -880,7 +880,7 @@ Sema::BuildBaseInitializer(QualType BaseType, Expr **Args,
}
return new (Context) CXXBaseOrMemberInitializer(BaseType, (Expr **)Args,
- NumArgs, C, IdLoc);
+ NumArgs, C, IdLoc, RParenLoc);
}
void