• E
    build: detect potentential uninitialized variables · 0d166c6b
    Eric Blake 提交于
    Even with -Wuninitialized (which is part of autobuild.sh
    --enable-compile-warnings=error), gcc does NOT catch this
    use of an uninitialized variable:
    
    {
      if (cond)
        goto error;
      int a = 1;
    error:
      printf("%d", a);
    }
    
    which prints 0 (supposing the stack started life wiped) if
    cond was true.  Clang will catch it, but we don't use clang
    as often.  Using gcc -Wjump-misses-init catches it, but also
    gives false positives:
    
    {
      if (cond)
        goto error;
      int a = 1;
      return a;
    error:
      return 0;
    }
    
    Here, a was never used in the scope of the error block, so
    declaring it after goto is technically fine (and clang agrees).
    However, given that our HACKING already documents a preference
    to C89 decl-before-statement, the false positive warning is
    enough of a prod to comply with HACKING.
    
    [Personally, I'd _really_ rather use C99 decl-after-statement
    to minimize scope, but until gcc can efficiently and reliably
    catch scoping and uninitialized usage bugs, I'll settle with
    the compromise of enforcing a coding standard that happens to
    reject false positives if it can also detect real bugs.]
    
    * acinclude.m4 (LIBVIRT_COMPILE_WARNINGS): Add -Wjump-misses-init.
    * src/util/util.c (__virExec): Adjust offenders.
    * src/conf/domain_conf.c (virDomainTimerDefParseXML): Likewise.
    * src/remote/remote_driver.c (doRemoteOpen): Likewise.
    * src/phyp/phyp_driver.c (phypGetLparNAME, phypGetLparProfile)
    (phypGetVIOSFreeSCSIAdapter, phypVolumeGetKey)
    (phypGetStoragePoolDevice)
    (phypVolumeGetPhysicalVolumeByStoragePool)
    (phypVolumeGetPath): Likewise.
    * src/vbox/vbox_tmpl.c (vboxNetworkUndefineDestroy)
    (vboxNetworkCreate, vboxNetworkDumpXML)
    (vboxNetworkDefineCreateXML): Likewise.
    * src/xenapi/xenapi_driver.c (getCapsObject)
    (xenapiDomainDumpXML): Likewise.
    * src/xenapi/xenapi_utils.c (createVMRecordFromXml): Likewise.
    * src/security/security_selinux.c (SELinuxGenNewContext):
    Likewise.
    * src/qemu/qemu_command.c (qemuBuildCommandLine): Likewise.
    * src/qemu/qemu_hotplug.c (qemuDomainChangeEjectableMedia):
    Likewise.
    * src/qemu/qemu_process.c (qemuProcessWaitForMonitor): Likewise.
    * src/qemu/qemu_monitor_text.c (qemuMonitorTextGetPtyPaths):
    Likewise.
    * src/qemu/qemu_driver.c (qemudDomainShutdown)
    (qemudDomainBlockStats, qemudDomainMemoryPeek): Likewise.
    * src/storage/storage_backend_iscsi.c
    (virStorageBackendCreateIfaceIQN): Likewise.
    * src/node_device/node_device_udev.c (udevProcessPCI): Likewise.
    0d166c6b
domain_conf.c 286.1 KB