qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] libqtest: Avoid inline varargs functions
@ 2014-03-13 11:31 Peter Maydell
  2014-03-13 12:31 ` Andreas Färber
  0 siblings, 1 reply; 3+ messages in thread
From: Peter Maydell @ 2014-03-13 11:31 UTC (permalink / raw)
  To: qemu-devel; +Cc: Andreas Färber, patches

Older versions of gcc (eg 4.6) can't handle varargs functions declared
inline for anything other than completely trivial uses, and complain:

tests/qom-test.c: In function 'qmp': tests/libqtest.h:359:60: sorry,
unimplemented: function 'qmp' can never be inlined because it uses
variable argument lists

Avoid this problem by putting the functions into libqtest.c instead
of using inline definitions in libqtest.h.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
This doesn't bite us with the current libqtest code but the
enhancements Andreas has in his QOM queue do trigger this
gcc 4.6 unimplemented behaviour.

 tests/libqtest.c | 20 ++++++++++++++++++++
 tests/libqtest.h | 20 ++------------------
 2 files changed, 22 insertions(+), 18 deletions(-)

diff --git a/tests/libqtest.c b/tests/libqtest.c
index f587d36..b69dfca 100644
--- a/tests/libqtest.c
+++ b/tests/libqtest.c
@@ -581,3 +581,23 @@ void qtest_memwrite(QTestState *s, uint64_t addr, const void *data, size_t size)
     qtest_sendf(s, "\n");
     qtest_rsp(s, 0);
 }
+
+QDict *qmp(const char *fmt, ...)
+{
+    va_list ap;
+    QDict *response;
+
+    va_start(ap, fmt);
+    response = qtest_qmpv(global_qtest, fmt, ap);
+    va_end(ap);
+    return response;
+}
+
+void qmp_discard_response(const char *fmt, ...)
+{
+    va_list ap;
+
+    va_start(ap, fmt);
+    qtest_qmpv_discard_response(global_qtest, fmt, ap);
+    va_end(ap);
+}
diff --git a/tests/libqtest.h b/tests/libqtest.h
index 9deebdc..8268c09 100644
--- a/tests/libqtest.h
+++ b/tests/libqtest.h
@@ -356,16 +356,7 @@ static inline void qtest_end(void)
  *
  * Sends a QMP message to QEMU and returns the response.
  */
-static inline QDict *qmp(const char *fmt, ...)
-{
-    va_list ap;
-    QDict *response;
-
-    va_start(ap, fmt);
-    response = qtest_qmpv(global_qtest, fmt, ap);
-    va_end(ap);
-    return response;
-}
+QDict *qmp(const char *fmt, ...);
 
 /**
  * qmp_discard_response:
@@ -373,14 +364,7 @@ static inline QDict *qmp(const char *fmt, ...)
  *
  * Sends a QMP message to QEMU and consumes the response.
  */
-static inline void qmp_discard_response(const char *fmt, ...)
-{
-    va_list ap;
-
-    va_start(ap, fmt);
-    qtest_qmpv_discard_response(global_qtest, fmt, ap);
-    va_end(ap);
-}
+void qmp_discard_response(const char *fmt, ...);
 
 /**
  * get_irq:
-- 
1.9.0

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

* Re: [Qemu-devel] [PATCH] libqtest: Avoid inline varargs functions
  2014-03-13 11:31 [Qemu-devel] [PATCH] libqtest: Avoid inline varargs functions Peter Maydell
@ 2014-03-13 12:31 ` Andreas Färber
  2014-03-13 12:35   ` Peter Maydell
  0 siblings, 1 reply; 3+ messages in thread
From: Andreas Färber @ 2014-03-13 12:31 UTC (permalink / raw)
  To: Peter Maydell, qemu-devel; +Cc: Stefan Hajnoczi, patches

Am 13.03.2014 12:31, schrieb Peter Maydell:
> Older versions of gcc (eg 4.6) can't handle varargs functions declared
> inline for anything other than completely trivial uses, and complain:
> 
> tests/qom-test.c: In function 'qmp': tests/libqtest.h:359:60: sorry,
> unimplemented: function 'qmp' can never be inlined because it uses
> variable argument lists
> 
> Avoid this problem by putting the functions into libqtest.c instead
> of using inline definitions in libqtest.h.
> 
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

Reviewed-by: Andreas Färber <afaerber@suse.de>

Feel free to go ahead with this.

Thanks,
Andreas

-- 
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg

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

* Re: [Qemu-devel] [PATCH] libqtest: Avoid inline varargs functions
  2014-03-13 12:31 ` Andreas Färber
@ 2014-03-13 12:35   ` Peter Maydell
  0 siblings, 0 replies; 3+ messages in thread
From: Peter Maydell @ 2014-03-13 12:35 UTC (permalink / raw)
  To: Andreas Färber; +Cc: QEMU Developers, Stefan Hajnoczi, Patch Tracking

On 13 March 2014 12:31, Andreas Färber <afaerber@suse.de> wrote:
> Am 13.03.2014 12:31, schrieb Peter Maydell:
>> Older versions of gcc (eg 4.6) can't handle varargs functions declared
>> inline for anything other than completely trivial uses, and complain:
>>
>> tests/qom-test.c: In function 'qmp': tests/libqtest.h:359:60: sorry,
>> unimplemented: function 'qmp' can never be inlined because it uses
>> variable argument lists
>>
>> Avoid this problem by putting the functions into libqtest.c instead
>> of using inline definitions in libqtest.h.
>>
>> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
>
> Reviewed-by: Andreas Färber <afaerber@suse.de>
>
> Feel free to go ahead with this.

Applied to master, thanks. Your pullreq is next in the queue.

thanks
-- PMM

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

end of thread, other threads:[~2014-03-13 12:36 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-03-13 11:31 [Qemu-devel] [PATCH] libqtest: Avoid inline varargs functions Peter Maydell
2014-03-13 12:31 ` Andreas Färber
2014-03-13 12:35   ` Peter Maydell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).