aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYvan Roux <yvan.roux@linaro.org>2015-12-28 12:06:31 +0100
committerLinaro Code Review <review@review.linaro.org>2016-01-12 15:20:36 +0000
commitd4b825e4125794fe16c45c49bae1cb79d7483d21 (patch)
tree5302e71ed1827e06e0b7c4107cbaf3847cc43f1c
parenta49af31a9eabf698ecf1bbf71dec73d71d67034b (diff)
gcc/
Backport from trunk r231758. 2015-12-17 Christian Bruel <christian.bruel@st.com> * tree.h (TYPE_MODE_RAW): New macro. * tree-streamer-out.c (pack_ts_type_common_value_fields): Replace TYPE_MODE by TYPE_MODE_RAW. Change-Id: Ie4f2e98e9c5c07ff40bd21e55db2f65565569cba
-rw-r--r--gcc/tree-streamer-out.c5
-rw-r--r--gcc/tree.h1
2 files changed, 5 insertions, 1 deletions
diff --git a/gcc/tree-streamer-out.c b/gcc/tree-streamer-out.c
index 0e5458b14f2..4a5fee74287 100644
--- a/gcc/tree-streamer-out.c
+++ b/gcc/tree-streamer-out.c
@@ -325,7 +325,10 @@ pack_ts_function_decl_value_fields (struct bitpack_d *bp, tree expr)
static void
pack_ts_type_common_value_fields (struct bitpack_d *bp, tree expr)
{
- bp_pack_machine_mode (bp, TYPE_MODE (expr));
+ /* for VECTOR_TYPE, TYPE_MODE reevaluates the mode using target_flags
+ not necessary valid in a global context.
+ Use the raw value previously set by layout_type. */
+ bp_pack_machine_mode (bp, TYPE_MODE_RAW (expr));
bp_pack_value (bp, TYPE_STRING_FLAG (expr), 1);
bp_pack_value (bp, TYPE_NO_FORCE_BLK (expr), 1);
bp_pack_value (bp, TYPE_NEEDS_CONSTRUCTING (expr), 1);
diff --git a/gcc/tree.h b/gcc/tree.h
index 9fe3ce61316..89c14d8645a 100644
--- a/gcc/tree.h
+++ b/gcc/tree.h
@@ -1650,6 +1650,7 @@ extern void protected_set_expr_location (tree, location_t);
#define TYPE_MAIN_VARIANT(NODE) (TYPE_CHECK (NODE)->type_common.main_variant)
#define TYPE_CONTEXT(NODE) (TYPE_CHECK (NODE)->type_common.context)
+#define TYPE_MODE_RAW(NODE) (TYPE_CHECK (NODE)->type_common.mode)
#define TYPE_MODE(NODE) \
(VECTOR_TYPE_P (TYPE_CHECK (NODE)) \
? vector_type_mode (NODE) : (NODE)->type_common.mode)