summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Option/OptTable.cpp
diff options
context:
space:
mode:
authorEli Friedman <eli.friedman@gmail.com>2013-09-10 23:22:56 +0000
committerEli Friedman <eli.friedman@gmail.com>2013-09-10 23:22:56 +0000
commit3e7dca6718b2ad3723aba00ad25f7d43f2d3b8b5 (patch)
tree1c70a3286a3542d86ebd2d71131002c769a17788 /llvm/lib/Option/OptTable.cpp
parent78bffa57672cd4fcb0793470f17220c052e6e31b (diff)
downloadbcm5719-llvm-3e7dca6718b2ad3723aba00ad25f7d43f2d3b8b5.tar.gz
bcm5719-llvm-3e7dca6718b2ad3723aba00ad25f7d43f2d3b8b5.zip
Fix another mistake in r190442.
Sorry about that; I'll try to be more careful about DEBUG mode. llvm-svn: 190449
Diffstat (limited to 'llvm/lib/Option/OptTable.cpp')
-rw-r--r--llvm/lib/Option/OptTable.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/llvm/lib/Option/OptTable.cpp b/llvm/lib/Option/OptTable.cpp
index 5b4b5d35650..78c5ea2c441 100644
--- a/llvm/lib/Option/OptTable.cpp
+++ b/llvm/lib/Option/OptTable.cpp
@@ -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;
OpenPOWER on IntegriCloud