diff options
author | Adam Midvidy <amidvidy@gmail.com> | 2015-05-15 12:05:32 -0400 |
---|---|---|
committer | Adam Midvidy <amidvidy@gmail.com> | 2015-05-15 15:50:19 -0400 |
commit | f3c262d1ab45e6fa59cd84ea90a150bde3372dd0 (patch) | |
tree | 745ca397810f7cccd67508037176fd5290023462 | |
parent | 20e130aceda766c646d123d8a853ea5aabbeab26 (diff) | |
download | mongo-f3c262d1ab45e6fa59cd84ea90a150bde3372dd0.tar.gz |
SERVER-18373 implement UNREACHABLE using invariantFailed so we know how it fails
-rw-r--r-- | src/mongo/db/query/plan_cache.cpp | 4 | ||||
-rw-r--r-- | src/mongo/db/repl/database_task.cpp | 7 | ||||
-rw-r--r-- | src/mongo/db/repl/minvalid.cpp | 5 | ||||
-rw-r--r-- | src/mongo/db/repl/replication_coordinator_external_state_impl.cpp | 2 | ||||
-rw-r--r-- | src/mongo/db/repl/sync.cpp | 4 | ||||
-rw-r--r-- | src/mongo/platform/compiler.h | 13 | ||||
-rw-r--r-- | src/mongo/platform/compiler_gcc.h | 2 | ||||
-rw-r--r-- | src/mongo/platform/compiler_msvc.h | 1 | ||||
-rw-r--r-- | src/mongo/util/assert_util.h | 13 |
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__); |