Fix another mistake in r190442.
authorEli Friedman <eli.friedman@gmail.com>
Tue, 10 Sep 2013 23:22:56 +0000 (23:22 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Tue, 10 Sep 2013 23:22:56 +0000 (23:22 +0000)
Sorry about that; I'll try to be more careful about DEBUG mode.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190449 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Option/OptTable.cpp

index 5b4b5d35650e395208d773fe86b6c3403762a421..78c5ea2c4419bcf0e80ba2d862e6eb5aee97c7b3 100644 (file)
@@ -46,6 +46,35 @@ static int StrCmpOptionNameIgnoreCase(const char *A, const char *B) {
   return (a < b) ? -1 : 1;
 }
 
+#ifndef NDEBUG
+static int StrCmpOptionName(const char *A, const char *B) {
+  if (int N = StrCmpOptionNameIgnoreCase(A, B))
+    return N;
+  return strcmp(A, B);
+}
+
+static inline bool operator<(const OptTable::Info &A, const OptTable::Info &B) {
+  if (&A == &B)
+    return false;
+
+  if (int N = StrCmpOptionName(A.Name, B.Name))
+    return N < 0;
+
+  for (const char * const *APre = A.Prefixes,
+                  * const *BPre = B.Prefixes;
+                          *APre != 0 && *BPre != 0; ++APre, ++BPre) {
+    if (int N = StrCmpOptionName(*APre, *BPre))
+      return N < 0;
+  }
+
+  // Names are the same, check that classes are in order; exactly one
+  // should be joined, and it should succeed the other.
+  assert(((A.Kind == Option::JoinedClass) ^ (B.Kind == Option::JoinedClass)) &&
+         "Unexpected classes for options with same name.");
+  return B.Kind == Option::JoinedClass;
+}
+#endif
+
 // Support lower_bound between info and an option name.
 static inline bool operator<(const OptTable::Info &I, const char *Name) {
   return StrCmpOptionNameIgnoreCase(I.Name, Name) < 0;