Commit 3022186a by Richard Biener Committed by Richard Biener

re PR middle-end/70526 (GCC 6 miscompiles Firefox JIT compiler)

2016-04-05  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/70526
	* tree-sra.c (build_ref_for_offset): Use prev_base to
	extract the alias pointer type.

	* g++.dg/torture/pr70526.C: New testcase.

From-SVN: r234749
parent ac6929b5
2016-04-05 Richard Biener <rguenther@suse.de> 2016-04-05 Richard Biener <rguenther@suse.de>
PR tree-optimization/70526
* tree-sra.c (build_ref_for_offset): Use prev_base to
extract the alias pointer type.
2016-04-05 Richard Biener <rguenther@suse.de>
* dse.c (struct store_info): Remove alias_set member. * dse.c (struct store_info): Remove alias_set member.
(struct read_info_type): Likewise. (struct read_info_type): Likewise.
(clear_alias_group, clear_alias_mode_table, clear_alias_mode_holder, (clear_alias_group, clear_alias_mode_table, clear_alias_mode_holder,
......
2016-04-05 Richard Biener <rguenther@suse.de>
PR tree-optimization/70526
* g++.dg/torture/pr70526.C: New testcase.
2016-04-05 Jakub Jelinek <jakub@redhat.com> 2016-04-05 Jakub Jelinek <jakub@redhat.com>
PR target/70525 PR target/70525
......
// { dg-do run }
typedef unsigned uint32_t;
template<typename T>
struct AlignedStorage2
{
char mBytes[sizeof(T)];
const T* addr() const { return reinterpret_cast<const T*>(mBytes); }
T* addr() { return reinterpret_cast<T*>(mBytes); }
};
struct Register {
uint32_t reg_;
};
class TypedOrValueRegister
{
AlignedStorage2<Register> typed;
__attribute__((noinline)) Register& dataTyped() { return *typed.addr(); }
public:
TypedOrValueRegister(Register reg)
{
dataTyped() = reg;
}
Register typedReg() const { return *typed.addr(); }
};
int main() {
Register reg = { 10u };
if (TypedOrValueRegister(reg).typedReg().reg_ != 10)
__builtin_abort();
return 0;
}
...@@ -1673,7 +1673,7 @@ build_ref_for_offset (location_t loc, tree base, HOST_WIDE_INT offset, ...@@ -1673,7 +1673,7 @@ build_ref_for_offset (location_t loc, tree base, HOST_WIDE_INT offset,
} }
else else
{ {
off = build_int_cst (reference_alias_ptr_type (base), off = build_int_cst (reference_alias_ptr_type (prev_base),
base_offset + offset / BITS_PER_UNIT); base_offset + offset / BITS_PER_UNIT);
base = build_fold_addr_expr (unshare_expr (base)); base = build_fold_addr_expr (unshare_expr (base));
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment