Web search shows that -Wmaybe-uninitialized is an imprecise check, and that
boost::optional is already a known sore spot, but I wanted to pass along this
small test case in case the warning's owner wanted to do further improvements.
We solved our one grumpy instance with auto x = make_optional(0, ...);.
Something about the loop + conditional + O1/O2/O3 optimization triggers the
false positive. Thanks! -Jason
//==============================================================================
// g++ -c sample.cc -O2 -Wall -Werror
// gcc 6.1/6.2 and boost 1.61/1.62
#include <stdio.h>
#include <boost/optional/optional.hpp>
int main() {
boost::optional<int> value;
for (int x(0); x < 3; ++x) {
if (random() & 1)
value = x;
}
if (value != boost::none) {
int result = value.get();
printf("%d\n", result); // error: '*((void*)& value +4)' may be used
uninitialized
}
}
//==============================================================================