This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: change initialization of ptrdiff_type_node
- From: Jakub Jelinek <jakub at redhat dot com>
- To: Prathamesh Kulkarni <prathamesh dot kulkarni at linaro dot org>
- Cc: gcc Patches <gcc-patches at gcc dot gnu dot org>, Richard Biener <rguenther at suse dot de>
- Date: Fri, 25 Nov 2016 09:05:11 +0100
- Subject: Re: change initialization of ptrdiff_type_node
- Authentication-results: sourceware.org; auth=none
- References: <CAAgBjMkp2_qq5Ton3KVAQMPFqTKmZVjMrO365Ki3JX=0qhMcMQ@mail.gmail.com>
- Reply-to: Jakub Jelinek <jakub at redhat dot com>
On Fri, Nov 25, 2016 at 01:28:06PM +0530, Prathamesh Kulkarni wrote:
> --- a/gcc/lto/lto-lang.c
> +++ b/gcc/lto/lto-lang.c
> @@ -1271,8 +1271,30 @@ lto_init (void)
> gcc_assert (TYPE_MAIN_VARIANT (const_tm_ptr_type_node)
> == const_ptr_type_node);
>
> - ptrdiff_type_node = integer_type_node;
> + 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 ();
> + }
This looks ok to me.
>
> + unsigned_ptrdiff_type_node = unsigned_type_for (ptrdiff_type_node);
> lto_build_c_type_nodes ();
> gcc_assert (va_list_type_node);
But why this and the remaining hunks? Nothing in the middle-end
needs it, IMHO it should be kept in c-family/.
> diff --git a/gcc/tree-core.h b/gcc/tree-core.h
> index eec2d4f..6c52387 100644
> --- a/gcc/tree-core.h
> +++ b/gcc/tree-core.h
> @@ -617,6 +617,7 @@ enum tree_index {
> TI_SIZE_TYPE,
> TI_PID_TYPE,
> TI_PTRDIFF_TYPE,
> + TI_UNSIGNED_PTRDIFF_TYPE,
> TI_VA_LIST_TYPE,
> TI_VA_LIST_GPR_COUNTER_FIELD,
> TI_VA_LIST_FPR_COUNTER_FIELD,
> diff --git a/gcc/tree.h b/gcc/tree.h
> index 62cd7bb..ae69d0d 100644
> --- a/gcc/tree.h
> +++ b/gcc/tree.h
> @@ -3667,6 +3667,7 @@ tree_operand_check_code (const_tree __t, enum tree_code __code, int __i,
> #define size_type_node global_trees[TI_SIZE_TYPE]
> #define pid_type_node global_trees[TI_PID_TYPE]
> #define ptrdiff_type_node global_trees[TI_PTRDIFF_TYPE]
> +#define unsigned_ptrdiff_type_node global_trees[TI_UNSIGNED_PTRDIFF_TYPE]
> #define va_list_type_node global_trees[TI_VA_LIST_TYPE]
> #define va_list_gpr_counter_field global_trees[TI_VA_LIST_GPR_COUNTER_FIELD]
> #define va_list_fpr_counter_field global_trees[TI_VA_LIST_FPR_COUNTER_FIELD]
Jakub