> On Mar 17, 2016, at 9:29 AM, Kinney, Michael D <[email protected]> 
> wrote:
> 
> Hello,
> 
> I am curious what value enabling the warning for an unused argument adds.  
> Can someone provide some examples where enabling this warning and adding the 
> UNUSED tag addresses real issues?  I am concerned that we are enabling a 
> warning that would impose a large number of source changes with little or no 
> value.  I can be convinced otherwise, but would like to see some supporting 
> data.
> 

Mike,

It looks like the idea comes from: 
MdeModulePkg/Universal/RegularExpressionDxe/Oniguruma/regenc.h

#ifndef ARG_UNUSED
#if defined(__GNUC__)
#  define ARG_UNUSED  __attribute__ ((unused))
#else
#  define ARG_UNUSED
#endif
#endif


> Also, what are the requirements for maintenance of code once if this new 
> UNUSED macro is used?  We have function implementations where an argument may 
> not be used today, but a bug fix/feature enhancement later may use the UNUSED 
> argument.  Do we get a different warning because it was tagged as UNUSED, but 
> it is actually used now? Or is that silent?
> 
> I think there are a few categories of functions to consider here:
> 
> 1) Protocol/PPI functions.  The parameters for functions are defined for a 
> wide usage sometimes with optional behavior.  Specific implementations may 
> choose to not implement some optional behavior, and hence may not require 
> some of the parameters.  I do not think a warning or an error should be 
> generated by a conformant implementation that does not use a parameter.
> 
> 2) Library Class functions.  The parameters for functions are also defined 
> for a wide usage sometimes with optional behavior.  Specific implementations 
> may choose to not implement optional behavior, and hence may not require some 
> of the parameters.  I do not think a warning or an error should be generated 
> by a specific library instance that does not use a parameter in a public 
> library class API.
> 
> 3) Internal functions.  If an internal function does not use a parameter, 
> then remove the parameter from the function call.
> 

I noticed the same thing. Enforcing this would be a lot of work in the edk2 
code base. 

> Can we enable /Wall and disable this specific warning?  

This is what we do for clang. Given how Protocols and PPIs are defined I think 
you have to have these compiler settings today to compile the edk2.

> Or is there a concern that category (3) cannot be detected without enabling 
> this warning?  Maybe it would be better if we could find a way to disable 
> this warning for all APIs that are decorated with EFIAPI?
> 

I think the point of __attribute__ ((unused)) is to suppress the warning if it 
is enabled. Since we suppress the diagnostic from the compiler we don't need 
this.

Thanks,

Andrew Fish

> Thanks,
> 
> Mike
> 
>> -----Original Message-----
>> From: Leif Lindholm [mailto:[email protected]]
>> Sent: Thursday, March 17, 2016 8:53 AM
>> To: [email protected]
>> Cc: Kinney, Michael D <[email protected]>; Gao, Liming
>> <[email protected]>
>> Subject: [PATCH] MdePkg: add UNUSED notation to Base.h
>> 
>> 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 called UNUSED in Base.h.
>> 
>> Contributed-under: TianoCore Contribution Agreement 1.0
>> Signed-off-by: Leif Lindholm <[email protected]>
>> ---
>> 
>> Change since RFC: rename ARG_UNUSED -> UNUSED.
>> 
>> MdePkg/Include/Base.h | 9 +++++++++
>> 1 file changed, 9 insertions(+)
>> 
>> diff --git a/MdePkg/Include/Base.h b/MdePkg/Include/Base.h
>> index 89b2aed..a68b209 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 UNUSED  __attribute__ ((unused))
>> +#else
>> +  #define UNUSED
>> +#endif
>> +
>> //
>> //  UEFI specification claims 1 and 0. We are concerned about the
>> //  complier portability so we did it this way.
>> --
>> 2.1.4
> 
> _______________________________________________
> 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