On Wed, Sep 9, 2020 at 4:29 AM Peter Maydell <peter.mayd...@linaro.org> wrote:
> On Tue, 8 Sep 2020 at 19:56, Yonggang Luo <luoyongg...@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 <luoyongg...@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 > -- 此致 礼 罗勇刚 Yours sincerely, Yonggang Luo