mirror of git://gcc.gnu.org/git/gcc.git
[expr.c] PR middle-end/71700: zero-extend sub-word value when widening constructor element
PR middle-end/71700 * expr.c (store_constructor): Mask sign-extended bits when widening sub-word constructor element at the start of a word. * gcc.c-torture/execute/pr71700.c: New test. From-SVN: r238248
This commit is contained in:
parent
5548d9cd19
commit
d6f7c125d8
|
|
@ -1,3 +1,9 @@
|
||||||
|
2016-07-12 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
|
||||||
|
|
||||||
|
PR middle-end/71700
|
||||||
|
* expr.c (store_constructor): Mask sign-extended bits when widening
|
||||||
|
sub-word constructor element at the start of a word.
|
||||||
|
|
||||||
2016-07-12 Martin Liska <mliska@suse.cz>
|
2016-07-12 Martin Liska <mliska@suse.cz>
|
||||||
|
|
||||||
* ira-build.c (mark_loops_for_removal): Properly iterate
|
* ira-build.c (mark_loops_for_removal): Properly iterate
|
||||||
|
|
|
||||||
|
|
@ -6281,6 +6281,13 @@ store_constructor (tree exp, rtx target, int cleared, HOST_WIDE_INT size,
|
||||||
type = lang_hooks.types.type_for_mode
|
type = lang_hooks.types.type_for_mode
|
||||||
(word_mode, TYPE_UNSIGNED (type));
|
(word_mode, TYPE_UNSIGNED (type));
|
||||||
value = fold_convert (type, value);
|
value = fold_convert (type, value);
|
||||||
|
/* Make sure the bits beyond the original bitsize are zero
|
||||||
|
so that we can correctly avoid extra zeroing stores in
|
||||||
|
later constructor elements. */
|
||||||
|
tree bitsize_mask
|
||||||
|
= wide_int_to_tree (type, wi::mask (bitsize, false,
|
||||||
|
BITS_PER_WORD));
|
||||||
|
value = fold_build2 (BIT_AND_EXPR, type, value, bitsize_mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (BYTES_BIG_ENDIAN)
|
if (BYTES_BIG_ENDIAN)
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
||||||
|
2016-07-12 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
|
||||||
|
|
||||||
|
PR middle-end/71700
|
||||||
|
* gcc.c-torture/execute/pr71700.c: New test.
|
||||||
|
|
||||||
2016-07-12 Steven Bosscher <steven@gcc.gnu.org>
|
2016-07-12 Steven Bosscher <steven@gcc.gnu.org>
|
||||||
Richard Biener <rguenther@suse.de>
|
Richard Biener <rguenther@suse.de>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
struct S
|
||||||
|
{
|
||||||
|
signed f0 : 16;
|
||||||
|
unsigned f1 : 1;
|
||||||
|
};
|
||||||
|
|
||||||
|
int b;
|
||||||
|
static struct S c[] = {{-1, 0}, {-1, 0}};
|
||||||
|
struct S d;
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
struct S e = c[0];
|
||||||
|
d = e;
|
||||||
|
if (d.f1 != 0)
|
||||||
|
__builtin_abort ();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue