------- Comment #7 from rguenth at gcc dot gnu dot org 2007-12-08 00:03 ------- Because the temporary object D.2360 is indeed artificial. If you disable that filtering you get (finally)
t.ii: In function 'const QString& staticQString(const QString&)': t.ii:110: warning: likely type-punning may break strict-aliasing rules: object '*{unknown}' of main type 'QHash<QString, bool>::const_iterator' is referenced at or around t.ii:110 and may be aliased to object '{unknown}' of main type 'QHash<QString, bool>::iterator' which is referenced at or around t.ii:95. For reference: Index: tree-ssa-alias-warnings.c =================================================================== --- tree-ssa-alias-warnings.c (revision 130692) +++ tree-ssa-alias-warnings.c (working copy) @@ -866,11 +866,6 @@ nonstandard_alias_p (tree ptr, tree alia if (var_ann (get_ssa_base (alias))->escape_mask != NO_ESCAPE) return false; - /* XXX: don't get into structures for now. It brings much complication - and little benefit. */ - if (struct_class_union_p (ptr_type) || struct_class_union_p (alias_type)) - return false; - /* If they are both SSA names of artificials, let it go, the warning is too confusing. */ if (find_first_artificial_name (ptr) && find_first_artificial_name (alias)) @@ -923,7 +918,7 @@ dsa_named_for (tree ptr) if (nonstandard_alias_p (ptr, alias, false)) strict_aliasing_warn (SSA_NAME_DEF_STMT (ptr), - ptr, true, alias, false, true); + ptr, true, alias, false, false); } } } -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34385