Add static cast to unsigned char whenever a character classification function is called with a signed char argument, in order to avoid assertions in Windows Debug configuration.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@175006 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Guy Benyei
2013-02-12 21:21:59 +00:00
parent 5f3c4a3910
commit 87d0b9ed14
18 changed files with 80 additions and 56 deletions

View File

@ -119,7 +119,9 @@ static void UnEscapeLexed(std::string &Str) {
if (BIn < EndBuffer-1 && BIn[1] == '\\') { if (BIn < EndBuffer-1 && BIn[1] == '\\') {
*BOut++ = '\\'; // Two \ becomes one *BOut++ = '\\'; // Two \ becomes one
BIn += 2; BIn += 2;
} else if (BIn < EndBuffer-2 && isxdigit(BIn[1]) && isxdigit(BIn[2])) { } else if (BIn < EndBuffer-2 &&
isxdigit(static_cast<unsigned char>(BIn[1])) &&
isxdigit(static_cast<unsigned char>(BIn[2]))) {
*BOut = hexDigitValue(BIn[1]) * 16 + hexDigitValue(BIn[2]); *BOut = hexDigitValue(BIn[1]) * 16 + hexDigitValue(BIn[2]);
BIn += 3; // Skip over handled chars BIn += 3; // Skip over handled chars
++BOut; ++BOut;
@ -135,7 +137,8 @@ static void UnEscapeLexed(std::string &Str) {
/// isLabelChar - Return true for [-a-zA-Z$._0-9]. /// isLabelChar - Return true for [-a-zA-Z$._0-9].
static bool isLabelChar(char C) { static bool isLabelChar(char C) {
return isalnum(C) || C == '-' || C == '$' || C == '.' || C == '_'; return isalnum(static_cast<unsigned char>(C)) || C == '-' || C == '$' ||
C == '.' || C == '_';
} }
@ -188,7 +191,7 @@ lltok::Kind LLLexer::LexToken() {
switch (CurChar) { switch (CurChar) {
default: default:
// Handle letters: [a-zA-Z_] // Handle letters: [a-zA-Z_]
if (isalpha(CurChar) || CurChar == '_') if (isalpha(static_cast<unsigned char>(CurChar)) || CurChar == '_')
return LexIdentifier(); return LexIdentifier();
return lltok::Error; return lltok::Error;
@ -282,8 +285,8 @@ lltok::Kind LLLexer::LexAt() {
return lltok::GlobalVar; return lltok::GlobalVar;
// Handle GlobalVarID: @[0-9]+ // Handle GlobalVarID: @[0-9]+
if (isdigit(CurPtr[0])) { if (isdigit(static_cast<unsigned char>(CurPtr[0]))) {
for (++CurPtr; isdigit(CurPtr[0]); ++CurPtr) for (++CurPtr; isdigit(static_cast<unsigned char>(CurPtr[0])); ++CurPtr)
/*empty*/; /*empty*/;
uint64_t Val = atoull(TokStart+1, CurPtr); uint64_t Val = atoull(TokStart+1, CurPtr);
@ -317,10 +320,12 @@ lltok::Kind LLLexer::ReadString(lltok::Kind kind) {
/// ReadVarName - Read the rest of a token containing a variable name. /// ReadVarName - Read the rest of a token containing a variable name.
bool LLLexer::ReadVarName() { bool LLLexer::ReadVarName() {
const char *NameStart = CurPtr; const char *NameStart = CurPtr;
if (isalpha(CurPtr[0]) || CurPtr[0] == '-' || CurPtr[0] == '$' || if (isalpha(static_cast<unsigned char>(CurPtr[0])) ||
CurPtr[0] == '-' || CurPtr[0] == '$' ||
CurPtr[0] == '.' || CurPtr[0] == '_') { CurPtr[0] == '.' || CurPtr[0] == '_') {
++CurPtr; ++CurPtr;
while (isalnum(CurPtr[0]) || CurPtr[0] == '-' || CurPtr[0] == '$' || while (isalnum(static_cast<unsigned char>(CurPtr[0])) ||
CurPtr[0] == '-' || CurPtr[0] == '$' ||
CurPtr[0] == '.' || CurPtr[0] == '_') CurPtr[0] == '.' || CurPtr[0] == '_')
++CurPtr; ++CurPtr;
@ -346,8 +351,8 @@ lltok::Kind LLLexer::LexPercent() {
return lltok::LocalVar; return lltok::LocalVar;
// Handle LocalVarID: %[0-9]+ // Handle LocalVarID: %[0-9]+
if (isdigit(CurPtr[0])) { if (isdigit(static_cast<unsigned char>(CurPtr[0]))) {
for (++CurPtr; isdigit(CurPtr[0]); ++CurPtr) for (++CurPtr; isdigit(static_cast<unsigned char>(CurPtr[0])); ++CurPtr)
/*empty*/; /*empty*/;
uint64_t Val = atoull(TokStart+1, CurPtr); uint64_t Val = atoull(TokStart+1, CurPtr);
@ -381,10 +386,12 @@ lltok::Kind LLLexer::LexQuote() {
/// ! /// !
lltok::Kind LLLexer::LexExclaim() { lltok::Kind LLLexer::LexExclaim() {
// Lex a metadata name as a MetadataVar. // Lex a metadata name as a MetadataVar.
if (isalpha(CurPtr[0]) || CurPtr[0] == '-' || CurPtr[0] == '$' || if (isalpha(static_cast<unsigned char>(CurPtr[0])) ||
CurPtr[0] == '-' || CurPtr[0] == '$' ||
CurPtr[0] == '.' || CurPtr[0] == '_' || CurPtr[0] == '\\') { CurPtr[0] == '.' || CurPtr[0] == '_' || CurPtr[0] == '\\') {
++CurPtr; ++CurPtr;
while (isalnum(CurPtr[0]) || CurPtr[0] == '-' || CurPtr[0] == '$' || while (isalnum(static_cast<unsigned char>(CurPtr[0])) ||
CurPtr[0] == '-' || CurPtr[0] == '$' ||
CurPtr[0] == '.' || CurPtr[0] == '_' || CurPtr[0] == '\\') CurPtr[0] == '.' || CurPtr[0] == '_' || CurPtr[0] == '\\')
++CurPtr; ++CurPtr;
@ -399,8 +406,8 @@ lltok::Kind LLLexer::LexExclaim() {
/// AttrGrpID ::= #[0-9]+ /// AttrGrpID ::= #[0-9]+
lltok::Kind LLLexer::LexHash() { lltok::Kind LLLexer::LexHash() {
// Handle AttrGrpID: #[0-9]+ // Handle AttrGrpID: #[0-9]+
if (isdigit(CurPtr[0])) { if (isdigit(static_cast<unsigned char>(CurPtr[0]))) {
for (++CurPtr; isdigit(CurPtr[0]); ++CurPtr) for (++CurPtr; isdigit(static_cast<unsigned char>(CurPtr[0])); ++CurPtr)
/*empty*/; /*empty*/;
uint64_t Val = atoull(TokStart+1, CurPtr); uint64_t Val = atoull(TokStart+1, CurPtr);
@ -425,8 +432,11 @@ lltok::Kind LLLexer::LexIdentifier() {
for (; isLabelChar(*CurPtr); ++CurPtr) { for (; isLabelChar(*CurPtr); ++CurPtr) {
// If we decide this is an integer, remember the end of the sequence. // If we decide this is an integer, remember the end of the sequence.
if (!IntEnd && !isdigit(*CurPtr)) IntEnd = CurPtr; if (!IntEnd && !isdigit(static_cast<unsigned char>(*CurPtr)))
if (!KeywordEnd && !isalnum(*CurPtr) && *CurPtr != '_') KeywordEnd = CurPtr; IntEnd = CurPtr;
if (!KeywordEnd && !isalnum(static_cast<unsigned char>(*CurPtr)) &&
*CurPtr != '_')
KeywordEnd = CurPtr;
} }
// If we stopped due to a colon, this really is a label. // If we stopped due to a colon, this really is a label.
@ -676,7 +686,8 @@ lltok::Kind LLLexer::LexIdentifier() {
// Check for [us]0x[0-9A-Fa-f]+ which are Hexadecimal constant generated by // Check for [us]0x[0-9A-Fa-f]+ which are Hexadecimal constant generated by
// the CFE to avoid forcing it to deal with 64-bit numbers. // the CFE to avoid forcing it to deal with 64-bit numbers.
if ((TokStart[0] == 'u' || TokStart[0] == 's') && if ((TokStart[0] == 'u' || TokStart[0] == 's') &&
TokStart[1] == '0' && TokStart[2] == 'x' && isxdigit(TokStart[3])) { TokStart[1] == '0' && TokStart[2] == 'x' &&
isxdigit(static_cast<unsigned char>(TokStart[3]))) {
int len = CurPtr-TokStart-3; int len = CurPtr-TokStart-3;
uint32_t bits = len * 4; uint32_t bits = len * 4;
APInt Tmp(bits, StringRef(TokStart+3, len), 16); APInt Tmp(bits, StringRef(TokStart+3, len), 16);
@ -716,13 +727,13 @@ lltok::Kind LLLexer::Lex0x() {
Kind = 'J'; Kind = 'J';
} }
if (!isxdigit(CurPtr[0])) { if (!isxdigit(static_cast<unsigned char>(CurPtr[0]))) {
// Bad token, return it as an error. // Bad token, return it as an error.
CurPtr = TokStart+1; CurPtr = TokStart+1;
return lltok::Error; return lltok::Error;
} }
while (isxdigit(CurPtr[0])) while (isxdigit(static_cast<unsigned char>(CurPtr[0])))
++CurPtr; ++CurPtr;
if (Kind == 'J') { if (Kind == 'J') {
@ -769,7 +780,8 @@ lltok::Kind LLLexer::Lex0x() {
/// HexPPC128Constant 0xM[0-9A-Fa-f]+ /// HexPPC128Constant 0xM[0-9A-Fa-f]+
lltok::Kind LLLexer::LexDigitOrNegative() { lltok::Kind LLLexer::LexDigitOrNegative() {
// If the letter after the negative is not a number, this is probably a label. // If the letter after the negative is not a number, this is probably a label.
if (!isdigit(TokStart[0]) && !isdigit(CurPtr[0])) { if (!isdigit(static_cast<unsigned char>(TokStart[0])) &&
!isdigit(static_cast<unsigned char>(CurPtr[0]))) {
// Okay, this is not a number after the -, it's probably a label. // Okay, this is not a number after the -, it's probably a label.
if (const char *End = isLabelTail(CurPtr)) { if (const char *End = isLabelTail(CurPtr)) {
StrVal.assign(TokStart, End-1); StrVal.assign(TokStart, End-1);
@ -783,7 +795,7 @@ lltok::Kind LLLexer::LexDigitOrNegative() {
// At this point, it is either a label, int or fp constant. // At this point, it is either a label, int or fp constant.
// Skip digits, we have at least one. // Skip digits, we have at least one.
for (; isdigit(CurPtr[0]); ++CurPtr) for (; isdigit(static_cast<unsigned char>(CurPtr[0])); ++CurPtr)
/*empty*/; /*empty*/;
// Check to see if this really is a label afterall, e.g. "-1:". // Check to see if this really is a label afterall, e.g. "-1:".
@ -820,13 +832,14 @@ lltok::Kind LLLexer::LexDigitOrNegative() {
++CurPtr; ++CurPtr;
// Skip over [0-9]*([eE][-+]?[0-9]+)? // Skip over [0-9]*([eE][-+]?[0-9]+)?
while (isdigit(CurPtr[0])) ++CurPtr; while (isdigit(static_cast<unsigned char>(CurPtr[0]))) ++CurPtr;
if (CurPtr[0] == 'e' || CurPtr[0] == 'E') { if (CurPtr[0] == 'e' || CurPtr[0] == 'E') {
if (isdigit(CurPtr[1]) || if (isdigit(static_cast<unsigned char>(CurPtr[1])) ||
((CurPtr[1] == '-' || CurPtr[1] == '+') && isdigit(CurPtr[2]))) { ((CurPtr[1] == '-' || CurPtr[1] == '+') &&
isdigit(static_cast<unsigned char>(CurPtr[2])))) {
CurPtr += 2; CurPtr += 2;
while (isdigit(CurPtr[0])) ++CurPtr; while (isdigit(static_cast<unsigned char>(CurPtr[0]))) ++CurPtr;
} }
} }
@ -838,11 +851,11 @@ lltok::Kind LLLexer::LexDigitOrNegative() {
lltok::Kind LLLexer::LexPositive() { lltok::Kind LLLexer::LexPositive() {
// If the letter after the negative is a number, this is probably not a // If the letter after the negative is a number, this is probably not a
// label. // label.
if (!isdigit(CurPtr[0])) if (!isdigit(static_cast<unsigned char>(CurPtr[0])))
return lltok::Error; return lltok::Error;
// Skip digits. // Skip digits.
for (++CurPtr; isdigit(CurPtr[0]); ++CurPtr) for (++CurPtr; isdigit(static_cast<unsigned char>(CurPtr[0])); ++CurPtr)
/*empty*/; /*empty*/;
// At this point, we need a '.'. // At this point, we need a '.'.
@ -854,13 +867,14 @@ lltok::Kind LLLexer::LexPositive() {
++CurPtr; ++CurPtr;
// Skip over [0-9]*([eE][-+]?[0-9]+)? // Skip over [0-9]*([eE][-+]?[0-9]+)?
while (isdigit(CurPtr[0])) ++CurPtr; while (isdigit(static_cast<unsigned char>(CurPtr[0]))) ++CurPtr;
if (CurPtr[0] == 'e' || CurPtr[0] == 'E') { if (CurPtr[0] == 'e' || CurPtr[0] == 'E') {
if (isdigit(CurPtr[1]) || if (isdigit(static_cast<unsigned char>(CurPtr[1])) ||
((CurPtr[1] == '-' || CurPtr[1] == '+') && isdigit(CurPtr[2]))) { ((CurPtr[1] == '-' || CurPtr[1] == '+') &&
isdigit(static_cast<unsigned char>(CurPtr[2])))) {
CurPtr += 2; CurPtr += 2;
while (isdigit(CurPtr[0])) ++CurPtr; while (isdigit(static_cast<unsigned char>(CurPtr[0]))) ++CurPtr;
} }
} }

View File

@ -2038,7 +2038,7 @@ getRegForInlineAsmConstraint(const std::string &Constraint,
/// a matching constraint like "4". /// a matching constraint like "4".
bool TargetLowering::AsmOperandInfo::isMatchingInputConstraint() const { bool TargetLowering::AsmOperandInfo::isMatchingInputConstraint() const {
assert(!ConstraintCode.empty() && "No known constraint!"); assert(!ConstraintCode.empty() && "No known constraint!");
return isdigit(ConstraintCode[0]); return isdigit(static_cast<unsigned char>(ConstraintCode[0]));
} }
/// getMatchedOperand - If this is an input matching constraint, this method /// getMatchedOperand - If this is an input matching constraint, this method

View File

@ -80,7 +80,7 @@ unsigned TargetInstrInfo::getInlineAsmLength(const char *Str,
if (*Str == '\n' || strncmp(Str, MAI.getSeparatorString(), if (*Str == '\n' || strncmp(Str, MAI.getSeparatorString(),
strlen(MAI.getSeparatorString())) == 0) strlen(MAI.getSeparatorString())) == 0)
atInsnStart = true; atInsnStart = true;
if (atInsnStart && !std::isspace(*Str)) { if (atInsnStart && !std::isspace(static_cast<unsigned char>(*Str))) {
Length += MAI.getMaxInstLength(); Length += MAI.getMaxInstLength();
atInsnStart = false; atInsnStart = false;
} }

View File

@ -117,7 +117,7 @@ static void PrintLLVMName(raw_ostream &OS, StringRef Name, PrefixType Prefix) {
} }
// Scan the name to see if it needs quotes first. // Scan the name to see if it needs quotes first.
bool NeedsQuotes = isdigit(Name[0]); bool NeedsQuotes = isdigit(static_cast<unsigned char>(Name[0]));
if (!NeedsQuotes) { if (!NeedsQuotes) {
for (unsigned i = 0, e = Name.size(); i != e; ++i) { for (unsigned i = 0, e = Name.size(); i != e; ++i) {
// By making this unsigned, the value passed in to isalnum will always be // By making this unsigned, the value passed in to isalnum will always be
@ -125,7 +125,8 @@ static void PrintLLVMName(raw_ostream &OS, StringRef Name, PrefixType Prefix) {
// its implementation will assert. This situation can arise when dealing // its implementation will assert. This situation can arise when dealing
// with UTF-8 multibyte characters. // with UTF-8 multibyte characters.
unsigned char C = Name[i]; unsigned char C = Name[i];
if (!isalnum(C) && C != '-' && C != '.' && C != '_') { if (!isalnum(static_cast<unsigned char>(C)) && C != '-' && C != '.' &&
C != '_') {
NeedsQuotes = true; NeedsQuotes = true;
break; break;
} }
@ -1392,14 +1393,16 @@ void AssemblyWriter::printNamedMDNode(const NamedMDNode *NMD) {
if (Name.empty()) { if (Name.empty()) {
Out << "<empty name> "; Out << "<empty name> ";
} else { } else {
if (isalpha(Name[0]) || Name[0] == '-' || Name[0] == '$' || if (isalpha(static_cast<unsigned char>(Name[0])) ||
Name[0] == '-' || Name[0] == '$' ||
Name[0] == '.' || Name[0] == '_') Name[0] == '.' || Name[0] == '_')
Out << Name[0]; Out << Name[0];
else else
Out << '\\' << hexdigit(Name[0] >> 4) << hexdigit(Name[0] & 0x0F); Out << '\\' << hexdigit(Name[0] >> 4) << hexdigit(Name[0] & 0x0F);
for (unsigned i = 1, e = Name.size(); i != e; ++i) { for (unsigned i = 1, e = Name.size(); i != e; ++i) {
unsigned char C = Name[i]; unsigned char C = Name[i];
if (isalnum(C) || C == '-' || C == '$' || C == '.' || C == '_') if (isalnum(static_cast<unsigned char>(C)) || C == '-' || C == '$' ||
C == '.' || C == '_')
Out << C; Out << C;
else else
Out << '\\' << hexdigit(C >> 4) << hexdigit(C & 0x0F); Out << '\\' << hexdigit(C >> 4) << hexdigit(C & 0x0F);

View File

@ -151,10 +151,10 @@ bool InlineAsm::ConstraintInfo::Parse(StringRef Str,
if (ConstraintEnd == E) return true; // "{foo" if (ConstraintEnd == E) return true; // "{foo"
pCodes->push_back(std::string(I, ConstraintEnd+1)); pCodes->push_back(std::string(I, ConstraintEnd+1));
I = ConstraintEnd+1; I = ConstraintEnd+1;
} else if (isdigit(*I)) { // Matching Constraint } else if (isdigit(static_cast<unsigned char>(*I))) { // Matching Constraint
// Maximal munch numbers. // Maximal munch numbers.
StringRef::iterator NumStart = I; StringRef::iterator NumStart = I;
while (I != E && isdigit(*I)) while (I != E && isdigit(static_cast<unsigned char>(*I)))
++I; ++I;
pCodes->push_back(std::string(NumStart, I)); pCodes->push_back(std::string(NumStart, I));
unsigned N = atoi(pCodes->back().c_str()); unsigned N = atoi(pCodes->back().c_str());

View File

@ -130,12 +130,13 @@ static bool isValidName(StringRef MDName) {
if (MDName.empty()) if (MDName.empty())
return false; return false;
if (!std::isalpha(MDName[0])) if (!std::isalpha(static_cast<unsigned char>(MDName[0])))
return false; return false;
for (StringRef::iterator I = MDName.begin() + 1, E = MDName.end(); I != E; for (StringRef::iterator I = MDName.begin() + 1, E = MDName.end(); I != E;
++I) { ++I) {
if (!std::isalnum(*I) && *I != '_' && *I != '-' && *I != '.') if (!std::isalnum(static_cast<unsigned char>(*I)) && *I != '_' &&
*I != '-' && *I != '.')
return false; return false;
} }
return true; return true;

View File

@ -606,7 +606,8 @@ void ModuleLinker::computeTypeMapping() {
// Check to see if there is a dot in the name followed by a digit. // Check to see if there is a dot in the name followed by a digit.
size_t DotPos = ST->getName().rfind('.'); size_t DotPos = ST->getName().rfind('.');
if (DotPos == 0 || DotPos == StringRef::npos || if (DotPos == 0 || DotPos == StringRef::npos ||
ST->getName().back() == '.' || !isdigit(ST->getName()[DotPos+1])) ST->getName().back() == '.' ||
!isdigit(static_cast<unsigned char>(ST->getName()[DotPos+1])))
continue; continue;
// Check to see if the destination module has a struct with the prefix name. // Check to see if the destination module has a struct with the prefix name.

View File

@ -1622,7 +1622,8 @@ void AsmParser::DiagHandler(const SMDiagnostic &Diag, void *Context) {
// we can't do that. AsmLexer.cpp should probably be changed to handle // we can't do that. AsmLexer.cpp should probably be changed to handle
// '@' as a special case when needed. // '@' as a special case when needed.
static bool isIdentifierChar(char c) { static bool isIdentifierChar(char c) {
return isalnum(c) || c == '_' || c == '$' || c == '.'; return isalnum(static_cast<unsigned char>(c)) || c == '_' || c == '$' ||
c == '.';
} }
bool AsmParser::expandMacro(raw_svector_ostream &OS, StringRef Body, bool AsmParser::expandMacro(raw_svector_ostream &OS, StringRef Body,
@ -1646,7 +1647,8 @@ bool AsmParser::expandMacro(raw_svector_ostream &OS, StringRef Body,
continue; continue;
char Next = Body[Pos + 1]; char Next = Body[Pos + 1];
if (Next == '$' || Next == 'n' || isdigit(Next)) if (Next == '$' || Next == 'n' ||
isdigit(static_cast<unsigned char>(Next)))
break; break;
} else { } else {
// This macro has parameters, look for \foo, \bar, etc. // This macro has parameters, look for \foo, \bar, etc.
@ -3094,7 +3096,8 @@ void AsmParser::CheckForBadMacro(SMLoc DirectiveLoc, StringRef Name,
if (Body[Pos] != '$' || Pos + 1 == End) if (Body[Pos] != '$' || Pos + 1 == End)
continue; continue;
char Next = Body[Pos + 1]; char Next = Body[Pos + 1];
if (Next == '$' || Next == 'n' || isdigit(Next)) if (Next == '$' || Next == 'n' ||
isdigit(static_cast<unsigned char>(Next)))
break; break;
} }

View File

@ -165,9 +165,9 @@ bool MCSectionMachO::isVirtualSection() const {
/// StripSpaces - This removes leading and trailing spaces from the StringRef. /// StripSpaces - This removes leading and trailing spaces from the StringRef.
static void StripSpaces(StringRef &Str) { static void StripSpaces(StringRef &Str) {
while (!Str.empty() && isspace(Str[0])) while (!Str.empty() && isspace(static_cast<unsigned char>(Str[0])))
Str = Str.substr(1); Str = Str.substr(1);
while (!Str.empty() && isspace(Str.back())) while (!Str.empty() && isspace(static_cast<unsigned char>(Str.back())))
Str = Str.substr(0, Str.size()-1); Str = Str.substr(0, Str.size()-1);
} }

View File

@ -267,7 +267,7 @@ error_code COFFObjectFile::getSymbolNMTypeChar(DataRefImpl Symb,
} }
if (symb->StorageClass == COFF::IMAGE_SYM_CLASS_EXTERNAL) if (symb->StorageClass == COFF::IMAGE_SYM_CLASS_EXTERNAL)
ret = ::toupper(ret); ret = ::toupper(static_cast<unsigned char>(ret));
Result = ret; Result = ret;
return object_error::success; return object_error::success;

View File

@ -273,7 +273,7 @@ error_code MachOObjectFile::getSymbolNMTypeChar(DataRefImpl DRI,
} }
if (Flags & (macho::STF_External | macho::STF_PrivateExtern)) if (Flags & (macho::STF_External | macho::STF_PrivateExtern))
Char = toupper(Char); Char = toupper(static_cast<unsigned char>(Char));
Result = Char; Result = Char;
return object_error::success; return object_error::success;
} }

View File

@ -87,9 +87,9 @@ static bool CompareNumbers(const char *&F1P, const char *&F2P,
// If one of the positions is at a space and the other isn't, chomp up 'til // If one of the positions is at a space and the other isn't, chomp up 'til
// the end of the space. // the end of the space.
while (isspace(*F1P) && F1P != F1End) while (isspace(static_cast<unsigned char>(*F1P)) && F1P != F1End)
++F1P; ++F1P;
while (isspace(*F2P) && F2P != F2End) while (isspace(static_cast<unsigned char>(*F2P)) && F2P != F2End)
++F2P; ++F2P;
// If we stop on numbers, compare their difference. // If we stop on numbers, compare their difference.

View File

@ -44,7 +44,8 @@ namespace {
#ifdef LLVM_ON_WIN32 #ifdef LLVM_ON_WIN32
// C: // C:
if (path.size() >= 2 && std::isalpha(path[0]) && path[1] == ':') if (path.size() >= 2 && std::isalpha(static_cast<unsigned char>(path[0])) &&
path[1] == ':')
return path.substr(0, 2); return path.substr(0, 2);
#endif #endif

View File

@ -82,7 +82,7 @@ Path::isValid() const {
pos = path.rfind(':',len); pos = path.rfind(':',len);
size_t rootslash = 0; size_t rootslash = 0;
if (pos != std::string::npos) { if (pos != std::string::npos) {
if (pos != 1 || !isalpha(path[0]) || len < 3) if (pos != 1 || !isalpha(static_cast<unsigned char>(path[0])) || len < 3)
return false; return false;
rootslash = 2; rootslash = 2;
} }

View File

@ -241,7 +241,8 @@ raw_ostream &raw_ostream::operator<<(double N) {
if (cs == '+' || cs == '-') { if (cs == '+' || cs == '-') {
int c1 = buf[len - 2]; int c1 = buf[len - 2];
int c0 = buf[len - 1]; int c0 = buf[len - 1];
if (isdigit(c1) && isdigit(c0)) { if (isdigit(static_cast<unsigned char>(c1)) &&
isdigit(static_cast<unsigned char>(c0))) {
// Trim leading '0': "...e+012" -> "...e+12\0" // Trim leading '0': "...e+012" -> "...e+12\0"
buf[len - 3] = c1; buf[len - 3] = c1;
buf[len - 2] = c0; buf[len - 2] = c0;

View File

@ -450,7 +450,7 @@ static bool ParseBlock(BitstreamCursor &Stream, unsigned BlockID,
outs() << " blob data = "; outs() << " blob data = ";
bool BlobIsPrintable = true; bool BlobIsPrintable = true;
for (unsigned i = 0, e = Blob.size(); i != e; ++i) for (unsigned i = 0, e = Blob.size(); i != e; ++i)
if (!isprint(Blob[i])) { if (!isprint(static_cast<unsigned char>(Blob[i]))) {
BlobIsPrintable = false; BlobIsPrintable = false;
break; break;
} }

View File

@ -481,7 +481,7 @@ static void PrintSectionContents(const ObjectFile *o) {
// Print ascii. // Print ascii.
outs() << " "; outs() << " ";
for (std::size_t i = 0; i < 16 && addr + i < end; ++i) { for (std::size_t i = 0; i < 16 && addr + i < end; ++i) {
if (std::isprint(Contents[addr + i] & 0xFF)) if (std::isprint(static_cast<unsigned char>(Contents[addr + i]) & 0xFF))
outs() << Contents[addr + i]; outs() << Contents[addr + i];
else else
outs() << "."; outs() << ".";

View File

@ -242,7 +242,7 @@ bool Pattern::ParsePattern(StringRef PatternStr, SourceMgr &SM,
} }
// Name can't start with a digit. // Name can't start with a digit.
if (isdigit(Name[0])) { if (isdigit(static_cast<unsigned char>(Name[0]))) {
SM.PrintMessage(SMLoc::getFromPointer(Name.data()), SourceMgr::DK_Error, SM.PrintMessage(SMLoc::getFromPointer(Name.data()), SourceMgr::DK_Error,
"invalid name in named regex"); "invalid name in named regex");
return true; return true;