mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
Fix fpcmp infinite loop when comparing "29-266" with "29-268".
llvm-svn: 46455
This commit is contained in:
parent
20854cf4e7
commit
947e17ae75
@ -20,11 +20,15 @@
|
||||
#include <cctype>
|
||||
using namespace llvm;
|
||||
|
||||
static bool isNumberChar(char C) {
|
||||
static bool isSignedChar(char C) {
|
||||
if (C == '+' || C == '-')
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool isExpoentChar(char C) {
|
||||
switch (C) {
|
||||
case '0': case '1': case '2': case '3': case '4':
|
||||
case '5': case '6': case '7': case '8': case '9':
|
||||
case '.': case '+': case '-':
|
||||
case 'D': // Strange exponential notation.
|
||||
case 'd': // Strange exponential notation.
|
||||
case 'e':
|
||||
@ -33,13 +37,25 @@ static bool isNumberChar(char C) {
|
||||
}
|
||||
}
|
||||
|
||||
static bool isNumberChar(char C) {
|
||||
switch (C) {
|
||||
case '0': case '1': case '2': case '3': case '4':
|
||||
case '5': case '6': case '7': case '8': case '9':
|
||||
case '.': return true;
|
||||
default: return isSignedChar(C) || isExpoentChar(C);
|
||||
}
|
||||
}
|
||||
|
||||
static char *BackupNumber(char *Pos, char *FirstChar) {
|
||||
// If we didn't stop in the middle of a number, don't backup.
|
||||
if (!isNumberChar(*Pos)) return Pos;
|
||||
|
||||
// Otherwise, return to the start of the number.
|
||||
while (Pos > FirstChar && isNumberChar(Pos[-1]))
|
||||
while (Pos > FirstChar && isNumberChar(Pos[-1])) {
|
||||
--Pos;
|
||||
if (Pos > FirstChar && isSignedChar(Pos[0]) && !isExpoentChar(Pos[-1]))
|
||||
break;
|
||||
}
|
||||
return Pos;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user