mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-05 09:24:28 +00:00
Fix the really bizarre stuff that happened last night in the tester
due to non-numeric diff failures that caused fpcmp to go into infinite loops git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14098 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -54,6 +54,10 @@ static bool isNumberChar(char C) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static char *BackupNumber(char *Pos, char *FirstChar) {
|
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;
|
--Pos;
|
||||||
return Pos;
|
return Pos;
|
||||||
@ -61,8 +65,16 @@ static char *BackupNumber(char *Pos, char *FirstChar) {
|
|||||||
|
|
||||||
static void CompareNumbers(char *&F1P, char *&F2P, char *F1End, char *F2End) {
|
static void CompareNumbers(char *&F1P, char *&F2P, char *F1End, char *F2End) {
|
||||||
char *F1NumEnd, *F2NumEnd;
|
char *F1NumEnd, *F2NumEnd;
|
||||||
double V1 = strtod(F1P, &F1NumEnd);
|
double V1, V2;
|
||||||
double V2 = strtod(F2P, &F2NumEnd);
|
// If we stop on numbers, compare their difference.
|
||||||
|
if (isNumberChar(*F1P) && isNumberChar(*F2P)) {
|
||||||
|
V1 = strtod(F1P, &F1NumEnd);
|
||||||
|
V2 = strtod(F2P, &F2NumEnd);
|
||||||
|
} else {
|
||||||
|
// Otherwise, the diff failed.
|
||||||
|
F1NumEnd = F1P;
|
||||||
|
F2NumEnd = F2P;
|
||||||
|
}
|
||||||
|
|
||||||
if (F1NumEnd == F1P || F2NumEnd == F2P) {
|
if (F1NumEnd == F1P || F2NumEnd == F2P) {
|
||||||
std::cerr << "Comparison failed, not a numeric difference.\n";
|
std::cerr << "Comparison failed, not a numeric difference.\n";
|
||||||
|
Reference in New Issue
Block a user