Enable Clang warning implicit-fallthrough and annotate the code.

BUG=4242
R=henrik.lundin@webrtc.org, stefan@webrtc.org, tommi@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/34899004

Cr-Commit-Position: refs/heads/master@{#8187}
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8187 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
kjellander@webrtc.org 2015-01-28 18:37:58 +00:00
parent a907e01c63
commit 7d2b6a9346
13 changed files with 49 additions and 9 deletions

View File

@ -11,9 +11,9 @@
#if defined(WEBRTC_WIN)
#include "webrtc/base/win32.h"
#else // !WEBRTC_WIN
#else // !WEBRTC_WIN
#define SEC_E_CERT_EXPIRED (-2146893016)
#endif // !WEBRTC_WIN
#endif // !WEBRTC_WIN
#include "webrtc/base/common.h"
#include "webrtc/base/httpbase.h"
@ -528,8 +528,9 @@ bool HttpBase::DoReceiveLoop(HttpError* error) {
// Attempt to process the data already in our buffer.
break;
case SR_EOS:
// Clean close, with no error. Fall through to HandleStreamClose.
// Clean close, with no error.
read_error = 0;
FALLTHROUGH(); // Fall through to HandleStreamClose.
case SR_ERROR:
*error = HandleStreamClose(read_error);
return true;

View File

@ -540,6 +540,7 @@ bool HttpClient::CheckCache() {
return false;
}
// Couldn't validate, fall through.
FALLTHROUGH();
case HCS_NONE:
// Cache content is not useable. Issue a regular request.
response().clear(false);

View File

@ -569,7 +569,7 @@ int NSSStreamAdapter::ContinueSSL() {
return -1;
} else {
LOG(LS_INFO) << "Malformed DTLS message. Ignoring.";
// Fall through
FALLTHROUGH(); // Fall through
}
case PR_WOULD_BLOCK_ERROR:
LOG(LS_INFO) << "Would have blocked";

View File

@ -244,6 +244,7 @@
}],
['clang==1', {
'cflags': [
'-Wimplicit-fallthrough',
'-Wthread-safety',
],
}],

View File

