[pacman-dev] [PATCH] Fix compile error with clang-2.8

Dan McGee dpmcgee at gmail.com
Thu Oct 7 09:14:04 EDT 2010


On Thu, Oct 7, 2010 at 8:05 AM, Rémy Oudompheng
<remyoudompheng at gmail.com> wrote:
> Allan McRae <allan at archlinux.org> wrote:
>> On 07/10/10 22:50, Dan McGee wrote:
>>>
>>> On Wed, Oct 6, 2010 at 8:40 PM, Allan McRae<allan at archlinux.org>  wrote:
>
>>> man printf(3):
>>>        l      (ell) A following integer conversion corresponds to a
>>> long int or unsigned long int argument, or a following n conversion
>>> corre‐
>>>               sponds to a pointer to a long int argument, or a
>>> following c conversion corresponds to a wint_t argument, or a
>>> following s  con‐
>>>               version corresponds to a pointer to wchar_t argument.
>>>
>>> So we should really be using '%lc', it sounds like clang is busted...
>>>
>>> What does printf("%ls", p) give you? This isn't actually right because
>>> we don't want to print the full string, just one character, but it
>>> would be interesting to see if they implemented half of the spec.
>>>
>>
>> Same error with %ls.
>>
>> util.c:264:13: error: conversion specifies type 'int *' but the argument has
>>      type 'wint_t' (aka 'unsigned int') [-Wformat]
>>                printf("%ls", (wint_t)*p);
>>                        ~~^   ~~~~~~~~~~
>>                        %u
>> 1 error generated.
>>
>
> I may be a C newbie, but is (wint_t)*p the same as (wint_t)(*p) ? It
> would explain the pointer/integer confusion.

 printf("%ls", (wint_t)*p); != printf("%ls", p)

And the mailing list message I mentioned seemed old enough that it
should have snuck into clang 2.8...

-Dan


More information about the pacman-dev mailing list