This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Fix SPEC gcc micompile with LTO


> Hi,
> this is patch I ended up testing.  It ensures that canonical types of
> copies I create are same as of originals C++ FE has its own refernece
piece of mail got lost rendering the paragraph unreadable.  I wanted to say:

This is patch I ended up testing.  It ensures that canonical types of
copies I create are same as of originals.  It however ICEs building
auto-profile.c because C++ FE has its own reference  type construction
(cp_build_reference_type) and it creates additional pointer types with
TYPE_REF_IS_RVALUE set and it has different TYPE_CANONICAL.
> 
> Obviously we do not see this in middle-end and we end up merging the
> types despite fact they have different TYPE_CANONICAL.
> I guess I can immitate the behaviour in fld_incomplete_type_of by 
> implementing my own variant of build_pointer_type that also matches
> TYPE_CANONICAL of the pointer it creates.  I wonder if there are better
> solutions?
> 
> Honza
> 
> Index: tree.c
> ===================================================================
> --- tree.c	(revision 265807)
> +++ tree.c	(working copy)
> @@ -5118,6 +5118,7 @@ fld_type_variant (tree first, tree t, st
>    TYPE_ADDR_SPACE (v) = TYPE_ADDR_SPACE (t);
>    TYPE_NAME (v) = TYPE_NAME (t);
>    TYPE_ATTRIBUTES (v) = TYPE_ATTRIBUTES (t);
> +  TYPE_CANONICAL (v) = TYPE_CANONICAL (t);
>    add_tree_to_fld_list (v, fld);
>    return v;
>  }
> @@ -5146,6 +5147,10 @@ fld_incomplete_type_of (tree t, struct f
>  	  else
>  	    first = build_reference_type_for_mode (t2, TYPE_MODE (t),
>  						TYPE_REF_CAN_ALIAS_ALL (t));
> +	  gcc_assert (TYPE_CANONICAL (t2) != t2
> +		      && TYPE_CANONICAL (t2) == TYPE_CANONICAL (TREE_TYPE (t))
> +		      && TYPE_CANONICAL (first)
> +			 == TYPE_CANONICAL (TYPE_MAIN_VARIANT (t)));
>  	  add_tree_to_fld_list (first, fld);
>  	  return fld_type_variant (first, t, fld);
>  	}
> @@ -5169,6 +5174,7 @@ fld_incomplete_type_of (tree t, struct f
>  	  SET_TYPE_MODE (copy, VOIDmode);
>  	  SET_TYPE_ALIGN (copy, BITS_PER_UNIT);
>  	  TYPE_SIZE_UNIT (copy) = NULL;
> +	  TYPE_CANONICAL (copy) = TYPE_CANONICAL (t);
>  	  if (AGGREGATE_TYPE_P (t))
>  	    {
>  	      TYPE_FIELDS (copy) = NULL;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]