aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cast/common/channel/message_util.cc1
-rw-r--r--cast/common/discovery/e2e_test/tests.cc12
-rw-r--r--cast/receiver/channel/receiver_socket_factory.cc2
-rw-r--r--cast/sender/cast_app_discovery_service_impl.cc1
-rw-r--r--cast/sender/channel/sender_socket_factory.cc3
-rw-r--r--cast/streaming/environment.cc1
-rw-r--r--cast/streaming/offer_messages.cc2
-rw-r--r--cast/test/cast_socket_e2e_test.cc4
-rw-r--r--discovery/dnssd/impl/dns_data_graph.cc1
-rw-r--r--discovery/mdns/mdns_record_changed_callback.h4
-rw-r--r--discovery/mdns/mdns_responder.cc3
-rw-r--r--discovery/mdns/public/mdns_constants.h1
-rw-r--r--osp/impl/quic/testing/fake_quic_connection.cc10
-rw-r--r--osp/impl/testing/fake_mdns_responder_adapter.cc6
-rw-r--r--osp/public/message_demuxer.cc2
-rw-r--r--platform/api/logging.h2
-rw-r--r--platform/impl/logging_posix.cc14
-rw-r--r--platform/impl/logging_test.h9
-rw-r--r--platform/impl/logging_unittest.cc109
-rw-r--r--platform/impl/socket_address_posix.cc6
-rw-r--r--platform/test/paths_internal_other.cc1
-rw-r--r--util/crypto/openssl_util.cc6
-rw-r--r--util/osp_logging.h9
23 files changed, 69 insertions, 140 deletions
diff --git a/cast/common/channel/message_util.cc b/cast/common/channel/message_util.cc
index 79b942bd..44505501 100644
--- a/cast/common/channel/message_util.cc
+++ b/cast/common/channel/message_util.cc
@@ -37,7 +37,6 @@ std::string ToString(AppAvailabilityResult availability) {
return "Unknown";
default:
OSP_NOTREACHED();
- return "bad value";
}
}
diff --git a/cast/common/discovery/e2e_test/tests.cc b/cast/common/discovery/e2e_test/tests.cc
index 373d1133..f39c39d5 100644
--- a/cast/common/discovery/e2e_test/tests.cc
+++ b/cast/common/discovery/e2e_test/tests.cc
@@ -105,7 +105,8 @@ class ServiceReceiver : public discovery::DnsSdServiceWatcher<ServiceInfo> {
class FailOnErrorReporting : public discovery::ReportingClient {
void OnFatalError(Error error) override {
- OSP_NOTREACHED() << "Fatal error received: '" << error << "'";
+ OSP_LOG_FATAL << "Fatal error received: '" << error << "'";
+ OSP_NOTREACHED();
}
void OnRecoverableError(Error error) override {
@@ -282,10 +283,8 @@ class DiscoveryE2ETest : public testing::Test {
return;
}
- if (attempts++ > kMaxCheckLoopIterations) {
- OSP_NOTREACHED() << "Service " << service_info.friendly_name
- << " publication failed.";
- }
+ OSP_CHECK_LE(attempts++, kMaxCheckLoopIterations)
+ << "Service " << service_info.friendly_name << " publication failed.";
task_runner_->PostTaskWithDelay(
[this, info = std::move(service_info), has_been_seen,
attempts]() mutable {
@@ -315,8 +314,7 @@ class DiscoveryE2ETest : public testing::Test {
// TODO(crbug.com/openscreen/110): Log the discovered service instance.
*has_been_seen = true;
} else {
- OSP_NOTREACHED() << "Found instance '" << service_info.friendly_name
- << "'!";
+ OSP_LOG_FATAL << "Found instance '" << service_info.friendly_name << "'!";
}
}
};
diff --git a/cast/receiver/channel/receiver_socket_factory.cc b/cast/receiver/channel/receiver_socket_factory.cc
index 5ad7246a..c8ddd691 100644
--- a/cast/receiver/channel/receiver_socket_factory.cc
+++ b/cast/receiver/channel/receiver_socket_factory.cc
@@ -32,7 +32,7 @@ void ReceiverSocketFactory::OnConnected(
TlsConnectionFactory* factory,
std::vector<uint8_t> der_x509_peer_cert,
std::unique_ptr<TlsConnection> connection) {
- OSP_NOTREACHED() << "This factory is accept-only.";
+ OSP_LOG_FATAL << "This factory is accept-only";
}
void ReceiverSocketFactory::OnConnectionFailed(
diff --git a/cast/sender/cast_app_discovery_service_impl.cc b/cast/sender/cast_app_discovery_service_impl.cc
index fd071ca2..4ca9a016 100644
--- a/cast/sender/cast_app_discovery_service_impl.cc
+++ b/cast/sender/cast_app_discovery_service_impl.cc
@@ -174,7 +174,6 @@ bool CastAppDiscoveryServiceImpl::ShouldRefreshAppAvailability(
}
OSP_NOTREACHED();
- return false;
}
void CastAppDiscoveryServiceImpl::RemoveAvailabilityCallback(uint32_t id) {
diff --git a/cast/sender/channel/sender_socket_factory.cc b/cast/sender/channel/sender_socket_factory.cc
index a1f24ef0..e971976b 100644
--- a/cast/sender/channel/sender_socket_factory.cc
+++ b/cast/sender/channel/sender_socket_factory.cc
@@ -59,7 +59,8 @@ void SenderSocketFactory::OnAccepted(
TlsConnectionFactory* factory,
std::vector<uint8_t> der_x509_peer_cert,
std::unique_ptr<TlsConnection> connection) {
- OSP_NOTREACHED() << "This factory is connect-only.";
+ OSP_NOTREACHED();
+ OSP_LOG_FATAL << "This factory is connect-only";
}
void SenderSocketFactory::OnConnected(
diff --git a/cast/streaming/environment.cc b/cast/streaming/environment.cc
index 16cbb64f..c3e7bea0 100644
--- a/cast/streaming/environment.cc
+++ b/cast/streaming/environment.cc
@@ -61,7 +61,6 @@ int Environment::GetMaxPacketSize() const {
return kMaxRtpPacketSizeForIpv6UdpOnEthernet;
default:
OSP_NOTREACHED();
- return 0;
}
}
diff --git a/cast/streaming/offer_messages.cc b/cast/streaming/offer_messages.cc
index 163c0b0c..9ed6e1d9 100644
--- a/cast/streaming/offer_messages.cc
+++ b/cast/streaming/offer_messages.cc
@@ -264,7 +264,6 @@ absl::string_view ToString(Stream::Type type) {
return kVideoSourceType;
default: {
OSP_NOTREACHED();
- return "";
}
}
}
@@ -317,7 +316,6 @@ std::string CastMode::ToString() const {
return kCastRemoting;
default:
OSP_NOTREACHED();
- return "";
}
}
diff --git a/cast/test/cast_socket_e2e_test.cc b/cast/test/cast_socket_e2e_test.cc
index becfdb22..bfd1bbf9 100644
--- a/cast/test/cast_socket_e2e_test.cc
+++ b/cast/test/cast_socket_e2e_test.cc
@@ -67,7 +67,7 @@ class SenderSocketsClient : public SenderSocketFactory::Client,
void OnError(SenderSocketFactory* factory,
const IPEndpoint& endpoint,
Error error) override {
- OSP_NOTREACHED() << error;
+ OSP_LOG_FATAL << error;
}
// VirtualConnectionRouter::SocketErrorHandler overrides.
@@ -112,7 +112,7 @@ class ReceiverSocketsClient
}
void OnError(ReceiverSocketFactory* factory, Error error) override {
- OSP_NOTREACHED() << error;
+ OSP_LOG_FATAL << error;
}
// VirtualConnectionRouter::SocketErrorHandler overrides.
diff --git a/discovery/dnssd/impl/dns_data_graph.cc b/discovery/dnssd/impl/dns_data_graph.cc
index 036c7985..9e6f166e 100644
--- a/discovery/dnssd/impl/dns_data_graph.cc
+++ b/discovery/dnssd/impl/dns_data_graph.cc
@@ -575,7 +575,6 @@ DnsDataGraphImpl::DomainGroup DnsDataGraph::GetDomainGroup(DnsType type) {
return DnsDataGraphImpl::DomainGroup::kPtr;
default:
OSP_NOTREACHED();
- return DnsDataGraphImpl::DomainGroup::kNone;
}
}
diff --git a/discovery/mdns/mdns_record_changed_callback.h b/discovery/mdns/mdns_record_changed_callback.h
index a5518578..d725b1c4 100644
--- a/discovery/mdns/mdns_record_changed_callback.h
+++ b/discovery/mdns/mdns_record_changed_callback.h
@@ -5,6 +5,8 @@
#ifndef DISCOVERY_MDNS_MDNS_RECORD_CHANGED_CALLBACK_H_
#define DISCOVERY_MDNS_MDNS_RECORD_CHANGED_CALLBACK_H_
+#include <vector>
+
#include "discovery/mdns/mdns_records.h"
#include "util/osp_logging.h"
@@ -51,9 +53,7 @@ inline std::ostream& operator<<(std::ostream& output,
case RecordChangedEvent::kExpired:
return output << "Expiry";
}
-
OSP_NOTREACHED();
- return output;
}
} // namespace discovery
diff --git a/discovery/mdns/mdns_responder.cc b/discovery/mdns/mdns_responder.cc
index 953828e3..4486eacf 100644
--- a/discovery/mdns/mdns_responder.cc
+++ b/discovery/mdns/mdns_responder.cc
@@ -52,8 +52,7 @@ std::chrono::seconds GetTtlForNsecTargetingType(DnsType type) {
break;
}
- OSP_NOTREACHED() << "NSEC records do not support type " << type;
- return std::chrono::seconds(0);
+ OSP_NOTREACHED();
}
MdnsRecord CreateNsecRecord(DomainName target_name,
diff --git a/discovery/mdns/public/mdns_constants.h b/discovery/mdns/public/mdns_constants.h
index ecaa18bb..fdfa9b78 100644
--- a/discovery/mdns/public/mdns_constants.h
+++ b/discovery/mdns/public/mdns_constants.h
@@ -329,7 +329,6 @@ inline std::ostream& operator<<(std::ostream& output, DnsType type) {
}
OSP_NOTREACHED();
- return output;
}
constexpr std::array<DnsType, 7> kSupportedDnsTypes = {
diff --git a/osp/impl/quic/testing/fake_quic_connection.cc b/osp/impl/quic/testing/fake_quic_connection.cc
index da436e85..511ceee1 100644
--- a/osp/impl/quic/testing/fake_quic_connection.cc
+++ b/osp/impl/quic/testing/fake_quic_connection.cc
@@ -5,6 +5,7 @@
#include "osp/impl/quic/testing/fake_quic_connection.h"
#include <memory>
+#include <utility>
#include "osp/impl/quic/testing/fake_quic_connection_factory.h"
#include "util/osp_logging.h"
@@ -62,16 +63,15 @@ std::unique_ptr<FakeQuicStream> FakeQuicConnection::MakeIncomingStream() {
}
void FakeQuicConnection::OnRead(UdpSocket* socket, ErrorOr<UdpPacket> data) {
- OSP_NOTREACHED() << "data should go directly to fake streams";
+ OSP_NOTREACHED();
}
void FakeQuicConnection::OnSendError(UdpSocket* socket, Error error) {
- OSP_NOTREACHED() << "data should go directly to fake streams";
+ OSP_NOTREACHED();
}
-void FakeQuicConnection::OnError(UdpSocket* socket, Error error) {
- OSP_NOTREACHED() << "data should go directly to fake streams";
-}
+void FakeQuicConnection::OnError(UdpSocket* socket,
+ Error error){OSP_NOTREACHED()}
std::unique_ptr<QuicStream> FakeQuicConnection::MakeOutgoingStream(
QuicStream::Delegate* delegate) {
diff --git a/osp/impl/testing/fake_mdns_responder_adapter.cc b/osp/impl/testing/fake_mdns_responder_adapter.cc
index 77289c3a..a73e6dae 100644
--- a/osp/impl/testing/fake_mdns_responder_adapter.cc
+++ b/osp/impl/testing/fake_mdns_responder_adapter.cc
@@ -236,15 +236,15 @@ Error FakeMdnsResponderAdapter::DeregisterInterface(UdpSocket* socket) {
void FakeMdnsResponderAdapter::OnRead(UdpSocket* socket,
ErrorOr<UdpPacket> packet) {
- OSP_NOTREACHED() << "Tests should not drive this class with packets";
+ OSP_NOTREACHED();
}
void FakeMdnsResponderAdapter::OnSendError(UdpSocket* socket, Error error) {
- OSP_NOTREACHED() << "Tests should not drive this class with packets";
+ OSP_NOTREACHED();
}
void FakeMdnsResponderAdapter::OnError(UdpSocket* socket, Error error) {
- OSP_NOTREACHED() << "Tests should not drive this class with packets";
+ OSP_NOTREACHED();
}
Clock::duration FakeMdnsResponderAdapter::RunTasks() {
diff --git a/osp/public/message_demuxer.cc b/osp/public/message_demuxer.cc
index 209bba01..f9166942 100644
--- a/osp/public/message_demuxer.cc
+++ b/osp/public/message_demuxer.cc
@@ -5,6 +5,7 @@
#include "osp/public/message_demuxer.h"
#include <memory>
+#include <utility>
#include "osp/impl/quic/quic_connection.h"
#include "platform/base/error.h"
@@ -44,7 +45,6 @@ ErrorOr<uint64_t> MessageTypeDecoder::DecodeVarUint(
return ReadBigEndian<uint64_t>(&buffer[0]) & ~(uint64_t{0xC0} << 56);
default:
OSP_NOTREACHED();
- return Error::Code::kCborParsing;
}
}
diff --git a/platform/api/logging.h b/platform/api/logging.h
index 6080b77c..a958ce5a 100644
--- a/platform/api/logging.h
+++ b/platform/api/logging.h
@@ -55,7 +55,7 @@ void LogWithLevel(LogLevel level,
// embedder could invoke its infrastructure for performing "dumps," consisting
// of thread stack traces and other relevant process state information, before
// aborting the process.
-void Break();
+[[noreturn]] void Break();
} // namespace openscreen
diff --git a/platform/impl/logging_posix.cc b/platform/impl/logging_posix.cc
index 6e9564c9..e666998a 100644
--- a/platform/impl/logging_posix.cc
+++ b/platform/impl/logging_posix.cc
@@ -22,7 +22,6 @@ namespace {
int g_log_fd = STDERR_FILENO;
LogLevel g_log_level = LogLevel::kWarning;
std::vector<std::string>* g_log_messages_for_test = nullptr;
-bool* g_break_was_called_for_test = nullptr;
std::ostream& operator<<(std::ostream& os, const LogLevel& level) {
const char* level_string = "";
@@ -110,11 +109,10 @@ void LogWithLevel(LogLevel level,
}
}
-void Break() {
- if (g_break_was_called_for_test) {
- *g_break_was_called_for_test = true;
- return;
- }
+[[noreturn]] void Break() {
+// Generally this will just resolve to an abort anyways, but gives the
+// compiler a chance to peform a more appropriate, target specific trap
+// as appropriate.
#if defined(_DEBUG)
__builtin_trap();
#else
@@ -126,8 +124,4 @@ void SetLogBufferForTest(std::vector<std::string>* messages) {
g_log_messages_for_test = messages;
}
-void DisableBreakForTest(bool* break_was_called) {
- g_break_was_called_for_test = break_was_called;
-}
-
} // namespace openscreen
diff --git a/platform/impl/logging_test.h b/platform/impl/logging_test.h
index 75d9c052..fe03ac4a 100644
--- a/platform/impl/logging_test.h
+++ b/platform/impl/logging_test.h
@@ -19,15 +19,6 @@ namespace openscreen {
// in memory.
void SetLogBufferForTest(std::vector<std::string>* messages);
-// Disables the mechanism to abort a process on an assertion failure.
-//
-// ***DANGEROUS!*** This will effectively disable assertion enforcement and
-// should only be called for assertion macro tests.
-//
-// *break_was_called will be set to true when Break() is called afterwards.
-// Calling with nullptr re-enables normal assertion behavior.
-void DisableBreakForTest(bool* break_was_called);
-
} // namespace openscreen
#endif // PLATFORM_IMPL_LOGGING_TEST_H_
diff --git a/platform/impl/logging_unittest.cc b/platform/impl/logging_unittest.cc
index 84018b3f..fe04da62 100644
--- a/platform/impl/logging_unittest.cc
+++ b/platform/impl/logging_unittest.cc
@@ -25,17 +25,15 @@ class LoggingTest : public ::testing::Test {
previous_log_level = GetLogLevel();
SetLogLevel(LogLevel::kInfo);
SetLogBufferForTest(&log_messages);
+ testing::FLAGS_gtest_death_test_style = "threadsafe";
}
void TearDown() {
SetLogLevel(previous_log_level);
SetLogBufferForTest(nullptr);
- DisableBreakForTest(nullptr);
}
protected:
- void DisableBreak() { DisableBreakForTest(&break_was_called); }
-
void ExpectLog(LogLevel level, absl::string_view message) {
const char* level_string = "";
switch (level) {
@@ -78,20 +76,6 @@ class LoggingTest : public ::testing::Test {
log_messages.clear();
}
- void ExpectBreakAndClear() {
- EXPECT_TRUE(break_was_called);
- break_was_called = false;
- }
-
- void ExpectDebugBreakAndClear() {
-#if OSP_DCHECK_IS_ON()
- EXPECT_TRUE(break_was_called);
- break_was_called = false;
-#else
- EXPECT_FALSE(break_was_called);
-#endif // OSP_DCHECK_IS_ON()
- }
-
private:
struct LogMessage {
std::string level;
@@ -99,7 +83,6 @@ class LoggingTest : public ::testing::Test {
};
std::vector<std::string> log_messages;
std::vector<LogMessage> expected_messages;
- bool break_was_called = false;
LogLevel previous_log_level = LogLevel::kWarning;
};
@@ -209,79 +192,55 @@ TEST_F(LoggingTest, DebugConditionalLogging) {
}
TEST_F(LoggingTest, CheckAndLogFatal) {
- DisableBreak();
+ ASSERT_DEATH(OSP_CHECK(false), ".*OSP_CHECK\\(false\\) failed: ");
- ExpectLog(LogLevel::kFatal, "OSP_CHECK(false) failed: ");
- OSP_CHECK(false);
- ExpectBreakAndClear();
+ ASSERT_DEATH(OSP_CHECK_EQ(1, 2),
+ ".*OSP_CHECK\\(\\(1\\) == \\(2\\)\\) failed: 1 vs\\. 2: ");
- ExpectLog(LogLevel::kFatal, "OSP_CHECK((1) == (2)) failed: 1 vs. 2: ");
- OSP_CHECK_EQ(1, 2);
- ExpectBreakAndClear();
+ ASSERT_DEATH(OSP_CHECK_NE(1, 1),
+ ".*OSP_CHECK\\(\\(1\\) != \\(1\\)\\) failed: 1 vs\\. 1: ");
- ExpectLog(LogLevel::kFatal, "OSP_CHECK((1) != (1)) failed: 1 vs. 1: ");
- OSP_CHECK_NE(1, 1);
- ExpectBreakAndClear();
+ ASSERT_DEATH(OSP_CHECK_LT(2, 1),
+ ".*OSP_CHECK\\(\\(2\\) < \\(1\\)\\) failed: 2 vs\\. 1: ");
- ExpectLog(LogLevel::kFatal, "OSP_CHECK((2) < (1)) failed: 2 vs. 1: ");
- OSP_CHECK_LT(2, 1);
- ExpectBreakAndClear();
+ ASSERT_DEATH(OSP_CHECK_LE(2, 1),
+ ".*OSP_CHECK\\(\\(2\\) <= \\(1\\)\\) failed: 2 vs\\. 1: ");
- ExpectLog(LogLevel::kFatal, "OSP_CHECK((2) <= (1)) failed: 2 vs. 1: ");
- OSP_CHECK_LE(2, 1);
- ExpectBreakAndClear();
+ ASSERT_DEATH(OSP_CHECK_GT(1, 2),
+ ".*OSP_CHECK\\(\\(1\\) > \\(2\\)\\) failed: 1 vs\\. 2: ");
- ExpectLog(LogLevel::kFatal, "OSP_CHECK((1) > (2)) failed: 1 vs. 2: ");
- OSP_CHECK_GT(1, 2);
- ExpectBreakAndClear();
+ ASSERT_DEATH(OSP_CHECK_GE(1, 2),
+ ".*OSP_CHECK\\(\\(1\\) >= \\(2\\)\\) failed: 1 vs\\. 2: ");
- ExpectLog(LogLevel::kFatal, "OSP_CHECK((1) >= (2)) failed: 1 vs. 2: ");
- OSP_CHECK_GE(1, 2);
- ExpectBreakAndClear();
-
- ExpectLog(LogLevel::kFatal, "Fatal");
- OSP_LOG_FATAL << "Fatal";
- ExpectBreakAndClear();
+ ASSERT_DEATH((OSP_LOG_FATAL << "Fatal"), ".*Fatal");
VerifyLogs();
}
TEST_F(LoggingTest, DCheckAndDLogFatal) {
- DisableBreak();
-
- ExpectLog(LogLevel::kFatal, "OSP_CHECK(false) failed: ");
- OSP_DCHECK(false);
- ExpectDebugBreakAndClear();
+#if OSP_DCHECK_IS_ON()
+ ASSERT_DEATH(OSP_DCHECK(false), ".*OSP_CHECK\\(false\\) failed: ");
- ExpectLog(LogLevel::kFatal, "OSP_CHECK((1) == (2)) failed: 1 vs. 2: ");
- OSP_DCHECK_EQ(1, 2);
- ExpectDebugBreakAndClear();
+ ASSERT_DEATH(OSP_DCHECK_EQ(1, 2),
+ ".*OSP_CHECK\\(\\(1\\) == \\(2\\)\\) failed: 1 vs\\. 2: ");
- ExpectLog(LogLevel::kFatal, "OSP_CHECK((1) != (1)) failed: 1 vs. 1: ");
- OSP_DCHECK_NE(1, 1);
- ExpectDebugBreakAndClear();
+ ASSERT_DEATH(OSP_DCHECK_NE(1, 1),
+ ".*OSP_CHECK\\(\\(1\\) != \\(1\\)\\) failed: 1 vs\\. 1: ");
- ExpectLog(LogLevel::kFatal, "OSP_CHECK((2) < (1)) failed: 2 vs. 1: ");
- OSP_DCHECK_LT(2, 1);
- ExpectDebugBreakAndClear();
+ ASSERT_DEATH(OSP_DCHECK_LT(2, 1),
+ ".*OSP_CHECK\\(\\(2\\) < \\(1\\)\\) failed: 2 vs\\. 1: ");
- ExpectLog(LogLevel::kFatal, "OSP_CHECK((2) <= (1)) failed: 2 vs. 1: ");
- OSP_DCHECK_LE(2, 1);
- ExpectDebugBreakAndClear();
+ ASSERT_DEATH(OSP_DCHECK_LE(2, 1),
+ ".*OSP_CHECK\\(\\(2\\) <= \\(1\\)\\) failed: 2 vs\\. 1: ");
- ExpectLog(LogLevel::kFatal, "OSP_CHECK((1) > (2)) failed: 1 vs. 2: ");
- OSP_DCHECK_GT(1, 2);
- ExpectDebugBreakAndClear();
+ ASSERT_DEATH(OSP_DCHECK_GT(1, 2),
+ ".*OSP_CHECK\\(\\(1\\) > \\(2\\)\\) failed: 1 vs\\. 2: ");
- ExpectLog(LogLevel::kFatal, "OSP_CHECK((1) >= (2)) failed: 1 vs. 2: ");
- OSP_DCHECK_GE(1, 2);
- ExpectDebugBreakAndClear();
+ ASSERT_DEATH(OSP_DCHECK_GE(1, 2),
+ ".*OSP_CHECK\\(\\(1\\) >= \\(2\\)\\) failed: 1 vs\\. 2: ");
- ExpectLog(LogLevel::kFatal, "Fatal");
- OSP_DLOG_FATAL << "Fatal";
- ExpectDebugBreakAndClear();
+ ASSERT_DEATH((OSP_DLOG_FATAL << "Fatal"), ".*Fatal");
-#if OSP_DCHECK_IS_ON()
VerifyLogs();
#else
VerifyNoLogs();
@@ -309,13 +268,7 @@ TEST_F(LoggingTest, OspUnimplemented) {
}
TEST_F(LoggingTest, OspNotReached) {
- DisableBreak();
- ExpectLog(LogLevel::kFatal, "TestBody: NOTREACHED() hit.");
-
- OSP_NOTREACHED();
-
- VerifyLogs();
- ExpectBreakAndClear();
+ ASSERT_DEATH(OSP_NOTREACHED(), ".*TestBody: NOTREACHED\\(\\) hit.");
}
} // namespace openscreen
diff --git a/platform/impl/socket_address_posix.cc b/platform/impl/socket_address_posix.cc
index 0795fe50..a4ea5981 100644
--- a/platform/impl/socket_address_posix.cc
+++ b/platform/impl/socket_address_posix.cc
@@ -19,7 +19,8 @@ SocketAddressPosix::SocketAddressPosix(const struct sockaddr& address) {
memcpy(&internal_address_, &address, sizeof(struct sockaddr_in6));
RecomputeEndpoint(IPAddress::Version::kV6);
} else {
- OSP_NOTREACHED() << "Unknown address type";
+ // Not IPv4 or IPv6.
+ OSP_NOTREACHED();
}
}
@@ -50,7 +51,6 @@ struct sockaddr* SocketAddressPosix::address() {
return reinterpret_cast<struct sockaddr*>(&internal_address_.v6);
default:
OSP_NOTREACHED();
- return nullptr;
}
}
@@ -62,7 +62,6 @@ const struct sockaddr* SocketAddressPosix::address() const {
return reinterpret_cast<const struct sockaddr*>(&internal_address_.v6);
default:
OSP_NOTREACHED();
- return nullptr;
}
}
@@ -74,7 +73,6 @@ socklen_t SocketAddressPosix::size() const {
return sizeof(struct sockaddr_in6);
default:
OSP_NOTREACHED();
- return 0;
}
}
diff --git a/platform/test/paths_internal_other.cc b/platform/test/paths_internal_other.cc
index e8083cbb..883bb245 100644
--- a/platform/test/paths_internal_other.cc
+++ b/platform/test/paths_internal_other.cc
@@ -10,7 +10,6 @@ namespace openscreen {
// NOTE: This is only for linking purposes in Chromium builds.
std::string GetExePath() {
OSP_NOTREACHED();
- return {};
}
} // namespace openscreen
diff --git a/util/crypto/openssl_util.cc b/util/crypto/openssl_util.cc
index 505ac715..63664a7d 100644
--- a/util/crypto/openssl_util.cc
+++ b/util/crypto/openssl_util.cc
@@ -92,10 +92,6 @@ Error GetSSLError(const SSL* ssl, int return_code) {
case SSL_ERROR_SSL:
return Error(Error::Code::kFatalSSLError, std::move(message));
}
-
- OSP_NOTREACHED() << "Unknown SSL error occurred. All error cases should "
- "be covered in the above switch statement. Error code: "
- << error_code << ", message: " << message;
- return Error(Error::Code::kUnknownError, std::move(message));
+ OSP_NOTREACHED();
}
} // namespace openscreen
diff --git a/util/osp_logging.h b/util/osp_logging.h
index 65dd3e41..9c478ce0 100644
--- a/util/osp_logging.h
+++ b/util/osp_logging.h
@@ -133,6 +133,13 @@ class Voidify {
} \
}
-#define OSP_NOTREACHED() OSP_LOG_FATAL << __func__ << ": NOTREACHED() hit."
+// Since Break() is annotated as noreturn, this will properly signal to the
+// compiler that this code is truly not reached (and thus doesn't need a return
+// statement for non-void returning functions/methods).
+#define OSP_NOTREACHED() \
+ { \
+ OSP_LOG_FATAL << __func__ << ": NOTREACHED() hit."; \
+ Break(); \
+ }
#endif // UTIL_OSP_LOGGING_H_