diff --git a/call/rampup_tests.cc b/call/rampup_tests.cc
index bf136a5..8e589b1 100644
--- a/call/rampup_tests.cc
+++ b/call/rampup_tests.cc
@@ -182,20 +182,16 @@
 
   send_config->rtp.extensions.clear();
 
-  bool remb;
   bool transport_cc;
   if (extension_type_ == RtpExtension::kAbsSendTimeUri) {
-    remb = true;
     transport_cc = false;
     send_config->rtp.extensions.push_back(
         RtpExtension(extension_type_.c_str(), kAbsSendTimeExtensionId));
   } else if (extension_type_ == RtpExtension::kTransportSequenceNumberUri) {
-    remb = false;
     transport_cc = true;
     send_config->rtp.extensions.push_back(RtpExtension(
         extension_type_.c_str(), kTransportSequenceNumberExtensionId));
   } else {
-    remb = true;
     transport_cc = false;
     send_config->rtp.extensions.push_back(RtpExtension(
         extension_type_.c_str(), kTransmissionTimeOffsetExtensionId));
diff --git a/media/engine/webrtc_video_engine_unittest.cc b/media/engine/webrtc_video_engine_unittest.cc
index 96598f5..339e360 100644
--- a/media/engine/webrtc_video_engine_unittest.cc
+++ b/media/engine/webrtc_video_engine_unittest.cc
@@ -8828,7 +8828,6 @@
     ASSERT_EQ(expected_streams.size(), video_streams.size());
 
     size_t num_streams = video_streams.size();
-    int total_max_bitrate_bps = 0;
     for (size_t i = 0; i < num_streams; ++i) {
       EXPECT_EQ(expected_streams[i].width, video_streams[i].width);
       EXPECT_EQ(expected_streams[i].height, video_streams[i].height);
@@ -8859,12 +8858,6 @@
         EXPECT_EQ(expected_streams[i].num_temporal_layers,
                   video_streams[i].num_temporal_layers);
       }
-
-      if (i == num_streams - 1) {
-        total_max_bitrate_bps += video_streams[i].max_bitrate_bps;
-      } else {
-        total_max_bitrate_bps += video_streams[i].target_bitrate_bps;
-      }
     }
 
     EXPECT_TRUE(channel_->SetVideoSend(ssrcs.front(), nullptr, nullptr));
diff --git a/modules/audio_coding/codecs/legacy_encoded_audio_frame_unittest.cc b/modules/audio_coding/codecs/legacy_encoded_audio_frame_unittest.cc
index f081a53..1d0c7fe 100644
--- a/modules/audio_coding/codecs/legacy_encoded_audio_frame_unittest.cc
+++ b/modules/audio_coding/codecs/legacy_encoded_audio_frame_unittest.cc
@@ -138,7 +138,6 @@
 
     EXPECT_EQ(expected_split.num_frames, results.size());
     uint32_t expected_timestamp = kBaseTimestamp;
-    uint32_t expected_byte_offset = 0;
     uint8_t value = 0;
     for (size_t i = 0; i != expected_split.num_frames; ++i) {
       const auto& result = results[i];
@@ -155,7 +154,6 @@
 
       expected_timestamp += rtc::checked_cast<uint32_t>(
           expected_split.frame_sizes[i] * samples_per_ms_);
-      expected_byte_offset += rtc::checked_cast<uint32_t>(length_bytes);
     }
   }
 }
diff --git a/modules/audio_coding/neteq/expand_unittest.cc b/modules/audio_coding/neteq/expand_unittest.cc
index 9c3264f..9355fce 100644
--- a/modules/audio_coding/neteq/expand_unittest.cc
+++ b/modules/audio_coding/neteq/expand_unittest.cc
@@ -135,11 +135,9 @@
 // arrived before it).
 TEST_F(ExpandTest, LostPacketOutage) {
   AudioMultiVector output(num_channels_);
-  size_t sum_output_len_samples = 0;
   for (int i = 0; i < 10; ++i) {
     EXPECT_EQ(0, expand_.Process(&output));
     EXPECT_GT(output.Size(), 0u);
-    sum_output_len_samples += output.Size();
     EXPECT_EQ(0, statistics_.last_outage_duration_samples());
   }
   expand_.SetParametersForMergeAfterExpand();
diff --git a/modules/audio_coding/neteq/neteq_unittest.cc b/modules/audio_coding/neteq/neteq_unittest.cc
index cbb1b14..341ef6b 100644
--- a/modules/audio_coding/neteq/neteq_unittest.cc
+++ b/modules/audio_coding/neteq/neteq_unittest.cc
@@ -372,7 +372,6 @@
     PopulateRtpInfo(0, 0, &rtp_info);
     rtp_info.payloadType = payload_type;
 
-    uint32_t receive_timestamp = 0;
     bool muted;
     for (int n = 0; n < 10; ++n) {  // Insert few packets and get audio.
       auto block = input.GetNextBlock();
@@ -393,8 +392,6 @@
       rtp_info.timestamp +=
           rtc::checked_cast<uint32_t>(expected_samples_per_channel);
       rtp_info.sequenceNumber++;
-      receive_timestamp +=
-          rtc::checked_cast<uint32_t>(expected_samples_per_channel);
     }
 
     output.Reset();
diff --git a/modules/audio_coding/test/iSACTest.cc b/modules/audio_coding/test/iSACTest.cc
index 94a6889..52f5a6a 100644
--- a/modules/audio_coding/test/iSACTest.cc
+++ b/modules/audio_coding/test/iSACTest.cc
@@ -257,11 +257,6 @@
                   wbISACConfig),
       kISAC16kPayloadType));
 
