diff mbox series

Do not stream TYPE_NEEDS_CONSTRUCTING

Message ID 20181106102240.tl2ajw2xghwhmmsx@kam.mff.cuni.cz
State New
Headers show
Series Do not stream TYPE_NEEDS_CONSTRUCTING | expand

Commit Message

Jan Hubicka Nov. 6, 2018, 10:22 a.m. UTC
Hi,
TYPE_NEEDS_CONSTRUCTING is one of reasons why we get duplicated complete and
incomplete types after my patch because the incoplete type I construct
may have TYPE_NEEDS_CONSTRUCTING set.

I think this flag is useless and can be dropped - the only use in ipa-pure-const
seems confused since we should drop the readonly flag on such variables.

Bootstrapped/regtested x86_64-linux, OK?

Honza

	* ipa-pure-const.c (check_decl): Do not test TYPE_NEEDS_CONSTRUCTING.
	* lto-streamer-out.c (hash_tree): Do not hash TYPE_NEEDS_CONSTRUCTING.
	* tree-streamer-in.c (unpack_ts_type_common_value_fields): Do not
	stream TYPE_NEEDS_CONSTRUCTING.
	* tree-streamer-out.c (pack_ts_type_common_value_fields): Likewise.
	* tree.c (free_lang_data_in_type): Clear TYPE_NEEDS_CONSTRUCTING.

Comments

Richard Biener Nov. 6, 2018, 10:25 a.m. UTC | #1
On Tue, 6 Nov 2018, Jan Hubicka wrote:

> Hi,
> TYPE_NEEDS_CONSTRUCTING is one of reasons why we get duplicated complete and
> incomplete types after my patch because the incoplete type I construct
> may have TYPE_NEEDS_CONSTRUCTING set.
> 
> I think this flag is useless and can be dropped - the only use in ipa-pure-const
> seems confused since we should drop the readonly flag on such variables.

Did you check that with an assert?

Otherwise OK.

Richard.

