From: Chris Lattner Date: Sun, 10 Aug 2008 02:05:13 +0000 (+0000) Subject: tighten up some code and some wording on diagnostics. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d1a0b6d3dfb208f638d3d750b588d9c0daa49289;p=clang tighten up some code and some wording on diagnostics. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@54607 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/DiagnosticKinds.def b/include/clang/Basic/DiagnosticKinds.def index 886b2970d1..9552c332ac 100644 --- a/include/clang/Basic/DiagnosticKinds.def +++ b/include/clang/Basic/DiagnosticKinds.def @@ -1139,13 +1139,13 @@ DIAG(err_shufflevector_non_vector, ERROR, DIAG(err_shufflevector_incompatible_vector, ERROR, "first two arguments to __builtin_shufflevector must have the same type") DIAG(err_shufflevector_nonconstant_argument, ERROR, - "indexes for __builtin_shufflevector must be constant integers") + "index for __builtin_shufflevector must be a constant integer") DIAG(err_shufflevector_argument_too_large, ERROR, - "indexes for __builtin_shufflevector must be less than the total number" + "index for __builtin_shufflevector must be less than the total number" " of vector elements") DIAG(err_stack_const_level, ERROR, - "the level argument for a stack address builtin must be constant") + "level argument for a stack address builtin must be constant") DIAG(err_prefetch_invalid_argument, ERROR, "argument to __builtin_prefetch must be a constant integer") diff --git a/lib/Sema/SemaChecking.cpp b/lib/Sema/SemaChecking.cpp index 2f2fe7dab6..dfd8f92cdc 100644 --- a/lib/Sema/SemaChecking.cpp +++ b/lib/Sema/SemaChecking.cpp @@ -224,9 +224,9 @@ bool Sema::SemaBuiltinStackAddress(CallExpr *TheCall) { // The signature for these builtins is exact; the only thing we need // to check is that the argument is a constant. SourceLocation Loc; - if (!TheCall->getArg(0)->isIntegerConstantExpr(Context, &Loc)) { + if (!TheCall->getArg(0)->isIntegerConstantExpr(Context, &Loc)) return Diag(Loc, diag::err_stack_const_level, TheCall->getSourceRange()); - } + return false; } @@ -258,43 +258,35 @@ Action::ExprResult Sema::SemaBuiltinShuffleVector(CallExpr *TheCall) { unsigned numElements = FAType->getAsVectorType()->getNumElements(); if (TheCall->getNumArgs() != numElements+2) { if (TheCall->getNumArgs() < numElements+2) - Diag(TheCall->getLocEnd(), diag::err_typecheck_call_too_few_args, - TheCall->getSourceRange()); - else - Diag(TheCall->getLocEnd(), diag::err_typecheck_call_too_many_args, - TheCall->getSourceRange()); - return true; + return Diag(TheCall->getLocEnd(), diag::err_typecheck_call_too_few_args, + TheCall->getSourceRange()); + return Diag(TheCall->getLocEnd(), diag::err_typecheck_call_too_many_args, + TheCall->getSourceRange()); } for (unsigned i = 2; i < TheCall->getNumArgs(); i++) { llvm::APSInt Result(32); - if (!TheCall->getArg(i)->isIntegerConstantExpr(Result, Context)) { - Diag(TheCall->getLocStart(), - diag::err_shufflevector_nonconstant_argument, - TheCall->getArg(i)->getSourceRange()); - return true; - } - if (Result.getActiveBits() > 64 || Result.getZExtValue() >= numElements*2) { - Diag(TheCall->getLocStart(), - diag::err_shufflevector_argument_too_large, - TheCall->getArg(i)->getSourceRange()); - return true; - } + if (!TheCall->getArg(i)->isIntegerConstantExpr(Result, Context)) + return Diag(TheCall->getLocStart(), + diag::err_shufflevector_nonconstant_argument, + TheCall->getArg(i)->getSourceRange()); + + if (Result.getActiveBits() > 64 || Result.getZExtValue() >= numElements*2) + return Diag(TheCall->getLocStart(), + diag::err_shufflevector_argument_too_large, + TheCall->getArg(i)->getSourceRange()); } llvm::SmallVector exprs; - for (unsigned i = 0; i < TheCall->getNumArgs(); i++) { + for (unsigned i = 0, e = TheCall->getNumArgs(); i != e; i++) { exprs.push_back(TheCall->getArg(i)); TheCall->setArg(i, 0); } - ShuffleVectorExpr* E = new ShuffleVectorExpr( - exprs.begin(), numElements+2, FAType, - TheCall->getCallee()->getLocStart(), - TheCall->getRParenLoc()); - - return E; + return new ShuffleVectorExpr(exprs.begin(), numElements+2, FAType, + TheCall->getCallee()->getLocStart(), + TheCall->getRParenLoc()); } /// SemaBuiltinPrefetch - Handle __builtin_prefetch.