Marc-André Lureau <[email protected]> writes: > Hi > > On Thu, Jul 9, 2020 at 7:30 PM Peter Maydell <[email protected]> wrote: > > On Thu, 9 Jul 2020 at 16:27, Daniel P. Berrangé <[email protected]> wrote: > > If it doesn't even compile, do we even need to go through the full > > deprecation cycle ? I tend to feel like the release where it first > > fails to compile automatically starts the deprecation countdown. > > Mmm, assuming that it's "couldn't possibly compile for anybody" > rather than "doesn't compile for me (but maybe it would be OK > on some other host OS config)". > > Marc-André, what are the details of the compilation failure? > > I have done some release bisection. > > v2.11.0 compiles, v2.12.0 started failing with: > > CC block/vxhs.o > /home/elmarco/src/qq/block/vxhs.c:126:1: error: variable ‘runtime_opts’ has > initializer but incomplete type > 126 | static QemuOptsList runtime_opts = { > | ^~~~~~ > /home/elmarco/src/qq/block/vxhs.c:127:6: error: ‘QemuOptsList’ has no member > named ‘name’ > 127 | .name = "vxhs", > | ^~~~ > /home/elmarco/src/qq/block/vxhs.c:127:13: warning: excess elements in struct > initializer > 127 | .name = "vxhs", > | ^~~~~~ > /home/elmarco/src/qq/block/vxhs.c:127:13: note: (near initialization for > ‘runtime_opts’) > /home/elmarco/src/qq/block/vxhs.c:128:6: error: ‘QemuOptsList’ has no member > named ‘head’ > 128 | .head = QTAILQ_HEAD_INITIALIZER(runtime_opts.head), > | ^~~~ > In file included from /home/elmarco/src/qq/include/qemu/notify.h:17, > from /home/elmarco/src/qq/include/qemu/timer.h:5, > from /home/elmarco/src/qq/include/qemu/timed-average.h:29, > from /home/elmarco/src/qq/include/block/accounting.h:28, > from /home/elmarco/src/qq/include/block/block_int.h:27, > from /home/elmarco/src/qq/block/vxhs.c:14: > /home/elmarco/src/qq/include/qemu/queue.h:360:9: error: extra brace group at > end of initializer > 360 | { NULL, &(head).tqh_first } > | ^ > /home/elmarco/src/qq/block/vxhs.c:128:13: note: in expansion of macro > ‘QTAILQ_HEAD_INITIALIZER’ > 128 | .head = QTAILQ_HEAD_INITIALIZER(runtime_opts.head), > | ^~~~~~~~~~~~~~~~~~~~~~~ > /home/elmarco/src/qq/include/qemu/queue.h:360:9: note: (near initialization > for ‘runtime_opts’) > 360 | { NULL, &(head).tqh_first } > | ^ > /home/elmarco/src/qq/block/vxhs.c:128:13: note: in expansion of macro > ‘QTAILQ_HEAD_INITIALIZER’ > 128 | .head = QTAILQ_HEAD_INITIALIZER(runtime_opts.head), > | ^~~~~~~~~~~~~~~~~~~~~~~ > /home/elmarco/src/qq/block/vxhs.c:128:49: error: invalid use of incomplete > typedef ‘QemuOptsList’ > 128 | .head = QTAILQ_HEAD_INITIALIZER(runtime_opts.head), > | ^ > /home/elmarco/src/qq/include/qemu/queue.h:360:19: note: in definition of > macro ‘QTAILQ_HEAD_INITIALIZER’ > 360 | { NULL, &(head).tqh_first } > | ^~~~ > /home/elmarco/src/qq/include/qemu/queue.h:360:9: warning: excess elements in > struct initializer > 360 | { NULL, &(head).tqh_first } > | ^ > /home/elmarco/src/qq/block/vxhs.c:128:13: note: in expansion of macro > ‘QTAILQ_HEAD_INITIALIZER’ > 128 | .head = QTAILQ_HEAD_INITIALIZER(runtime_opts.head), > | ^~~~~~~~~~~~~~~~~~~~~~~ > /home/elmarco/src/qq/include/qemu/queue.h:360:9: note: (near initialization > for ‘runtime_opts’) > 360 | { NULL, &(head).tqh_first } > | ^ > /home/elmarco/src/qq/block/vxhs.c:128:13: note: in expansion of macro > ‘QTAILQ_HEAD_INITIALIZER’ > 128 | .head = QTAILQ_HEAD_INITIALIZER(runtime_opts.head), > | ^~~~~~~~~~~~~~~~~~~~~~~ > /home/elmarco/src/qq/block/vxhs.c:129:6: error: ‘QemuOptsList’ has no member > named ‘desc’ > 129 | .desc = { > | ^~~~ > /home/elmarco/src/qq/block/vxhs.c:129:13: error: extra brace group at end of > initializer > 129 | .desc = { > | ^ > /home/elmarco/src/qq/block/vxhs.c:129:13: note: (near initialization for > ‘runtime_opts’) > /home/elmarco/src/qq/block/vxhs.c:130:9: error: extra brace group at end of > initializer > 130 | { > | ^ > /home/elmarco/src/qq/block/vxhs.c:130:9: note: (near initialization for > ‘runtime_opts’) > /home/elmarco/src/qq/block/vxhs.c:132:21: error: ‘QEMU_OPT_STRING’ undeclared > here (not in a function) > 132 | .type = QEMU_OPT_STRING, > | ^~~~~~~~~~~~~~~ > /home/elmarco/src/qq/block/vxhs.c:135:9: error: extra brace group at end of > initializer > 135 | { > | ^ > /home/elmarco/src/qq/block/vxhs.c:135:9: note: (near initialization for > ‘runtime_opts’) > /home/elmarco/src/qq/block/vxhs.c:140:9: error: extra brace group at end of > initializer > 140 | { > | ^ > /home/elmarco/src/qq/block/vxhs.c:140:9: note: (near initialization for > ‘runtime_opts’) > /home/elmarco/src/qq/block/vxhs.c:145:9: error: extra brace group at end of > initializer > 145 | { /* end of list */ } > | ^ > /home/elmarco/src/qq/block/vxhs.c:145:9: note: (near initialization for > ‘runtime_opts’) > /home/elmarco/src/qq/block/vxhs.c:129:13: warning: excess elements in struct > initializer > 129 | .desc = { > | ^ > /home/elmarco/src/qq/block/vxhs.c:129:13: note: (near initialization for > ‘runtime_opts’) > /home/elmarco/src/qq/block/vxhs.c:149:1: error: variable ‘runtime_tcp_opts’ > has initializer but incomplete type > 149 | static QemuOptsList runtime_tcp_opts = { > | ^~~~~~ > /home/elmarco/src/qq/block/vxhs.c:150:6: error: ‘QemuOptsList’ has no member > named ‘name’ > 150 | .name = "vxhs_tcp", > | ^~~~ > /home/elmarco/src/qq/block/vxhs.c:150:13: warning: excess elements in struct > initializer > 150 | .name = "vxhs_tcp", > | ^~~~~~~~~~ > /home/elmarco/src/qq/block/vxhs.c:150:13: note: (near initialization for > ‘runtime_tcp_opts’) > /home/elmarco/src/qq/block/vxhs.c:151:6: error: ‘QemuOptsList’ has no member > named ‘head’ > 151 | .head = QTAILQ_HEAD_INITIALIZER(runtime_tcp_opts.head), > | ^~~~ > In file included from /home/elmarco/src/qq/include/qemu/notify.h:17, > from /home/elmarco/src/qq/include/qemu/timer.h:5, > from /home/elmarco/src/qq/include/qemu/timed-average.h:29, > from /home/elmarco/src/qq/include/block/accounting.h:28, > from /home/elmarco/src/qq/include/block/block_int.h:27, > from /home/elmarco/src/qq/block/vxhs.c:14: > /home/elmarco/src/qq/include/qemu/queue.h:360:9: error: extra brace group at > end of initializer > 360 | { NULL, &(head).tqh_first } > | ^ > /home/elmarco/src/qq/block/vxhs.c:151:13: note: in expansion of macro > ‘QTAILQ_HEAD_INITIALIZER’ > 151 | .head = QTAILQ_HEAD_INITIALIZER(runtime_tcp_opts.head), > | ^~~~~~~~~~~~~~~~~~~~~~~ > /home/elmarco/src/qq/include/qemu/queue.h:360:9: note: (near initialization > for ‘runtime_tcp_opts’) > 360 | { NULL, &(head).tqh_first } > | ^ > /home/elmarco/src/qq/block/vxhs.c:151:13: note: in expansion of macro > ‘QTAILQ_HEAD_INITIALIZER’ > 151 | .head = QTAILQ_HEAD_INITIALIZER(runtime_tcp_opts.head), > | ^~~~~~~~~~~~~~~~~~~~~~~ > /home/elmarco/src/qq/block/vxhs.c:151:53: error: invalid use of incomplete > typedef ‘QemuOptsList’ > 151 | .head = QTAILQ_HEAD_INITIALIZER(runtime_tcp_opts.head), > | ^ > /home/elmarco/src/qq/include/qemu/queue.h:360:19: note: in definition of > macro ‘QTAILQ_HEAD_INITIALIZER’ > 360 | { NULL, &(head).tqh_first } > | ^~~~ > /home/elmarco/src/qq/include/qemu/queue.h:360:9: warning: excess elements in > struct initializer > 360 | { NULL, &(head).tqh_first } > | ^ > /home/elmarco/src/qq/block/vxhs.c:151:13: note: in expansion of macro > ‘QTAILQ_HEAD_INITIALIZER’ > 151 | .head = QTAILQ_HEAD_INITIALIZER(runtime_tcp_opts.head), > | ^~~~~~~~~~~~~~~~~~~~~~~ > /home/elmarco/src/qq/include/qemu/queue.h:360:9: note: (near initialization > for ‘runtime_tcp_opts’) > 360 | { NULL, &(head).tqh_first } > | ^ > /home/elmarco/src/qq/block/vxhs.c:151:13: note: in expansion of macro > ‘QTAILQ_HEAD_INITIALIZER’ > 151 | .head = QTAILQ_HEAD_INITIALIZER(runtime_tcp_opts.head), > | ^~~~~~~~~~~~~~~~~~~~~~~ > /home/elmarco/src/qq/block/vxhs.c:152:6: error: ‘QemuOptsList’ has no member > named ‘desc’ > 152 | .desc = { > | ^~~~ > /home/elmarco/src/qq/block/vxhs.c:152:13: error: extra brace group at end of > initializer > 152 | .desc = { > | ^ > /home/elmarco/src/qq/block/vxhs.c:152:13: note: (near initialization for > ‘runtime_tcp_opts’) > /home/elmarco/src/qq/block/vxhs.c:153:9: error: extra brace group at end of > initializer > 153 | { > | ^ > /home/elmarco/src/qq/block/vxhs.c:153:9: note: (near initialization for > ‘runtime_tcp_opts’) > /home/elmarco/src/qq/block/vxhs.c:158:9: error: extra brace group at end of > initializer > 158 | { > | ^ > /home/elmarco/src/qq/block/vxhs.c:158:9: note: (near initialization for > ‘runtime_tcp_opts’) > /home/elmarco/src/qq/block/vxhs.c:160:21: error: ‘QEMU_OPT_NUMBER’ undeclared > here (not in a function) > 160 | .type = QEMU_OPT_NUMBER, > | ^~~~~~~~~~~~~~~ > /home/elmarco/src/qq/block/vxhs.c:164:9: error: extra brace group at end of > initializer > 164 | { /* end of list */ } > | ^ > /home/elmarco/src/qq/block/vxhs.c:164:9: note: (near initialization for > ‘runtime_tcp_opts’) > /home/elmarco/src/qq/block/vxhs.c:152:13: warning: excess elements in struct > initializer > 152 | .desc = { > | ^ > /home/elmarco/src/qq/block/vxhs.c:152:13: note: (near initialization for > ‘runtime_tcp_opts’) > /home/elmarco/src/qq/block/vxhs.c: In function ‘vxhs_open’: > /home/elmarco/src/qq/block/vxhs.c:309:12: warning: implicit declaration of > function ‘qemu_opts_create’; did you mean ‘qbus_create’? > [-Wimplicit-function-declaration] > 309 | opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort); > | ^~~~~~~~~~~~~~~~ > | qbus_create > /home/elmarco/src/qq/block/vxhs.c:309:12: warning: nested extern declaration > of ‘qemu_opts_create’ [-Wnested-externs] > /home/elmarco/src/qq/block/vxhs.c:309:10: warning: assignment to ‘QemuOpts *’ > from ‘int’ makes pointer from integer without a cast [-Wint-conversion] > 309 | opts = qemu_opts_create(&runtime_opts, NULL, 0, &error_abort); > | ^ > /home/elmarco/src/qq/block/vxhs.c:310:14: warning: assignment to ‘QemuOpts *’ > from ‘int’ makes pointer from integer without a cast [-Wint-conversion] > 310 | tcp_opts = qemu_opts_create(&runtime_tcp_opts, NULL, 0, > &error_abort); > | ^ > /home/elmarco/src/qq/block/vxhs.c:312:5: warning: implicit declaration of > function ‘qemu_opts_absorb_qdict’ [-Wimplicit-function-declaration] > 312 | qemu_opts_absorb_qdict(opts, options, &local_err); > | ^~~~~~~~~~~~~~~~~~~~~~ > /home/elmarco/src/qq/block/vxhs.c:312:5: warning: nested extern declaration > of ‘qemu_opts_absorb_qdict’ [-Wnested-externs] > /home/elmarco/src/qq/block/vxhs.c:319:20: warning: implicit declaration of > function ‘qemu_opt_get’; did you mean ‘qemu_aio_get’? > [-Wimplicit-function-declaration] > 319 | vdisk_id_opt = qemu_opt_get(opts, VXHS_OPT_VDISK_ID); > | ^~~~~~~~~~~~ > | qemu_aio_get > /home/elmarco/src/qq/block/vxhs.c:319:20: warning: nested extern declaration > of ‘qemu_opt_get’ [-Wnested-externs] > /home/elmarco/src/qq/block/vxhs.c:319:18: warning: assignment to ‘const char > *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion] > 319 | vdisk_id_opt = qemu_opt_get(opts, VXHS_OPT_VDISK_ID); > | ^ > /home/elmarco/src/qq/block/vxhs.c:346:21: warning: assignment to ‘const char > *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion] > 346 | server_host_opt = qemu_opt_get(tcp_opts, VXHS_OPT_HOST); > | ^ > /home/elmarco/src/qq/block/vxhs.c:362:30: warning: passing argument 1 of > ‘g_strdup’ makes pointer from integer without a cast [-Wint-conversion] > 362 | s->tlscredsid = g_strdup(qemu_opt_get(opts, "tls-creds")); > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > | | > | int > In file included from /usr/local/stow/glib/include/glib-2.0/glib.h:82, > from /home/elmarco/src/qq/include/glib-compat.h:19, > from /home/elmarco/src/qq/include/qemu/osdep.h:107, > from /home/elmarco/src/qq/block/vxhs.c:11: > /usr/local/stow/glib/include/glib-2.0/glib/gstrfuncs.h:217:52: note: expected > ‘const gchar *’ {aka ‘const char *’} but argument is of type ‘int’ > 217 | gchar* g_strdup (const gchar *str) G_GNUC_MALLOC; > | ~~~~~~~~~~~~~^~~ > /home/elmarco/src/qq/block/vxhs.c:374:46: warning: passing argument 1 of > ‘g_ascii_strtoll’ makes pointer from integer without a cast [-Wint-conversion] > 374 | s->vdisk_hostinfo.port = g_ascii_strtoll(qemu_opt_get(tcp_opts, > | ^~~~~~~~~~~~~~~~~~~~~~ > | | > | int > 375 | > VXHS_OPT_PORT), > | > ~~~~~~~~~~~~~~ > In file included from /usr/local/stow/glib/include/glib-2.0/glib.h:82, > from /home/elmarco/src/qq/include/glib-compat.h:19, > from /home/elmarco/src/qq/include/qemu/osdep.h:107, > from /home/elmarco/src/qq/block/vxhs.c:11: > /usr/local/stow/glib/include/glib-2.0/glib/gstrfuncs.h:157:46: note: expected > ‘const gchar *’ {aka ‘const char *’} but argument is of type ‘int’ > 157 | gint64 g_ascii_strtoll (const gchar *nptr, > | ~~~~~~~~~~~~~^~~~ > /home/elmarco/src/qq/block/vxhs.c:400:5: warning: implicit declaration of > function ‘qemu_opts_del’; did you mean ‘qemu_open’? > [-Wimplicit-function-declaration] > 400 | qemu_opts_del(tcp_opts); > | ^~~~~~~~~~~~~ > | qemu_open > /home/elmarco/src/qq/block/vxhs.c:400:5: warning: nested extern declaration > of ‘qemu_opts_del’ [-Wnested-externs] > /home/elmarco/src/qq/block/vxhs.c: At top level: > /home/elmarco/src/qq/block/vxhs.c:126:21: error: storage size of > ‘runtime_opts’ isn’t known > 126 | static QemuOptsList runtime_opts = { > | ^~~~~~~~~~~~ > /home/elmarco/src/qq/block/vxhs.c:149:21: error: storage size of > ‘runtime_tcp_opts’ isn’t known > 149 | static QemuOptsList runtime_tcp_opts = { > | ^~~~~~~~~~~~~~~~ > make: *** [/home/elmarco/src/qq/rules.mak:66: block/vxhs.o] Error 1
That looks more like it got missed in a clean-up series because we don't have coverage in our typical builds and CI? -- Alex Bennée