> 
> Bootstrapped/regtested x86_64-linux, OK?
> 
> Honza
> 
> 	* ipa-pure-const.c (check_decl): Do not test TYPE_NEEDS_CONSTRUCTING.
> 	* lto-streamer-out.c (hash_tree): Do not hash TYPE_NEEDS_CONSTRUCTING.
> 	* tree-streamer-in.c (unpack_ts_type_common_value_fields): Do not
> 	stream TYPE_NEEDS_CONSTRUCTING.
> 	* tree-streamer-out.c (pack_ts_type_common_value_fields): Likewise.
> 	* tree.c (free_lang_data_in_type): Clear TYPE_NEEDS_CONSTRUCTING.
> Index: ipa-pure-const.c
> ===================================================================
> --- ipa-pure-const.c	(revision 265738)
> +++ ipa-pure-const.c	(working copy)
> @@ -339,7 +339,7 @@ check_decl (funct_state local,
>    if (DECL_EXTERNAL (t) || TREE_PUBLIC (t))
>      {
>        /* Readonly reads are safe.  */
> -      if (TREE_READONLY (t) && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (t)))
> +      if (TREE_READONLY (t))
>  	return; /* Read of a constant, do not change the function state.  */
>        else
>  	{
> Index: lto-streamer-out.c
> ===================================================================
> --- lto-streamer-out.c	(revision 265738)
> +++ lto-streamer-out.c	(working copy)
> @@ -1147,7 +1147,6 @@ hash_tree (struct streamer_tree_cache_d
>        hstate.add_flag (TYPE_STRING_FLAG (t));
>        /* TYPE_NO_FORCE_BLK is private to stor-layout and need
>   	 no streaming.  */
> -      hstate.add_flag (TYPE_NEEDS_CONSTRUCTING (t));
>        hstate.add_flag (TYPE_PACKED (t));
>        hstate.add_flag (TYPE_RESTRICT (t));
>        hstate.add_flag (TYPE_USER_ALIGN (t));
> Index: tree-streamer-in.c
> ===================================================================
> --- tree-streamer-in.c	(revision 265738)
> +++ tree-streamer-in.c	(working copy)
> @@ -367,7 +367,6 @@ unpack_ts_type_common_value_fields (stru
>    TYPE_STRING_FLAG (expr) = (unsigned) bp_unpack_value (bp, 1);
>    /* TYPE_NO_FORCE_BLK is private to stor-layout and need
>       no streaming.  */
> -  TYPE_NEEDS_CONSTRUCTING (expr) = (unsigned) bp_unpack_value (bp, 1);
>    TYPE_PACKED (expr) = (unsigned) bp_unpack_value (bp, 1);
>    TYPE_RESTRICT (expr) = (unsigned) bp_unpack_value (bp, 1);
>    TYPE_USER_ALIGN (expr) = (unsigned) bp_unpack_value (bp, 1);
> Index: tree-streamer-out.c
> ===================================================================
> --- tree-streamer-out.c	(revision 265738)
> +++ tree-streamer-out.c	(working copy)
> @@ -314,7 +314,6 @@ pack_ts_type_common_value_fields (struct
>    bp_pack_value (bp, TYPE_STRING_FLAG (expr), 1);
>    /* TYPE_NO_FORCE_BLK is private to stor-layout and need
>       no streaming.  */
> -  bp_pack_value (bp, TYPE_NEEDS_CONSTRUCTING (expr), 1);
>    bp_pack_value (bp, TYPE_PACKED (expr), 1);
>    bp_pack_value (bp, TYPE_RESTRICT (expr), 1);
>    bp_pack_value (bp, TYPE_USER_ALIGN (expr), 1);
> Index: tree.c
> ===================================================================
> --- tree.c	(revision 265738)
> +++ tree.c	(working copy)
> @@ -5254,6 +5254,8 @@ free_lang_data_in_type (tree type)
>    TREE_LANG_FLAG_5 (type) = 0;
>    TREE_LANG_FLAG_6 (type) = 0;
>  
> +  TYPE_NEEDS_CONSTRUCTING (type) = 0;
> +
>    if (TREE_CODE (type) == FUNCTION_TYPE)
>      {
>        /* Remove the const and volatile qualifiers from arguments.  The
> 
>
Jan Hubicka Nov. 6, 2018, 10:29 a.m. UTC | #2
> On Tue, 6 Nov 2018, Jan Hubicka wrote:
> 
> > Hi,
> > TYPE_NEEDS_CONSTRUCTING is one of reasons why we get duplicated complete and
> > incomplete types after my patch because the incoplete type I construct
> > may have TYPE_NEEDS_CONSTRUCTING set.
> > 
> > I think this flag is useless and can be dropped - the only use in ipa-pure-const
> > seems confused since we should drop the readonly flag on such variables.
> 
> Did you check that with an assert?

You can't assert on this easily because constructor may end up being
optimized out and the variable promoted to readonly for valid reasons.

Honza
Richard Biener Nov. 6, 2018, 10:43 a.m. UTC | #3
On Tue, 6 Nov 2018, Jan Hubicka wrote:

> > On Tue, 6 Nov 2018, Jan Hubicka wrote:
> > 
> > > Hi,
> > > TYPE_NEEDS_CONSTRUCTING is one of reasons why we get duplicated complete and
> > > incomplete types after my patch because the incoplete type I construct
> > > may have TYPE_NEEDS_CONSTRUCTING set.
> > > 
> > > I think this flag is useless and can be dropped - the only use in ipa-pure-const
> > > seems confused since we should drop the readonly flag on such variables.
> > 
> > Did you check that with an assert?
> 
> You can't assert on this easily because constructor may end up being
> optimized out and the variable promoted to readonly for valid reasons.

Hmm, I see.
diff mbox series

Patch

Index: ipa-pure-const.c
===================================================================
--- ipa-pure-const.c	(revision 265738)
+++ ipa-pure-const.c	(working copy)
@@ -339,7 +339,7 @@  check_decl (funct_state local,
   if (DECL_EXTERNAL (t) || TREE_PUBLIC (t))
     {
       /* Readonly reads are safe.  */
-      if (TREE_READONLY (t) && !TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (t)))
+      if (TREE_READONLY (t))
 	return; /* Read of a constant, do not change the function state.  */
       else
 	{
Index: lto-streamer-out.c
===================================================================
--- lto-streamer-out.c	(revision 265738)
+++ lto-streamer-out.c	(working copy)
@@ -1147,7 +1147,6 @@  hash_tree (struct streamer_tree_cache_d
       hstate.add_flag (TYPE_STRING_FLAG (t));
       /* TYPE_NO_FORCE_BLK is private to stor-layout and need
  	 no streaming.  */
-      hstate.add_flag (TYPE_NEEDS_CONSTRUCTING (t));
       hstate.add_flag (TYPE_PACKED (t));
       hstate.add_flag (TYPE_RESTRICT (t));
       hstate.add_flag (TYPE_USER_ALIGN (t));
Index: tree-streamer-in.c
===================================================================
--- tree-streamer-in.c	(revision 265738)
+++ tree-streamer-in.c	(working copy)
@@ -367,7 +367,6 @@  unpack_ts_type_common_value_fields (stru
   TYPE_STRING_FLAG (expr) = (unsigned) bp_unpack_value (bp, 1);
   /* TYPE_NO_FORCE_BLK is private to stor-layout and need
      no streaming.  */
-  TYPE_NEEDS_CONSTRUCTING (expr) = (unsigned) bp_unpack_value (bp, 1);
   TYPE_PACKED (expr) = (unsigned) bp_unpack_value (bp, 1);
   TYPE_RESTRICT (expr) = (unsigned) bp_unpack_value (bp, 1);
   TYPE_USER_ALIGN (expr) = (unsigned) bp_unpack_value (bp, 1);
Index: tree-streamer-out.c
===================================================================
--- tree-streamer-out.c	(revision 265738)
+++ tree-streamer-out.c	(working copy)
@@ -314,7 +314,6 @@  pack_ts_type_common_value_fields (struct
   bp_pack_value (bp, TYPE_STRING_FLAG (expr), 1);
   /* TYPE_NO_FORCE_BLK is private to stor-layout and need
      no streaming.  */
-  bp_pack_value (bp, TYPE_NEEDS_CONSTRUCTING (expr), 1);
   bp_pack_value (bp, TYPE_PACKED (expr), 1);
   bp_pack_value (bp, TYPE_RESTRICT (expr), 1);
   bp_pack_value (bp, TYPE_USER_ALIGN (expr), 1);
Index: tree.c
===================================================================
--- tree.c	(revision 265738)
+++ tree.c	(working copy)
@@ -5254,6 +5254,8 @@  free_lang_data_in_type (tree type)
   TREE_LANG_FLAG_5 (type) = 0;
   TREE_LANG_FLAG_6 (type) = 0;
 
+  TYPE_NEEDS_CONSTRUCTING (type) = 0;
+
   if (TREE_CODE (type) == FUNCTION_TYPE)
     {
       /* Remove the const and volatile qualifiers from arguments.  The