https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78128

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Blocks|                            |71002

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
The issue is

;; e_11(D)->ts.kind = _1;

(insn 20 19 0 (set (mem:SI (reg/f:DI 356) [4 e_11(D)->ts.kind+0 S4 A32])
        (reg:SI 340 [ _1 ])) "t.i":39 -1
     (nil))

vs.

;; _3 = BIT_FIELD_REF <MEM[(bt *)e_11(D)], 64, 0>;

(insn 21 20 0 (set (reg:DI 342 [ _3 ])
        (mem:DI (reg/v/f:DI 349 [ e ]) [3 MEM[(bt *)e_11(D)]+0 S8 A64]))
"t.i":40 -1
     (nil))

which use different alias sets.

Index: gcc/fold-const.c
===================================================================
--- gcc/fold-const.c    (revision 241509)
+++ gcc/fold-const.c    (working copy)
@@ -3809,7 +3809,8 @@ make_bit_field_ref (location_t loc, tree
 {
   tree result, bftype;

-  if (get_alias_set (inner) != get_alias_set (orig_inner))
+  if (! alias_set_subset_of (get_alias_set (orig_inner),
+                            get_alias_set (inner)))
     inner = fold_build2 (MEM_REF, TREE_TYPE (inner),
                         build_fold_addr_expr (inner),
                         build_int_cst

should fix it


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71002
[Bug 71002] [6 Regression] -fstrict-aliasing breaks Boost's short string
optimization implementation

Reply via email to