Message ID | 20200908184918.1085-5-luoyonggang@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [PULL,01/16] block: Fixes nfs on msys2/mingw | expand |
On Tue, 8 Sep 2020 at 19:56, Yonggang Luo <luoyonggang@gmail.com> wrote: > > This is the compiling error: > ../ui/curses.c: In function 'curses_refresh': > ../ui/curses.c:256:5: error: 'next_maybe_keycode' may be used uninitialized in this function [-Werror=maybe-uninitialized] > 256 | curses2foo(_curses2keycode, _curseskey2keycode, chr, maybe_keycode) > | ^~~~~~~~~~ > ../ui/curses.c:302:32: note: 'next_maybe_keycode' was declared here > 302 | enum maybe_keycode next_maybe_keycode; > | ^~~~~~~~~~~~~~~~~~ > ../ui/curses.c:256:5: error: 'maybe_keycode' may be used uninitialized in this function [-Werror=maybe-uninitialized] > 256 | curses2foo(_curses2keycode, _curseskey2keycode, chr, maybe_keycode) > | ^~~~~~~~~~ > ../ui/curses.c:265:24: note: 'maybe_keycode' was declared here > 265 | enum maybe_keycode maybe_keycode; > | ^~~~~~~~~~~~~ > cc1.exe: all warnings being treated as errors > Signed-off-by: Yonggang Luo <luoyonggang@gmail.com> > --- > ui/curses.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/ui/curses.c b/ui/curses.c > index 12bc682cf9..e4f9588c3e 100644 > --- a/ui/curses.c > +++ b/ui/curses.c > @@ -262,7 +262,7 @@ static int curses2foo(const int _curses2foo[], const int _curseskey2foo[], > static void curses_refresh(DisplayChangeListener *dcl) > { > int chr, keysym, keycode, keycode_alt; > - enum maybe_keycode maybe_keycode; > + enum maybe_keycode maybe_keycode = CURSES_KEYCODE; > > curses_winch_check(); > > @@ -299,7 +299,7 @@ static void curses_refresh(DisplayChangeListener *dcl) > > /* alt or esc key */ > if (keycode == 1) { > - enum maybe_keycode next_maybe_keycode; > + enum maybe_keycode next_maybe_keycode = CURSES_KEYCODE; > int nextchr = console_getch(&next_maybe_keycode); > > if (nextchr != -1) { The problem here is that the compiler hasn't noticed that it's impossible to return something other than -1 from console_getch() without initializing next_maybe_keycode. There are two possible reasons for this: (1) your gcc is a bit old -- newer gcc are better at working out this kind of thing. But you said on irc that you're using gcc 10.2.0, which is new... (2) this is a variant of the problem with the system headers that causes us to have to redefine assert() in osdep.h, only with abort() (ie abort() is perhaps not marked as noreturn in the system headers). If this theory is true, then changing the abort() in console_getch() to instead be g_assert_not_reached() would be a different way to avoid the warnings (and if that works we should probably fix up abort() the way we do assert()). thanks -- PMM
On Wed, Sep 9, 2020 at 4:29 AM Peter Maydell <peter.maydell@linaro.org> wrote: > On Tue, 8 Sep 2020 at 19:56, Yonggang Luo <luoyonggang@gmail.com> wrote: > > > > This is the compiling error: > > ../ui/curses.c: In function 'curses_refresh': > > ../ui/curses.c:256:5: error: 'next_maybe_keycode' may be used > uninitialized in this function [-Werror=maybe-uninitialized] > > 256 | curses2foo(_curses2keycode, _curseskey2keycode, chr, > maybe_keycode) > > | ^~~~~~~~~~ > > ../ui/curses.c:302:32: note: 'next_maybe_keycode' was declared here > > 302 | enum maybe_keycode next_maybe_keycode; > > | ^~~~~~~~~~~~~~~~~~ > > ../ui/curses.c:256:5: error: 'maybe_keycode' may be used uninitialized > in this function [-Werror=maybe-uninitialized] > > 256 | curses2foo(_curses2keycode, _curseskey2keycode, chr, > maybe_keycode) > > | ^~~~~~~~~~ > > ../ui/curses.c:265:24: note: 'maybe_keycode' was declared here > > 265 | enum maybe_keycode maybe_keycode; > > | ^~~~~~~~~~~~~ > > cc1.exe: all warnings being treated as errors > > > Signed-off-by: Yonggang Luo <luoyonggang@gmail.com> > > --- > > ui/curses.c | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/ui/curses.c b/ui/curses.c > > index 12bc682cf9..e4f9588c3e 100644 > > --- a/ui/curses.c > > +++ b/ui/curses.c > > @@ -262,7 +262,7 @@ static int curses2foo(const int _curses2foo[], const > int _curseskey2foo[], > > static void curses_refresh(DisplayChangeListener *dcl) > > { > > int chr, keysym, keycode, keycode_alt; > > - enum maybe_keycode maybe_keycode; > > + enum maybe_keycode maybe_keycode = CURSES_KEYCODE; > > > > curses_winch_check(); > > > > @@ -299,7 +299,7 @@ static void curses_refresh(DisplayChangeListener > *dcl) > > > > /* alt or esc key */ > > if (keycode == 1) { > > - enum maybe_keycode next_maybe_keycode; > > + enum maybe_keycode next_maybe_keycode = CURSES_KEYCODE; > > int nextchr = console_getch(&next_maybe_keycode); > > > > if (nextchr != -1) { > > The problem here is that the compiler hasn't noticed that it's > impossible to return something other than -1 from console_getch() > without initializing next_maybe_keycode. > > There are two possible reasons for this: > (1) your gcc is a bit old -- newer gcc are better at working > out this kind of thing. But you said on irc that you're using > gcc 10.2.0, which is new... > > (2) this is a variant of the problem with the system headers > that causes us to have to redefine assert() in osdep.h, only > with abort() (ie abort() is perhaps not marked as noreturn in > the system headers). If this theory is true, then changing > the abort() in console_getch() to instead be g_assert_not_reached() > would be a different way to avoid the warnings (and if that works > we should probably fix up abort() the way we do assert()). > Tried g_assert_not_reached still not fixes the issue, and I verified on debug build, either g_assert_not_reached or abort, the compiling error doesn't appear, the debug build are the build that configured with --enable-debug-info --enable-debug this compiling error only appear in release build. > > thanks > -- PMM >
diff --git a/ui/curses.c b/ui/curses.c index 12bc682cf9..e4f9588c3e 100644 --- a/ui/curses.c +++ b/ui/curses.c @@ -262,7 +262,7 @@ static int curses2foo(const int _curses2foo[], const int _curseskey2foo[], static void curses_refresh(DisplayChangeListener *dcl) { int chr, keysym, keycode, keycode_alt; - enum maybe_keycode maybe_keycode; + enum maybe_keycode maybe_keycode = CURSES_KEYCODE; curses_winch_check(); @@ -299,7 +299,7 @@ static void curses_refresh(DisplayChangeListener *dcl) /* alt or esc key */ if (keycode == 1) { - enum maybe_keycode next_maybe_keycode; + enum maybe_keycode next_maybe_keycode = CURSES_KEYCODE; int nextchr = console_getch(&next_maybe_keycode); if (nextchr != -1) {
This is the compiling error: ../ui/curses.c: In function 'curses_refresh': ../ui/curses.c:256:5: error: 'next_maybe_keycode' may be used uninitialized in this function [-Werror=maybe-uninitialized] 256 | curses2foo(_curses2keycode, _curseskey2keycode, chr, maybe_keycode) | ^~~~~~~~~~ ../ui/curses.c:302:32: note: 'next_maybe_keycode' was declared here 302 | enum maybe_keycode next_maybe_keycode; | ^~~~~~~~~~~~~~~~~~ ../ui/curses.c:256:5: error: 'maybe_keycode' may be used uninitialized in this function [-Werror=maybe-uninitialized] 256 | curses2foo(_curses2keycode, _curseskey2keycode, chr, maybe_keycode) | ^~~~~~~~~~ ../ui/curses.c:265:24: note: 'maybe_keycode' was declared here 265 | enum maybe_keycode maybe_keycode; | ^~~~~~~~~~~~~ cc1.exe: all warnings being treated as errors Signed-off-by: Yonggang Luo <luoyonggang@gmail.com> --- ui/curses.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)