From ea41694e08a31c4001e600773e47b4fc693cc539 Mon Sep 17 00:00:00 2001 From: ossu Date: Thu, 30 Jun 2016 02:14:54 -0700 Subject: [PATCH] Added an empty member to the union of rtc::Optional, so that it is always initializable. Added notry due to flaky android_dbg bot. NOTRY=true BUG=webrtc:6033 Review-Url: https://codereview.webrtc.org/2090223003 Cr-Commit-Position: refs/heads/master@{#13343} --- webrtc/base/optional.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/webrtc/base/optional.h b/webrtc/base/optional.h index 25cfbfe417..e98ab2e3ce 100644 --- a/webrtc/base/optional.h +++ b/webrtc/base/optional.h @@ -59,7 +59,7 @@ template class Optional final { public: // Construct an empty Optional. - Optional() : has_value_(false) {} + Optional() : has_value_(false), empty_('\0') {} // Construct an Optional that contains a value. explicit Optional(const T& value) : has_value_(true) { @@ -189,6 +189,10 @@ class Optional final { private: bool has_value_; // True iff value_ contains a live value. union { + // empty_ exists only to make it possible to initialize the union, even when + // it doesn't contain any data. If the union goes uninitialized, it may + // trigger compiler warnings. + char empty_; // By placing value_ in a union, we get to manage its construction and // destruction manually: the Optional constructors won't automatically // construct it, and the Optional destructor won't automatically destroy