boost::date_time and gcc-4.3 with enabled optimization.

Hello! Please look at this simple example: krivenok@develop2 11:51:44 /tmp/date $ cat date.cpp #include <string> #include <boost/date_time.hpp> const std::string Date(boost::posix_time::ptime posix_time) { return boost::gregorian::to_iso_extended_string(posix_time.date()); } krivenok@develop2 11:51:54 /tmp/date $ I have two compilers (gcc-4.1.2 and gcc-4.3.2) and boost-1.37.0 installed on my linux host. I wrote simple test to demonstrate the problem: krivenok@develop2 11:51:54 /tmp/date $ export CC=g++-4.1.2 krivenok@develop2 11:52:32 /tmp/date $ for((i=0;i<4;i++)) do echo "Optimization level $i" ; $CC -O$i -Wall -I/usr/local/dev/boost/include/ date.cpp -c ; done Optimization level 0 Optimization level 1 Optimization level 2 Optimization level 3 krivenok@develop2 11:52:40 /tmp/date $ export CC=g++-4.3.2 krivenok@develop2 11:52:44 /tmp/date $ for((i=0;i<4;i++)) do echo "Optimization level $i" ; $CC -O$i -Wall -I/usr/local/dev/boost/include/ date.cpp -c ; done Optimization level 0 Optimization level 1 /usr/local/dev/boost/include/boost/date_time/constrained_value.hpp: In function 'const std::string Date(boost::posix_time::ptime)': /usr/local/dev/boost/include/boost/date_time/constrained_value.hpp:68: warning: 'year.boost::gregorian::greg_year::<anonymous>.boost::CV::constrained_value<boost::CV::simple_exception_policy<short unsigned int, 1400u, 10000u, boost::gregorian::bad_year> >::value_' may be used uninitialized in this function /usr/local/dev/boost/include/boost/date_time/gregorian_calendar.ipp:122: note: 'year.boost::gregorian::greg_year::<anonymous>.boost::CV::constrained_value<boost::CV::simple_exception_policy<short unsigned int, 1400u, 10000u, boost::gregorian::bad_year> >::value_' was declared here /usr/local/dev/boost/include/boost/date_time/constrained_value.hpp:64: warning: 'year.boost::gregorian::greg_year::<anonymous>.boost::CV::constrained_value<boost::CV::simple_exception_policy<short unsigned int, 1400u, 10000u, boost::gregorian::bad_year> >::value_' may be used uninitialized in this function /usr/local/dev/boost/include/boost/date_time/gregorian_calendar.ipp:122: note: 'year.boost::gregorian::greg_year::<anonymous>.boost::CV::constrained_value<boost::CV::simple_exception_policy<short unsigned int, 1400u, 10000u, boost::gregorian::bad_year> >::value_' was declared here Optimization level 2 /usr/local/dev/boost/include/boost/date_time/constrained_value.hpp: In function 'const std::string Date(boost::posix_time::ptime)': /usr/local/dev/boost/include/boost/date_time/constrained_value.hpp:68: warning: 'year.boost::gregorian::greg_year::<anonymous>.boost::CV::constrained_value<boost::CV::simple_exception_policy<short unsigned int, 1400u, 10000u, boost::gregorian::bad_year> >::value_' may be used uninitialized in this function /usr/local/dev/boost/include/boost/date_time/gregorian_calendar.ipp:122: note: 'year.boost::gregorian::greg_year::<anonymous>.boost::CV::constrained_value<boost::CV::simple_exception_policy<short unsigned int, 1400u, 10000u, boost::gregorian::bad_year> >::value_' was declared here /usr/local/dev/boost/include/boost/date_time/constrained_value.hpp:64: warning: 'year.boost::gregorian::greg_year::<anonymous>.boost::CV::constrained_value<boost::CV::simple_exception_policy<short unsigned int, 1400u, 10000u, boost::gregorian::bad_year> >::value_' may be used uninitialized in this function /usr/local/dev/boost/include/boost/date_time/gregorian_calendar.ipp:122: note: 'year.boost::gregorian::greg_year::<anonymous>.boost::CV::constrained_value<boost::CV::simple_exception_policy<short unsigned int, 1400u, 10000u, boost::gregorian::bad_year> >::value_' was declared here Optimization level 3 /usr/local/dev/boost/include/boost/date_time/constrained_value.hpp: In function 'const std::string Date(boost::posix_time::ptime)': /usr/local/dev/boost/include/boost/date_time/constrained_value.hpp:68: warning: 'year.boost::gregorian::greg_year::<anonymous>.boost::CV::constrained_value<boost::CV::simple_exception_policy<short unsigned int, 1400u, 10000u, boost::gregorian::bad_year> >::value_' may be used uninitialized in this function /usr/local/dev/boost/include/boost/date_time/gregorian_calendar.ipp:122: note: 'year.boost::gregorian::greg_year::<anonymous>.boost::CV::constrained_value<boost::CV::simple_exception_policy<short unsigned int, 1400u, 10000u, boost::gregorian::bad_year> >::value_' was declared here /usr/local/dev/boost/include/boost/date_time/constrained_value.hpp:64: warning: 'year.boost::gregorian::greg_year::<anonymous>.boost::CV::constrained_value<boost::CV::simple_exception_policy<short unsigned int, 1400u, 10000u, boost::gregorian::bad_year> >::value_' may be used uninitialized in this function /usr/local/dev/boost/include/boost/date_time/gregorian_calendar.ipp:122: note: 'year.boost::gregorian::greg_year::<anonymous>.boost::CV::constrained_value<boost::CV::simple_exception_policy<short unsigned int, 1400u, 10000u, boost::gregorian::bad_year> >::value_' was declared here krivenok@develop2 11:52:50 /tmp/date $ As you can see the example compiled using gcc-4.1.2 compiles without any warnings regardless of optimization level. However, gcc-4.3.2 produces a lot of strange warnings if optimization is enabled. I don't really know is it gcc or boost issue. Is it safe to use boost::date_time with gcc-4.3.2 and -O3 optimization level? Thank you beforehand! -- Sincerely yours, Dmitry V. Krivenok Orange System Company Saint-Petersburg, Russia work phone: +7 812 332-32-40 cellular phone: +7 921 576-70-91 e-mail: krivenok@orangesystem.ru web: http://www.orangesystem.ru skype: krivenok_dmitry jabber: krivenok_dmitry@jabber.ru icq: 242-526-443

