Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* [pushed] microblaze-tdep: Add ATTRIBUTE_PRINTF to microblaze_debug
@ 2017-09-21 12:11 Simon Marchi
  2017-09-25 14:14 ` Michael Eager
  0 siblings, 1 reply; 5+ messages in thread
From: Simon Marchi @ 2017-09-21 12:11 UTC (permalink / raw)
  To: gdb-patches; +Cc: Simon Marchi

I am getting this warning with clang:

/home/emaisin/src/binutils-gdb/gdb/microblaze-tdep.c:94:28: error: format string is not a string literal [-Werror,-Wformat-nonliteral]
       vprintf_unfiltered (fmt, args);
                           ^~~

Adding ATTRIBUTE_PRINTF to microblaze_debug gets rid of it.  Strangely,
gcc doesn't warn about non-literal format strings when calling vprintf
(or a vprintf-style function, like vprintf_unfiltered).  I filed this
gcc bug:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82206

gdb/ChangeLog:

	* microblaze-tdep.c (microblaze_debug): Add ATTRIBUTE_PRINTF.
---
 gdb/ChangeLog         | 4 ++++
 gdb/microblaze-tdep.c | 2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index adafa4c..88e7a6e 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,7 @@
+2017-09-21  Simon Marchi  <simon.marchi@ericsson.com>
+
+	* microblaze-tdep.c (microblaze_debug): Add ATTRIBUTE_PRINTF.
+
 2017-09-21  Yao Qi  <yao.qi@linaro.org>
 
 	* configure.tgt (aarch64*-*-freebsd*): Add fbsd-tdep.o solib-svr4.o
diff --git a/gdb/microblaze-tdep.c b/gdb/microblaze-tdep.c
index 7547581..caa7d2f 100644
--- a/gdb/microblaze-tdep.c
+++ b/gdb/microblaze-tdep.c
@@ -82,7 +82,7 @@ static const char *microblaze_register_names[] =
 \f
 static unsigned int microblaze_debug_flag = 0;
 
-static void
+static void ATTRIBUTE_PRINTF (1, 2)
 microblaze_debug (const char *fmt, ...)
 { 
   if (microblaze_debug_flag)
-- 
2.7.4


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [pushed] microblaze-tdep: Add ATTRIBUTE_PRINTF to microblaze_debug
  2017-09-21 12:11 [pushed] microblaze-tdep: Add ATTRIBUTE_PRINTF to microblaze_debug Simon Marchi
@ 2017-09-25 14:14 ` Michael Eager
  2017-09-25 16:06   ` Pedro Alves
  0 siblings, 1 reply; 5+ messages in thread
From: Michael Eager @ 2017-09-25 14:14 UTC (permalink / raw)
  To: Simon Marchi, gdb-patches

On 09/21/2017 05:11 AM, Simon Marchi wrote:
> I am getting this warning with clang:
> 
> /home/emaisin/src/binutils-gdb/gdb/microblaze-tdep.c:94:28: error: format string is not a string literal [-Werror,-Wformat-nonliteral]
>         vprintf_unfiltered (fmt, args);
>                             ^~~
> 
> Adding ATTRIBUTE_PRINTF to microblaze_debug gets rid of it. Strangely, > gcc doesn't warn about non-literal format strings when calling vprintf
> (or a vprintf-style function, like vprintf_unfiltered).  I filed this
> gcc bug:
> 
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82206

I'll admit to not being familiar with the nuances of __attribute__ ((format ...)),
or why adding this to the function declaration of microblaze_debug() would suppress
a diagnostic on the call to vprintf_unfiltered(), but the better fix seems to me to
be to turn off the obviously inappropriate -Wformat-nonliteral option in microblaze_debug()
using
#pragma GCC diagnostic ignored "-Wformat-nonliteral"

See https://stackoverflow.com/questions/12171132/avoid-warning-in-wrapper-around-printf

-- 
Michael Eager	 eager@eagercon.com
1960 Park Blvd., Palo Alto, CA 94306  650-325-8077


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [pushed] microblaze-tdep: Add ATTRIBUTE_PRINTF to microblaze_debug
  2017-09-25 14:14 ` Michael Eager
@ 2017-09-25 16:06   ` Pedro Alves
  2017-09-25 16:43     ` Michael Eager
  0 siblings, 1 reply; 5+ messages in thread
From: Pedro Alves @ 2017-09-25 16:06 UTC (permalink / raw)
  To: Michael Eager, Simon Marchi, gdb-patches

