Audit uses of StringRef::getAsInteger.

llvm-svn: 152565
This commit is contained in:
Michael J. Spencer 2012-03-12 18:13:36 +00:00
parent 8986c599b4
commit 166b090a46
2 changed files with 10 additions and 22 deletions

View File

@ -764,13 +764,10 @@ void YAMLAtomState::setRefName(const char *n) {
} }
void YAMLAtomState::setAlign2(const char *s) { void YAMLAtomState::setAlign2(const char *s) {
llvm::StringRef str(s); if (llvm::StringRef(s).getAsInteger(10, _alignment.powerOf2))
uint32_t res; _alignment.powerOf2 = 1;
str.getAsInteger(10, res);
_alignment.powerOf2 = static_cast<uint16_t>(res);
} }
void YAMLAtomState::setFixupKind(const char *s) { void YAMLAtomState::setFixupKind(const char *s) {
_ref._kind = _platform.kindFromString(llvm::StringRef(s)); _ref._kind = _platform.kindFromString(llvm::StringRef(s));
} }
@ -915,7 +912,7 @@ llvm::error_code parseObjectText( llvm::MemoryBuffer *mb
} }
else if (strcmp(entry->key, KeyValues::sizeKeyword) == 0) { else if (strcmp(entry->key, KeyValues::sizeKeyword) == 0) {
llvm::StringRef val = entry->value; llvm::StringRef val = entry->value;
if ( val.getAsInteger(0, atomState._size) ) if (val.getAsInteger(0, atomState._size))
return make_error_code(yaml_reader_error::illegal_value); return make_error_code(yaml_reader_error::illegal_value);
haveAtom = true; haveAtom = true;
} }
@ -956,9 +953,9 @@ llvm::error_code parseObjectText( llvm::MemoryBuffer *mb
haveFixup = true; haveFixup = true;
} }
else if (strcmp(entry->key, KeyValues::fixupsOffsetKeyword) == 0) { else if (strcmp(entry->key, KeyValues::fixupsOffsetKeyword) == 0) {
llvm::APInt Val; if (llvm::StringRef(entry->value).getAsInteger(0,
llvm::StringRef(entry->value).getAsInteger(0, Val); atomState._ref._offsetInAtom))
atomState._ref._offsetInAtom = Val.getZExtValue(); return make_error_code(yaml_reader_error::illegal_value);
haveFixup = true; haveFixup = true;
} }
else if (strcmp(entry->key, KeyValues::fixupsTargetKeyword) == 0) { else if (strcmp(entry->key, KeyValues::fixupsTargetKeyword) == 0) {
@ -966,19 +963,9 @@ llvm::error_code parseObjectText( llvm::MemoryBuffer *mb
haveFixup = true; haveFixup = true;
} }
else if (strcmp(entry->key, KeyValues::fixupsAddendKeyword) == 0) { else if (strcmp(entry->key, KeyValues::fixupsAddendKeyword) == 0) {
llvm::APInt Val;
// HACK: getAsInteger for APInt doesn't handle negative values
// the same as other getAsInteger functions. And getAsInteger
// doesn't work on all platforms for {,u}int64_t. So manually
// handle this until getAsInteger is fixed.
bool IsNeg = false;
llvm::StringRef Addend(entry->value); llvm::StringRef Addend(entry->value);
if (Addend.find('-') == 0) { if (Addend.getAsInteger(0, atomState._ref._addend))
IsNeg = true; return make_error_code(yaml_reader_error::illegal_value);
Addend = Addend.substr(1);
}
Addend.getAsInteger(0, Val);
atomState._ref._addend = Val.getSExtValue() * (IsNeg ? -1 : 1);
haveFixup = true; haveFixup = true;
} }
} }

View File

@ -269,7 +269,8 @@ public:
return p->value; return p->value;
} }
int k; int k;
kindName.getAsInteger(0, k); if (kindName.getAsInteger(0, k))
k = 0;
return k; return k;
} }