On Mon, Jan 21, 2019 at 03:13:21PM +0000, Richard W.M. Jones wrote: > GCC 9 gives pages of errors like: > > qemumonitorjsontest.c: In function 'mymain': > qemumonitorjsontest.c:2904:9: error: jump skips variable initialization [-Werror=jump-misses-init] > 2904 | goto cleanup; > | ^~~~ > qemumonitorjsontest.c:3111:2: note: label 'cleanup' defined here > 3111 | cleanup: > | ^~~~~~~ > qemumonitorjsontest.c:2920:54: note: '({anonymous})' declared here > 2920 | simpleFunc = (testQemuMonitorJSONSimpleFuncData) {.xmlopt = driver.xmlopt, \ > | ^ > qemumonitorjsontest.c:3008:5: note: in expansion of macro 'DO_TEST_GEN' > 3008 | DO_TEST_GEN(qemuMonitorJSONBlockdevMediumInsert); > | ^~~~~~~~~~~ Ok, it is complaining about "simpleFunc", because for the 5 locally declared variables, we've done explicit initialization before any goto's are encountered. The fun thing is that the cleanup: block does not reference "simpleFunc" in any way - it is only ever used immediately after it is initialized. So GCC is warning about something that can't happen here. The definition of -Wjump-misses-init says [quote] Warn if a 'goto' statement or a 'switch' statement jumps forward across the initialization of a variable, or jumps backward to a label after the variable has been initialized. This only warns about variables that are initialized when they are declared. [/quote] we're jumping forwards here, but the last sentance suggests it would only warn if you are jumping over the variable declaration. ie if we had testQemuMonitorJSONSimpleFuncData simpleFunc; in the middle of the method, instead of top of the method. So either they've intentionally expanded the scope of the warning, or this is a bug in GCC. Either way the simple solution is probably just: testQemuMonitorJSONSimpleFuncData simpleFunc = NULL; > > By moving the cleanup section up near the top of the function we can > avoid this. I think a better way might be to disable the warning. > --- > tests/qemumonitorjsontest.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/tests/qemumonitorjsontest.c b/tests/qemumonitorjsontest.c > index 1a8a31717f..299c5f0cbe 100644 > --- a/tests/qemumonitorjsontest.c > +++ b/tests/qemumonitorjsontest.c > @@ -2900,8 +2900,12 @@ mymain(void) > > if (!(qapiData.schema = testQEMUSchemaLoad())) { > VIR_TEST_VERBOSE("failed to load qapi schema\n"); > - ret = -1; > - goto cleanup; > + cleanup: > + VIR_FREE(metaschemastr); > + virJSONValueFree(metaschema); > + virHashFree(qapiData.schema); > + qemuTestDriverFree(&driver); > + return -1; > } > > #define DO_TEST(name) \ > @@ -3098,7 +3102,6 @@ mymain(void) > if (!(metaschema = testQEMUSchemaGetLatest()) || > !(metaschemastr = virJSONValueToString(metaschema, false))) { > VIR_TEST_VERBOSE("failed to load latest qapi schema\n"); > - ret = -1; > goto cleanup; > } > > @@ -3108,7 +3111,6 @@ mymain(void) > > #undef DO_TEST_QAPI_SCHEMA > > - cleanup: > VIR_FREE(metaschemastr); > virJSONValueFree(metaschema); > virHashFree(qapiData.schema); > -- > 2.20.1 > > -- > libvir-list mailing list > libvir-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/libvir-list Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list