diff --git a/api/array_view.h b/api/array_view.h
index 4abd2bf..f1eb6c1 100644
--- a/api/array_view.h
+++ b/api/array_view.h
@@ -97,7 +97,7 @@
   static_assert(Size > 0, "ArrayView size must be variable or non-negative");
 
  public:
-  ArrayViewBase(T* data, size_t size) : data_(data) {}
+  ArrayViewBase(T* data, size_t /* size */) : data_(data) {}
 
   static constexpr size_t size() { return Size; }
   static constexpr bool empty() { return false; }
@@ -114,7 +114,7 @@
 template <typename T>
 class ArrayViewBase<T, 0> {
  public:
-  explicit ArrayViewBase(T* data, size_t size) {}
+  explicit ArrayViewBase(T* /* data */, size_t /* size */) {}
 
   static constexpr size_t size() { return 0; }
   static constexpr bool empty() { return true; }
diff --git a/api/dtmf_sender_interface.h b/api/dtmf_sender_interface.h
index 4692f25..16ce665 100644
--- a/api/dtmf_sender_interface.h
+++ b/api/dtmf_sender_interface.h
@@ -27,12 +27,12 @@
   // tones.
   // The callback includes the state of the tone buffer at the time when
   // the tone finished playing.
-  virtual void OnToneChange(const std::string& tone,
-                            const std::string& tone_buffer) {}
+  virtual void OnToneChange(const std::string& /* tone */,
+                            const std::string& /* tone_buffer */) {}
   // DEPRECATED: Older API without tone buffer.
   // TODO(bugs.webrtc.org/9725): Remove old API and default implementation
   // when old callers are gone.
-  virtual void OnToneChange(const std::string& tone) {}
+  virtual void OnToneChange(const std::string& /* tone */) {}
 
  protected:
   virtual ~DtmfSenderObserverInterface() = default;
@@ -91,7 +91,7 @@
   virtual bool InsertDtmf(const std::string& tones,
                           int duration,
                           int inter_tone_gap,
-                          int comma_delay) {
+                          int /* comma_delay */) {
     // TODO(bugs.webrtc.org/165700): Remove once downstream implementations
     // override this signature rather than the 3-parameter one.
     return InsertDtmf(tones, duration, inter_tone_gap);
diff --git a/api/frame_transformer_interface.h b/api/frame_transformer_interface.h
index 6959445..3f41336 100644
--- a/api/frame_transformer_interface.h
+++ b/api/frame_transformer_interface.h
@@ -139,9 +139,9 @@
       rtc::scoped_refptr<TransformedFrameCallback>) {}
   virtual void RegisterTransformedFrameSinkCallback(
       rtc::scoped_refptr<TransformedFrameCallback>,
-      uint32_t ssrc) {}
+      uint32_t /* ssrc */) {}
   virtual void UnregisterTransformedFrameCallback() {}
-  virtual void UnregisterTransformedFrameSinkCallback(uint32_t ssrc) {}
+  virtual void UnregisterTransformedFrameSinkCallback(uint32_t /* ssrc */) {}
 
  protected:
   ~FrameTransformerInterface() override = default;
diff --git a/api/function_view.h b/api/function_view.h
index b191a05..f853ddb 100644
--- a/api/function_view.h
+++ b/api/function_view.h
@@ -86,7 +86,7 @@
             typename std::enable_if<std::is_same<
                 std::nullptr_t,
                 typename std::remove_cv<F>::type>::value>::type* = nullptr>
-  FunctionView(F&& f) : call_(nullptr) {}
+  FunctionView(F&& /* f */) : call_(nullptr) {}
 
   // Default constructor. Creates an empty FunctionView.
   FunctionView() : call_(nullptr) {}
diff --git a/api/media_stream_interface.h b/api/media_stream_interface.h
index d7c0eda..5a1e298 100644
--- a/api/media_stream_interface.h
+++ b/api/media_stream_interface.h
@@ -161,7 +161,7 @@
   // The call is expected to happen on the network thread.
   // TODO(crbug/1255737): make pure virtual once downstream project adapts.
   virtual void ProcessConstraints(
-      const webrtc::VideoTrackSourceConstraints& constraints) {}
+      const webrtc::VideoTrackSourceConstraints& /* constraints */) {}
 
  protected:
   ~VideoTrackSourceInterface() override = default;
@@ -184,14 +184,14 @@
 
   // Register a video sink for this track. Used to connect the track to the
   // underlying video engine.
-  void AddOrUpdateSink(rtc::VideoSinkInterface<VideoFrame>* sink,
-                       const rtc::VideoSinkWants& wants) override {}
-  void RemoveSink(rtc::VideoSinkInterface<VideoFrame>* sink) override {}
+  void AddOrUpdateSink(rtc::VideoSinkInterface<VideoFrame>* /* sink */,
+                       const rtc::VideoSinkWants& /* wants */) override {}
+  void RemoveSink(rtc::VideoSinkInterface<VideoFrame>* /* sink */) override {}
 
   virtual VideoTrackSourceInterface* GetSource() const = 0;
 
   virtual ContentHint content_hint() const;
-  virtual void set_content_hint(ContentHint hint) {}
+  virtual void set_content_hint(ContentHint /* hint */) {}
 
  protected:
   ~VideoTrackInterface() override = default;
@@ -200,11 +200,11 @@
 // Interface for receiving audio data from a AudioTrack.
 class AudioTrackSinkInterface {
  public:
-  virtual void OnData(const void* audio_data,
-                      int bits_per_sample,
-                      int sample_rate,
-                      size_t number_of_channels,
-                      size_t number_of_frames) {
+  virtual void OnData(const void* /* audio_data */,
+                      int /* bits_per_sample */,
+                      int /* sample_rate */,
+                      size_t /* number_of_channels */,
+                      size_t /* number_of_frames */) {
     RTC_DCHECK_NOTREACHED() << "This method must be overridden, or not used.";
   }
 
@@ -212,12 +212,13 @@
   // supposed to deliver the timestamp when this audio frame was originally
   // captured. This timestamp MUST be based on the same clock as
   // rtc::TimeMillis().
-  virtual void OnData(const void* audio_data,
-                      int bits_per_sample,
-                      int sample_rate,
-                      size_t number_of_channels,
-                      size_t number_of_frames,
-                      std::optional<int64_t> absolute_capture_timestamp_ms) {
+  virtual void OnData(
+      const void* audio_data,
+      int bits_per_sample,
+      int sample_rate,
+      size_t number_of_channels,
+      size_t number_of_frames,
+      std::optional<int64_t> /* absolute_capture_timestamp_ms */) {
     // TODO(bugs.webrtc.org/10739): Deprecate the old OnData and make this one
     // pure virtual.
     return OnData(audio_data, bits_per_sample, sample_rate, number_of_channels,
@@ -251,15 +252,15 @@
   // Sets the volume of the source. `volume` is in  the range of [0, 10].
   // TODO(tommi): This method should be on the track and ideally volume should
   // be applied in the track in a way that does not affect clones of the track.
-  virtual void SetVolume(double volume) {}
+  virtual void SetVolume(double /* volume */) {}
 
   // Registers/unregisters observers to the audio source.
-  virtual void RegisterAudioObserver(AudioObserver* observer) {}
-  virtual void UnregisterAudioObserver(AudioObserver* observer) {}
+  virtual void RegisterAudioObserver(AudioObserver* /* observer */) {}
+  virtual void UnregisterAudioObserver(AudioObserver* /* observer */) {}
 
   // TODO(tommi): Make pure virtual.
-  virtual void AddSink(AudioTrackSinkInterface* sink) {}
-  virtual void RemoveSink(AudioTrackSinkInterface* sink) {}
+  virtual void AddSink(AudioTrackSinkInterface* /* sink */) {}
+  virtual void RemoveSink(AudioTrackSinkInterface* /* sink */) {}
 
   // Returns options for the AudioSource.
   // (for some of the settings this approach is broken, e.g. setting
@@ -339,16 +340,18 @@
   // Note: Default implementations are for avoiding link time errors in
   // implementations that mock this API.
   // TODO(bugs.webrtc.org/13980): Remove default implementations.
-  virtual bool AddTrack(rtc::scoped_refptr<AudioTrackInterface> track) {
+  virtual bool AddTrack(rtc::scoped_refptr<AudioTrackInterface> /* track */) {
     RTC_CHECK_NOTREACHED();
   }
-  virtual bool AddTrack(rtc::scoped_refptr<VideoTrackInterface> track) {
+  virtual bool AddTrack(rtc::scoped_refptr<VideoTrackInterface> /* track */) {
     RTC_CHECK_NOTREACHED();
   }
-  virtual bool RemoveTrack(rtc::scoped_refptr<AudioTrackInterface> track) {
+  virtual bool RemoveTrack(
+      rtc::scoped_refptr<AudioTrackInterface> /* track */) {
     RTC_CHECK_NOTREACHED();
   }
-  virtual bool RemoveTrack(rtc::scoped_refptr<VideoTrackInterface> track) {
+  virtual bool RemoveTrack(
+      rtc::scoped_refptr<VideoTrackInterface> /* track */) {
     RTC_CHECK_NOTREACHED();
   }
 
diff --git a/api/rtc_event_log/rtc_event_log.h b/api/rtc_event_log/rtc_event_log.h
index 3bd2553..55dee7d 100644
--- a/api/rtc_event_log/rtc_event_log.h
+++ b/api/rtc_event_log/rtc_event_log.h
@@ -60,7 +60,7 @@
   bool StartLogging(std::unique_ptr<RtcEventLogOutput> output,
                     int64_t output_period_ms) override;
   void StopLogging() override {}
-  void Log(std::unique_ptr<RtcEvent> event) override {}
+  void Log(std::unique_ptr<RtcEvent> /* event */) override {}
 };
 
 }  // namespace webrtc
diff --git a/api/rtp_receiver_interface.h b/api/rtp_receiver_interface.h
index f97ed53..bad3d2c 100644
--- a/api/rtp_receiver_interface.h
+++ b/api/rtp_receiver_interface.h
@@ -80,7 +80,9 @@
   virtual RtpParameters GetParameters() const = 0;
   // TODO(dinosaurav): Delete SetParameters entirely after rolling to Chromium.
   // Currently, doesn't support changing any parameters.
-  virtual bool SetParameters(const RtpParameters& parameters) { return false; }
+  virtual bool SetParameters(const RtpParameters& /* parameters */) {
+    return false;
+  }
 
   // Does not take ownership of observer.
   // Must call SetObserver(nullptr) before the observer is destroyed.
diff --git a/api/rtp_sender_interface.h b/api/rtp_sender_interface.h
index aa2eb6f..9afe3e3 100644
--- a/api/rtp_sender_interface.h
+++ b/api/rtp_sender_interface.h
@@ -119,7 +119,7 @@
   // Default implementation of SetFrameTransformer.
   // TODO: bugs.webrtc.org/15929 - remove when all implementations are good
   void SetFrameTransformer(rtc::scoped_refptr<FrameTransformerInterface>
-                               frame_transformer) override {}
+                           /* frame_transformer */) override {}
 
  protected:
   ~RtpSenderInterface() override = default;
diff --git a/api/transport/data_channel_transport_interface.h b/api/transport/data_channel_transport_interface.h
index ddf6147..7ea1d30 100644
--- a/api/transport/data_channel_transport_interface.h
+++ b/api/transport/data_channel_transport_interface.h
@@ -88,7 +88,7 @@
   // Callback issued when the data channel becomes unusable (closed).
   // TODO(https://crbug.com/webrtc/10360): Make pure virtual when all
   // consumers updated.
-  virtual void OnTransportClosed(RTCError error) {}
+  virtual void OnTransportClosed(RTCError /* error */) {}
 
   // The data channel's buffered_amount has fallen to or below the threshold
   // set when calling `SetBufferedAmountLowThreshold`
diff --git a/api/video/video_sink_interface.h b/api/video/video_sink_interface.h
index f661248..5a1f67b 100644
--- a/api/video/video_sink_interface.h
+++ b/api/video/video_sink_interface.h
@@ -29,7 +29,7 @@
   // Called on the network thread when video constraints change.
   // TODO(crbug/1255737): make pure virtual once downstream project adapts.
   virtual void OnConstraintsChanged(
-      const webrtc::VideoTrackSourceConstraints& constraints) {}
+      const webrtc::VideoTrackSourceConstraints& /* constraints */) {}
 };
 
 }  // namespace rtc
diff --git a/api/video_codecs/video_decoder.h b/api/video_codecs/video_decoder.h
index 934e224..079753d 100644
--- a/api/video_codecs/video_decoder.h
+++ b/api/video_codecs/video_decoder.h
@@ -107,7 +107,7 @@
   // TODO(bugs.webrtc.org/15444): Migrate all subclasses to Decode() without
   // missing_frame and delete this.
   virtual int32_t Decode(const EncodedImage& input_image,
-                         bool missing_frames,
+                         bool /* missing_frames */,
                          int64_t render_time_ms) {
     return Decode(input_image, render_time_ms);
   }
diff --git a/api/video_codecs/video_encoder.h b/api/video_codecs/video_encoder.h
index aadf452..44a7516 100644
--- a/api/video_codecs/video_encoder.h
+++ b/api/video_codecs/video_encoder.h
@@ -82,7 +82,7 @@
       const EncodedImage& encoded_image,
       const CodecSpecificInfo* codec_specific_info) = 0;
 
-  virtual void OnDroppedFrame(DropReason reason) {}
+  virtual void OnDroppedFrame(DropReason /* reason */) {}
 };
 
 class RTC_EXPORT VideoEncoder {
diff --git a/api/video_codecs/video_encoder_factory.h b/api/video_codecs/video_encoder_factory.h
index cb00f92..8986e92 100644
--- a/api/video_codecs/video_encoder_factory.h
+++ b/api/video_codecs/video_encoder_factory.h
@@ -54,7 +54,7 @@
     // Called every time the encoder input resolution change. Should return a
     // non-empty if an encoder switch should be performed.
     virtual std::optional<SdpVideoFormat> OnResolutionChange(
-        const RenderResolution& resolution) {
+        const RenderResolution& /* resolution */) {
       return std::nullopt;
     }
 
diff --git a/media/base/media_channel.h b/media/base/media_channel.h
index 73d2b25..483abdf 100644
--- a/media/base/media_channel.h
+++ b/media/base/media_channel.h
@@ -246,9 +246,9 @@
   // note: The encoder_selector object must remain valid for the lifetime of the
   // MediaChannel, unless replaced.
   virtual void SetEncoderSelector(
-      uint32_t ssrc,
-      webrtc::VideoEncoderFactory::EncoderSelectorInterface* encoder_selector) {
-  }
+      uint32_t /* ssrc */,
+      webrtc::VideoEncoderFactory::
+          EncoderSelectorInterface* /* encoder_selector */) {}
   virtual webrtc::RtpParameters GetRtpSendParameters(uint32_t ssrc) const = 0;
   virtual bool SendCodecHasNack() const = 0;
   // Called whenever the list of sending SSRCs changes.
diff --git a/modules/rtp_rtcp/include/rtp_rtcp_defines.h b/modules/rtp_rtcp/include/rtp_rtcp_defines.h
index eb4d1d0..c9d1f17 100644
--- a/modules/rtp_rtcp/include/rtp_rtcp_defines.h
+++ b/modules/rtp_rtcp/include/rtp_rtcp_defines.h
@@ -168,20 +168,22 @@
  public:
   virtual ~NetworkLinkRtcpObserver() = default;
 
-  virtual void OnTransportFeedback(Timestamp receive_time,
-                                   const rtcp::TransportFeedback& feedback) {}
+  virtual void OnTransportFeedback(
+      Timestamp /* receive_time */,
+      const rtcp::TransportFeedback& /* feedback */) {}
   // RFC 8888 congestion control feedback.
   virtual void OnCongestionControlFeedback(
-      Timestamp receive_time,
-      const rtcp::CongestionControlFeedback& feedback) {}
-  virtual void OnReceiverEstimatedMaxBitrate(Timestamp receive_time,
-                                             DataRate bitrate) {}
+      Timestamp /* receive_time */,
+      const rtcp::CongestionControlFeedback& /* feedback */) {}
+  virtual void OnReceiverEstimatedMaxBitrate(Timestamp /* receive_time */,
+                                             DataRate /* bitrate */) {}
 
   // Called on an RTCP packet with sender or receiver reports with non zero
   // report blocks. Report blocks are combined from all reports into one array.
