[libvirt] [PATCH] nodedev: fix build with clang

Roman Bogorodskiy bogorodskiy at gmail.com
Sat Feb 18 13:52:11 UTC 2017


Build fails with:

conf/node_device_conf.c:825:62: error: comparison of unsigned enum expression < 0 is always false [-Werror,-Wtautological-compare]
    if ((data->drm.type = virNodeDevDRMTypeFromString(type)) < 0) {
        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~
conf/node_device_conf.c:1801:59: error: comparison of unsigned enum expression < 0 is always false [-Werror,-Wtautological-compare]
        if ((type = virNodeDevDevnodeTypeFromString(tmp)) < 0) {
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~
2 errors generated.

Fix by using intermediate variable to store the result similarly
to how it's done for other FromString* calls.
---
 Pushed under the build-breaker rule.

 src/conf/node_device_conf.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c
index b3063d9ec..c15c917a2 100644
--- a/src/conf/node_device_conf.c
+++ b/src/conf/node_device_conf.c
@@ -814,7 +814,7 @@ virNodeDevCapDRMParseXML(xmlXPathContextPtr ctxt,
                          virNodeDevCapDataPtr data)
 {
     xmlNodePtr orignode;
-    int ret = -1;
+    int ret = -1, val;
     char *type = NULL;
 
     orignode = ctxt->node;
@@ -822,11 +822,12 @@ virNodeDevCapDRMParseXML(xmlXPathContextPtr ctxt,
 
     type = virXPathString("string(./type[1])", ctxt);
 
-    if ((data->drm.type = virNodeDevDRMTypeFromString(type)) < 0) {
+    if ((val = virNodeDevDRMTypeFromString(type)) < 0) {
         virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
                        _("unknown drm type '%s' for '%s'"), type, def->name);
         goto out;
     }
+    data->drm.type = val;
 
     ret = 0;
 
@@ -1791,6 +1792,7 @@ virNodeDeviceDefParseXML(xmlXPathContextPtr ctxt,
         xmlNodePtr node = nodes[i];
         char *tmp = virXMLPropString(node, "type");
         virNodeDevDevnodeType type;
+        int val;
 
         if (!tmp) {
             virReportError(VIR_ERR_INTERNAL_ERROR,
@@ -1798,12 +1800,13 @@ virNodeDeviceDefParseXML(xmlXPathContextPtr ctxt,
             goto error;
         }
 
-        if ((type = virNodeDevDevnodeTypeFromString(tmp)) < 0) {
+        if ((val = virNodeDevDevnodeTypeFromString(tmp)) < 0) {
             virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
                            _("unknown devnode type '%s'"), tmp);
             VIR_FREE(tmp);
             goto error;
         }
+        type = val;
 
         switch (type) {
         case VIR_NODE_DEV_DEVNODE_DEV:
-- 
2.11.0




More information about the libvir-list mailing list