C++ Logo

sg12

Advanced search

Re: [ub] [c++std-core-23865] Re: unions and undefined behavior

From: Gabriel Dos Reis <gdr_at_[hidden]>
Date: Thu, 25 Jul 2013 17:26:14 -0500
Ion GaztaƱaga <igaztanaga_at_[hidden]> writes:

[...]

| > Note also that with clang and gcc, you can call __builtin_memcpy to
| > get defined and optimized behavior even without #including <string.h>.
| > It may be replaced with a library call if the compiler doesn't
| > optimize it, and your certified compiler may not provide the same
| > feature.
|
| Thanks for the explanation. A built-in memcpy is one of the language
| features that I miss,

The language has a builtin memcpy: it is variously called assignment
(operator=), or copy-construction depending on the type :-)

| as it seems to be the only way to do bit-casts
| that are essential in some embedded domains (inspecting network packets,
| data serialization...). A conforming freestanding implementation could
| also include memcpy.

Indeed. I'm pretty sure if you are an important customer for your
compiler supplier, you can convince him or her to include it :-)

| That would not fix the problem for safety-critical Sw

Why?

| but would be a good low-level tool for embedded developers that don't
| want to write their own memcpy function in assembler.

Most C++ compilers treat std::memcpy as something fundamental.
Other considerations may force a given compiler's backend to emit a
function call, but the semantics is wired into the core language.
Some compilers even implement assignment (at the C++ source level) in
terms of std::memcpy().

-- Gaby

Received on 2013-07-26 00:26:30