-  virtual void OnReport(Timestamp receive_time,
-                        rtc::ArrayView<const ReportBlockData> report_blocks) {}
-  virtual void OnRttUpdate(Timestamp receive_time, TimeDelta rtt) {}
+  virtual void OnReport(
+      Timestamp /* receive_time */,
+      rtc::ArrayView<const ReportBlockData> /* report_blocks */) {}
+  virtual void OnRttUpdate(Timestamp /* receive_time */, TimeDelta /* rtt */) {}
 };
 
 // NOTE! `kNumMediaTypes` must be kept in sync with RtpPacketMediaType!
diff --git a/rtc_base/checks.cc b/rtc_base/checks.cc
index e732a26..14cfe69 100644
--- a/rtc_base/checks.cc
+++ b/rtc_base/checks.cc
@@ -78,8 +78,8 @@
   abort();
 }
 
-RTC_NORETURN void WriteFatalLog(const char* file,
-                                int line,
+RTC_NORETURN void WriteFatalLog(const char* /* file */,
+                                int /* line */,
                                 absl::string_view output) {
   WriteFatalLog(output);
 }
diff --git a/rtc_base/crypto_random.cc b/rtc_base/crypto_random.cc
index 68b86a0..d9660b1 100644
--- a/rtc_base/crypto_random.cc
+++ b/rtc_base/crypto_random.cc
@@ -34,7 +34,7 @@
  public:
   SecureRandomGenerator() {}
   ~SecureRandomGenerator() override {}
-  bool Init(const void* seed, size_t len) override { return true; }
+  bool Init(const void* /* seed */, size_t /* len */) override { return true; }
   bool Generate(void* buf, size_t len) override {
     return (RAND_bytes(reinterpret_cast<unsigned char*>(buf), len) > 0);
   }
@@ -45,7 +45,7 @@
  public:
   TestRandomGenerator() : seed_(7) {}
   ~TestRandomGenerator() override {}
-  bool Init(const void* seed, size_t len) override { return true; }
+  bool Init(const void* /* seed */, size_t /* len */) override { return true; }
   bool Generate(void* buf, size_t len) override {
     for (size_t i = 0; i < len; ++i) {
       static_cast<uint8_t*>(buf)[i] = static_cast<uint8_t>(GetRandom());
diff --git a/rtc_base/logging.cc b/rtc_base/logging.cc
index 61a3c66..f0461f7 100644
--- a/rtc_base/logging.cc
+++ b/rtc_base/logging.cc
@@ -220,7 +220,7 @@
   }
 }
 
-void LogMessage::AddTag(const char* tag) {
+void LogMessage::AddTag([[maybe_unused]] const char* tag) {
 #ifdef WEBRTC_ANDROID
   log_line_.set_tag(tag);
 #endif
diff --git a/rtc_base/logging.h b/rtc_base/logging.h
index 208e8b9..2b47ee8 100644
--- a/rtc_base/logging.h
+++ b/rtc_base/logging.h
@@ -466,7 +466,7 @@
   // This has to be an operator with a precedence lower than << but
   // higher than ?:
   template <typename... Ts>
-  void operator&(LogStreamer<Ts...>&& streamer) {}
+  void operator&(LogStreamer<Ts...>&& /* streamer */) {}
 };
 
 }  // namespace webrtc_logging_impl
diff --git a/rtc_base/numerics/safe_conversions_impl.h b/rtc_base/numerics/safe_conversions_impl.h
index e924ce3..fe0f0d7 100644
--- a/rtc_base/numerics/safe_conversions_impl.h
+++ b/rtc_base/numerics/safe_conversions_impl.h
@@ -101,7 +101,9 @@
 // Dst range always contains the result: nothing to check.
 template <typename Dst, typename Src, DstSign IsDstSigned, SrcSign IsSrcSigned>
 struct RangeCheckImpl<Dst, Src, IsDstSigned, IsSrcSigned, CONTAINS_RANGE> {
-  static constexpr RangeCheckResult Check(Src value) { return TYPE_VALID; }
+  static constexpr RangeCheckResult Check(Src /* value */) {
+    return TYPE_VALID;
+  }
 };
 
 // Signed to signed narrowing.
diff --git a/rtc_base/sanitizer.h b/rtc_base/sanitizer.h
index 8af0824..08fc55e 100644
--- a/rtc_base/sanitizer.h
+++ b/rtc_base/sanitizer.h
@@ -51,9 +51,9 @@
 // Ask ASan to mark the memory range [ptr, ptr + element_size * num_elements)
 // as being unaddressable, so that reads and writes are not allowed. ASan may
 // narrow the range to the nearest alignment boundaries.
-static inline void rtc_AsanPoison(const volatile void* ptr,
-                                  size_t element_size,
-                                  size_t num_elements) {
+static inline void rtc_AsanPoison([[maybe_unused]] const volatile void* ptr,
+                                  [[maybe_unused]] size_t element_size,
+                                  [[maybe_unused]] size_t num_elements) {
 #if RTC_HAS_ASAN
   ASAN_POISON_MEMORY_REGION(ptr, element_size * num_elements);
 #endif
@@ -62,9 +62,9 @@
 // Ask ASan to mark the memory range [ptr, ptr + element_size * num_elements)
 // as being addressable, so that reads and writes are allowed. ASan may widen
 // the range to the nearest alignment boundaries.
-static inline void rtc_AsanUnpoison(const volatile void* ptr,
-                                    size_t element_size,
-                                    size_t num_elements) {
+static inline void rtc_AsanUnpoison([[maybe_unused]] const volatile void* ptr,
+                                    [[maybe_unused]] size_t element_size,
+                                    [[maybe_unused]] size_t num_elements) {
 #if RTC_HAS_ASAN
   ASAN_UNPOISON_MEMORY_REGION(ptr, element_size * num_elements);
 #endif
@@ -72,9 +72,10 @@
 
 // Ask MSan to mark the memory range [ptr, ptr + element_size * num_elements)
 // as being uninitialized.
-static inline void rtc_MsanMarkUninitialized(const volatile void* ptr,
-                                             size_t element_size,
-                                             size_t num_elements) {
+static inline void rtc_MsanMarkUninitialized(
+    [[maybe_unused]] const volatile void* ptr,
+    [[maybe_unused]] size_t element_size,
+    [[maybe_unused]] size_t num_elements) {
 #if RTC_HAS_MSAN
   __msan_poison(ptr, element_size * num_elements);
 #endif
@@ -83,9 +84,10 @@
 // Force an MSan check (if any bits in the memory range [ptr, ptr +
 // element_size * num_elements) are uninitialized the call will crash with an
 // MSan report).
-static inline void rtc_MsanCheckInitialized(const volatile void* ptr,
-                                            size_t element_size,
-                                            size_t num_elements) {
+static inline void rtc_MsanCheckInitialized(
+    [[maybe_unused]] const volatile void* ptr,
+    [[maybe_unused]] size_t element_size,
+    [[maybe_unused]] size_t num_elements) {
 #if RTC_HAS_MSAN
   __msan_check_mem_is_initialized(ptr, element_size * num_elements);
 #endif
diff --git a/rtc_base/socket.h b/rtc_base/socket.h
index 10e6037..4b9a169 100644
--- a/rtc_base/socket.h
+++ b/rtc_base/socket.h
@@ -113,10 +113,10 @@
   // `timestamp` is in units of microseconds.
   virtual int Recv(void* pv, size_t cb, int64_t* timestamp) = 0;
   // TODO(webrtc:15368): Deprecate and remove.
-  virtual int RecvFrom(void* pv,
-                       size_t cb,
-                       SocketAddress* paddr,
-                       int64_t* timestamp) {
+  virtual int RecvFrom(void* /* pv */,
+                       size_t /* cb */,
+                       SocketAddress* /* paddr */,
+                       int64_t* /* timestamp */) {
     // Not implemented. Use RecvFrom(ReceiveBuffer& buffer).
     RTC_CHECK_NOTREACHED();
   }
diff --git a/rtc_base/string_to_number.h b/rtc_base/string_to_number.h
index 5e8aea5..d6e3b38 100644
--- a/rtc_base/string_to_number.h
+++ b/rtc_base/string_to_number.h
@@ -92,7 +92,7 @@
 template <typename T>
 typename std::enable_if<std::is_floating_point<T>::value,
                         std::optional<T>>::type
-StringToNumber(absl::string_view str, int base = 10) {
+StringToNumber(absl::string_view str, int /* base */ = 10) {
   static_assert(
       std::numeric_limits<T>::max() <= std::numeric_limits<long double>::max(),
       "StringToNumber only supports floating-point numbers as large "
diff --git a/rtc_base/synchronization/sequence_checker_internal.h b/rtc_base/synchronization/sequence_checker_internal.h
index a23ac08..eb3bf36 100644
--- a/rtc_base/synchronization/sequence_checker_internal.h
+++ b/rtc_base/synchronization/sequence_checker_internal.h
@@ -59,8 +59,8 @@
 // right version for your build configuration.
 class SequenceCheckerDoNothing {
  public:
-  explicit SequenceCheckerDoNothing(bool attach_to_current_thread) {}
-  explicit SequenceCheckerDoNothing(TaskQueueBase* attached_queue) {}
+  explicit SequenceCheckerDoNothing(bool /* attach_to_current_thread */) {}
+  explicit SequenceCheckerDoNothing(TaskQueueBase* /* attached_queue */) {}
   bool IsCurrent() const { return true; }
   void Detach() {}
 };
@@ -68,7 +68,7 @@
 template <typename ThreadLikeObject>
 std::enable_if_t<std::is_base_of_v<SequenceCheckerImpl, ThreadLikeObject>,
                  std::string>
-ExpectationToString(const ThreadLikeObject* checker) {
+ExpectationToString([[maybe_unused]] const ThreadLikeObject* checker) {
 #if RTC_DCHECK_IS_ON
   return checker->ExpectationToString();
 #else