Dmitry V. Krivenok wrote:
Hello!
As you can see the example compiled using gcc-4.1.2 compiles without any warnings regardless of optimization level. However, gcc-4.3.2 produces a lot of strange warnings if optimization is enabled.
I don't really know is it gcc or boost issue. Is it safe to use boost::date_time with gcc-4.3.2 and -O3 optimization level?
Which Boost version do you use? I believe I fixed this warning in trunk and release branch. PS: It was a spurious warning, the variable was not actually used before being initialized. And I have no idea why it only occurs with O1 or higher.

On Tue, 30 Dec 2008 18:50:01 +0300 Andrey Semashev <andrey.semashev@gmail.com> wrote:
Dmitry V. Krivenok wrote:
Hello!
As you can see the example compiled using gcc-4.1.2 compiles without any warnings regardless of optimization level. However, gcc-4.3.2 produces a lot of strange warnings if optimization is enabled.
I don't really know is it gcc or boost issue. Is it safe to use boost::date_time with gcc-4.3.2 and -O3 optimization level?
Which Boost version do you use? I believe I fixed this warning in trunk and release branch.
PS: It was a spurious warning, the variable was not actually used before being initialized. And I have no idea why it only occurs with O1 or higher.
Dmitry is not alone on this one I'm afraid. A week prior to his report I filed a Trac issue (2612) against this too. Running against gcc-4.3, with -O3 I get the same, using boost version 1.37 (release). Would be real happy if this has been seen to in the trunk.. Cheers, -- Manfred 31 December, 2008

Manfred Doudar wrote:
On Tue, 30 Dec 2008 18:50:01 +0300 Andrey Semashev <andrey.semashev@gmail.com> wrote:
Hello!
As you can see the example compiled using gcc-4.1.2 compiles without any warnings regardless of optimization level. However, gcc-4.3.2 produces a lot of strange warnings if optimization is enabled.
I don't really know is it gcc or boost issue. Is it safe to use boost::date_time with gcc-4.3.2 and -O3 optimization level? Which Boost version do you use? I believe I fixed this warning in
Dmitry V. Krivenok wrote: trunk and release branch.
PS: It was a spurious warning, the variable was not actually used before being initialized. And I have no idea why it only occurs with O1 or higher.
Dmitry is not alone on this one I'm afraid. A week prior to his report I filed a Trac issue (2612) against this too. Running against gcc-4.3, with -O3 I get the same, using boost version 1.37 (release).
Would be real happy if this has been seen to in the trunk..
This issue was present in 1.37. My changes will go into 1.38. Can you confirm that the warning is still present with trunk or branches/release?

On Tue, 30 Dec 2008 19:54:07 +0300 Andrey Semashev <andrey.semashev@gmail.com> wrote:
Manfred Doudar wrote:
On Tue, 30 Dec 2008 18:50:01 +0300 Andrey Semashev <andrey.semashev@gmail.com> wrote:
Hello!
As you can see the example compiled using gcc-4.1.2 compiles without any warnings regardless of optimization level. However, gcc-4.3.2 produces a lot of strange warnings if optimization is enabled.
I don't really know is it gcc or boost issue. Is it safe to use boost::date_time with gcc-4.3.2 and -O3 optimization level? Which Boost version do you use? I believe I fixed this warning in
Dmitry V. Krivenok wrote: trunk and release branch.
PS: It was a spurious warning, the variable was not actually used before being initialized. And I have no idea why it only occurs with O1 or higher.
Dmitry is not alone on this one I'm afraid. A week prior to his report I filed a Trac issue (2612) against this too. Running against gcc-4.3, with -O3 I get the same, using boost version 1.37 (release).
Would be real happy if this has been seen to in the trunk..
This issue was present in 1.37. My changes will go into 1.38. Can you confirm that the warning is still present with trunk or branches/release?
Against trunk & release branch 1.38, your patch resolves the issue. Cheers, -- Manfred 31 December, 2008
participants (3)
-
Andrey Semashev
-
Dmitry V. Krivenok
-
Manfred Doudar