On 1/6/19 4:34 PM, Martin Sebor wrote:
> Attached is an updated patch with the wording change to the manual
> discussed below and rebased on the top of today's trunk.
> 
> Martin
> 
> PS Thanks for the additional info, Iain.
> 
> On 1/5/19 10:53 AM, Iain Sandoe wrote:
>>
>>> On 5 Jan 2019, at 17:39, Martin Sebor <mse...@gmail.com> wrote:
>>>
>>> On 1/5/19 3:31 AM, Iain Sandoe wrote:
>>>> Hi Martin,
>>>>> On 4 Jan 2019, at 22:30, Mike Stump <mikest...@comcast.net> wrote:
>>>>>
>>>>> On Jan 4, 2019, at 2:03 PM, Martin Sebor <mse...@gmail.com> wrote:
>>>>>>
>>>>>> The improved handling of attribute positional arguments added
>>>>>> in r266195 introduced a regression on Darwin where attribute
>>>>>> format with the CFString archetype accepts CFString* parameter
>>>>>> types in positions where only char* would otherwise be allowed.
>>>>>
>>>>> You didn't ask Ok?  I'll assume you want a review...  The darwin bits and 
>>>>> the testsuite bits look fine.
>>>>>
>>>>>>
>>>>>> Index: gcc/doc/extend.texi
>>>>>> ===================================================================
>>>>>> --- gcc/doc/extend.texi    (revision 267580)
>>>>>> +++ gcc/doc/extend.texi    (working copy)
>>>>>> @@ -22368,10 +22368,12 @@ bit-fields.  See the Solaris man page for 
>>>>>> @code{cm
>>>>>>
>>>>>>   @node Darwin Format Checks
>>>>>>   @subsection Darwin Format Checks
>>>>>>   -Darwin targets support the @code{CFString} (or @code{__CFString__}) 
>>>>>> in the format
>>>>>>
>>>>>> -attribute context.  Declarations made with such attribution are parsed 
>>>>>> for correct syntax
>>>>>>
>>>>>> -and format argument types.  However, parsing of the format string 
>>>>>> itself is currently undefined
>>>>>>
>>>>>> -and is not carried out by this version of the compiler.
>>>>>> +In addition to the full set of archetypes, Darwin targets also support
>>>>>>
>>>>>> +the @code{CFString} (or @code{__CFString__}) archetype in the 
>>>>>> @code{format}
>>>>>>
>>>>>> +attribute.  Declarations with this archetype are parsed for correct 
>>>>>> syntax
>>>>>>
>>>>>> +and argument types.  However, parsing of the format string itself and
>>>>>>
>>>>>> +validating arguments against it in calls to such functions is currently
>>>>>>
>>>>>> +not performed.
>>>>>>     Additionally, @code{CFStringRefs} (defined by the 
>>>>>> @code{CoreFoundation} headers) may
>>>>>>
>>>>>>   also be used as format arguments.  Note that the relevant headers are 
>>>>>> only likely to be
>>>>>>
>>>>>>
>>>> I find “archetype(s)” to be an usual (and possibly unfamiliar to many) 
>>>> word for this context.
>>>>
>>>> how about:
>>>> s/archetype in/variant for the/
>>>> and then
>>>>   s/with this archetype/with this variant/
>>>> in the following sentence.
>>>> However, just 0.02GBP .. (fixing the fails is more important than 
>>>> bikeshedding the wording).
>>>>
>>>
>>> Thanks for chiming in!  I used archetype because that's the term
>>> used in the attribute format specification to describe the first
>>> argument.  I do tend to agree that archetype alone may not be
>>> sufficiently familiar to all users.  I'm happy to add text to
>>> make that clear.  Would you find the following better?
>>>
>>>   In addition to the full set of format archetypes (attribute
>>>   format style arguments such as @code{printf}, @code{scanf},
>>>   @code{strftime}, and @code{strfmon}), Darwin targets also
>>>   support the @code{CFString} (or @code{__CFString__}) archetype…
>>
>> Yes, that makes is clearer
>>
>> (as an aside, I think that to many people the meaning of archetype - as 
>> ‘generic’  or ‘root example’
>>
>>    etc  tends to come to mind before the ‘template/mold’ meaning … however 
>> couldn’t think of
>>
>>   a better term that’s not already overloaded).
>>
>>> FWIW, I wanted to figure out how the CFString attribute made it
>>> possible to differentiate between printf and scanf (and the other)
>>> kinds of functions, for example, so I could add new tests for it,
>>> but I couldn't tell that from the manual.  So I'm trying to update
>>> the text to make it clear that although CFString is just like
>>> the sprintf and scanf format arguments/archetypes, beyond
>>> validating declarations that use it, the attribute serves no
>>> functional purpose, so the printf/scanf distinction is moot.
>>
>> The CFString container** is more general than our implementation, e.g. it 
>> should be able
>>
>> to contain a variety of string formats (e.g. UTF etc.).   AFAIR at the time 
>> I implemented
>>
>> it for FSF GCC (it was originally in the Apple Local branch), we didn’t have 
>> sufficient parsing
>>
>> support for such things (and the support in the Apple-local branch didn’t 
>> look applicable).
>>
>>
>> If we do more sophisitcated checks, we probably need to take cognisance of 
>> the fact that a
>>
>> fully-implemented CFString impl can have non-ascii payload.   I suspect 
>> (although honestly
>>
>> it’s been a while, I maybe mis-remember) that was the reason I didn’t try to 
>> implement the
>>
>> inspection at the time (if so, there’s probably a code comment to that 
>> effect).
>>
>>
>>> Out of curiosity, is the attribute used for function call
>>> validation by compilers other than GCC?  I couldn't find
>>> anything online.
>>
>> It used to be used for the platform GCC, when that was the “system compiler" 
>> (last edition
>>
>>   apple 4.2.1) and I therefore assume it’s used by clang - but actually 
>> haven’t double-checked
>>
>> at the time we added it - it was relevant.
>>
>> Let’s revisit this in 10, and see if we can’t sync up with the platform 
>> expectations from the clang impl.
>>
>>
>> thanks for taking care of this,
>>
>> Iain
>>
>> ** it’s actually a simple ObjectiveC object that happens to be supported by 
>> the CoreFoundation (C)
>>
>> classes as well as ObjectiveC .. making it possible to pass around general 
>> string containers between
>>
>> the languages.
>>
> 
> 
> gcc-88638.diff
> 
> PR target/88638 - FAIL: fsf-nsstring-format-1.s on darwin
> 
> gcc/c-family/ChangeLog:
> 
>       PR target/88638
>       * c-attribs.c (positional_argument): Call valid_format_string_type_p
>       and issue errors if it fails.
>       * c-common.h (valid_format_string_type_p): Declare.
>       * c-format.c (valid_stringptr_type_p): Rename...
>       (valid_format_string_type_p): ...to this and make extern.
>       (handle_format_arg_attribute): Adjust to new name.
>       (check_format_string): Same.
> 
> gcc/testsuite/ChangeLog:
> 
>       PR target/88638
>       * gcc.dg/format/attr-8.c: New test.
>       * gcc.dg/darwin-cfstring-format-1.c: Adjust diagnostics.
>       * gcc.dg/format/attr-3.c: Same.
>       * obj-c++.dg/fsf-nsstring-format-1.mm: Same.
>       * objc.dg/fsf-nsstring-format-1.m: Same.
> 
> gcc/ChangeLog:
> 
>       PR target/88638
>       * doc/extend.texi (Darwin Format Checks): Clarify.
OK
jeff

Reply via email to