From a4cf4b647cd239cc57d88ed82f7243e7efdf43f5 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Tue, 7 Feb 2017 11:29:06 +0000 Subject: [PATCH] re PR tree-optimization/79256 (FAIL: gcc.dg/vect/pr25413a.c execution test) 2017-02-07 Richard Biener PR tree-optimization/79256 PR middle-end/79278 * builtins.c (get_object_alignment_2): Use min_align_of_type to extract alignment for MEM_REFs to honor BIGGEST_FIELD_ALIGNMENT and ADJUST_FIELD_ALIGN. * doc/tm.texi.in (ADJUST_FIELD_ALIGN): Adjust to take additional type parameter. * doc/tm.texi: Regenerate. * stor-layout.c (layout_decl): Adjust. (update_alignment_for_field): Likewise. (place_field): Likewise. (min_align_of_type): Likewise. * config/arc/arc.h (ADJUST_FIELD_ALIGN): Adjust. * config/epiphany/epiphany.h (ADJUST_FIELD_ALIGN): Likewise. * config/epiphany/epiphany.c (epiphany_adjust_field_align): Likewise. * config/frv/frv.h (ADJUST_FIELD_ALIGN): Likewise. * config/frv/frv.c (frv_adjust_field_align): Likewise. * config/i386/i386.h (ADJUST_FIELD_ALIGN): Likewise. * config/i386/i386.c (x86_field_alignment): Likewise. * config/rs6000/aix.h (ADJUST_FIELD_ALIGN): Likewise. * config/rs6000/darwin.h (ADJUST_FIELD_ALIGN): Likewise. * config/rs6000/freebsd64.h (ADJUST_FIELD_ALIGN): Likewise. * config/rs6000/linux64.h (ADJUST_FIELD_ALIGN): Likewise. * config/rs6000/sysv4.h (ADJUST_FIELD_ALIGN): Likewise. * config/rs6000/rs6000.c (rs6000_special_adjust_field_align_p): Likewise. go/ * go-backend.c (go_field_alignment): Adjust. libobjc/ * encoding.c (objc_layout_structure_next_member): Adjust ADJUST_FIELD_ALIGN usage. Revert 2017-01-30 Richard Biener PR tree-optimization/79256 * targhooks.c (default_builtin_vector_alignment_reachable): Honor BIGGEST_FIELD_ALIGNMENT and ADJUST_FIELD_ALIGN to fix up bogus alignment on TYPE. From-SVN: r245245 --- gcc/ChangeLog | 38 ++++++++++++++++++++++++++++++++++ gcc/builtins.c | 6 ++++-- gcc/config/arc/arc.h | 4 ++-- gcc/config/epiphany/epiphany.c | 6 +++--- gcc/config/epiphany/epiphany.h | 4 ++-- gcc/config/frv/frv.c | 3 ++- gcc/config/frv/frv.h | 2 +- gcc/config/i386/i386.c | 3 +-- gcc/config/i386/i386.h | 4 ++-- gcc/config/rs6000/aix.h | 4 ++-- gcc/config/rs6000/darwin.h | 2 +- gcc/config/rs6000/freebsd64.h | 6 +++--- gcc/config/rs6000/linux64.h | 6 +++--- gcc/config/rs6000/rs6000.c | 4 ++-- gcc/config/rs6000/sysv4.h | 4 ++-- gcc/doc/tm.texi | 12 ++++++----- gcc/doc/tm.texi.in | 12 ++++++----- gcc/go/ChangeLog | 6 ++++++ gcc/go/go-backend.c | 6 +----- gcc/stor-layout.c | 13 ++++++------ gcc/targhooks.c | 9 ++------ libobjc/ChangeLog | 7 +++++++ libobjc/encoding.c | 2 +- 23 files changed, 105 insertions(+), 58 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8affcaba430..257cd21accb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,41 @@ +2017-02-07 Richard Biener + + PR tree-optimization/79256 + PR middle-end/79278 + * builtins.c (get_object_alignment_2): Use min_align_of_type + to extract alignment for MEM_REFs to honor BIGGEST_FIELD_ALIGNMENT + and ADJUST_FIELD_ALIGN. + + * doc/tm.texi.in (ADJUST_FIELD_ALIGN): Adjust to take additional + type parameter. + * doc/tm.texi: Regenerate. + * stor-layout.c (layout_decl): Adjust. + (update_alignment_for_field): Likewise. + (place_field): Likewise. + (min_align_of_type): Likewise. + * config/arc/arc.h (ADJUST_FIELD_ALIGN): Adjust. + * config/epiphany/epiphany.h (ADJUST_FIELD_ALIGN): Likewise. + * config/epiphany/epiphany.c (epiphany_adjust_field_align): Likewise. + * config/frv/frv.h (ADJUST_FIELD_ALIGN): Likewise. + * config/frv/frv.c (frv_adjust_field_align): Likewise. + * config/i386/i386.h (ADJUST_FIELD_ALIGN): Likewise. + * config/i386/i386.c (x86_field_alignment): Likewise. + * config/rs6000/aix.h (ADJUST_FIELD_ALIGN): Likewise. + * config/rs6000/darwin.h (ADJUST_FIELD_ALIGN): Likewise. + * config/rs6000/freebsd64.h (ADJUST_FIELD_ALIGN): Likewise. + * config/rs6000/linux64.h (ADJUST_FIELD_ALIGN): Likewise. + * config/rs6000/sysv4.h (ADJUST_FIELD_ALIGN): Likewise. + * config/rs6000/rs6000.c (rs6000_special_adjust_field_align_p): + Likewise. + + Revert + 2017-01-30 Richard Biener + + PR tree-optimization/79256 + * targhooks.c (default_builtin_vector_alignment_reachable): Honor + BIGGEST_FIELD_ALIGNMENT and ADJUST_FIELD_ALIGN to fix up bogus + alignment on TYPE. + 2017-02-07 Toma Tabacu * config/mips/mips.c (mips_expand_builtin_insn): Convert the QImode diff --git a/gcc/builtins.c b/gcc/builtins.c index 0a0e8b9e2fa..f3bee5bfc1a 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -334,9 +334,11 @@ get_object_alignment_2 (tree exp, unsigned int *alignp, Do so only if get_pointer_alignment_1 did not reveal absolute alignment knowledge and if using that alignment would improve the situation. */ + unsigned int talign; if (!addr_p && !known_alignment - && TYPE_ALIGN (TREE_TYPE (exp)) > align) - align = TYPE_ALIGN (TREE_TYPE (exp)); + && (talign = min_align_of_type (TREE_TYPE (exp)) * BITS_PER_UNIT) + && talign > align) + align = talign; else { /* Else adjust bitpos accordingly. */ diff --git a/gcc/config/arc/arc.h b/gcc/config/arc/arc.h index 9cf7668e985..b6464f18007 100644 --- a/gcc/config/arc/arc.h +++ b/gcc/config/arc/arc.h @@ -317,8 +317,8 @@ if (GET_MODE_CLASS (MODE) == MODE_INT \ construct. */ -#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \ -(TYPE_MODE (strip_array_types (TREE_TYPE (FIELD))) == DFmode \ +#define ADJUST_FIELD_ALIGN(FIELD, TYPE, COMPUTED) \ +(TYPE_MODE (strip_array_types (TYPE)) == DFmode \ ? MIN ((COMPUTED), 32) : (COMPUTED)) diff --git a/gcc/config/epiphany/epiphany.c b/gcc/config/epiphany/epiphany.c index f8fa9bde7aa..41864f2c502 100644 --- a/gcc/config/epiphany/epiphany.c +++ b/gcc/config/epiphany/epiphany.c @@ -2855,12 +2855,12 @@ epiphany_special_round_type_align (tree type, unsigned computed, arrays-at-the-end-of-structs work, like for struct gcov_fn_info in libgcov.c . */ unsigned -epiphany_adjust_field_align (tree field, unsigned computed) +epiphany_adjust_field_align (tree type, unsigned computed) { if (computed == 32 - && TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE) + && TREE_CODE (type) == ARRAY_TYPE) { - tree elmsz = TYPE_SIZE (TREE_TYPE (TREE_TYPE (field))); + tree elmsz = TYPE_SIZE (TREE_TYPE (type)); if (!tree_fits_uhwi_p (elmsz) || tree_to_uhwi (elmsz) >= 32) return 64; diff --git a/gcc/config/epiphany/epiphany.h b/gcc/config/epiphany/epiphany.h index a9249a44693..d20d400de7c 100644 --- a/gcc/config/epiphany/epiphany.h +++ b/gcc/config/epiphany/epiphany.h @@ -187,8 +187,8 @@ along with GCC; see the file COPYING3. If not see (SPECIFIED_ALIGN)) \ : MAX ((MANGLED_ALIGN), (SPECIFIED_ALIGN))) -#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \ - epiphany_adjust_field_align((FIELD), (COMPUTED)) +#define ADJUST_FIELD_ALIGN(FIELD, TYPE, COMPUTED) \ + epiphany_adjust_field_align((TYPE), (COMPUTED)) /* Layout of source language data types. */ diff --git a/gcc/config/frv/frv.c b/gcc/config/frv/frv.c index a5c3313f6e8..0918b9835b9 100644 --- a/gcc/config/frv/frv.c +++ b/gcc/config/frv/frv.c @@ -6482,7 +6482,8 @@ int frv_adjust_field_align (tree field, int computed) { /* Make sure that the bitfield is not wider than the type. */ - if (DECL_BIT_FIELD (field) + if (field + && DECL_BIT_FIELD (field) && !DECL_ARTIFICIAL (field)) { tree parent = DECL_CONTEXT (field); diff --git a/gcc/config/frv/frv.h b/gcc/config/frv/frv.h index 8fcb17054dc..4acaabb1a06 100644 --- a/gcc/config/frv/frv.h +++ b/gcc/config/frv/frv.h @@ -331,7 +331,7 @@ alignment computed in the usual way is COMPUTED. GCC uses this value instead of the value in `BIGGEST_ALIGNMENT' or `BIGGEST_FIELD_ALIGNMENT', if defined, for structure fields only. */ -#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \ +#define ADJUST_FIELD_ALIGN(FIELD, TYPE, COMPUTED) \ frv_adjust_field_align (FIELD, COMPUTED) #endif diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 3a659458ab0..d7dce4be97c 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -41691,10 +41691,9 @@ x86_file_start (void) } int -x86_field_alignment (tree field, int computed) +x86_field_alignment (tree type, int computed) { machine_mode mode; - tree type = TREE_TYPE (field); if (TARGET_64BIT || TARGET_ALIGN_DOUBLE) return computed; diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index aeacf0f29da..f225b3eee9d 100644 --- a/gcc/config/i386/i386.h +++ b/gcc/config/i386/i386.h @@ -847,8 +847,8 @@ extern const char *host_detect_local_cpu (int argc, const char **argv); #define BIGGEST_FIELD_ALIGNMENT 32 #endif #else -#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \ - x86_field_alignment ((FIELD), (COMPUTED)) +#define ADJUST_FIELD_ALIGN(FIELD, TYPE, COMPUTED) \ + x86_field_alignment ((TYPE), (COMPUTED)) #endif /* If defined, a C expression to compute the alignment given to a diff --git a/gcc/config/rs6000/aix.h b/gcc/config/rs6000/aix.h index 51801a2a3db..b90e2b06519 100644 --- a/gcc/config/rs6000/aix.h +++ b/gcc/config/rs6000/aix.h @@ -218,9 +218,9 @@ /* This now supports a natural alignment mode. */ /* AIX word-aligns FP doubles but doubleword-aligns 64-bit ints. */ -#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \ +#define ADJUST_FIELD_ALIGN(FIELD, TYPE, COMPUTED) \ ((TARGET_ALIGN_NATURAL == 0 \ - && TYPE_MODE (strip_array_types (TREE_TYPE (FIELD))) == DFmode) \ + && TYPE_MODE (strip_array_types (TYPE)) == DFmode) \ ? MIN ((COMPUTED), 32) \ : (COMPUTED)) diff --git a/gcc/config/rs6000/darwin.h b/gcc/config/rs6000/darwin.h index 397ab1cc3cf..61e5e836de0 100644 --- a/gcc/config/rs6000/darwin.h +++ b/gcc/config/rs6000/darwin.h @@ -319,7 +319,7 @@ extern int darwin_emit_branch_islands; suppressed for vector and long double items (both 128 in size). There is a dummy use of the FIELD argument to avoid an unused variable warning (see PR59496). */ -#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \ +#define ADJUST_FIELD_ALIGN(FIELD, TYPE, COMPUTED) \ ((void) (FIELD), \ (TARGET_ALIGN_NATURAL \ ? (COMPUTED) \ diff --git a/gcc/config/rs6000/freebsd64.h b/gcc/config/rs6000/freebsd64.h index 8f4bb615fed..d75ac2b9a5d 100644 --- a/gcc/config/rs6000/freebsd64.h +++ b/gcc/config/rs6000/freebsd64.h @@ -365,12 +365,12 @@ extern int dot_symbols; /* PowerPC64 Linux word-aligns FP doubles when -malign-power is given. */ #undef ADJUST_FIELD_ALIGN -#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \ - (rs6000_special_adjust_field_align_p ((FIELD), (COMPUTED)) \ +#define ADJUST_FIELD_ALIGN(FIELD, TYPE, COMPUTED) \ + (rs6000_special_adjust_field_align_p ((TYPE), (COMPUTED)) \ ? 128 \ : (TARGET_64BIT \ && TARGET_ALIGN_NATURAL == 0 \ - && TYPE_MODE (strip_array_types (TREE_TYPE (FIELD))) == DFmode) \ + && TYPE_MODE (strip_array_types (TYPE)) == DFmode) \ ? MIN ((COMPUTED), 32) \ : (COMPUTED)) diff --git a/gcc/config/rs6000/linux64.h b/gcc/config/rs6000/linux64.h index da0e5759826..71e35b709ad 100644 --- a/gcc/config/rs6000/linux64.h +++ b/gcc/config/rs6000/linux64.h @@ -292,12 +292,12 @@ extern int dot_symbols; /* PowerPC64 Linux word-aligns FP doubles when -malign-power is given. */ #undef ADJUST_FIELD_ALIGN -#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \ - (rs6000_special_adjust_field_align_p ((FIELD), (COMPUTED)) \ +#define ADJUST_FIELD_ALIGN(FIELD, TYPE, COMPUTED) \ + (rs6000_special_adjust_field_align_p ((TYPE), (COMPUTED)) \ ? 128 \ : (TARGET_64BIT \ && TARGET_ALIGN_NATURAL == 0 \ - && TYPE_MODE (strip_array_types (TREE_TYPE (FIELD))) == DFmode) \ + && TYPE_MODE (strip_array_types (TYPE)) == DFmode) \ ? MIN ((COMPUTED), 32) \ : (COMPUTED)) diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 37e5458f30d..f1dec8c3644 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -7975,9 +7975,9 @@ rs6000_data_alignment (tree type, unsigned int align, enum data_align how) /* Previous GCC releases forced all vector types to have 16-byte alignment. */ bool -rs6000_special_adjust_field_align_p (tree field, unsigned int computed) +rs6000_special_adjust_field_align_p (tree type, unsigned int computed) { - if (TARGET_ALTIVEC && TREE_CODE (TREE_TYPE (field)) == VECTOR_TYPE) + if (TARGET_ALTIVEC && TREE_CODE (type) == VECTOR_TYPE) { if (computed != 128) { diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h index a5abeee02e4..de386291a51 100644 --- a/gcc/config/rs6000/sysv4.h +++ b/gcc/config/rs6000/sysv4.h @@ -298,8 +298,8 @@ do { \ /* An expression for the alignment of a structure field FIELD if the alignment computed in the usual way is COMPUTED. */ -#define ADJUST_FIELD_ALIGN(FIELD, COMPUTED) \ - (rs6000_special_adjust_field_align_p ((FIELD), (COMPUTED)) \ +#define ADJUST_FIELD_ALIGN(FIELD, TYPE, COMPUTED) \ + (rs6000_special_adjust_field_align_p ((TYPE), (COMPUTED)) \ ? 128 : COMPUTED) #undef BIGGEST_FIELD_ALIGNMENT diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index b34ee03278b..348fd6806bd 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -1042,13 +1042,15 @@ structure and union fields only, unless the field alignment has been set by the @code{__attribute__ ((aligned (@var{n})))} construct. @end defmac -@defmac ADJUST_FIELD_ALIGN (@var{field}, @var{computed}) -An expression for the alignment of a structure field @var{field} if the -alignment computed in the usual way (including applying of -@code{BIGGEST_ALIGNMENT} and @code{BIGGEST_FIELD_ALIGNMENT} to the +@defmac ADJUST_FIELD_ALIGN (@var{field}, @var{type}, @var{computed}) +An expression for the alignment of a structure field @var{field} of +type @var{type} if the alignment computed in the usual way (including +applying of @code{BIGGEST_ALIGNMENT} and @code{BIGGEST_FIELD_ALIGNMENT} to the alignment) is @var{computed}. It overrides alignment only if the field alignment has not been set by the -@code{__attribute__ ((aligned (@var{n})))} construct. +@code{__attribute__ ((aligned (@var{n})))} construct. Note that @var{field} +may be @code{NULL_TREE} in case we just query for the minimum alignment +of a field of type @var{type} in structure context. @end defmac @defmac MAX_STACK_ALIGNMENT diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in index 756c1182493..6cde83c7a21 100644 --- a/gcc/doc/tm.texi.in +++ b/gcc/doc/tm.texi.in @@ -990,13 +990,15 @@ structure and union fields only, unless the field alignment has been set by the @code{__attribute__ ((aligned (@var{n})))} construct. @end defmac -@defmac ADJUST_FIELD_ALIGN (@var{field}, @var{computed}) -An expression for the alignment of a structure field @var{field} if the -alignment computed in the usual way (including applying of -@code{BIGGEST_ALIGNMENT} and @code{BIGGEST_FIELD_ALIGNMENT} to the +@defmac ADJUST_FIELD_ALIGN (@var{field}, @var{type}, @var{computed}) +An expression for the alignment of a structure field @var{field} of +type @var{type} if the alignment computed in the usual way (including +applying of @code{BIGGEST_ALIGNMENT} and @code{BIGGEST_FIELD_ALIGNMENT} to the alignment) is @var{computed}. It overrides alignment only if the field alignment has not been set by the -@code{__attribute__ ((aligned (@var{n})))} construct. +@code{__attribute__ ((aligned (@var{n})))} construct. Note that @var{field} +may be @code{NULL_TREE} in case we just query for the minimum alignment +of a field of type @var{type} in structure context. @end defmac @defmac MAX_STACK_ALIGNMENT diff --git a/gcc/go/ChangeLog b/gcc/go/ChangeLog index 8e37e8b3e01..687c8d68992 100644 --- a/gcc/go/ChangeLog +++ b/gcc/go/ChangeLog @@ -1,3 +1,9 @@ +2017-02-07 Richard Biener + + PR tree-optimization/79256 + PR middle-end/79278 + * go-backend.c (go_field_alignment): Adjust. + 2017-01-11 Than McIntosh * go-gcc.cc (conditional_expression): Add Bfunction parameter. diff --git a/gcc/go/go-backend.c b/gcc/go/go-backend.c index 1705b849550..d60a79e2961 100644 --- a/gcc/go/go-backend.c +++ b/gcc/go/go-backend.c @@ -71,11 +71,7 @@ go_field_alignment (tree t) #endif #ifdef ADJUST_FIELD_ALIGN - { - tree field ATTRIBUTE_UNUSED; - field = build_decl (UNKNOWN_LOCATION, FIELD_DECL, NULL, t); - v = ADJUST_FIELD_ALIGN (field, v); - } + v = ADJUST_FIELD_ALIGN (NULL_TREE, t, v); #endif return v / BITS_PER_UNIT; diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c index 7ad34f792df..d0beebf0686 100644 --- a/gcc/stor-layout.c +++ b/gcc/stor-layout.c @@ -718,7 +718,8 @@ layout_decl (tree decl, unsigned int known_align) (unsigned) BIGGEST_FIELD_ALIGNMENT)); #endif #ifdef ADJUST_FIELD_ALIGN - SET_DECL_ALIGN (decl, ADJUST_FIELD_ALIGN (decl, DECL_ALIGN (decl))); + SET_DECL_ALIGN (decl, ADJUST_FIELD_ALIGN (decl, TREE_TYPE (decl), + DECL_ALIGN (decl))); #endif } @@ -1032,7 +1033,7 @@ update_alignment_for_field (record_layout_info rli, tree field, #ifdef ADJUST_FIELD_ALIGN if (! TYPE_USER_ALIGN (type)) - type_align = ADJUST_FIELD_ALIGN (field, type_align); + type_align = ADJUST_FIELD_ALIGN (field, type, type_align); #endif /* Targets might chose to handle unnamed and hence possibly @@ -1260,7 +1261,7 @@ place_field (record_layout_info rli, tree field) #ifdef ADJUST_FIELD_ALIGN if (! TYPE_USER_ALIGN (type)) - type_align = ADJUST_FIELD_ALIGN (field, type_align); + type_align = ADJUST_FIELD_ALIGN (field, type, type_align); #endif /* A bit field may not span more units of alignment of its type @@ -1303,7 +1304,7 @@ place_field (record_layout_info rli, tree field) #ifdef ADJUST_FIELD_ALIGN if (! TYPE_USER_ALIGN (type)) - type_align = ADJUST_FIELD_ALIGN (field, type_align); + type_align = ADJUST_FIELD_ALIGN (field, type, type_align); #endif if (maximum_field_alignment != 0) @@ -2411,9 +2412,7 @@ min_align_of_type (tree type) #endif unsigned int field_align = align; #ifdef ADJUST_FIELD_ALIGN - tree field = build_decl (UNKNOWN_LOCATION, FIELD_DECL, NULL_TREE, type); - field_align = ADJUST_FIELD_ALIGN (field, field_align); - ggc_free (field); + field_align = ADJUST_FIELD_ALIGN (NULL_TREE, type, field_align); #endif align = MIN (align, field_align); } diff --git a/gcc/targhooks.c b/gcc/targhooks.c index bf5d0d4efd0..1cdec068ed8 100644 --- a/gcc/targhooks.c +++ b/gcc/targhooks.c @@ -1130,14 +1130,9 @@ default_vector_alignment (const_tree type) /* By default assume vectors of element TYPE require a multiple of the natural alignment of TYPE. TYPE is naturally aligned if IS_PACKED is false. */ bool -default_builtin_vector_alignment_reachable (const_tree type, bool is_packed) +default_builtin_vector_alignment_reachable (const_tree /*type*/, bool is_packed) { - if (is_packed) - return false; - - /* If TYPE can be differently aligned in field context we have to punt - as TYPE may have wrong TYPE_ALIGN here (PR79278). */ - return min_align_of_type (CONST_CAST_TREE (type)) == TYPE_ALIGN_UNIT (type); + return ! is_packed; } /* By default, assume that a target supports any factor of misalignment diff --git a/libobjc/ChangeLog b/libobjc/ChangeLog index 55987a3ff3b..f73c54747a4 100644 --- a/libobjc/ChangeLog +++ b/libobjc/ChangeLog @@ -1,3 +1,10 @@ +2017-02-07 Richard Biener + + PR tree-optimization/79256 + PR middle-end/79278 + * encoding.c (objc_layout_structure_next_member): Adjust + ADJUST_FIELD_ALIGN usage. + 2017-01-18 Matthias Klose PR libobjc/78697 diff --git a/libobjc/encoding.c b/libobjc/encoding.c index 3850477fdb6..6f18d604442 100644 --- a/libobjc/encoding.c +++ b/libobjc/encoding.c @@ -1159,7 +1159,7 @@ objc_layout_structure_next_member (struct objc_struct_layout *layout) desired_align = MIN (desired_align, BIGGEST_FIELD_ALIGNMENT); #endif #ifdef ADJUST_FIELD_ALIGN - desired_align = ADJUST_FIELD_ALIGN (type, desired_align); + desired_align = ADJUST_FIELD_ALIGN (type, type, desired_align); #endif /* Record must have at least as much alignment as any field.