From 7fa6a965355c27a6e493bdcfd285ac622137bf0a Mon Sep 17 00:00:00 2001 From: Prathamesh Kulkarni Date: Sat, 26 Nov 2016 10:41:55 +0000 Subject: [PATCH] tree.c (build_common_tree_nodes): Initialize ptrdiff_type_node. 2016-11-26 Prathamesh Kulkarni * tree.c (build_common_tree_nodes): Initialize ptrdiff_type_node. (free_lang_data): Remove assignment to ptrdiff_type_node. c-family/ * c-common.c (c_common_nodes_and_builtins): Remove initialization of ptrdiff_type_node. lto/ * lto-lang.c (lto_init): Remove initialization of ptrdiff_type_node. From-SVN: r242888 --- gcc/ChangeLog | 5 +++++ gcc/c-family/ChangeLog | 5 +++++ gcc/c-family/c-common.c | 2 -- gcc/lto/ChangeLog | 4 ++++ gcc/lto/lto-lang.c | 2 -- gcc/tree.c | 25 ++++++++++++++++++++++++- 6 files changed, 38 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index bd9929b802c..80124c20910 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2016-11-26 Prathamesh Kulkarni + + * tree.c (build_common_tree_nodes): Initialize ptrdiff_type_node. + (free_lang_data): Remove assignment to ptrdiff_type_node. + 2016-11-25 Jakub Jelinek PR rtl-optimization/78526 diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index b2f712f5256..183493d6e3a 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,8 @@ +2016-11-26 Prathamesh Kulkarni + + * c-common.c (c_common_nodes_and_builtins): Remove initialization of + ptrdiff_type_node; + 2016-11-23 James Greenhalgh * c-common.c (excess_precision_mode_join): New. diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index 62174a9eaa5..0749361fb44 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -4475,8 +4475,6 @@ c_common_nodes_and_builtins (void) default_function_type = build_varargs_function_type_list (integer_type_node, NULL_TREE); - ptrdiff_type_node - = TREE_TYPE (identifier_global_value (get_identifier (PTRDIFF_TYPE))); unsigned_ptrdiff_type_node = c_common_unsigned_type (ptrdiff_type_node); lang_hooks.decls.pushdecl diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog index cf65f022886..7957b2b7def 100644 --- a/gcc/lto/ChangeLog +++ b/gcc/lto/ChangeLog @@ -1,3 +1,7 @@ +2016-11-26 Prathamesh Kulkarni + + * lto-lang.c (lto_init): Remove initialization of ptrdiff_type_node. + 2016-11-23 Richard Biener PR lto/78472 diff --git a/gcc/lto/lto-lang.c b/gcc/lto/lto-lang.c index a5f04ba8e72..58f6e0c747e 100644 --- a/gcc/lto/lto-lang.c +++ b/gcc/lto/lto-lang.c @@ -1271,8 +1271,6 @@ lto_init (void) gcc_assert (TYPE_MAIN_VARIANT (const_tm_ptr_type_node) == const_ptr_type_node); - ptrdiff_type_node = integer_type_node; - lto_build_c_type_nodes (); gcc_assert (va_list_type_node); diff --git a/gcc/tree.c b/gcc/tree.c index dd6ef639798..0f0e6753b19 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -6006,7 +6006,6 @@ free_lang_data (void) free_lang_data_in_cgraph (); /* Create gimple variants for common types. */ - ptrdiff_type_node = integer_type_node; fileptr_type_node = ptr_type_node; const_tm_ptr_type_node = const_ptr_type_node; @@ -10314,6 +10313,30 @@ build_common_tree_nodes (bool signed_char) gcc_unreachable (); } + /* Define what type to use for ptrdiff_t. */ + if (strcmp (PTRDIFF_TYPE, "int") == 0) + ptrdiff_type_node = integer_type_node; + else if (strcmp (PTRDIFF_TYPE, "long int") == 0) + ptrdiff_type_node = long_integer_type_node; + else if (strcmp (PTRDIFF_TYPE, "long long int") == 0) + ptrdiff_type_node = long_long_integer_type_node; + else if (strcmp (PTRDIFF_TYPE, "short int") == 0) + ptrdiff_type_node = short_integer_type_node; + else + { + ptrdiff_type_node = NULL_TREE; + for (int i = 0; i < NUM_INT_N_ENTS; i++) + if (int_n_enabled_p[i]) + { + char name[50]; + sprintf (name, "__int%d", int_n_data[i].bitsize); + if (strcmp (name, PTRDIFF_TYPE) == 0) + ptrdiff_type_node = int_n_trees[i].signed_type; + } + if (ptrdiff_type_node == NULL_TREE) + gcc_unreachable (); + } + /* Fill in the rest of the sized types. Reuse existing type nodes when possible. */ intQI_type_node = make_or_reuse_type (GET_MODE_BITSIZE (QImode), 0);