[cfe-commits] r167507 - in /cfe/trunk: include/clang/AST/ExprCXX.h include/clang/Sema/Sema.h lib/AST/ExprCXX.cpp lib/Sema/SemaExprCXX.cpp lib/Serialization/ASTReaderStmt.cpp lib/Serialization/ASTWriterStmt.cpp
Philip Craig
philipjcraig at gmail.com
Tue Nov 6 21:51:04 PST 2012
Hi David,
Here is a patch for a unit test. Please commit it if it is okay.
On Wed, Nov 7, 2012 at 10:12 AM, David Blaikie <dblaikie at gmail.com> wrote:
> Author: dblaikie
> Date: Tue Nov 6 18:12:38 2012
> New Revision: 167507
>
> URL: http://llvm.org/viewvc/llvm-project?rev=167507&view=rev
> Log:
> PR13552: Fix the end location of a CXXNewExpr.
>
> Spent longer than reasonable looking for a nice way to test this & decided to
> give up for now. Open to suggestions/requests. Richard Smith suggested adding
> something to ASTMatchers but it wasn't readily apparent how to test this with
> that.
>
> Modified:
> cfe/trunk/include/clang/AST/ExprCXX.h
> cfe/trunk/include/clang/Sema/Sema.h
> cfe/trunk/lib/AST/ExprCXX.cpp
> cfe/trunk/lib/Sema/SemaExprCXX.cpp
> cfe/trunk/lib/Serialization/ASTReaderStmt.cpp
> cfe/trunk/lib/Serialization/ASTWriterStmt.cpp
>
> Modified: cfe/trunk/include/clang/AST/ExprCXX.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/ExprCXX.h?rev=167507&r1=167506&r2=167507&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/AST/ExprCXX.h (original)
> +++ cfe/trunk/include/clang/AST/ExprCXX.h Tue Nov 6 18:12:38 2012
> @@ -1463,8 +1463,8 @@
> /// the source range covering the parenthesized type-id.
> SourceRange TypeIdParens;
>
> - /// \brief Location of the first token.
> - SourceLocation StartLoc;
> + /// \brief Range of the entire new expression.
> + SourceRange Range;
>
> /// \brief Source-range of a paren-delimited initializer.
> SourceRange DirectInitRange;
> @@ -1498,7 +1498,7 @@
> SourceRange typeIdParens, Expr *arraySize,
> InitializationStyle initializationStyle, Expr *initializer,
> QualType ty, TypeSourceInfo *AllocatedTypeInfo,
> - SourceLocation startLoc, SourceRange directInitRange);
> + SourceRange Range, SourceRange directInitRange);
> explicit CXXNewExpr(EmptyShell Shell)
> : Expr(CXXNewExprClass, Shell), SubExprs(0) { }
>
> @@ -1613,13 +1613,13 @@
> return SubExprs + Array + hasInitializer() + getNumPlacementArgs();
> }
>
> - SourceLocation getStartLoc() const { return StartLoc; }
> - SourceLocation getEndLoc() const;
> + SourceLocation getStartLoc() const { return Range.getBegin(); }
> + SourceLocation getEndLoc() const { return Range.getEnd(); }
>
> SourceRange getDirectInitRange() const { return DirectInitRange; }
>
> SourceRange getSourceRange() const LLVM_READONLY {
> - return SourceRange(getStartLoc(), getEndLoc());
> + return Range;
> }
>
> static bool classof(const Stmt *T) {
>
> Modified: cfe/trunk/include/clang/Sema/Sema.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Sema.h?rev=167507&r1=167506&r2=167507&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Sema/Sema.h (original)
> +++ cfe/trunk/include/clang/Sema/Sema.h Tue Nov 6 18:12:38 2012
> @@ -3762,7 +3762,7 @@
> SourceLocation PlacementRParen,
> SourceRange TypeIdParens, Declarator &D,
> Expr *Initializer);
> - ExprResult BuildCXXNew(SourceLocation StartLoc, bool UseGlobal,
> + ExprResult BuildCXXNew(SourceRange Range, bool UseGlobal,
> SourceLocation PlacementLParen,
> MultiExprArg PlacementArgs,
> SourceLocation PlacementRParen,
>
> Modified: cfe/trunk/lib/AST/ExprCXX.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ExprCXX.cpp?rev=167507&r1=167506&r2=167507&view=diff
> ==============================================================================
> --- cfe/trunk/lib/AST/ExprCXX.cpp (original)
> +++ cfe/trunk/lib/AST/ExprCXX.cpp Tue Nov 6 18:12:38 2012
> @@ -88,14 +88,14 @@
> InitializationStyle initializationStyle,
> Expr *initializer, QualType ty,
> TypeSourceInfo *allocatedTypeInfo,
> - SourceLocation startLoc, SourceRange directInitRange)
> + SourceRange Range, SourceRange directInitRange)
> : Expr(CXXNewExprClass, ty, VK_RValue, OK_Ordinary,
> ty->isDependentType(), ty->isDependentType(),
> ty->isInstantiationDependentType(),
> ty->containsUnexpandedParameterPack()),
> SubExprs(0), OperatorNew(operatorNew), OperatorDelete(operatorDelete),
> AllocatedTypeInfo(allocatedTypeInfo), TypeIdParens(typeIdParens),
> - StartLoc(startLoc), DirectInitRange(directInitRange),
> + Range(Range), DirectInitRange(directInitRange),
> GlobalNew(globalNew), UsualArrayDeleteWantsSize(usualArrayDeleteWantsSize) {
> assert((initializer != 0 || initializationStyle == NoInit) &&
> "Only NoInit can have no initializer.");
> @@ -147,18 +147,6 @@
> castAs<FunctionProtoType>()->isNothrow(Ctx);
> }
>
> -SourceLocation CXXNewExpr::getEndLoc() const {
> - switch (getInitializationStyle()) {
> - case NoInit:
> - return AllocatedTypeInfo->getTypeLoc().getEndLoc();
> - case CallInit:
> - return DirectInitRange.getEnd();
> - case ListInit:
> - return getInitializer()->getSourceRange().getEnd();
> - }
> - llvm_unreachable("bogus initialization style");
> -}
> -
> // CXXDeleteExpr
> QualType CXXDeleteExpr::getDestroyedType() const {
> const Expr *Arg = getArgument();
>
> Modified: cfe/trunk/lib/Sema/SemaExprCXX.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprCXX.cpp?rev=167507&r1=167506&r2=167507&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaExprCXX.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaExprCXX.cpp Tue Nov 6 18:12:38 2012
> @@ -987,7 +987,7 @@
> if (ParenListExpr *List = dyn_cast_or_null<ParenListExpr>(Initializer))
> DirectInitRange = List->getSourceRange();
>
> - return BuildCXXNew(StartLoc, UseGlobal,
> + return BuildCXXNew(SourceRange(StartLoc, D.getLocEnd()), UseGlobal,
> PlacementLParen,
> PlacementArgs,
> PlacementRParen,
> @@ -1020,7 +1020,7 @@
> }
>
> ExprResult
> -Sema::BuildCXXNew(SourceLocation StartLoc, bool UseGlobal,
> +Sema::BuildCXXNew(SourceRange Range, bool UseGlobal,
> SourceLocation PlacementLParen,
> MultiExprArg PlacementArgs,
> SourceLocation PlacementRParen,
> @@ -1032,6 +1032,7 @@
> Expr *Initializer,
> bool TypeMayContainAuto) {
> SourceRange TypeRange = AllocTypeInfo->getTypeLoc().getSourceRange();
> + SourceLocation StartLoc = Range.getBegin();
>
> CXXNewExpr::InitializationStyle initStyle;
> if (DirectInitRange.isValid()) {
> @@ -1407,7 +1408,7 @@
> TypeIdParens,
> ArraySize, initStyle, Initializer,
> ResultType, AllocTypeInfo,
> - StartLoc, DirectInitRange));
> + Range, DirectInitRange));
> }
>
> /// \brief Checks that a type is suitable as the allocated type
>
> Modified: cfe/trunk/lib/Serialization/ASTReaderStmt.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReaderStmt.cpp?rev=167507&r1=167506&r2=167507&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Serialization/ASTReaderStmt.cpp (original)
> +++ cfe/trunk/lib/Serialization/ASTReaderStmt.cpp Tue Nov 6 18:12:38 2012
> @@ -1243,7 +1243,7 @@
> E->setOperatorDelete(ReadDeclAs<FunctionDecl>(Record, Idx));
> E->AllocatedTypeInfo = GetTypeSourceInfo(Record, Idx);
> E->TypeIdParens = ReadSourceRange(Record, Idx);
> - E->StartLoc = ReadSourceLocation(Record, Idx);
> + E->Range = ReadSourceRange(Record, Idx);
> E->DirectInitRange = ReadSourceRange(Record, Idx);
>
> E->AllocateArgsArray(Reader.getContext(), isArray, NumPlacementArgs,
>
> Modified: cfe/trunk/lib/Serialization/ASTWriterStmt.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriterStmt.cpp?rev=167507&r1=167506&r2=167507&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Serialization/ASTWriterStmt.cpp (original)
> +++ cfe/trunk/lib/Serialization/ASTWriterStmt.cpp Tue Nov 6 18:12:38 2012
> @@ -1236,7 +1236,7 @@
> Writer.AddDeclRef(E->getOperatorDelete(), Record);
> Writer.AddTypeSourceInfo(E->getAllocatedTypeSourceInfo(), Record);
> Writer.AddSourceRange(E->getTypeIdParens(), Record);
> - Writer.AddSourceLocation(E->getStartLoc(), Record);
> + Writer.AddSourceRange(E->getSourceRange(), Record);
> Writer.AddSourceRange(E->getDirectInitRange(), Record);
> for (CXXNewExpr::arg_iterator I = E->raw_arg_begin(), e = E->raw_arg_end();
> I != e; ++I)
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
-------------- next part --------------
A non-text attachment was scrubbed...
Name: test-new-range.patch
Type: application/octet-stream
Size: 569 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20121107/6a54323c/attachment.obj>
More information about the cfe-commits
mailing list