Opened 8 years ago

Closed 7 years ago

#10684 closed Bugs (fixed)

Implicit conversion warnings when using clang's -Wconversion flag.

Reported by: anonymous Owned by: Gennadiy Rozental
Milestone: Boost 1.59.0 Component: test
Version: Boost 1.56.0 Severity: Optimization
Keywords: Cc:

Description

Operating system: OS X 10.10

Compiler:

$ clang++ --version
Apple LLVM version 6.0 (clang-600.0.54) (based on LLVM 3.5svn)
Target: x86_64-apple-darwin14.0.0
Thread model: posix
$

Boost: 1.56.0

The following code (assumed to be in a file named clang_warning.cpp):

// clang_warning.cpp:
#define BOOST_TEST_MODULE Test
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_CASE(test)
{
    BOOST_CHECK(true);
}

when compiled using the -Wconversion flag (and Boost under /opt/boost_1_56_0/) like:

    $ clang++ -Wconversion -I/opt/boost_1_56_0/ clang_warning.cpp -lboost_test_exec_monitor

gives implicit conversion warnings like:

    /opt/boost_1_56_0/boost/test/utils/basic_cstring/bcs_char_traits.hpp:90:20: warning: implicit conversion changes signedness: 'long' to 'std::size_t' (aka 'unsigned long') [-Wsign-conversion]
            return ptr - cstr;
            ~~~~~~ ~~~~^~~~~~
    /opt/boost_1_56_0/boost/test/utils/basic_cstring/basic_cstring.hpp:232:18: warning: implicit conversion changes signedness: 'long' to 'size_type' (aka 'unsigned long') [-Wsign-conversion]
            return m_end - m_begin;
            ~~~~~~ ~~~~~~^~~~~~~~~
    /opt/boost_1_56_0/boost/test/utils/basic_cstring/io.hpp:55:50: warning: implicit conversion changes signedness: 'long' to 'size_type' (aka 'unsigned long') [-Wsign-conversion]
            os << std::basic_string<CharT1,Tr>( beg, end - beg );
                  ~~~                                ~~~~^~~~~

The full output is below:

$ clang++ -Wconversion -I/opt/boost_1_56_0/ clang_warning.cpp -lboost_test_exec_monitor
In file included from clang_warning.cpp:4:
In file included from /opt/boost_1_56_0/boost/test/unit_test.hpp:19:
In file included from /opt/boost_1_56_0/boost/test/test_tools.hpp:19:
In file included from /opt/boost_1_56_0/boost/test/predicate_result.hpp:21:
In file included from /opt/boost_1_56_0/boost/test/utils/basic_cstring/basic_cstring.hpp:21:
/opt/boost_1_56_0/boost/test/utils/basic_cstring/bcs_char_traits.hpp:90:20: warning: implicit conversion changes signedness: 'long' to 'std::size_t' (aka 'unsigned long') [-Wsign-conversion]
        return ptr - cstr;
        ~~~~~~ ~~~~^~~~~~
/opt/boost_1_56_0/boost/test/utils/basic_cstring/basic_cstring.hpp:182:40: note: in instantiation of member function 'boost::unit_test::ut_detail::bcs_char_traits_impl<const char>::length' requested here
, m_end  ( m_begin + (s ? traits_type::length( s ) : 0 ) )
                                       ^
/opt/boost_1_56_0/boost/test/unit_test_suite_impl.hpp:158:41: note: in instantiation of member function 'boost::unit_test::basic_cstring<const char>::basic_cstring' requested here
    master_test_suite_t() : test_suite( "Master Test Suite" )
                                        ^
In file included from clang_warning.cpp:4:
In file included from /opt/boost_1_56_0/boost/test/unit_test.hpp:19:
In file included from /opt/boost_1_56_0/boost/test/test_tools.hpp:19:
In file included from /opt/boost_1_56_0/boost/test/predicate_result.hpp:21:
/opt/boost_1_56_0/boost/test/utils/basic_cstring/basic_cstring.hpp:232:18: warning: implicit conversion changes signedness: 'long' to 'size_type' (aka 'unsigned long') [-Wsign-conversion]
    return m_end - m_begin;
    ~~~~~~ ~~~~~~^~~~~~~~~
/opt/boost_1_56_0/boost/test/framework.hpp:90:86: note: in instantiation of member function 'boost::unit_test::basic_cstring<const char>::size' requested here
    internal_error( const_string m ) : std::runtime_error( std::string( m.begin(), m.size() ) ) {}
                                                                                     ^
In file included from clang_warning.cpp:4:
In file included from /opt/boost_1_56_0/boost/test/unit_test.hpp:19:
In file included from /opt/boost_1_56_0/boost/test/test_tools.hpp:28:
/opt/boost_1_56_0/boost/test/utils/basic_cstring/io.hpp:55:50: warning: implicit conversion changes signedness: 'long' to 'size_type' (aka 'unsigned long') [-Wsign-conversion]
    os << std::basic_string<CharT1,Tr>( beg, end - beg );
          ~~~                                ~~~~^~~~~
/opt/boost_1_56_0/boost/test/utils/lazy_ostream.hpp:74:29: note: in instantiation of function template specialization 'boost::unit_test::operator<<<char, std::__1::char_traits<char>, const char>' requested here
        return m_prev(ostr) << m_value;
                            ^
clang_warning.cpp:8:5: note: in instantiation of member function 'boost::unit_test::lazy_ostream_impl<const boost::unit_test::basic_cstring<const char> &>::operator()' requested here
    BOOST_CHECK(true);
    ^
/opt/boost_1_56_0/boost/test/test_tools.hpp:110:45: note: expanded from macro 'BOOST_CHECK'
#define BOOST_CHECK( P )                    BOOST_CHECK_IMPL( (P), BOOST_TEST_STRINGIZE( P ), CHECK, CHECK_PRED )
                                            ^
/opt/boost_1_56_0/boost/test/test_tools.hpp:91:5: note: expanded from macro 'BOOST_CHECK_IMPL'
    BOOST_TEST_TOOL_IMPL( check_impl, P, check_descr, TL, CT ), 0 );\
    ^
/opt/boost_1_56_0/boost/test/test_tools.hpp:79:9: note: expanded from macro 'BOOST_TEST_TOOL_IMPL'
        ::boost::unit_test::lazy_ostream::instance() << check_descr,    \
        ^
3 warnings generated.
$

Change History (1)

comment:1 by Gennadiy Rozental, 7 years ago

Milestone: To Be DeterminedBoost 1.59.0
Resolution: fixed
Status: newclosed
Note: See TracTickets for help on using tickets.