On 19.02.2016 20:04, Jakub Jelinek wrote: > On Fri, Feb 19, 2016 at 06:42:32PM +0000, Bernd Edlinger wrote: >> Hi, >> >> >>> --- gcc/expr.c.jj 2016-02-12 00:50:55.000000000 +0100 >>> +++ gcc/expr.c 2016-02-19 10:43:59.639162531 +0100 >>> @@ -6643,14 +6643,24 @@ store_field (rtx target, HOST_WIDE_INT b >>> /* Except for initialization of full bytes from a CONSTRUCTOR, which >>> we will handle specially below. */ >>> && !(TREE_CODE (exp) == CONSTRUCTOR >>> - && bitsize % BITS_PER_UNIT == 0)) >>> + && bitsize % BITS_PER_UNIT == 0) >>> + /* And except for bitwise copying of TREE_ADDRESSABLE types, >>> + where the FIELD_DECL has the right bitsize, but TREE_TYPE (exp) >>> + includes some extra padding. */ >>> + && (!TREE_ADDRESSABLE (TREE_TYPE (exp)) >>> + || TREE_CODE (exp) != COMPONENT_REF >>> + || TREE_CODE (DECL_SIZE (TREE_OPERAND (exp, 1))) != INTEGER_CST >>> + || (bitsize % BITS_PER_UNIT != 0) >>> + || (bitpos % BITS_PER_UNIT != 0) >>> + || (compare_tree_int (DECL_SIZE (TREE_OPERAND (exp, 1)), bitsize) >>> + != 0))) >>> /* If we are expanding a MEM_REF of a non-BLKmode non-addressable >>> decl we must use bitfield operations. */ >> >> isn't the indentation of the new block wrong? > > No, I think it is correct. > > Jakub >
but you are just adding another term to this expression: !(TREE_CODE (exp) == CONSTRUCTOR && bitsize % BITS_PER_UNIT == 0) so the result should look like !(TREE_CODE (exp) == CONSTRUCTOR && bitsize % BITS_PER_UNIT == 0 && (!TREE_ADDRESSABLE ... || TREE_CODE () ... ... || (compare_tree_int ... != 0))) Bernd.