https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85777
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |diagnostic Priority|P3 |P2 Status|UNCONFIRMED |NEW Last reconfirmed| |2018-05-15 Target Milestone|--- |7.4 Summary|[7/8 Regression] |[7/8/9 Regression] |-fsanitize=undefined makes |-fsanitize=undefined makes |a -Wmaybe-uninitialized |a -Wmaybe-uninitialized |warning disappear |warning disappear Ever confirmed|0 |1 --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- Confirmed. I see that UBSAN_BOUNDS and UBSAN_OBJECT_SIZE have VDEFs. I also see that pass_ubsan preceeds (immediately) the early uninit pass for whatever reasons (but some instrumentations already happened before - UBSAN_OBJECT_SIZE is introduced by the pass though). So Index: gcc/passes.def =================================================================== --- gcc/passes.def (revision 259470) +++ gcc/passes.def (working copy) @@ -58,8 +58,8 @@ along with GCC; see the file COPYING3. NEXT_PASS (pass_fixup_cfg); NEXT_PASS (pass_build_ssa); NEXT_PASS (pass_warn_nonnull_compare); - NEXT_PASS (pass_ubsan); NEXT_PASS (pass_early_warn_uninitialized); + NEXT_PASS (pass_ubsan); NEXT_PASS (pass_nothrow); NEXT_PASS (pass_rebuild_cgraph_edges); POP_INSERT_PASSES () in addition to making the internal fns above ECF_NOVOPS. Index: gcc/internal-fn.def =================================================================== --- gcc/internal-fn.def (revision 260250) +++ gcc/internal-fn.def (working copy) @@ -246,13 +246,13 @@ DEF_INTERNAL_FN (LOOP_VECTORIZED, ECF_NO DEF_INTERNAL_FN (LOOP_DIST_ALIAS, ECF_NOVOPS | ECF_LEAF | ECF_NOTHROW, NULL) DEF_INTERNAL_FN (ANNOTATE, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) DEF_INTERNAL_FN (UBSAN_NULL, ECF_LEAF | ECF_NOTHROW, ".R.") -DEF_INTERNAL_FN (UBSAN_BOUNDS, ECF_LEAF | ECF_NOTHROW, NULL) +DEF_INTERNAL_FN (UBSAN_BOUNDS, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL) DEF_INTERNAL_FN (UBSAN_VPTR, ECF_LEAF | ECF_NOTHROW, ".RR..") DEF_INTERNAL_FN (UBSAN_CHECK_ADD, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) DEF_INTERNAL_FN (UBSAN_CHECK_SUB, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) DEF_INTERNAL_FN (UBSAN_CHECK_MUL, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) DEF_INTERNAL_FN (UBSAN_PTR, ECF_LEAF | ECF_NOTHROW, ".R.") -DEF_INTERNAL_FN (UBSAN_OBJECT_SIZE, ECF_LEAF | ECF_NOTHROW, NULL) +DEF_INTERNAL_FN (UBSAN_OBJECT_SIZE, ECF_LEAF | ECF_NOTHROW | ECF_NOVOPS, NULL) DEF_INTERNAL_FN (ABNORMAL_DISPATCHER, ECF_NORETURN, NULL) DEF_INTERNAL_FN (BUILTIN_EXPECT, ECF_CONST | ECF_LEAF | ECF_NOTHROW, NULL) DEF_INTERNAL_FN (ASAN_CHECK, ECF_TM_PURE | ECF_LEAF | ECF_NOTHROW, "..R..") More generally sanitizer instrumentation is expected to affect diagnostics, that really cannot be avoided. The above doesn't seem to help btw., probably because UBSAN keeps f aliased and in memory.