> On Mar 16, 2016, at 7:02 PM, Gao, Liming <liming....@intel.com> wrote:
> 
> Andrew:
>   If we enable -Wunused-parameter option for GCC and CLANG, it will bring the 
> big change to edk2 project. This patch is just to add ARG_UNUSED notation to 
> Base.h. It has no impact. So, I think this patch is fine. 
>  

Liming,

I don't really have an issue adding it for source compatibility with other 
projects.

The comments from Leif imply an across the codebase change? I was trying to 
point out what a large undertaking that would be. 

> >>> 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.


Thanks,

Andrew Fish


> Thanks
> Liming <>
>  <>From: af...@apple.com <mailto:af...@apple.com> [mailto:af...@apple.com 
> <mailto:af...@apple.com>] 
> Sent: Thursday, March 17, 2016 1:12 AM
> To: Laszlo Ersek <ler...@redhat.com <mailto:ler...@redhat.com>>
> Cc: Kinney, Michael D <michael.d.kin...@intel.com 
> <mailto:michael.d.kin...@intel.com>>; edk2-de...@ml01.01.org 
> <mailto:edk2-de...@ml01.01.org>; Gao, Liming <liming....@intel.com 
> <mailto:liming....@intel.com>>; Leif Lindholm <leif.lindh...@linaro.org 
> <mailto:leif.lindh...@linaro.org>>
> Subject: Re: [edk2] [RFC] MdePkg: add ARG_UNUSED notation to Base.h
>  
> 
> > On Mar 16, 2016, at 10:06 AM, Laszlo Ersek wrote:
> > 
> > On 03/16/16 17:50, Andrew Fish wrote:
> >> 
> >>> On Mar 16, 2016, at 6:54 AM, Laszlo Ersek 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 
> >>>> ---
> >>>> 
> >>>> 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 
> >>> <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
> > 
> 
> OK that makes sense. That is feels like it is going to be a very very large 
> change to the codebase given almost every protocol and PPI member pass the 
> "This" pointer, but may not use it in code.
> 
> Do we need something for VC++?
> 
> Thanks,
> 
> Andrew Fish
> 
> > Thanks
> > Laszlo
> > 
> >> 
> >> Or am I just confused?
> >> 
> >> Thanks,
> >> 
> >> Andrew Fish
> >> 
> >> 
> >>> Acked-by: Laszlo Ersek 
> >>> _______________________________________________
> >>> edk2-devel mailing list
> >>> edk2-devel@lists.01.org <mailto:edk2-devel@lists.01.org>
> >>> https://lists.01.org/mailman/listinfo/edk2-devel 
> >>> <https://lists.01.org/mailman/listinfo/edk2-devel>
> >> 
> > 
> > _______________________________________________
> > edk2-devel mailing list
> > edk2-devel@lists.01.org <mailto:edk2-devel@lists.01.org>
> > https://lists.01.org/mailman/listinfo/edk2-devel 
> > <https://lists.01.org/mailman/listinfo/edk2-devel>
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to