On Fri, 2016-03-11 at 16:36 +0100, Martin Kletzander wrote:
Even though this is, technically speaking, a build-breaker fix,
different version of this was posted before [1] and not accepted
(although neither rejected), so I'm sending this as another way
of approaching it.
[1]
https://www.redhat.com/archives/libvir-list/2015-March/msg00203.html
Signed-off-by: Martin Kletzander <mkletzan(a)redhat.com>
---
tests/qemuxml2argvmock.c | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/tests/qemuxml2argvmock.c b/tests/qemuxml2argvmock.c
index 8426108b29ed..5667f34f1267 100644
--- a/tests/qemuxml2argvmock.c
+++ b/tests/qemuxml2argvmock.c
@@ -62,6 +62,34 @@ virNumaNodeIsAvailable(int node)
{
return node >= 0 && node <= virNumaGetMaxNode();
}
+
+/* This is a copy-paste of the same function from src/util/virnuma.c.
+ * the reason for this is that some compilers might inline the
+ * function above (virNumaNodeIsAvailable) and hence mocking that
+ * function is pointless from our test suite's POV. This is a
+ * (hopefully) temporary workaround until someone finds out how to
+ * disable inlining of exported functions with -O2 on clang. The
+ * other option would be disabling inlining of that particular
+ * function which was proposed but did not come to a conclusion.
+ */
I'd rather go the __attribute__((noinline)) way, because I'm very
concerned that the two copies of virNumaNodesetIsAvailable() will
get out of sync at some point. If that happened, our tests will
continue to pass just fine even though the code shipped in the
library is potentially broken.
Of course if someone can come up with a proper fix, that's even
better :)
Cheers.
--
Andrea Bolognani
Software Engineer - Virtualization Team