This is the mail archive of the
mailing list for the GCC project.
Re: [PATCH] Add a character size parameter to c_strlen/get_range_strlen
On Tue, 21 Aug 2018, Martin Sebor wrote:
> On 08/21/2018 09:44 AM, Joseph Myers wrote:
> > On Tue, 21 Aug 2018, Martin Sebor wrote:
> > > Sure, but the only valid argument to %ls is wchar_t*. Passing
> > > it something else is undefined.
> > Well, (wchar_t *)"something\0\0\0\0" would be OK given
> > -fno-strict-aliasing and if you know the alignment is OK. Do we have that
> > information about the type cast to, as opposed to the type of the string
> > constant, at this point?
> In the simple cases like the one above the cast is gone. Only
> in some more involved cases is the type of the argument preserved.
> I responded to Jeff with one such example here:
> If supporting (wchar_t *)"...\0\0\0\0" with %ls is viewed as
> important (despite it being undefined) then the function does
There are different cases of support. It doesn't need to be highly
optimized or get particularly good diagnostics. It does need to avoid
being miscompiled or getting actively incorrect diagnostics.
Given -fno-strict-aliasing and appropriate alignment, it's not undefined.
(To ensure appropriate alignment one might use a target where
BIGGEST_ALIGNMENT is 8, or one where it is 16 and a char16_t string
constant is cast to pointer to 32-bit wchar_t.)
Joseph S. Myers