https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80635
--- Comment #43 from Jason Merrill <jason at gcc dot gnu.org> --- (In reply to Jeffrey A. Law from comment #42) > I suspect the V_C_E inhibits tree-ssa-uninit.c code to avoid false > positives. If we know the range of the V_C_E operand is narrow enough that > it fits into the type of the result of the V_C_E, could we optimize the > V_C_E into a NOP_EXPR? We'd then forward propagate away the NOP_EXPR and > the result is something the suppression code in tree-ssa-uninit.c can > analyze better. Looks like the V_C_E comes from sra_modify_assign: if (!useless_type_conversion_p (TREE_TYPE (lhs), TREE_TYPE (rhs))) { => rhs = fold_build1_loc (loc, VIEW_CONVERT_EXPR, TREE_TYPE (lhs), rhs); Here rhs (the scalar replacement variable) has unsigned QI type and lhs has type bool. Changing the type of 'live' to unsigned char avoids the V_C_E and thus indeed the warning. This also works with the libstdc++ optional. This seems like an SRA problem with fields of type bool.