tree-core.h (tree_target_option): Make opts field a pointer to a cl_target_option...
authorAndrew MacLeod <amacleod@redhat.com>
Wed, 17 Jun 2015 17:55:26 +0000 (17:55 +0000)
committerAndrew Macleod <amacleod@gcc.gnu.org>
Wed, 17 Jun 2015 17:55:26 +0000 (17:55 +0000)
2017-06-17  Andrew MacLeod  <amacleod@redhat.com>

* tree-core.h (tree_target_option): Make opts field a pointer to a
cl_target_option instead of an instance of the struct.
* tree.h (TREE_TARGET_OPTION): Return the pointer, not an address of
the structure.
* tree.c (make_node_stat ): Allocate a cl_target_option struct for
TARGET_OPTION_NODE.
(copy_node_stat): Allocate and copy struct cl_target_option.

From-SVN: r224567

gcc/ChangeLog
gcc/tree-core.h
gcc/tree.c
gcc/tree.h

index 155a985e7b0ea4a4be4b4683d3b5504f8360da53..868a70808a4576315dfcc4c0da58ff0fdfe17ce6 100644 (file)
@@ -1,3 +1,13 @@
+2017-06-17  Andrew MacLeod  <amacleod@redhat.com>
+
+       * tree-core.h (tree_target_option): Make opts field a pointer to a 
+       cl_target_option instead of an instance of the struct.
+       * tree.h (TREE_TARGET_OPTION): Return the pointer, not an address of
+       the structure.
+       * tree.c (make_node_stat ): Allocate a cl_target_option struct for 
+       TARGET_OPTION_NODE.
+       (copy_node_stat): Allocate and copy struct cl_target_option.
+
 2015-06-17  Andrew MacLeod  <amacleod@redhat.com>
 
        * tree.h (merge_dllimport_decl_attributes, handle_dll_attribute):
index 2a9f417bfb3eb5451521f3fcb857f64da05bfde1..58dc301b99097c1d38407d7d53794e33a81bc4f8 100644 (file)
@@ -1676,7 +1676,7 @@ struct GTY(()) tree_target_option {
   struct target_globals *globals;
 
   /* The optimization options used by the user.  */
-  struct cl_target_option opts;
+  struct cl_target_option *opts;
 };
 
 /* Define the overall contents of a tree node.
index 419e2767d9be3a13205b2a740ce4b3824f17b0b0..f6ab441ae03f1eb64fd1033c855a1ad4bcd67137 100644 (file)
@@ -1094,6 +1094,13 @@ make_node_stat (enum tree_code code MEM_STAT_DECL)
        }
       break;
 
+    case tcc_exceptional:
+      if (code == TARGET_OPTION_NODE)
+       {
+         TREE_TARGET_OPTION(t) = ggc_cleared_alloc<struct cl_target_option> ();
+       }
+      break;
+
     default:
       /* Other classes need no special treatment.  */
       break;
@@ -1175,6 +1182,12 @@ copy_node_stat (tree node MEM_STAT_DECL)
          TYPE_CACHED_VALUES (t) = NULL_TREE;
        }
     }
+    else if (code == TARGET_OPTION_NODE)
+      {
+       TREE_TARGET_OPTION (t) = ggc_alloc<struct cl_target_option>();
+       memcpy (TREE_TARGET_OPTION (t), TREE_TARGET_OPTION (node),
+               sizeof (struct cl_target_option));
+      }
 
   return t;
 }
index dedcb370ea679a41eadcc6a108bafa75675ae444..34b93681140d179ba3cec1e86c177c33a3b34fcb 100644 (file)
@@ -2839,7 +2839,7 @@ extern vec<tree, va_gc> **decl_debug_args_insert (tree);
 extern tree build_optimization_node (struct gcc_options *opts);
 
 #define TREE_TARGET_OPTION(NODE) \
-  (&TARGET_OPTION_NODE_CHECK (NODE)->target_option.opts)
+  (TARGET_OPTION_NODE_CHECK (NODE)->target_option.opts)
 
 #define TREE_TARGET_GLOBALS(NODE) \
   (TARGET_OPTION_NODE_CHECK (NODE)->target_option.globals)