@ -92,6 +92,7 @@ void XmppLoginTaskTest::RunPartialLogin(XlttStage startstage,
EXPECT_EQ("", handler_->StanzaActivity());
if (endstage == XLTT_STAGE_CONNECT)
return;
FALLTHROUGH();
}
case XLTT_STAGE_STREAMSTART: {
@ -104,6 +105,7 @@ void XmppLoginTaskTest::RunPartialLogin(XlttStage startstage,
EXPECT_EQ("", handler_->OutputActivity());
if (endstage == XLTT_STAGE_STREAMSTART)
return;
FALLTHROUGH();
}
case XLTT_STAGE_TLS_FEATURES: {
@ -117,6 +119,7 @@ void XmppLoginTaskTest::RunPartialLogin(XlttStage startstage,
EXPECT_EQ("", handler_->SessionActivity());
if (endstage == XLTT_STAGE_TLS_FEATURES)
return;
FALLTHROUGH();
}
case XLTT_STAGE_TLS_PROCEED: {
@ -128,8 +131,9 @@ void XmppLoginTaskTest::RunPartialLogin(XlttStage startstage,
"xmlns=\"jabber:client\">\r\n", handler_->OutputActivity());
EXPECT_EQ("", handler_->StanzaActivity());
EXPECT_EQ("", handler_->SessionActivity());
if (endstage == XLTT_STAGE_TLS_PROCEED)
if (endstage == XLTT_STAGE_TLS_PROCEED)
return;
FALLTHROUGH();
}
case XLTT_STAGE_ENCRYPTED_START: {
@ -142,6 +146,7 @@ void XmppLoginTaskTest::RunPartialLogin(XlttStage startstage,
EXPECT_EQ("", handler_->OutputActivity());
if (endstage == XLTT_STAGE_ENCRYPTED_START)
return;
FALLTHROUGH();
}
case XLTT_STAGE_AUTH_FEATURES: {
@ -161,8 +166,9 @@ void XmppLoginTaskTest::RunPartialLogin(XlttStage startstage,
handler_->OutputActivity());
EXPECT_EQ("", handler_->StanzaActivity());
EXPECT_EQ("", handler_->SessionActivity());
if (endstage == XLTT_STAGE_AUTH_FEATURES)
if (endstage == XLTT_STAGE_AUTH_FEATURES)
return;
FALLTHROUGH();
}
case XLTT_STAGE_AUTH_SUCCESS: {
@ -173,8 +179,9 @@ void XmppLoginTaskTest::RunPartialLogin(XlttStage startstage,
"xmlns=\"jabber:client\">\r\n", handler_->OutputActivity());
EXPECT_EQ("", handler_->StanzaActivity());
EXPECT_EQ("", handler_->SessionActivity());
if (endstage == XLTT_STAGE_AUTH_SUCCESS)
if (endstage == XLTT_STAGE_AUTH_SUCCESS)
return;
FALLTHROUGH();
}
case XLTT_STAGE_AUTHENTICATED_START: {
@ -187,6 +194,7 @@ void XmppLoginTaskTest::RunPartialLogin(XlttStage startstage,
EXPECT_EQ("", handler_->OutputActivity());
if (endstage == XLTT_STAGE_AUTHENTICATED_START)
return;
FALLTHROUGH();
}
case XLTT_STAGE_BIND_FEATURES: {
@ -202,6 +210,7 @@ void XmppLoginTaskTest::RunPartialLogin(XlttStage startstage,
EXPECT_EQ("", handler_->SessionActivity());
if (endstage == XLTT_STAGE_BIND_FEATURES)
return;
FALLTHROUGH();
}
case XLTT_STAGE_BIND_SUCCESS: {
@ -216,6 +225,7 @@ void XmppLoginTaskTest::RunPartialLogin(XlttStage startstage,
EXPECT_EQ("", handler_->SessionActivity());
if (endstage == XLTT_STAGE_BIND_SUCCESS)
return;
FALLTHROUGH();
}
case XLTT_STAGE_SESSION_SUCCESS: {
@ -227,7 +237,10 @@ void XmppLoginTaskTest::RunPartialLogin(XlttStage startstage,
EXPECT_EQ("", handler_->StanzaActivity());
if (endstage == XLTT_STAGE_SESSION_SUCCESS)
return;
FALLTHROUGH();
}
default:
break;
}
}

View File

@ -19,6 +19,7 @@
#include <assert.h>
#include "webrtc/base/checks.h"
#include "webrtc/modules/audio_coding/main/acm2/acm_common_defs.h"
#include "webrtc/system_wrappers/interface/trace.h"
@ -626,9 +627,10 @@ ACMGenericCodec* ACMCodecDB::CreateCodecInstance(const CodecInst& codec_inst) {
default: {
return NULL;
}
return new ACMG722_1(codec_id);
}
return new ACMG722_1(codec_id);
#endif
FALLTHROUGH();
}
case 32000: {
#ifdef WEBRTC_CODEC_G722_1C
@ -649,10 +651,13 @@ ACMGenericCodec* ACMCodecDB::CreateCodecInstance(const CodecInst& codec_inst) {
default: {
return NULL;
}
return new ACMG722_1C(codec_id);
}
return new ACMG722_1C(codec_id);
#endif
FALLTHROUGH();
}
default:
FATAL();
}
} else if (!STR_CASE_CMP(codec_inst.plname, "CN")) {
// For CN we need to check sampling frequency to know what codec to create.

View File

@ -764,6 +764,7 @@ int NetEqImpl::GetAudioInternal(size_t max_length, int16_t* output,
sync_buffer_->IncreaseEndTimestamp(output_size_samples_);
// Skipping break on purpose. Execution should move on into the
// next case.
FALLTHROUGH();
}
case kAudioRepetition: {
// TODO(hlundin): Write test for this.

View File

@ -56,6 +56,7 @@ uint32_t TimestampScaler::ToInternal(uint32_t external_timestamp,
// full 48 kHz support.
numerator_ = 2;
denominator_ = 3;
break;
}
case kDecoderAVT:
case kDecoderCNGnb:

View File

@ -664,6 +664,7 @@ int32_t FuncTestManager::DoTest(const TestType testType)
TestSpeakerVolume();
TestMicrophoneVolume();
TestLoopback();
FALLTHROUGH();
case TTAudioLayerSelection:
TestAudioLayerSelection();
break;
@ -702,6 +703,7 @@ int32_t FuncTestManager::DoTest(const TestType testType)
break;
case TTMobileAPI:
TestAdvancedMBAPI();
FALLTHROUGH();
case TTTest:
TestExtra();
break;

View File

@ -183,6 +183,7 @@ int DefaultTemporalLayers::EncodeFlags(uint32_t timestamp) {
case kTemporalUpdateGoldenWithoutDependency:
flags |= VP8_EFLAG_NO_REF_GF;
// Deliberately no break here.
FALLTHROUGH();
case kTemporalUpdateGolden:
flags |= VP8_EFLAG_NO_REF_ARF;
flags |= VP8_EFLAG_NO_UPD_ARF;
@ -192,6 +193,7 @@ int DefaultTemporalLayers::EncodeFlags(uint32_t timestamp) {
flags |= VP8_EFLAG_NO_REF_ARF;
flags |= VP8_EFLAG_NO_REF_GF;
// Deliberately no break here.
FALLTHROUGH();
case kTemporalUpdateAltref:
flags |= VP8_EFLAG_NO_UPD_GF;
flags |= VP8_EFLAG_NO_UPD_LAST;
@ -199,6 +201,7 @@ int DefaultTemporalLayers::EncodeFlags(uint32_t timestamp) {
case kTemporalUpdateNoneNoRefAltref:
flags |= VP8_EFLAG_NO_REF_ARF;
// Deliberately no break here.
FALLTHROUGH();
case kTemporalUpdateNone:
flags |= VP8_EFLAG_NO_UPD_GF;
flags |= VP8_EFLAG_NO_UPD_ARF;

View File

@ -674,6 +674,7 @@ VCMFrameBufferEnum VCMJitterBuffer::InsertPacket(const VCMPacket& packet,
frame_event_->Set();
}
}
FALLTHROUGH();
}
// Note: There is no break here - continuing to kDecodableSession.
case kDecodableSession: {

View File

@ -467,6 +467,7 @@ int32_t VideoReceiver::Decode(const VCMEncodedFrame& frame) {
case kKeyOnLoss: {
request_key_frame = true;
ret = VCM_OK;
break;
}
default:
break;

View File

@ -120,6 +120,16 @@ typedef unsigned __int64 uint64_t;
#endif
#endif
// Macro to be used for switch-case fallthrough (required for enabling
// -Wimplicit-fallthrough warning on Clang).
#ifndef FALLTHROUGH
#if defined(__clang__)
#define FALLTHROUGH() [[clang::fallthrough]]
#else
#define FALLTHROUGH() do { } while (0)
#endif
#endif
// Annotate a function that will not return control flow to the caller.
#if defined(_MSC_VER)
#define NO_RETURN __declspec(noreturn)