diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a6d7376..c939baad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ Version 187: * Fix uninitialized comparison in buffers iterator * Partial support for BOOST_NO_EXCEPTIONS * Fix a spurious gcc warning +* Test for gcc warning bug -------------------------------------------------------------------------------- diff --git a/test/beast/core/buffers_cat.cpp b/test/beast/core/buffers_cat.cpp index 30f92d49..e5148d9b 100644 --- a/test/beast/core/buffers_cat.cpp +++ b/test/beast/core/buffers_cat.cpp @@ -11,6 +11,8 @@ #include #include +#include +#include #include #include #include @@ -215,6 +217,45 @@ public: BEAST_EXPECT(it == it2); } + void + testGccWarning1() + { + using boost::beast::buffers_cat; + using boost::beast::buffers_suffix; + using boost::asio::buffer; + using boost::asio::const_buffer; + + char out[64]; + std::array buffers{ + {buffer("Hello, "), buffer("world!")}}; + std::size_t i = 3; + buffers_suffix> cb(buffers); + cb.consume(i); + boost::asio::buffer_copy( + buffer(out), + buffers_cat(cb, cb)); + } + + // VFALCO Some version of g++ incorrectly complain about + // uninitialized values when buffers_cat and + // buffers_prefix are used together. + void + testGccWarning2() + { + using boost::asio::buffer; + using boost::asio::buffer_copy; + using boost::asio::const_buffer; + + char out[64]; + const_buffer buffers("Hello, world!", 13); + std::size_t i = 3; + buffers_suffix cb{buffers}; + cb.consume(i); + buffer_copy( + buffer(out), + buffers_cat(buffers_prefix(i, buffers), cb)); + } + void run() override { using boost::asio::const_buffer; @@ -258,6 +299,8 @@ public: testBufferCat(); testIterators(); + testGccWarning1(); + testGccWarning2(); } };