[Bug sanitizer/85777] [7/8/9 Regression] -fsanitize=undefined makes a -Wmaybe-uninitialized warning disappear
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue May 15 07:31:00 GMT 2018
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.
More information about the Gcc-bugs
mailing list