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>
|
||||
|
||||
* 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
|
||||
(word_mode, TYPE_UNSIGNED (type));
|
||||
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)
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
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