forked from OSchip/llvm-project
Simplifying some diagnostics so that they don't need to work with StringRefs. No functional changes intended.
llvm-svn: 198051
This commit is contained in:
parent
190bad459c
commit
faed0fa3d7
|
@ -1835,7 +1835,7 @@ def err_init_priority_object_attr : Error<
|
|||
def err_attribute_argument_vec_type_hint : Error<
|
||||
"invalid attribute argument %0 - expecting a vector or vectorizable scalar type">;
|
||||
def err_attribute_argument_out_of_bounds : Error<
|
||||
"'%0' attribute parameter %1 is out of bounds">;
|
||||
"%0 attribute parameter %1 is out of bounds">;
|
||||
def err_attribute_uuid_malformed_guid : Error<
|
||||
"uuid attribute contains a malformed GUID">;
|
||||
def warn_nonnull_pointers_only : Warning<
|
||||
|
@ -1845,7 +1845,7 @@ def err_attribute_pointers_only : Error<
|
|||
def err_attribute_no_member_pointers : Error<
|
||||
"%0 attribute cannot be used with pointers to members">;
|
||||
def err_attribute_invalid_implicit_this_argument : Error<
|
||||
"'%0' attribute is invalid for the implicit this argument">;
|
||||
"%0 attribute is invalid for the implicit this argument">;
|
||||
def err_ownership_type : Error<
|
||||
"%0 attribute only applies to %select{pointer|integer}1 arguments">;
|
||||
def err_format_strftime_third_parameter : Error<
|
||||
|
|
|
@ -261,8 +261,7 @@ static bool checkAttrMutualExclusion(Sema &S, Decl *D,
|
|||
///
|
||||
/// \returns true if IdxExpr is a valid index.
|
||||
static bool checkFunctionOrMethodArgumentIndex(Sema &S, const Decl *D,
|
||||
StringRef AttrName,
|
||||
SourceLocation AttrLoc,
|
||||
const AttributeList &Attr,
|
||||
unsigned AttrArgNum,
|
||||
const Expr *IdxExpr,
|
||||
uint64_t &Idx)
|
||||
|
@ -280,24 +279,24 @@ static bool checkFunctionOrMethodArgumentIndex(Sema &S, const Decl *D,
|
|||
llvm::APSInt IdxInt;
|
||||
if (IdxExpr->isTypeDependent() || IdxExpr->isValueDependent() ||
|
||||
!IdxExpr->isIntegerConstantExpr(IdxInt, S.Context)) {
|
||||
std::string Name = std::string("'") + AttrName.str() + std::string("'");
|
||||
S.Diag(AttrLoc, diag::err_attribute_argument_n_type) << Name.c_str()
|
||||
<< AttrArgNum << AANT_ArgumentIntegerConstant << IdxExpr->getSourceRange();
|
||||
S.Diag(Attr.getLoc(), diag::err_attribute_argument_n_type)
|
||||
<< Attr.getName() << AttrArgNum << AANT_ArgumentIntegerConstant
|
||||
<< IdxExpr->getSourceRange();
|
||||
return false;
|
||||
}
|
||||
|
||||
Idx = IdxInt.getLimitedValue();
|
||||
if (Idx < 1 || (!IV && Idx > NumArgs)) {
|
||||
S.Diag(AttrLoc, diag::err_attribute_argument_out_of_bounds)
|
||||
<< AttrName << AttrArgNum << IdxExpr->getSourceRange();
|
||||
S.Diag(Attr.getLoc(), diag::err_attribute_argument_out_of_bounds)
|
||||
<< Attr.getName() << AttrArgNum << IdxExpr->getSourceRange();
|
||||
return false;
|
||||
}
|
||||
Idx--; // Convert to zero-based.
|
||||
if (HasImplicitThisParam) {
|
||||
if (Idx == 0) {
|
||||
S.Diag(AttrLoc,
|
||||
S.Diag(Attr.getLoc(),
|
||||
diag::err_attribute_invalid_implicit_this_argument)
|
||||
<< AttrName << IdxExpr->getSourceRange();
|
||||
<< Attr.getName() << IdxExpr->getSourceRange();
|
||||
return false;
|
||||
}
|
||||
--Idx;
|
||||
|
@ -1186,8 +1185,7 @@ static void handleNonNullAttr(Sema &S, Decl *D, const AttributeList &Attr) {
|
|||
for (unsigned i = 0; i < Attr.getNumArgs(); ++i) {
|
||||
Expr *Ex = Attr.getArgAsExpr(i);
|
||||
uint64_t Idx;
|
||||
if (!checkFunctionOrMethodArgumentIndex(S, D, Attr.getName()->getName(),
|
||||
Attr.getLoc(), i + 1, Ex, Idx))
|
||||
if (!checkFunctionOrMethodArgumentIndex(S, D, Attr, i + 1, Ex, Idx))
|
||||
return;
|
||||
|
||||
// Is the function argument a pointer type?
|
||||
|
@ -1298,8 +1296,7 @@ static void handleOwnershipAttr(Sema &S, Decl *D, const AttributeList &AL) {
|
|||
for (unsigned i = 1; i < AL.getNumArgs(); ++i) {
|
||||
Expr *Ex = AL.getArgAsExpr(i);
|
||||
uint64_t Idx;
|
||||
if (!checkFunctionOrMethodArgumentIndex(S, D, AL.getName()->getName(),
|
||||
AL.getLoc(), i, Ex, Idx))
|
||||
if (!checkFunctionOrMethodArgumentIndex(S, D, AL, i, Ex, Idx))
|
||||
return;
|
||||
|
||||
// Is the function argument a pointer type?
|
||||
|
@ -2383,8 +2380,7 @@ static void handleFormatArgAttr(Sema &S, Decl *D, const AttributeList &Attr) {
|
|||
|
||||
Expr *IdxExpr = Attr.getArgAsExpr(0);
|
||||
uint64_t ArgIdx;
|
||||
if (!checkFunctionOrMethodArgumentIndex(S, D, Attr.getName()->getName(),
|
||||
Attr.getLoc(), 1, IdxExpr, ArgIdx))
|
||||
if (!checkFunctionOrMethodArgumentIndex(S, D, Attr, 1, IdxExpr, ArgIdx))
|
||||
return;
|
||||
|
||||
// make sure the format string is really a string
|
||||
|
@ -2567,7 +2563,7 @@ static void handleFormatAttr(Sema &S, Decl *D, const AttributeList &Attr) {
|
|||
|
||||
if (Idx < 1 || Idx > NumArgs) {
|
||||
S.Diag(Attr.getLoc(), diag::err_attribute_argument_out_of_bounds)
|
||||
<< "format" << 2 << IdxExpr->getSourceRange();
|
||||
<< Attr.getName() << 2 << IdxExpr->getSourceRange();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -2637,7 +2633,7 @@ static void handleFormatAttr(Sema &S, Decl *D, const AttributeList &Attr) {
|
|||
// if 0 it disables parameter checking (to use with e.g. va_list)
|
||||
} else if (FirstArg != 0 && FirstArg != NumArgs) {
|
||||
S.Diag(Attr.getLoc(), diag::err_attribute_argument_out_of_bounds)
|
||||
<< "format" << 3 << FirstArgExpr->getSourceRange();
|
||||
<< Attr.getName() << 3 << FirstArgExpr->getSourceRange();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -3323,7 +3319,6 @@ static void handleArgumentWithTypeTagAttr(Sema &S, Decl *D,
|
|||
if (!checkAttributeNumArgs(S, Attr, 3))
|
||||
return;
|
||||
|
||||
StringRef AttrName = Attr.getName()->getName();
|
||||
IdentifierInfo *ArgumentKind = Attr.getArgAsIdent(0)->Ident;
|
||||
|
||||
if (!isFunctionOrMethod(D) || !hasFunctionProto(D)) {
|
||||
|
@ -3333,18 +3328,16 @@ static void handleArgumentWithTypeTagAttr(Sema &S, Decl *D,
|
|||
}
|
||||
|
||||
uint64_t ArgumentIdx;
|
||||
if (!checkFunctionOrMethodArgumentIndex(S, D, AttrName,
|
||||
Attr.getLoc(), 2,
|
||||
Attr.getArgAsExpr(1), ArgumentIdx))
|
||||
if (!checkFunctionOrMethodArgumentIndex(S, D, Attr, 2, Attr.getArgAsExpr(1),
|
||||
ArgumentIdx))
|
||||
return;
|
||||
|
||||
uint64_t TypeTagIdx;
|
||||
if (!checkFunctionOrMethodArgumentIndex(S, D, AttrName,
|
||||
Attr.getLoc(), 3,
|
||||
Attr.getArgAsExpr(2), TypeTagIdx))
|
||||
if (!checkFunctionOrMethodArgumentIndex(S, D, Attr, 3, Attr.getArgAsExpr(2),
|
||||
TypeTagIdx))
|
||||
return;
|
||||
|
||||
bool IsPointer = (AttrName == "pointer_with_type_tag");
|
||||
bool IsPointer = (Attr.getName()->getName() == "pointer_with_type_tag");
|
||||
if (IsPointer) {
|
||||
// Ensure that buffer has a pointer type.
|
||||
QualType BufferTy = getFunctionOrMethodArgType(D, ArgumentIdx);
|
||||
|
|
|
@ -97,7 +97,7 @@ static void HandleMSP430InterruptAttr(Decl *d,
|
|||
unsigned Num = NumParams.getLimitedValue(255);
|
||||
if ((Num & 1) || Num > 30) {
|
||||
S.Diag(Attr.getLoc(), diag::err_attribute_argument_out_of_bounds)
|
||||
<< "interrupt" << (int)NumParams.getSExtValue()
|
||||
<< Attr.getName() << (int)NumParams.getSExtValue()
|
||||
<< NumParamsExpr->getSourceRange();
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue