[Bug libstdc++/105562] std::function<bool(char)>::_M_invoker may be used uninitialized in std::regex move with -fno-strict-aliasing
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu May 12 10:07:05 GMT 2022
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105562
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |missed-optimization
Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot gnu.org
Status|NEW |ASSIGNED
--- Comment #12 from Richard Biener <rguenth at gcc dot gnu.org> ---
I'm going to test this.
diff --git a/gcc/tree-ssa-sccvn.cc b/gcc/tree-ssa-sccvn.cc
index d4d0aba880c..c9965549fce 100644
--- a/gcc/tree-ssa-sccvn.cc
+++ b/gcc/tree-ssa-sccvn.cc
@@ -2620,6 +2620,16 @@ vn_reference_lookup_3 (ao_ref *ref, tree vuse, void
*data_,
return NULL;
}
+ /* When the def is a CLOBBER we can optimistically disambiguate
+ against it since any overlap it would be undefined behavior.
+ Avoid this for obvious must aliases to save compile-time though. */
+ if (gimple_clobber_p (def_stmt)
+ && !operand_equal_p (ao_ref_base (&lhs_ref), base, OEP_ADDRESS_OF))
+ {
+ *disambiguate_only = TR_DISAMBIGUATE;
+ return NULL;
+ }
+
/* Besides valueizing the LHS we can also use access-path based
disambiguation on the original non-valueized ref. */
if (!ref->ref
More information about the Gcc-bugs
mailing list