Message ID | 1457969921-29870-1-git-send-email-leif.lindholm@linaro.org |
---|---|
State | Superseded |
Headers | show |
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 <leif.lindholm@linaro.org> > --- > > 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.) Acked-by: Laszlo Ersek <lersek@redhat.com> _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
On 03/16/16 17:50, Andrew Fish wrote: > >> On Mar 16, 2016, at 6:54 AM, Laszlo Ersek <lersek@redhat.com> 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 <leif.lindholm@linaro.org> >>> --- >>> >>> 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 <lersek@redhat.com> >> _______________________________________________ >> edk2-devel mailing list >> edk2-devel@lists.01.org >> 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
On Wed, Mar 16, 2016 at 07:06:12PM -0700, Andrew Fish wrote: > > > On Mar 16, 2016, at 7:02 PM, Gao, Liming <liming.gao@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. Well, it doesn't have to be an all in one go type thing. As long as the modifier exists, it can be added where people come across problems when building with lots of warnings enabled. But a follow-up question (for everyone) - is ARG_UNUSED the keyword to use, or should it just be UNUSED? Regards, Leif > > >>> 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: afish@apple.com <mailto:afish@apple.com> [mailto:afish@apple.com <mailto:afish@apple.com>] > > Sent: Thursday, March 17, 2016 1:12 AM > > To: Laszlo Ersek <lersek@redhat.com <mailto:lersek@redhat.com>> > > Cc: Kinney, Michael D <michael.d.kinney@intel.com <mailto:michael.d.kinney@intel.com>>; edk2-devel@ml01.01.org <mailto:edk2-devel@ml01.01.org>; Gao, Liming <liming.gao@intel.com <mailto:liming.gao@intel.com>>; Leif Lindholm <leif.lindholm@linaro.org <mailto:leif.lindholm@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
On 03/17/16 11:11, Leif Lindholm wrote: > On Wed, Mar 16, 2016 at 07:06:12PM -0700, Andrew Fish wrote: >> >>> On Mar 16, 2016, at 7:02 PM, Gao, Liming <liming.gao@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. > > Well, it doesn't have to be an all in one go type thing. > As long as the modifier exists, it can be added where people come > across problems when building with lots of warnings enabled. > > But a follow-up question (for everyone) - is ARG_UNUSED the keyword to > use, or should it just be UNUSED? Well, "ARG" does disturb me a bit. In this case, "parameter" is a better match I think. From C99, 3.3p1: *argument* actual argument actual parameter (deprecated) expression in the comma-separated list bounded by the parentheses in a function call expression, or a sequence of preprocessing tokens in the comma-separated list bounded by the parentheses in a function-like macro invocation 3.15p1: *parameter* formal parameter formal argument (deprecated) object declared as part of a function declaration or definition that acquires a value on entry to the function, or an identifier from the comma-separated list bounded by the parentheses immediately following the macro name in a function-like macro definition Where we would employ this macro is function definitions (not function calls), so I would propose PARAM_UNUSED or just UNUSED, over ARG_UNUSED. Thanks Laszlo > > Regards, > > Leif > >>>>>> 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: afish@apple.com <mailto:afish@apple.com> [mailto:afish@apple.com <mailto:afish@apple.com>] >>> Sent: Thursday, March 17, 2016 1:12 AM >>> To: Laszlo Ersek <lersek@redhat.com <mailto:lersek@redhat.com>> >>> Cc: Kinney, Michael D <michael.d.kinney@intel.com <mailto:michael.d.kinney@intel.com>>; edk2-devel@ml01.01.org <mailto:edk2-devel@ml01.01.org>; Gao, Liming <liming.gao@intel.com <mailto:liming.gao@intel.com>>; Leif Lindholm <leif.lindholm@linaro.org <mailto:leif.lindholm@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
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.
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 <leif.lindholm@linaro.org> --- 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(+) -- 2.1.4 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel