https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103140
Bug ID: 103140
Summary: __builtin_bit_cast To C array target type
Product: gcc
Version: 12.0
Status: UNCONFIRMED
Keywords: patch
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: wjwray at gmail dot com
Target Milestone: ---
__builtin_bit_cast(To,from) can usefully be made to materialise a C array
as its target type To:
__builtin_bit_cast( unsigned char[sizeof x], x );
Clang accepts this usage https://godbolt.org/z/n9dxeGecG
GCC rejects; error: '__builtin_bit_cast' destination type ... is an array type
Like __builtin_bit_cast itself, this change can apply to all -std modes.
This is a 'feature request' for tracking purposes; I'll attach a patch.
The patch was developed as part of an incoming implementation of P1997
but is independent, so makes sense to submit, review and merge ahead of it
(the feature is more useful in combination with P1997 array copy semantics,
or otherwise provides basic array copy without need for a feature flag).
std::bit_cast<To>(from) is unchanged; it cannot return an array as specified,
as an otherwise regular library function, without extra compiler magic beyond
__builtin_bit_cast, unless / until P1997 is merged.