Browse Source

StringRef::compare_numeric also differed from StringRef::compare for characters > 127.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112189 91177308-0d34-0410-b5e6-96231b3b80d8
Benjamin Kramer 15 years ago
parent
commit
837bccd052
2 changed files with 2 additions and 1 deletions
  1. 1 1
      lib/Support/StringRef.cpp
  2. 1 0
      unittests/ADT/StringRefTest.cpp

+ 1 - 1
lib/Support/StringRef.cpp

@@ -59,7 +59,7 @@ int StringRef::compare_numeric(StringRef RHS) const {
           break;
       }
     }
-    return Data[I] < RHS.Data[I] ? -1 : 1;
+    return (unsigned char)Data[I] < (unsigned char)RHS.Data[I] ? -1 : 1;
   }
   if (Length == RHS.Length)
     return 0;

+ 1 - 0
unittests/ADT/StringRefTest.cpp

@@ -72,6 +72,7 @@ TEST(StringRefTest, StringOps) {
   EXPECT_EQ( 0, StringRef("10a").compare_numeric("10a"));
   EXPECT_EQ( 1, StringRef("2").compare_numeric("1"));
   EXPECT_EQ( 0, StringRef("llvm_v1i64_ty").compare_numeric("llvm_v1i64_ty"));
+  EXPECT_EQ( 1, StringRef("\xFF").compare_numeric("\1"));
 }
 
 TEST(StringRefTest, Operators) {