Re: svn commit: r1921361 - /subversion/trunk/subversion/libsvn_subr/io.c

2024-10-16 Thread Nathan Hartman
On Wed, Oct 16, 2024 at 3:16 PM Nathan Hartman  wrote:
>
> On Wed, Oct 16, 2024 at 10:45 AM  wrote:
>>
>> Author: rinrab
>> Date: Wed Oct 16 14:45:20 2024
>> New Revision: 1921361
>>
>> URL: http://svn.apache.org/viewvc?rev=1921361&view=rev
>> Log:
>> Fix compilation with CLang on Windows.
>>
>> Before, we were invoking the svn_utf__win32_utf8_to_utf16() function with
>> non-constant pointer, passed into the 'result' argument. However, in the
>> svn_io__utf8_to_unicode_longpath function implementation, there is a
>> conversion to a constant pointer causing the following error when compiling
>> with CLang:
>>
>> [[[
>> subversion\libsvn_subr\io.c(1902,42): error : cannot take the address of
>> an rvalue of type 'const WCHAR *' (aka 'const unsigned short *')
>> ]]]
>>
>> In this commit, this conversion will be removed in order to prevent the 
>> error,
>> how it is done in the other places, where the function is utilized.
>>
>> There still will be a warning of implicit conversion, which has to be
>> fixed generally in this function.
>>
>> * subversion/libsvn_subr/io.c
>>   (svn_io__utf8_to_unicode_longpath): Do not convert 'buffer' to 'const 
>> WCHAR *'
>>before taking address of it.
>>
>> Modified:
>> subversion/trunk/subversion/libsvn_subr/io.c
>>
>> Modified: subversion/trunk/subversion/libsvn_subr/io.c
>> URL: 
>> http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/io.c?rev=1921361&r1=1921360&r2=1921361&view=diff
>> ==
>> --- subversion/trunk/subversion/libsvn_subr/io.c (original)
>> +++ subversion/trunk/subversion/libsvn_subr/io.c Wed Oct 16 14:45:20 2024
>> @@ -1899,7 +1899,7 @@ svn_io__utf8_to_unicode_longpath(const W
>>  }
>>  }
>>
>> -SVN_ERR(svn_utf__win32_utf8_to_utf16(&(const WCHAR*)buffer, source,
>> +SVN_ERR(svn_utf__win32_utf8_to_utf16(&buffer, source,
>>   prefix, result_pool));
>>
>>  /* Convert slashes to backslashes because the \\?\ path format
>>
>>
>
> I didn't look at the code; replying to the commit message from mobile, but...
>
> Because Clang complained about taking the address of a RVALUE, I think it was 
> a typo in the code, rather than inability to use const.
>
> I think this was intended:
>
> (const WCHAR*)&buffer
>
> but this was written:
>
> &(const WCHAR*)buffer
>
> and I wonder how MSVC didn't notice that.


Please disregard the last message. The change in r1921361 is correct.

Cheers,
Nathan


Re: svn commit: r1921361 - /subversion/trunk/subversion/libsvn_subr/io.c

2024-10-16 Thread Nathan Hartman
On Wed, Oct 16, 2024 at 10:45 AM  wrote:

> Author: rinrab
> Date: Wed Oct 16 14:45:20 2024
> New Revision: 1921361
>
> URL: http://svn.apache.org/viewvc?rev=1921361&view=rev
> Log:
> Fix compilation with CLang on Windows.
>
> Before, we were invoking the svn_utf__win32_utf8_to_utf16() function with
> non-constant pointer, passed into the 'result' argument. However, in the
> svn_io__utf8_to_unicode_longpath function implementation, there is a
> conversion to a constant pointer causing the following error when compiling
> with CLang:
>
> [[[
> subversion\libsvn_subr\io.c(1902,42): error : cannot take the address of
> an rvalue of type 'const WCHAR *' (aka 'const unsigned short *')
> ]]]
>
> In this commit, this conversion will be removed in order to prevent the
> error,
> how it is done in the other places, where the function is utilized.
>
> There still will be a warning of implicit conversion, which has to be
> fixed generally in this function.
>
> * subversion/libsvn_subr/io.c
>   (svn_io__utf8_to_unicode_longpath): Do not convert 'buffer' to 'const
> WCHAR *'
>before taking address of it.
>
> Modified:
> subversion/trunk/subversion/libsvn_subr/io.c
>
> Modified: subversion/trunk/subversion/libsvn_subr/io.c
> URL:
> http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/io.c?rev=1921361&r1=1921360&r2=1921361&view=diff
>
> ==
> --- subversion/trunk/subversion/libsvn_subr/io.c (original)
> +++ subversion/trunk/subversion/libsvn_subr/io.c Wed Oct 16 14:45:20 2024
> @@ -1899,7 +1899,7 @@ svn_io__utf8_to_unicode_longpath(const W
>  }
>  }
>
> -SVN_ERR(svn_utf__win32_utf8_to_utf16(&(const WCHAR*)buffer, source,
> +SVN_ERR(svn_utf__win32_utf8_to_utf16(&buffer, source,
>   prefix, result_pool));
>
>  /* Convert slashes to backslashes because the \\?\ path format
>
>
>
I didn't look at the code; replying to the commit message from mobile,
but...

Because Clang complained about taking the address of a RVALUE, I think it
was a typo in the code, rather than inability to use const.

I think this was intended:

(const WCHAR*)&buffer

but this was written:

&(const WCHAR*)buffer

and I wonder how MSVC didn't notice that.

Cheers,
Nathan