change initialization of ptrdiff_type_node

Richard Biener rguenther@suse.de
Fri Nov 25 08:13:00 GMT 2016


On Fri, 25 Nov 2016, Jakub Jelinek wrote:

> 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.

But I'd like to see this in build_common_tree_nodes alongside
the initialization of size_type_node (and thus removed from
c_common_nodes_and_builtins).  This way you can simply remove
the lto-lang.c code as well.

Please then also remove the ptrdiff_type_node re-set from
free_lang_data ().

> >  
> > +  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/.

Yeah, this change looks unnecessary to me.

> > 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
> 
> 

-- 
Richard Biener <rguenther@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)



More information about the Gcc-patches mailing list