* [Bug c++/99637] bit_cast doesn't work with padding bits and it should
2021-03-17 20:46 [Bug c++/99637] New: bit_cast doesn't work with padding bits and it should hanicka at hanicka dot net
@ 2021-03-17 20:58 ` jakub at gcc dot gnu.org
2021-03-17 21:19 ` hanicka at hanicka dot net
` (6 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: jakub at gcc dot gnu.org @ 2021-03-17 20:58 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99637
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jakub at gcc dot gnu.org
--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
The result in your case doesn't have any padding bits, but the source has and
some value bits of the result need to be initialized from those padding bits.
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug c++/99637] bit_cast doesn't work with padding bits and it should
2021-03-17 20:46 [Bug c++/99637] New: bit_cast doesn't work with padding bits and it should hanicka at hanicka dot net
2021-03-17 20:58 ` [Bug c++/99637] " jakub at gcc dot gnu.org
@ 2021-03-17 21:19 ` hanicka at hanicka dot net
2021-03-17 21:22 ` jakub at gcc dot gnu.org
` (5 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: hanicka at hanicka dot net @ 2021-03-17 21:19 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99637
--- Comment #2 from Hana Dusíková <hanicka at hanicka dot net> ---
I know this is not an argument but MSVC accepts this code, meanwhile I'm asking
Richard what to do about it.
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug c++/99637] bit_cast doesn't work with padding bits and it should
2021-03-17 20:46 [Bug c++/99637] New: bit_cast doesn't work with padding bits and it should hanicka at hanicka dot net
2021-03-17 20:58 ` [Bug c++/99637] " jakub at gcc dot gnu.org
2021-03-17 21:19 ` hanicka at hanicka dot net
@ 2021-03-17 21:22 ` jakub at gcc dot gnu.org
2021-03-17 21:23 ` redi at gcc dot gnu.org
` (4 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: jakub at gcc dot gnu.org @ 2021-03-17 21:22 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99637
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jason at gcc dot gnu.org,
| |redi at gcc dot gnu.org
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
I'm CCing Jason and Jonathan too.
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug c++/99637] bit_cast doesn't work with padding bits and it should
2021-03-17 20:46 [Bug c++/99637] New: bit_cast doesn't work with padding bits and it should hanicka at hanicka dot net
` (2 preceding siblings ...)
2021-03-17 21:22 ` jakub at gcc dot gnu.org
@ 2021-03-17 21:23 ` redi at gcc dot gnu.org
2021-03-18 9:12 ` redi at gcc dot gnu.org
` (3 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: redi at gcc dot gnu.org @ 2021-03-17 21:23 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99637
--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> ---
I think the relevant sentence is "Each bit of the value representation of the
result is equal to the corresponding bit in the object representation of from."
For one of the bits in the result, there is no corresponding bit in the object
representation of from. So the result cannot be created.
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug c++/99637] bit_cast doesn't work with padding bits and it should
2021-03-17 20:46 [Bug c++/99637] New: bit_cast doesn't work with padding bits and it should hanicka at hanicka dot net
` (3 preceding siblings ...)
2021-03-17 21:23 ` redi at gcc dot gnu.org
@ 2021-03-18 9:12 ` redi at gcc dot gnu.org
2021-03-18 9:19 ` jakub at gcc dot gnu.org
` (2 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: redi at gcc dot gnu.org @ 2021-03-18 9:12 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99637
--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Jonathan Wakely from comment #4)
> So the result cannot be created.
Not during constant evaluation, anyway.
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug c++/99637] bit_cast doesn't work with padding bits and it should
2021-03-17 20:46 [Bug c++/99637] New: bit_cast doesn't work with padding bits and it should hanicka at hanicka dot net
` (4 preceding siblings ...)
2021-03-18 9:12 ` redi at gcc dot gnu.org
@ 2021-03-18 9:19 ` jakub at gcc dot gnu.org
2021-03-18 10:35 ` redi at gcc dot gnu.org
2023-04-26 7:51 ` m.cencora at gmail dot com
7 siblings, 0 replies; 9+ messages in thread
From: jakub at gcc dot gnu.org @ 2021-03-18 9:19 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99637
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
(In reply to Jonathan Wakely from comment #5)
> (In reply to Jonathan Wakely from comment #4)
> > So the result cannot be created.
>
> Not during constant evaluation, anyway.
And outside of constant evaluation with undefined behavior with the exception
of bit_cast to unsigned char / std::byte?
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug c++/99637] bit_cast doesn't work with padding bits and it should
2021-03-17 20:46 [Bug c++/99637] New: bit_cast doesn't work with padding bits and it should hanicka at hanicka dot net
` (5 preceding siblings ...)
2021-03-18 9:19 ` jakub at gcc dot gnu.org
@ 2021-03-18 10:35 ` redi at gcc dot gnu.org
2023-04-26 7:51 ` m.cencora at gmail dot com
7 siblings, 0 replies; 9+ messages in thread
From: redi at gcc dot gnu.org @ 2021-03-18 10:35 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99637
--- Comment #7 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Yes. If the result type is a class type and the padding bits in the input
correspond to unsigned char or std::byte subobjects in the result, that's OK
(because the only parts with indeterminate values are byte-like types, the rest
of the result is properly initialized).
I think GCC is correct here.
^ permalink raw reply [flat|nested] 9+ messages in thread
* [Bug c++/99637] bit_cast doesn't work with padding bits and it should
2021-03-17 20:46 [Bug c++/99637] New: bit_cast doesn't work with padding bits and it should hanicka at hanicka dot net
` (6 preceding siblings ...)
2021-03-18 10:35 ` redi at gcc dot gnu.org
@ 2023-04-26 7:51 ` m.cencora at gmail dot com
7 siblings, 0 replies; 9+ messages in thread
From: m.cencora at gmail dot com @ 2023-04-26 7:51 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99637
m.cencora at gmail dot com changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |m.cencora at gmail dot com
--- Comment #8 from m.cencora at gmail dot com ---
I think that gcc is incorrect here, because the standard says:
"Each bit of the value representation of the result is equal to the
corresponding bit in the object representation of from."
Padding bits are part of object representation, so if padding bits are properly
initialized in source object (which is the case here), the values of padding
bits should become a part of value representation of destination object.
Also when reading the proposal p0476r2 it is clearly stated that bit_cast is
suppose to be typesafe and constexpr-compatible alternative to memcpy (which by
definition copies padding bits as is).
^ permalink raw reply [flat|nested] 9+ messages in thread