summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Midvidy <amidvidy@gmail.com>2015-05-15 12:05:32 -0400
committerAdam Midvidy <amidvidy@gmail.com>2015-05-15 15:50:19 -0400
commitf3c262d1ab45e6fa59cd84ea90a150bde3372dd0 (patch)
tree745ca397810f7cccd67508037176fd5290023462
parent20e130aceda766c646d123d8a853ea5aabbeab26 (diff)
downloadmongo-f3c262d1ab45e6fa59cd84ea90a150bde3372dd0.tar.gz
SERVER-18373 implement UNREACHABLE using invariantFailed so we know how it fails
-rw-r--r--src/mongo/db/query/plan_cache.cpp4
-rw-r--r--src/mongo/db/repl/database_task.cpp7
-rw-r--r--src/mongo/db/repl/minvalid.cpp5
-rw-r--r--src/mongo/db/repl/replication_coordinator_external_state_impl.cpp2
-rw-r--r--src/mongo/db/repl/sync.cpp4
-rw-r--r--src/mongo/platform/compiler.h13
-rw-r--r--src/mongo/platform/compiler_gcc.h2
-rw-r--r--src/mongo/platform/compiler_msvc.h1
-rw-r--r--src/mongo/util/assert_util.h13
9 files changed, 23 insertions, 28 deletions
diff --git a/src/mongo/db/query/plan_cache.cpp b/src/mongo/db/query/plan_cache.cpp
index 166f09ea494..b574691b584 100644
--- a/src/mongo/db/query/plan_cache.cpp
+++ b/src/mongo/db/query/plan_cache.cpp
@@ -43,7 +43,7 @@
#include "mongo/db/query/plan_ranker.h"
#include "mongo/db/query/query_solution.h"
#include "mongo/db/query/query_knobs.h"
-#include "mongo/platform/compiler.h"
+#include "mongo/util/assert_util.h"
#include "mongo/util/log.h"
#include "mongo/util/mongoutils/str.h"
@@ -409,7 +409,7 @@ namespace {
<< "tree=" << this->tree->toString()
<< ")";
}
- MONGO_COMPILER_UNREACHABLE;
+ MONGO_UNREACHABLE;
}
//
diff --git a/src/mongo/db/repl/database_task.cpp b/src/mongo/db/repl/database_task.cpp
index 83a6678e93a..716155a3716 100644
--- a/src/mongo/db/repl/database_task.cpp
+++ b/src/mongo/db/repl/database_task.cpp
@@ -33,7 +33,6 @@
#include "mongo/db/curop.h"
#include "mongo/db/operation_context.h"
#include "mongo/db/repl/database_task.h"
-#include "mongo/platform/compiler.h"
#include "mongo/util/assert_util.h"
namespace mongo {
@@ -51,7 +50,7 @@ namespace repl {
Lock::GlobalWrite lock(txn->lockState());
return task(txn, status);
} MONGO_WRITE_CONFLICT_RETRY_LOOP_END(txn, "globalExclusiveLockTask", "global");
- MONGO_COMPILER_UNREACHABLE;
+ MONGO_UNREACHABLE;
};
return newTask;
}
@@ -71,7 +70,7 @@ namespace repl {
Lock::DBLock lock(txn->lockState(), databaseName, mode);
return task(txn, status);
} MONGO_WRITE_CONFLICT_RETRY_LOOP_END(txn, "databaseLockTask", databaseName);
- MONGO_COMPILER_UNREACHABLE;
+ MONGO_UNREACHABLE;
};
return newTask;
}
@@ -92,7 +91,7 @@ namespace repl {
Lock::CollectionLock collectionLock(txn->lockState(), nss.toString(), mode);
return task(txn, status);
} MONGO_WRITE_CONFLICT_RETRY_LOOP_END(txn, "collectionLockTask", nss.toString());
- MONGO_COMPILER_UNREACHABLE;
+ MONGO_UNREACHABLE;
};
return newTask;
}
diff --git a/src/mongo/db/repl/minvalid.cpp b/src/mongo/db/repl/minvalid.cpp
index 7773d90370d..4ccfbb7eb7e 100644
--- a/src/mongo/db/repl/minvalid.cpp
+++ b/src/mongo/db/repl/minvalid.cpp
@@ -39,7 +39,7 @@
#include "mongo/db/jsobj.h"
#include "mongo/db/operation_context.h"
#include "mongo/db/operation_context_impl.h"
-#include "mongo/platform/compiler.h"
+#include "mongo/util/assert_util.h"
#include "mongo/util/log.h"
namespace mongo {
@@ -95,8 +95,7 @@ namespace {
return false;
} MONGO_WRITE_CONFLICT_RETRY_LOOP_END(&txn, "getInitialSyncFlags", minvalidNS);
- // fixes compile errors on GCC - see SERVER-18219 for details
- MONGO_COMPILER_UNREACHABLE;
+ MONGO_UNREACHABLE;
}
Timestamp getMinValid(OperationContext* txn) {
diff --git a/src/mongo/db/repl/replication_coordinator_external_state_impl.cpp b/src/mongo/db/repl/replication_coordinator_external_state_impl.cpp
index df2cc2421d7..fdbe881da62 100644
--- a/src/mongo/db/repl/replication_coordinator_external_state_impl.cpp
+++ b/src/mongo/db/repl/replication_coordinator_external_state_impl.cpp
@@ -58,6 +58,7 @@
#include "mongo/db/storage/storage_engine.h"
#include "mongo/s/d_state.h"
#include "mongo/stdx/functional.h"
+#include "mongo/util/assert_util.h"
#include "mongo/util/log.h"
#include "mongo/util/mongoutils/str.h"
#include "mongo/util/net/hostandport.h"
@@ -238,6 +239,7 @@ namespace {
} MONGO_WRITE_CONFLICT_RETRY_LOOP_END(txn,
"save replica set lastVote",
lastVoteCollectionName);
+ MONGO_UNREACHABLE;
}
catch (const DBException& ex) {
return ex.toStatus();
diff --git a/src/mongo/db/repl/sync.cpp b/src/mongo/db/repl/sync.cpp
index e1b7663ab1b..d964eba222b 100644
--- a/src/mongo/db/repl/sync.cpp
+++ b/src/mongo/db/repl/sync.cpp
@@ -44,7 +44,6 @@
#include "mongo/db/operation_context.h"
#include "mongo/db/record_id.h"
#include "mongo/db/repl/oplogreader.h"
-#include "mongo/platform/compiler.h"
#include "mongo/util/assert_util.h"
#include "mongo/util/log.h"
@@ -157,8 +156,7 @@ namespace repl {
}
} MONGO_WRITE_CONFLICT_RETRY_LOOP_END(txn, "InsertRetry", nss.ns());
- // fixes compile errors on GCC - see SERVER-18219 for details
- MONGO_COMPILER_UNREACHABLE;
+ MONGO_UNREACHABLE;
}
} // namespace repl
diff --git a/src/mongo/platform/compiler.h b/src/mongo/platform/compiler.h
index d261a1781e3..5ce6ed82ee7 100644
--- a/src/mongo/platform/compiler.h
+++ b/src/mongo/platform/compiler.h
@@ -119,19 +119,6 @@
*
* Same correct/incorrect usage as for MONGO_COMPILER_API_EXPORT.
*
- * MONGO_COMPILER_UNREACHABLE
- *
- * Instructs the compiler that a line of code will never be reached.
- *
- *
- * Example:
- * // code above checks that expr can only be FOO or BAR
- * switch (expr) {
- * case FOO: { ... }
- * case BAR: { ... }
- * default:
- * MONGO_COMPILER_UNREACHABLE;
- *
*/
#if defined(_MSC_VER)
diff --git a/src/mongo/platform/compiler_gcc.h b/src/mongo/platform/compiler_gcc.h
index 553f599b335..431465893c9 100644
--- a/src/mongo/platform/compiler_gcc.h
+++ b/src/mongo/platform/compiler_gcc.h
@@ -64,5 +64,3 @@
#define MONGO_likely(x) static_cast<bool>(__builtin_expect(static_cast<bool>(x), 1))
#define MONGO_unlikely(x) static_cast<bool>(__builtin_expect(static_cast<bool>(x), 0))
-
-#define MONGO_COMPILER_UNREACHABLE __builtin_unreachable()
diff --git a/src/mongo/platform/compiler_msvc.h b/src/mongo/platform/compiler_msvc.h
index 4a029fe40ed..50ceb8851d2 100644
--- a/src/mongo/platform/compiler_msvc.h
+++ b/src/mongo/platform/compiler_msvc.h
@@ -57,4 +57,3 @@
#define MONGO_likely(x) bool(x)
#define MONGO_unlikely(x) bool(x)
-#define MONGO_COMPILER_UNREACHABLE __assume(0)
diff --git a/src/mongo/util/assert_util.h b/src/mongo/util/assert_util.h
index 572c9c8e7c9..7fe9a8271e7 100644
--- a/src/mongo/util/assert_util.h
+++ b/src/mongo/util/assert_util.h
@@ -394,3 +394,16 @@ namespace mongo {
<< std::endl; \
}
+/**
+ * The purpose of this macro is to instruct the compiler that a line of code will never be reached.
+ *
+ * Example:
+ * // code above checks that expr can only be FOO or BAR
+ * switch (expr) {
+ * case FOO: { ... }
+ * case BAR: { ... }
+ * default:
+ * MONGO_UNREACHABLE;
+ */
+
+#define MONGO_UNREACHABLE ::mongo::invariantFailed("Hit a MONGO_UNREACHABLE!", __FILE__, __LINE__);