From 1fce3f8e55a5a416b0436adfff61b627f4033a98 Mon Sep 17 00:00:00 2001 From: Yves Gerey Date: Thu, 5 Dec 2019 17:45:31 +0100 Subject: [PATCH] Remove custom constructors for AudioProcessing::Config. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This CL follows the "Rule of zero". Those constructors made no sense compared to default generated ones, since all members are POD. They were introduced to quiet a memory sanitizer warning, which apparently was misleading. As a bonus, the struct is now movable. Bug: webrtc:11180, webrtc:9855 Change-Id: Iff9fd950bec8040bc6e7e7ece33cc49c5f453f5d Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/161381 Reviewed-by: Per Ã…hgren Commit-Queue: Yves Gerey Cr-Commit-Position: refs/heads/master@{#30023} --- .../audio_processing_unittest.cc | 9 +++++++++ .../audio_processing/include/audio_processing.h | 16 ---------------- 2 files changed, 9 insertions(+), 16 deletions(-) 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 {