https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85563
Bug ID: 85563 Summary: -Wmaybe-uninitialized false alarm regression with __builtin_unreachable and GCC 8 Product: gcc Version: 8.0.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: eggert at cs dot ucla.edu Target Milestone: --- When compiling Emacs with gcc (GCC) 8.0.1 20180324 (Red Hat 8.0.1-0.20) x86-64 I noticed a regression compared to previous GCC versions, a regression that causes a false alarm. Briefly, Emacs uses a statement like this: ((CONSP (Vframe_list)) ? (void) 0 : __builtin_unreachable ()); to tell Emacs that Vframe_list is a cons (CONSP is inline and side effect free), and then follows this with a loop: for ((tail) = Vframe_list; (CONSP (tail) && (frame1 = XCAR (tail), 1)); tail = XCDR (tail)) { loop body } which obviously must initialize frame1. In a later use of frame1, though, GCC 8.0.1 incorrectly complains: f.i: In function ‘delete_frame’: f.i:69688:7: warning: ‘frame1’ may be used uninitialized in this function [-Wmaybe-uninitialized] do_switch_frame (frame1, 0, 1, builtin_lisp_symbol (0)); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ where GCC 7 and earlier do not complain. To reproduce the problem, use the command: gcc -O2 -S -Wmaybe-uninitialized f.i on the attached file f.i. Although strictly speaking this isn't a bug since the "may be used uninitialized" is deliberately wishy-washy, still, it's an annoyance that I'll have to fiddle with Emacs source to pacify the misguided compiler here.