Skip to content

gcc-12 warnings for charconv #801

@anarthal

Description

@anarthal

The following:

#include <boost/decimal.hpp>

using namespace boost::decimal;

void f(decimal32 v)
{
    char buff[64]{};
    auto r = boost::decimal::to_chars(buff, buff + sizeof(buff), v);
    *r.ptr = 0;
    std::cout << buff << std::endl;
}

int main() { f(1e-40_df); }

Emits the following warning:

[build] In file included from /usr/include/string.h:535,
[build]                  from /usr/include/c++/12/cstring:42,
[build]                  from [redacted]/boost-root/libs/decimal/include/boost/decimal/detail/wide-integer/uintwide_t.hpp:28,
[build]                  from [redacted]/boost-root/libs/decimal/include/boost/decimal/detail/emulated128.hpp:13,
[build]                  from [redacted]/boost-root/libs/decimal/include/boost/decimal/detail/type_traits.hpp:11,
[build]                  from [redacted]/boost-root/libs/decimal/include/boost/decimal/detail/attributes.hpp:9,
[build]                  from [redacted]/boost-root/libs/decimal/include/boost/decimal/decimal32.hpp:9,
[build]                  from [redacted]/boost-root/libs/decimal/include/boost/decimal.hpp:27,
[build]                  from [redacted]/boost-root/libs/mysql/example/main.cpp:1:
[build] In function ‘void* memset(void*, int, size_t)’,
[build]     inlined from ‘constexpr boost::decimal::to_chars_result boost::decimal::detail::to_chars_fixed_impl(char*, char*, const TargetDecimalType&, boost::decimal::chars_format, int) [with TargetDecimalType = boost::decimal::decimal32]’ at [redacted]/boost-root/libs/decimal/include/boost/decimal/charconv.hpp:576:24,
[build]     inlined from ‘constexpr boost::decimal::to_chars_result boost::decimal::detail::to_chars_impl(char*, char*, TargetDecimalType, boost::decimal::chars_format, int) [with TargetDecimalType = boost::decimal::decimal32]’ at [redacted]/boost-root/libs/decimal/include/boost/decimal/charconv.hpp:865:47,
[build]     inlined from ‘constexpr boost::decimal::to_chars_result boost::decimal::to_chars(char*, char*, decimal32)’ at [redacted]/boost-root/libs/decimal/include/boost/decimal/charconv.hpp:914:33,
[build]     inlined from ‘void f(boost::decimal::decimal32)’ at [redacted]/boost-root/libs/mysql/example/main.cpp:8:38:
[build] /usr/include/x86_64-linux-gnu/bits/string_fortified.h:59:33: error: ‘void* __builtin___memset_chk(void*, int, long unsigned int, long unsigned int)’ specified bound 18446744073709551615 exceeds maximum object size 9223372036854775807 [-Werror=stringop-overflow=]
[build]    59 |   return __builtin___memset_chk (__dest, __ch, __len,
[build]       |          ~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~
[build]    60 |                                  __glibc_objsize0 (__dest));

Command line:

/usr/bin/g++-12  -I[redacted]/boost-root/libs/decimal/include  -O3 -DNDEBUG -std=gnu++23 -Wextra -Werror  -c main.cpp

This is likely spurious, and can be suppressed with pragma warning.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Boost ReviewCollected Comments from Boost Review Period

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions