mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-27 17:31:33 +00:00
Cosmetic changes to parameter attribute verification.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73188 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
861d20aab4
commit
d6de30ceea
@ -61,7 +61,8 @@ const Attributes NoImplicitFloat = 1<<23; /// disable implicit floating point
|
|||||||
/// @brief Attributes that only apply to function parameters.
|
/// @brief Attributes that only apply to function parameters.
|
||||||
const Attributes ParameterOnly = ByVal | Nest | StructRet | NoCapture;
|
const Attributes ParameterOnly = ByVal | Nest | StructRet | NoCapture;
|
||||||
|
|
||||||
/// @brief Attributes that only apply to function.
|
/// @brief Attributes that may be applied to the function itself. These cannot
|
||||||
|
/// be used on return values or function parameters.
|
||||||
const Attributes FunctionOnly = NoReturn | NoUnwind | ReadNone | ReadOnly |
|
const Attributes FunctionOnly = NoReturn | NoUnwind | ReadNone | ReadOnly |
|
||||||
NoInline | AlwaysInline | OptimizeForSize | StackProtect | StackProtectReq |
|
NoInline | AlwaysInline | OptimizeForSize | StackProtect | StackProtectReq |
|
||||||
NoRedZone | NoImplicitFloat;
|
NoRedZone | NoImplicitFloat;
|
||||||
@ -186,7 +187,7 @@ public:
|
|||||||
|
|
||||||
/// getFnAttributes - The function attributes are returned.
|
/// getFnAttributes - The function attributes are returned.
|
||||||
Attributes getFnAttributes() const {
|
Attributes getFnAttributes() const {
|
||||||
return getAttributes(~0);
|
return getAttributes(~0U);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// paramHasAttr - Return true if the specified parameter index has the
|
/// paramHasAttr - Return true if the specified parameter index has the
|
||||||
|
@ -276,8 +276,8 @@ namespace {
|
|||||||
int VT, unsigned ArgNo, std::string &Suffix);
|
int VT, unsigned ArgNo, std::string &Suffix);
|
||||||
void VerifyIntrinsicPrototype(Intrinsic::ID ID, Function *F,
|
void VerifyIntrinsicPrototype(Intrinsic::ID ID, Function *F,
|
||||||
unsigned RetNum, unsigned ParamNum, ...);
|
unsigned RetNum, unsigned ParamNum, ...);
|
||||||
void VerifyAttrs(Attributes Attrs, const Type *Ty,
|
void VerifyParameterAttrs(Attributes Attrs, const Type *Ty,
|
||||||
bool isReturnValue, const Value *V);
|
bool isReturnValue, const Value *V);
|
||||||
void VerifyFunctionAttrs(const FunctionType *FT, const AttrListPtr &Attrs,
|
void VerifyFunctionAttrs(const FunctionType *FT, const AttrListPtr &Attrs,
|
||||||
const Value *V);
|
const Value *V);
|
||||||
|
|
||||||
@ -437,22 +437,23 @@ void Verifier::visitGlobalAlias(GlobalAlias &GA) {
|
|||||||
void Verifier::verifyTypeSymbolTable(TypeSymbolTable &ST) {
|
void Verifier::verifyTypeSymbolTable(TypeSymbolTable &ST) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// VerifyAttrs - Check the given parameter attributes for an argument or return
|
// VerifyParameterAttrs - Check the given attributes for an argument or return
|
||||||
// value of the specified type. The value V is printed in error messages.
|
// value of the specified type. The value V is printed in error messages.
|
||||||
void Verifier::VerifyAttrs(Attributes Attrs, const Type *Ty,
|
void Verifier::VerifyParameterAttrs(Attributes Attrs, const Type *Ty,
|
||||||
bool isReturnValue, const Value *V) {
|
bool isReturnValue, const Value *V) {
|
||||||
if (Attrs == Attribute::None)
|
if (Attrs == Attribute::None)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
Attributes FnCheckAttr = Attrs & Attribute::FunctionOnly;
|
||||||
|
Assert1(!FnCheckAttr, "Attribute " + Attribute::getAsString(FnCheckAttr) +
|
||||||
|
" only applies to the function!", V);
|
||||||
|
|
||||||
if (isReturnValue) {
|
if (isReturnValue) {
|
||||||
Attributes RetI = Attrs & Attribute::ParameterOnly;
|
Attributes RetI = Attrs & Attribute::ParameterOnly;
|
||||||
Assert1(!RetI, "Attribute " + Attribute::getAsString(RetI) +
|
Assert1(!RetI, "Attribute " + Attribute::getAsString(RetI) +
|
||||||
" does not apply to return values!", V);
|
" does not apply to return values!", V);
|
||||||
}
|
}
|
||||||
Attributes FnCheckAttr = Attrs & Attribute::FunctionOnly;
|
|
||||||
Assert1(!FnCheckAttr, "Attribute " + Attribute::getAsString(FnCheckAttr) +
|
|
||||||
" only applies to functions!", V);
|
|
||||||
|
|
||||||
for (unsigned i = 0;
|
for (unsigned i = 0;
|
||||||
i < array_lengthof(Attribute::MutuallyIncompatible); ++i) {
|
i < array_lengthof(Attribute::MutuallyIncompatible); ++i) {
|
||||||
Attributes MutI = Attrs & Attribute::MutuallyIncompatible[i];
|
Attributes MutI = Attrs & Attribute::MutuallyIncompatible[i];
|
||||||
@ -495,9 +496,9 @@ void Verifier::VerifyFunctionAttrs(const FunctionType *FT,
|
|||||||
else if (Attr.Index-1 < FT->getNumParams())
|
else if (Attr.Index-1 < FT->getNumParams())
|
||||||
Ty = FT->getParamType(Attr.Index-1);
|
Ty = FT->getParamType(Attr.Index-1);
|
||||||
else
|
else
|
||||||
break; // VarArgs attributes, don't verify.
|
break; // VarArgs attributes, verified elsewhere.
|
||||||
|
|
||||||
VerifyAttrs(Attr.Attrs, Ty, Attr.Index == 0, V);
|
VerifyParameterAttrs(Attr.Attrs, Ty, Attr.Index == 0, V);
|
||||||
|
|
||||||
if (Attr.Attrs & Attribute::Nest) {
|
if (Attr.Attrs & Attribute::Nest) {
|
||||||
Assert1(!SawNest, "More than one parameter has attribute nest!", V);
|
Assert1(!SawNest, "More than one parameter has attribute nest!", V);
|
||||||
@ -509,10 +510,10 @@ void Verifier::VerifyFunctionAttrs(const FunctionType *FT,
|
|||||||
}
|
}
|
||||||
|
|
||||||
Attributes FAttrs = Attrs.getFnAttributes();
|
Attributes FAttrs = Attrs.getFnAttributes();
|
||||||
Assert1(!(FAttrs & (~Attribute::FunctionOnly)),
|
Attributes NotFn = FAttrs & (~Attribute::FunctionOnly);
|
||||||
"Attribute " + Attribute::getAsString(FAttrs) +
|
Assert1(!NotFn, "Attribute " + Attribute::getAsString(NotFn) +
|
||||||
" does not apply to function!", V);
|
" does not apply to the function!", V);
|
||||||
|
|
||||||
for (unsigned i = 0;
|
for (unsigned i = 0;
|
||||||
i < array_lengthof(Attribute::MutuallyIncompatible); ++i) {
|
i < array_lengthof(Attribute::MutuallyIncompatible); ++i) {
|
||||||
Attributes MutI = FAttrs & Attribute::MutuallyIncompatible[i];
|
Attributes MutI = FAttrs & Attribute::MutuallyIncompatible[i];
|
||||||
@ -1025,7 +1026,7 @@ void Verifier::VerifyCallSite(CallSite CS) {
|
|||||||
for (unsigned Idx = 1 + FTy->getNumParams(); Idx <= CS.arg_size(); ++Idx) {
|
for (unsigned Idx = 1 + FTy->getNumParams(); Idx <= CS.arg_size(); ++Idx) {
|
||||||
Attributes Attr = Attrs.getParamAttributes(Idx);
|
Attributes Attr = Attrs.getParamAttributes(Idx);
|
||||||
|
|
||||||
VerifyAttrs(Attr, CS.getArgument(Idx-1)->getType(), false, I);
|
VerifyParameterAttrs(Attr, CS.getArgument(Idx-1)->getType(), false, I);
|
||||||
|
|
||||||
Attributes VArgI = Attr & Attribute::VarArgsIncompatible;
|
Attributes VArgI = Attr & Attribute::VarArgsIncompatible;
|
||||||
Assert1(!VArgI, "Attribute " + Attribute::getAsString(VArgI) +
|
Assert1(!VArgI, "Attribute " + Attribute::getAsString(VArgI) +
|
||||||
|
Loading…
x
Reference in New Issue
Block a user