From: Anders Carlsson Date: Wed, 23 Sep 2009 00:37:25 +0000 (+0000) Subject: Cast the array size expr to a size_t X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ac18b2e3af8d0c5304f74e362a1d4207363e4c94;p=clang Cast the array size expr to a size_t git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@82594 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp index b11f39795d..79909b557d 100644 --- a/lib/Sema/SemaExprCXX.cpp +++ b/lib/Sema/SemaExprCXX.cpp @@ -402,12 +402,15 @@ Sema::BuildCXXNew(SourceLocation StartLoc, bool UseGlobal, llvm::APSInt Value; if (ArraySize->isIntegerConstantExpr(Value, Context, 0, false)) { if (Value < llvm::APSInt( - llvm::APInt::getNullValue(Value.getBitWidth()), false)) + llvm::APInt::getNullValue(Value.getBitWidth()), + Value.isUnsigned())) return ExprError(Diag(ArraySize->getSourceRange().getBegin(), diag::err_typecheck_negative_array_size) << ArraySize->getSourceRange()); } } + + ImpCastExprToType(ArraySize, Context.getSizeType()); } FunctionDecl *OperatorNew = 0; diff --git a/test/SemaCXX/new-delete.cpp b/test/SemaCXX/new-delete.cpp index 0ddf24da78..50af17d265 100644 --- a/test/SemaCXX/new-delete.cpp +++ b/test/SemaCXX/new-delete.cpp @@ -42,6 +42,8 @@ void good_news() //V *pv = new (ps) V; pi = new (S(1.0f, 2)) int; + + (void)new int[true]; } struct abstract {