https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117584
--- Comment #11 from Manjunath S Matti <mmatti at linux dot vnet.ibm.com> ---
(In reply to Manjunath S Matti from comment #10)
>
> But a few failures need looking into
>
> gcc.dg/torture/bitint-32.c -m64 -O0 only (passes -O2)
> gcc.dg/torture/bitint-33.c -m64 -O0 only (passes -O2)
> gcc.dg/torture/bitint-34.c -m64 -O0 only (passes -O2)
> gcc.dg/torture/bitint-35.c -m64 -O0 only (passes -O2)
> gcc.dg/torture/bitint-36.c -m64 -O0 only (passes -O2)
> gcc.dg/torture/bitint-37.c -m64 -O0 only (passes -O2)
> gcc.dg/torture/bitint-93.c -m64 both -O0 and -O2
> gcc.dg/torture/bitint-94.c -m64 both -O0 and -O2
>
> I am debugging these issues, which points me to a code block in
> gcc/gcc/gimple-lower-bitint.cc
>
> => tree src = build2 (MEM_REF, atype,
> build_fold_addr_expr (unshare_expr (obj)), off);
> g = gimple_build_call (fn, 3,
> build_fold_addr_expr (unshare_expr (obj)),
> src, build_int_cst (size_type_node,
> obj_nelts * m_limb_size));
The following change fixes this issue
--- a/gcc/gimple-lower-bitint.cc
+++ b/gcc/gimple-lower-bitint.cc
@@ -4579,8 +4579,8 @@ bitint_large_huge::finish_arith_overflow (tree var, tree
obj, tree type,
tree fn = builtin_decl_implicit (BUILT_IN_MEMMOVE);
tree off = build_int_cst (build_pointer_type (TREE_TYPE (obj)),
(nelts - obj_nelts) * m_limb_size);
- tree src = build2 (MEM_REF, atype,
- build_fold_addr_expr (unshare_expr (obj)), off);
+ tree src = build_fold_addr_expr (build2 (MEM_REF, atype,
+ build_fold_addr_expr (unshare_expr (obj)),
off));
g = gimple_build_call (fn, 3,
build_fold_addr_expr (unshare_expr (obj)),
src, build_int_cst (size_type_node,
Jakub is this the correct fix, can you please confirm.