re PR tree-optimization/80334 (Segfault when taking address of copy of unaligned struct)
2017-04-06 Richard Biener <rguenther@suse.de> PR tree-optimization/80334 * tree-ssa-loop-ivopts.c (rewrite_use_address): Properly preserve alignment of accesses. * g++.dg/torture/pr80334.C: New testcase. From-SVN: r246731
This commit is contained in:
parent
d9f8c5af8b
commit
09b63f67a1
@ -1,3 +1,9 @@
|
||||
2017-04-06 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/80334
|
||||
* tree-ssa-loop-ivopts.c (rewrite_use_address): Properly
|
||||
preserve alignment of accesses.
|
||||
|
||||
2017-04-06 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/80262
|
||||
|
@ -1,3 +1,8 @@
|
||||
2017-04-06 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/80334
|
||||
* g++.dg/torture/pr80334.C: New testcase.
|
||||
|
||||
2017-04-06 Martin Liska <mliska@suse.cz>
|
||||
|
||||
PR sanitizer/80166
|
||||
|
18
gcc/testsuite/g++.dg/torture/pr80334.C
Normal file
18
gcc/testsuite/g++.dg/torture/pr80334.C
Normal file
@ -0,0 +1,18 @@
|
||||
// { dg-do run }
|
||||
|
||||
struct A { alignas(16) char c; };
|
||||
struct B { A unpacked; char d; } __attribute__((packed));
|
||||
|
||||
char x;
|
||||
|
||||
int
|
||||
main()
|
||||
{
|
||||
alignas(16) B b[3];
|
||||
for (int i = 0; i < 3; i++) b[i].unpacked.c = 'a' + i;
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
auto a = new A(b[i].unpacked);
|
||||
x = a->c;
|
||||
}
|
||||
}
|
@ -7396,7 +7396,11 @@ rewrite_use_address (struct ivopts_data *data,
|
||||
base_hint = var_at_stmt (data->current_loop, cand, use->stmt);
|
||||
|
||||
iv = var_at_stmt (data->current_loop, cand, use->stmt);
|
||||
ref = create_mem_ref (&bsi, TREE_TYPE (*use->op_p), &aff,
|
||||
tree type = TREE_TYPE (*use->op_p);
|
||||
unsigned int align = get_object_alignment (*use->op_p);
|
||||
if (align != TYPE_ALIGN (type))
|
||||
type = build_aligned_type (type, align);
|
||||
ref = create_mem_ref (&bsi, type, &aff,
|
||||
reference_alias_ptr_type (*use->op_p),
|
||||
iv, base_hint, data->speed);
|
||||
copy_ref_info (ref, *use->op_p);
|
||||
|
Loading…
Reference in New Issue
Block a user