On 03/16/16 17:50, Andrew Fish wrote:
> 
>> On Mar 16, 2016, at 6:54 AM, Laszlo Ersek <[email protected]> wrote:
>>
>> On 03/14/16 16:38, Leif Lindholm wrote:
>>> To permit many existing platforms to build with -Wunused-parameter, on
>>> GCC and CLANG, the unused parameters need to be annotated as such.
>>> Existing regexp code already uses ARG_UNUSED for this, but it is really
>>> needed across the codebase - so add a version in Base.h.
>>>
>>> Contributed-under: TianoCore Contribution Agreement 1.0
>>> Signed-off-by: Leif Lindholm <[email protected]>
>>> ---
>>>
>>> This is really the result of a friendly toolchain engineer informing me
>>> CLANG has the -Weverything flag, to actually enable all possible
>>> warnings.
>>>
>>> One problem trying to pick out the real bugs from the just not entirely
>>> clear code is that basically a lot of *LibNull implementations, and
>>> some libraries that should be usable, trip build failures due to unused
>>> parameters.
>>>
>>> MdePkg/Include/Base.h | 9 +++++++++
>>> 1 file changed, 9 insertions(+)
>>>
>>> diff --git a/MdePkg/Include/Base.h b/MdePkg/Include/Base.h
>>> index 89b2aed..f789094 100644
>>> --- a/MdePkg/Include/Base.h
>>> +++ b/MdePkg/Include/Base.h
>>> @@ -189,6 +189,15 @@ struct _LIST_ENTRY {
>>> ///
>>> #define OPTIONAL
>>>
>>> +///
>>> +/// Function argument intentionally unused in function.
>>> +///
>>> +#if defined(__GNUC__) || defined(__clang__)
>>> +  #define ARG_UNUSED  __attribute__ ((unused))
>>> +#else
>>> +  #define ARG_UNUSED
>>> +#endif
>>> +
>>> //
>>> //  UEFI specification claims 1 and 0. We are concerned about the
>>> //  complier portability so we did it this way.
>>>
>>
>> Support for this seems to go back to gcc-4.4:
>>
>> https://gcc.gnu.org/onlinedocs/gcc-4.4.7/gcc/Variable-Attributes.html
>>
>> So it looks safe. (And I agree with the idea.)
>>
> 
> I'm confused by the usage, or really when the compiler detects the
> warning?
> 
> For example how is this going to work on public interfaces?
> Protocols, PPIs,  or library class definitions? There is a single
> definition of the function, but multiple implementations. Some
> implementations may not use some arguments. But what arguments get
> used seems to be an implementation choice and not part of the API?
> Thus it seems like this macro is not going to enable changing
> compiler flags?

I think this attribute would be used in library instances and protocol
implementations. It would not be used in library class headers nor
protocol definitions.

Example:

    /* included from library class hdr of protocol def hdr */
    int f(int x);

    /* code in library instance or protocol impl */
    int f(int x __attribute__ ((unused)))
    {
      return 0;
    }

    int main(void)
    {
      return f(-2);
    }

Compiles silently with

$ gcc -Wall -Wextra -ansi -pedantic -Werror -o x x.c

If I remove __attribute__ ((unused)), I get:

x.c:5:15: error: unused parameter 'x' [-Werror=unused-parameter]
     int f(int x)
               ^
cc1: all warnings being treated as errors

Thanks
Laszlo

> 
> Or am I just confused?
> 
> Thanks,
> 
> Andrew Fish
>  
> 
>> Acked-by: Laszlo Ersek <[email protected]>
>> _______________________________________________
>> edk2-devel mailing list
>> [email protected]
>> https://lists.01.org/mailman/listinfo/edk2-devel
> 

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to