I sent patch casting to PUWSTR_C half hour after first message when I noticed how stupid it was before.
Should still apply cleanly (attachment has wrong name): https://sourceforge.net/p/mingw-w64/mailman/message/35770400/ ------ Original Message ------ Subject: Re: [Mingw-w64-public] [PATCH] stralign: cast ua_wcschr and ua_wcsrchr returns to wchar_t * Date: Sun, 04 Jun 2017 12:40:05 +0000 To: Mingw-w64-public From: Norbert Pfeiler > 1st point was to use PUWSTR_C instead of wchar_t * for the cast, still > stands. > 2nd point was to »to avoid further warnings« and i would like to – once > again – vote to avoid union casts. > > As far as i know there is no reason to believe that -Wcast-qual (as well as > -Wsystem-headers) will be a default warning anytime soon. And even then it > would be just a warning but still standards-conforming code (which is also > a reason for it not to become a default warning). > > A C-style cast is perfectly appropriate here, no union needed. > > FTR, it’s not only Clang which doesn’t accept the pre-patch code, GCC > errors too. > > Best, Norbert. > > On Sun, Jun 4, 2017 at 12:18 PM Mateusz Mikuła <mati...@gmail.com> wrote: > >> Anything to improve? >> >> From 05bc4cbc93f5f9942fc28a578dc1afa68d69daa2 Mon Sep 17 00:00:00 2001 >> From: Mateusz Mikula <mati...@gmail.com> >> Date: Sun, 4 Jun 2017 11:33:22 +0200 >> Subject: [PATCH] cast ua_wcschr and ua_wcsrchr returns when WSTR_ALIGNED is >> true >> >> Clang doesn't allow implicit conversion form "const wchar_t *" to >> "PUWSTR_C" (aka wchar_t *) >> >> Signed-off-by: Mateusz Mikula <mati...@gmail.com> >> --- >> mingw-w64-headers/include/stralign.h | 15 +++++++++++++-- >> 1 file changed, 13 insertions(+), 2 deletions(-) >> >> diff --git a/mingw-w64-headers/include/stralign.h >> b/mingw-w64-headers/include/stralign.h >> index 9b5637d6..4b157c27 100644 >> --- a/mingw-w64-headers/include/stralign.h >> +++ b/mingw-w64-headers/include/stralign.h >> @@ -117,12 +117,23 @@ extern "C" { >> size_t ua_wcslen(PCUWSTR String); >> >> #ifndef __CRT__NO_INLINE >> + union { >> + wchar_t *wcharPointer; >> + const wchar_t *constWcharPointer; >> + } cast; >> + >> __CRT_INLINE PUWSTR_C ua_wcschr(PCUWSTR String,WCHAR Character) { >> - if(WSTR_ALIGNED(String)) return wcschr((PCWSTR)String,Character); >> + if(WSTR_ALIGNED(String)) { >> + cast.constWcharPointer = wcschr((PCWSTR)String,Character); >> + return cast.wcharPointer; >> + } >> return (PUWSTR_C)uaw_wcschr(String,Character); >> } >> __CRT_INLINE PUWSTR_C ua_wcsrchr(PCUWSTR String,WCHAR Character) { >> - if(WSTR_ALIGNED(String)) return wcsrchr((PCWSTR)String,Character); >> + if(WSTR_ALIGNED(String)) { >> + cast.constWcharPointer = wcsrchr((PCWSTR)String,Character); >> + return cast.wcharPointer; >> + } >> return (PUWSTR_C)uaw_wcsrchr(String,Character); >> } >> #if defined(__cplusplus) && defined(_WConst_Return) >> -- >> 2.12.1 >> >> >> >> ------ Original Message ------ >> Subject: Re: [Mingw-w64-public] [PATCH] stralign: cast ua_wcschr and >> ua_wcsrchr returns to wchar_t * >> Date: Thu, 6 Apr 2017 11:48:24 +0200 >> To: Mingw-w64-public >> From: Kai Tietz >>> A cast via union looks like this: >>> type1 *foo(const type1 *my_const_ptr) >>> { >>> union { >>> type1 *t1; >>> const type1 *ct1; >>> } v; >>> v.ct1 = my_const_ptr; >>> return v.t1; >>> } >>> >>> The advantage of such a pattern is that no type conversion >>> errors/warnings are shown. So for casting from const to none-const, >>> this variant is to be preferred. (and it works for C, and C++!!!) >>> >>> Cheers, >>> Kai >>> >>> 2017-04-05 15:51 GMT+02:00 Mateusz Mikuła <mati...@gmail.com>: >>>>> Hmm, using here "wchar_t *" as cast looks wrong. Actually we should >>>>> use anyway PUWSTR_C instead. >>>> I noticed it a bit too late and sent another patch casting to PUWSTR_C. >>>>> Nevertheless we can have here a const/none-const conversion (means >>>>> const specifiers for C-runtime function isn't regarded right?). I >>>>> would suggest to introduce a union-cast instead to avoid further >>>>> warnings instead. >>>> Conversion from const pointer to normal pointer is definitely unsafe but >>>> that's probably what GCC just did. >>>> I'm unsure what you mean by "union-cast" but you can commit your fix. >>>> >>>> >>>> >> ------------------------------------------------------------------------------ >>>> Check out the vibrant tech community on one of the world's most >>>> engaging tech sites, Slashdot.org! http://sdm.link/slashdot >>>> _______________________________________________ >>>> Mingw-w64-public mailing list >>>> Mingw-w64-public@lists.sourceforge.net >>>> https://lists.sourceforge.net/lists/listinfo/mingw-w64-public >>>> >> ------------------------------------------------------------------------------ >>> Check out the vibrant tech community on one of the world's most >>> engaging tech sites, Slashdot.org! http://sdm.link/slashdot >>> _______________________________________________ >>> Mingw-w64-public mailing list >>> Mingw-w64-public@lists.sourceforge.net >>> https://lists.sourceforge.net/lists/listinfo/mingw-w64-public >> >> ------------------------------------------------------------------------------ >> Check out the vibrant tech community on one of the world's most >> engaging tech sites, Slashdot.org! http://sdm.link/slashdot >> _______________________________________________ >> Mingw-w64-public mailing list >> Mingw-w64-public@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/mingw-w64-public >> > ------------------------------------------------------------------------------ > Check out the vibrant tech community on one of the world's most > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > _______________________________________________ > Mingw-w64-public mailing list > Mingw-w64-public@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
signature.asc
Description: OpenPGP digital signature
------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________ Mingw-w64-public mailing list Mingw-w64-public@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mingw-w64-public