From: Anders Carlsson Date: Sat, 29 Aug 2009 01:31:33 +0000 (+0000) Subject: Store the SourceLocation of right parentheses in member initializers. Patch by Anders... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8c57a66a2aa59939a902ffa8c4ad0ddd5b949a21;p=clang 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 --- 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(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(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