On 09/25/2017 03:14 PM, Michael Eager wrote:
> On 09/21/2017 05:11 AM, Simon Marchi wrote:
>> I am getting this warning with clang:
>>
>> /home/emaisin/src/binutils-gdb/gdb/microblaze-tdep.c:94:28: error:
>> format string is not a string literal [-Werror,-Wformat-nonliteral]
>>         vprintf_unfiltered (fmt, args);
>>                             ^~~
>>
>> Adding ATTRIBUTE_PRINTF to microblaze_debug gets rid of it. Strangely,
>> > gcc doesn't warn about non-literal format strings when calling vprintf
>> (or a vprintf-style function, like vprintf_unfiltered).  I filed this
>> gcc bug:
>>
>> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82206
> 
> I'll admit to not being familiar with the nuances of __attribute__
> ((format ...)),
> or why adding this to the function declaration of microblaze_debug()
> would suppress
> a diagnostic on the call to vprintf_unfiltered(), 

Because with that the compiler can assume that the 'fmt' argument
as passed down to microblaze_debug is a string literal.  I.e.,
the compiler can tell that the argument to vprintf_unfiltered is
itself transitively a string literal.

> but the better fix
> seems to me to
> be to turn off the obviously inappropriate -Wformat-nonliteral option in
> microblaze_debug() using
> #pragma GCC diagnostic ignored "-Wformat-nonliteral"

That doesn't make sense to me.

Thanks,
Pedro Alves


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [pushed] microblaze-tdep: Add ATTRIBUTE_PRINTF to microblaze_debug
  2017-09-25 16:06   ` Pedro Alves
@ 2017-09-25 16:43     ` Michael Eager
  2017-09-25 17:09       ` Pedro Alves
  0 siblings, 1 reply; 5+ messages in thread
From: Michael Eager @ 2017-09-25 16:43 UTC (permalink / raw)
  To: Pedro Alves, Simon Marchi, gdb-patches

On 09/25/2017 09:06 AM, Pedro Alves wrote:
>> but the better fix
>> seems to me to
>> be to turn off the obviously inappropriate -Wformat-nonliteral option in
>> microblaze_debug() using
>> #pragma GCC diagnostic ignored "-Wformat-nonliteral"
> That doesn't make sense to me.

The argument passed to vprintf_unformatted in microblaze_debug is not a string
literal.  The diagnostic message is correct.  If you don't want the diagnostic,
turning it off seems correct.

This is somewhat moot.  All uses of microblaze_debug use literal string formats,
so adding ATTRIBUTE_PRINTF is OK.

-- 
Michael Eager	 eager@eagercon.com
1960 Park Blvd., Palo Alto, CA 94306  650-325-8077


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [pushed] microblaze-tdep: Add ATTRIBUTE_PRINTF to microblaze_debug
  2017-09-25 16:43     ` Michael Eager
@ 2017-09-25 17:09       ` Pedro Alves
  0 siblings, 0 replies; 5+ messages in thread
From: Pedro Alves @ 2017-09-25 17:09 UTC (permalink / raw)
  To: Michael Eager, Simon Marchi, gdb-patches

On 09/25/2017 05:43 PM, Michael Eager wrote:
> On 09/25/2017 09:06 AM, Pedro Alves wrote:
>>> but the better fix
>>> seems to me to
>>> be to turn off the obviously inappropriate -Wformat-nonliteral option in
>>> microblaze_debug() using
>>> #pragma GCC diagnostic ignored "-Wformat-nonliteral"
>> That doesn't make sense to me.
> 
> The argument passed to vprintf_unformatted in microblaze_debug is not a
> string
> literal.  The diagnostic message is correct.  If you don't want the
> diagnostic,
> turning it off seems correct.

The diagnostic hasn't gone away.  Instead, a warning is now emitted one
level up, at the microblaze_debug call sites, iff someone passes a
non-literal string as format string by mistake.  That makes total
sense, because microblaze_debug is just a wrapper
around *printf_unfiltered.

> This is somewhat moot.  All uses of microblaze_debug use literal string
> formats,
> so adding ATTRIBUTE_PRINTF is OK.

And if someone passes a non-literal format, we'll get a warning then.
If we suppressed the warning inside microblaze_debug as you were
suggesting, then we'd risk passing a non-literal as format string to
vprintf_unfiltered.  That's the whole point.

Thanks,
Pedro Alves


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2017-09-25 17:09 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-09-21 12:11 [pushed] microblaze-tdep: Add ATTRIBUTE_PRINTF to microblaze_debug Simon Marchi
2017-09-25 14:14 ` Michael Eager
2017-09-25 16:06   ` Pedro Alves
2017-09-25 16:43     ` Michael Eager
2017-09-25 17:09       ` Pedro Alves

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox