https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102276
--- Comment #14 from qinzhao at gcc dot gnu.org --- (In reply to Jakub Jelinek from comment #7) > and so for flag_auto_var_init > AUTO_INIT_UNINITIALIZED perhaps we could also > avoid warnings on: > 1) call to .DEFERRED_INIT > 2) call to __builtin_clear_padding if the second argument is present and > non-zero > 3) I guess we would need not to warn on a gimple assign store right after > the .DEFERRED_INIT call that has the lhs of .DEFERRED_INIT as rhs > anything else? After more study of the source code for maybe_warn_switch_unreachable, I realize that in order to emit the switch_unreachable warning, "warn_switch_unreachable_r" first is called to scan the switch sequence and saved the FIRST "REAL" gimple stmt. then it will check this FIRST "REAL" stmt to see whether it's the LABEL, if it's not, then report the switch unreachable warning. So, we only need to consider the FIRST "REAL" gimple for the above 3 cases. For all the 3 cases, the FIRST "REAL" gimple is a call to .DEFERRED_INIT. So, inside maybe_warn_switch_unreachable, we only need to check whether the FIRST gimple is a cal .DEFERRED_INIT, that's enough.