diff --git a/modules/audio_processing/audio_processing_unittest.cc b/modules/audio_processing/audio_processing_unittest.cc index 199f3780df..8f29a739ed 100644 --- a/modules/audio_processing/audio_processing_unittest.cc +++ b/modules/audio_processing/audio_processing_unittest.cc @@ -2692,4 +2692,13 @@ TEST(ApmConfiguration, HandlingOfRateCombinations) { capture_channel_counts); } +TEST(ApmConfiguration, SelfAssignment) { + // At some point memory sanitizer was complaining about self-assigment. + // Make sure we don't regress. + AudioProcessing::Config config; + AudioProcessing::Config* config2 = &config; + *config2 = *config2; // Workaround -Wself-assign-overloaded + SUCCEED(); // Real success is absence of defects from asan/msan/ubsan. +} + } // namespace webrtc diff --git a/modules/audio_processing/include/audio_processing.h b/modules/audio_processing/include/audio_processing.h index ba56684991..e8ecd6e308 100644 --- a/modules/audio_processing/include/audio_processing.h +++ b/modules/audio_processing/include/audio_processing.h @@ -247,22 +247,6 @@ class RTC_EXPORT AudioProcessing : public rtc::RefCountInterface { // submodule resets, affecting the audio quality. Use the RuntimeSetting // construct for runtime configuration. struct RTC_EXPORT Config { - Config() = default; - - // Explicit copy assignment implementation to avoid issues with memory - // sanitizer complaints in case of self-assignment. - // TODO(peah): Add buildflag to ensure that this is only included for memory - // sanitizer builds. - Config& operator=(const Config& config) { - if (this != &config) { - memcpy(this, &config, sizeof(*this)); - } - return *this; - } - - // Explicit copy constructor needed to avoid errors due to the above - // implemented copy assignment operator. - Config(const Config& config) { *this = config; } // Sets the properties of the audio processing pipeline. struct RTC_EXPORT Pipeline {