-  bool adaptiveMode = false;
-  if ((swbISACConfig.currentRateBitPerSec == -1) ||
-      (wbISACConfig.currentRateBitPerSec == -1)) {
-    adaptiveMode = true;
-  }
   _myTimer.Reset();
   _channel_A2B->ResetStats();
   _channel_B2A->ResetStats();
diff --git a/modules/audio_processing/agc2/rnn_vad/spectral_features_unittest.cc b/modules/audio_processing/agc2/rnn_vad/spectral_features_unittest.cc
index 9f41e96..324d694 100644
--- a/modules/audio_processing/agc2/rnn_vad/spectral_features_unittest.cc
+++ b/modules/audio_processing/agc2/rnn_vad/spectral_features_unittest.cc
@@ -118,12 +118,11 @@
   std::array<float, kFrameSize20ms24kHz> samples;
   rtc::ArrayView<float, kFrameSize20ms24kHz> samples_view(samples);
   WriteTestData(samples);
-  bool is_silence;
 
   // Fill the spectral features with test data.
   std::array<float, kTestFeatureVectorSize> feature_vector;
   for (int i = 0; i < kCepstralCoeffsHistorySize; ++i) {
-    is_silence = sfe.CheckSilenceComputeFeatures(
+    sfe.CheckSilenceComputeFeatures(
         samples_view, samples_view, GetHigherBandsSpectrum(&feature_vector),
         GetAverage(&feature_vector), GetFirstDerivative(&feature_vector),
         GetSecondDerivative(&feature_vector),
@@ -133,7 +132,7 @@
 
   // Feed the test data one last time but using a different output vector.
   std::array<float, kTestFeatureVectorSize> feature_vector_last;
-  is_silence = sfe.CheckSilenceComputeFeatures(
+  sfe.CheckSilenceComputeFeatures(
       samples_view, samples_view, GetHigherBandsSpectrum(&feature_vector_last),
       GetAverage(&feature_vector_last),
       GetFirstDerivative(&feature_vector_last),
diff --git a/pc/channel_unittest.cc b/pc/channel_unittest.cc
index ca5946b..a16a9f0 100644
--- a/pc/channel_unittest.cc
+++ b/pc/channel_unittest.cc
@@ -156,30 +156,22 @@
     // channels.
     RTC_DCHECK_EQ(flags1 & RAW_PACKET_TRANSPORT, flags2 & RAW_PACKET_TRANSPORT);
     rtc::Thread* worker_thread = rtc::Thread::Current();
-    rtc::PacketTransportInternal* rtp1 = nullptr;
-    rtc::PacketTransportInternal* rtcp1 = nullptr;
-    rtc::PacketTransportInternal* rtp2 = nullptr;
-    rtc::PacketTransportInternal* rtcp2 = nullptr;
     // Based on flags, create fake DTLS or raw packet transports.
     if (flags1 & RAW_PACKET_TRANSPORT) {
       fake_rtp_packet_transport1_.reset(
           new rtc::FakePacketTransport("channel1_rtp"));
-      rtp1 = fake_rtp_packet_transport1_.get();
       if (!(flags1 & RTCP_MUX)) {
         fake_rtcp_packet_transport1_.reset(
             new rtc::FakePacketTransport("channel1_rtcp"));
-        rtcp1 = fake_rtcp_packet_transport1_.get();
       }
     } else {
       // Confirmed to work with KT_RSA and KT_ECDSA.
       fake_rtp_dtls_transport1_.reset(new cricket::FakeDtlsTransport(
           "channel1", cricket::ICE_CANDIDATE_COMPONENT_RTP, network_thread_));
-      rtp1 = fake_rtp_dtls_transport1_.get();
       if (!(flags1 & RTCP_MUX)) {
         fake_rtcp_dtls_transport1_.reset(new cricket::FakeDtlsTransport(
             "channel1", cricket::ICE_CANDIDATE_COMPONENT_RTCP,
             network_thread_));
-        rtcp1 = fake_rtcp_dtls_transport1_.get();
       }
       if (flags1 & DTLS) {
         auto cert1 = rtc::RTCCertificate::Create(
@@ -194,22 +186,18 @@
     if (flags2 & RAW_PACKET_TRANSPORT) {
       fake_rtp_packet_transport2_.reset(
           new rtc::FakePacketTransport("channel2_rtp"));
-      rtp2 = fake_rtp_packet_transport2_.get();
       if (!(flags2 & RTCP_MUX)) {
         fake_rtcp_packet_transport2_.reset(
             new rtc::FakePacketTransport("channel2_rtcp"));
-        rtcp2 = fake_rtcp_packet_transport2_.get();
       }
     } else {
       // Confirmed to work with KT_RSA and KT_ECDSA.
       fake_rtp_dtls_transport2_.reset(new cricket::FakeDtlsTransport(
           "channel2", cricket::ICE_CANDIDATE_COMPONENT_RTP, network_thread_));
-      rtp2 = fake_rtp_dtls_transport2_.get();
       if (!(flags2 & RTCP_MUX)) {
         fake_rtcp_dtls_transport2_.reset(new cricket::FakeDtlsTransport(
             "channel2", cricket::ICE_CANDIDATE_COMPONENT_RTCP,
             network_thread_));
-        rtcp2 = fake_rtcp_dtls_transport2_.get();
       }
       if (flags2 & DTLS) {
         auto cert2 = rtc::RTCCertificate::Create(
diff --git a/rtc_base/swap_queue_unittest.cc b/rtc_base/swap_queue_unittest.cc
index 3862d85..764a25e 100644
--- a/rtc_base/swap_queue_unittest.cc
+++ b/rtc_base/swap_queue_unittest.cc
@@ -144,8 +144,7 @@
   int invalid_value = -4;
   EXPECT_TRUE(queue.Insert(&valid_value));
   EXPECT_TRUE(queue.Remove(&valid_value));
-  bool result;
-  EXPECT_DEATH(result = queue.Insert(&invalid_value), "");
+  EXPECT_DEATH((void)queue.Insert(&invalid_value), "");
 }
 
 TEST(SwapQueueDeathTest, UnSuccessfulItemVerifyInsert) {
@@ -154,8 +153,7 @@
             SwapQueueItemVerifier<std::vector<int>, &LengthVerifierFunction>>
       queue(2, template_element);
   std::vector<int> invalid_chunk(kChunkSize - 1, 0);
-  bool result;
-  EXPECT_DEATH(result = queue.Insert(&invalid_chunk), "");
+  EXPECT_DEATH((void)queue.Insert(&invalid_chunk), "");
 }
 
 TEST(SwapQueueDeathTest, UnSuccessfulItemVerifyRemove) {
@@ -167,8 +165,7 @@
   std::vector<int> valid_chunk(kChunkSize, 0);
   EXPECT_TRUE(queue.Insert(&valid_chunk));
   EXPECT_EQ(valid_chunk.size(), kChunkSize);
-  bool result;
-  EXPECT_DEATH(result = queue.Remove(&invalid_chunk), "");
+  EXPECT_DEATH((void)queue.Remove(&invalid_chunk), "");
 }
 #endif
 
diff --git a/rtc_tools/rtc_event_log_visualizer/analyzer.cc b/rtc_tools/rtc_event_log_visualizer/analyzer.cc
index 3de0f90..bdde2c9 100644
--- a/rtc_tools/rtc_event_log_visualizer/analyzer.cc
+++ b/rtc_tools/rtc_event_log_visualizer/analyzer.cc
@@ -1450,7 +1450,6 @@
   int64_t min_send_receive_diff_ms = std::numeric_limits<int64_t>::max();
   int64_t min_rtt_ms = std::numeric_limits<int64_t>::max();
 
-  int64_t prev_y = 0;
   std::vector<MatchedSendArrivalTimes> matched_rtp_rtcp =
       GetNetworkTrace(parsed_log_);
   absl::c_stable_sort(matched_rtp_rtcp, [](const MatchedSendArrivalTimes& a,
@@ -1464,7 +1463,6 @@
       continue;
     float x = config_.GetCallTimeSec(1000 * packet.feedback_arrival_time_ms);
     int64_t y = packet.arrival_time_ms - packet.send_time_ms;
-    prev_y = y;
     int64_t rtt_ms = packet.feedback_arrival_time_ms - packet.send_time_ms;
     min_rtt_ms = std::min(rtt_ms, min_rtt_ms);
     min_send_receive_diff_ms = std::min(y, min_send_receive_diff_ms);
