]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
2007-03-15 Douglas Gregor <doug.gregor@gmail.com>
authordgregor <dgregor@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 15 Mar 2007 13:51:09 +0000 (13:51 +0000)
committerdgregor <dgregor@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 15 Mar 2007 13:51:09 +0000 (13:51 +0000)
* ptree.c (cxx_print_type): Use formatting markup for integers
when printing template parameter index/level/orig level.
(cxx_print_xnode): Ditto.
* cp-tree.h (TEMPLATE_PARM_PARAMETER_PACK): Use TREE_LANG_FLAG_0.
(struct template_parm_index_s): Remove the PARAMETER_PACK member.
Make INDEX, LEVEL, and ORIG_LEVEL integers instead of
HOST_WIDE_INTs.
(struct saved_scope): Make X_PROCESSING_TEMPLATE_DECL an int,
rather than a HOST_WIDE_INT.
Turn X_PROCESSING_EXPLICIT_INSTANTIATION, SKIP_EVALUATION, and
NEED_POP_FUNCTION_CONTEXT into bool bitfields; reorder fields for
better bit-packing.
(struct language_function): Make RETURNS_VALUE, RETURNS_NULL,
RETURNS_ABNORMALLY, IN_FUNCTION_TRY_HANDLER, and
IN_BASE_INITIALIZER bool bitfields.
(struct cp_declarator): Make KIND a 4-bit field. Make
PARAMETER_PACK_P a bool bitfield just after KIND.
* pt.c (uses_parameter_packs): Destroy the pointer set.
(make_pack_expansion): Ditto.
(check_for_bare_parameter_packs): Ditto.
* name-lookup.c (push_to_top_level): Make need_pop a bool value.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@122955 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/cp-tree.h
gcc/cp/name-lookup.c
gcc/cp/pt.c
gcc/cp/ptree.c

index 7d10b2da8ed6937bf1debf6aebea5479b0ce3874..dcb9655a37a6435e968f124d7dad85ede4f05547 100644 (file)
@@ -1,3 +1,27 @@
+2007-03-15  Douglas Gregor  <doug.gregor@gmail.com>
+
+       * ptree.c (cxx_print_type): Use formatting markup for integers
+       when printing template parameter index/level/orig level.
+       (cxx_print_xnode): Ditto.
+       * cp-tree.h (TEMPLATE_PARM_PARAMETER_PACK): Use TREE_LANG_FLAG_0.
+       (struct template_parm_index_s): Remove the PARAMETER_PACK member.
+       Make INDEX, LEVEL, and ORIG_LEVEL integers instead of
+       HOST_WIDE_INTs.
+       (struct saved_scope): Make X_PROCESSING_TEMPLATE_DECL an int,
+       rather than a HOST_WIDE_INT.
+       Turn X_PROCESSING_EXPLICIT_INSTANTIATION, SKIP_EVALUATION, and
+       NEED_POP_FUNCTION_CONTEXT into bool bitfields; reorder fields for
+       better bit-packing.
+       (struct language_function): Make RETURNS_VALUE, RETURNS_NULL,
+       RETURNS_ABNORMALLY, IN_FUNCTION_TRY_HANDLER, and
+       IN_BASE_INITIALIZER bool bitfields.
+       (struct cp_declarator): Make KIND a 4-bit field. Make
+       PARAMETER_PACK_P a bool bitfield just after KIND.
+       * pt.c (uses_parameter_packs): Destroy the pointer set.
+       (make_pack_expansion): Ditto.
+       (check_for_bare_parameter_packs): Ditto.
+       * name-lookup.c (push_to_top_level): Make need_pop a bool value.
+       
 2007-03-14  Andrew Pinski  <andrew_pinski@playstation.sony.com>
 
        PR c++/31165
index 2632137eb26bb4c58d3b9c417744e947f426da38..7d6ebc7fcc96eb5f1703e8f2414b75c2392ab062 100644 (file)
@@ -56,6 +56,7 @@ struct diagnostic_context;
       OMP_FOR_GIMPLIFYING_P (in OMP_FOR)
       BASELINK_QUALIFIED_P (in BASELINK)
       TARGET_EXPR_IMPLICIT_P (in TARGET_EXPR)
+      TEMPLATE_PARM_PARAMETER_PACK (in TEMPLATE_PARM_INDEX)
    1: IDENTIFIER_VIRTUAL_P (in IDENTIFIER_NODE)
       TI_PENDING_TEMPLATE_FLAG.
       TEMPLATE_PARMS_FOR_INLINE.
@@ -219,14 +220,10 @@ struct lang_identifier GTY(())
 struct template_parm_index_s GTY(())
 {
   struct tree_common common;
-  HOST_WIDE_INT index;
-  HOST_WIDE_INT level;
-  HOST_WIDE_INT orig_level;
+  int index;
+  int level;
+  int orig_level;
   tree decl;
-
-  /* When true, indicates that this parameter is actually a parameter
-     pack, for variadic templates.  */
-  BOOL_BITFIELD parameter_pack;
 };
 typedef struct template_parm_index_s template_parm_index;
 
@@ -703,11 +700,11 @@ struct saved_scope GTY(())
   struct cp_binding_level *x_previous_class_level;
   tree x_saved_tree;
 
-  HOST_WIDE_INT x_processing_template_decl;
+  int x_processing_template_decl;
   int x_processing_specialization;
-  bool x_processing_explicit_instantiation;
-  int need_pop_function_context;
-  bool skip_evaluation;
+  BOOL_BITFIELD x_processing_explicit_instantiation : 1;
+  BOOL_BITFIELD need_pop_function_context : 1;
+  BOOL_BITFIELD skip_evaluation : 1;
 
   struct stmt_tree_s x_stmt_tree;
 
@@ -786,11 +783,11 @@ struct language_function GTY(())
   tree x_vtt_parm;
   tree x_return_value;
 
-  int returns_value;
-  int returns_null;
-  int returns_abnormally;
-  int in_function_try_handler;
-  int in_base_initializer;
+  BOOL_BITFIELD returns_value : 1;
+  BOOL_BITFIELD returns_null : 1;
+  BOOL_BITFIELD returns_abnormally : 1;
+  BOOL_BITFIELD in_function_try_handler : 1;
+  BOOL_BITFIELD in_base_initializer : 1;
 
   /* True if this function can throw an exception.  */
   BOOL_BITFIELD can_throw : 1;
@@ -3705,7 +3702,8 @@ enum overload_flags { NO_SPECIAL = 0, DTOR_FLAG, OP_FLAG, TYPENAME_FLAG };
 #define TEMPLATE_PARM_DESCENDANTS(NODE) (TREE_CHAIN (NODE))
 #define TEMPLATE_PARM_ORIG_LEVEL(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->orig_level)
 #define TEMPLATE_PARM_DECL(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->decl)
-#define TEMPLATE_PARM_PARAMETER_PACK(NODE) (TEMPLATE_PARM_INDEX_CAST (NODE)->parameter_pack)
+#define TEMPLATE_PARM_PARAMETER_PACK(NODE) \
+  (TREE_LANG_FLAG_0 (TEMPLATE_PARM_INDEX_CHECK (NODE)))
 
 /* These macros are for accessing the fields of TEMPLATE_TYPE_PARM,
    TEMPLATE_TEMPLATE_PARM and BOUND_TEMPLATE_TEMPLATE_PARM nodes.  */
@@ -3901,16 +3899,16 @@ struct cp_parameter_declarator {
 /* A declarator.  */
 struct cp_declarator {
   /* The kind of declarator.  */
-  cp_declarator_kind kind;
+  ENUM_BITFIELD (cp_declarator_kind) kind : 4;
+  /* Whether we parsed an ellipsis (`...') just before the declarator,
+     to indicate this is a parameter pack.  */
+  BOOL_BITFIELD parameter_pack_p : 1;
   /* Attributes that apply to this declarator.  */
   tree attributes;
   /* For all but cdk_id and cdk_error, the contained declarator.  For
      cdk_id and cdk_error, guaranteed to be NULL.  */
   cp_declarator *declarator;
   location_t id_loc; /* Currently only set for cdk_id. */
-  /* Whether we parsed an ellipsis (`...') just before the declarator,
-     to indicate this is a parameter pack.  */
-  bool parameter_pack_p;
   union {
     /* For identifiers.  */
     struct {
index 8efcfed28a42a016735b7e4ed5ca2a7accfc1f69..a7a12cd4b3a88867d61b1362b7eb74c6ac6abf6a 100644 (file)
@@ -5030,7 +5030,7 @@ push_to_top_level (void)
   struct cp_binding_level *b;
   cxx_saved_binding *sb;
   size_t i;
-  int need_pop;
+  bool need_pop;
 
   timevar_push (TV_NAME_LOOKUP);
   s = GGC_CNEW (struct saved_scope);
@@ -5040,11 +5040,11 @@ push_to_top_level (void)
   /* If we're in the middle of some function, save our state.  */
   if (cfun)
     {
-      need_pop = 1;
+      need_pop = true;
       push_function_context_to (NULL_TREE);
     }
   else
-    need_pop = 0;
+    need_pop = false;
 
   if (scope_chain && previous_class_level)
     store_class_bindings (previous_class_level->class_shadowed,
index f947da2b0facd4ff7a4c355fb4f77864b1880be0..2546ab4b07c6cc912af509edc7af6ed0de96baf7 100644 (file)
@@ -2461,6 +2461,7 @@ uses_parameter_packs (tree t)
   ppd.parameter_packs = &parameter_packs;
   ppd.visited = pointer_set_create ();
   walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
+  pointer_set_destroy (ppd.visited);
   return parameter_packs != NULL_TREE;
 }
 
@@ -2515,6 +2516,7 @@ make_pack_expansion (tree arg)
       if (parameter_packs == NULL_TREE)
         {
           error ("base initializer expansion %<%T%> contains no parameter packs", arg);
+          pointer_set_destroy (ppd.visited);
           return error_mark_node;
         }
 
@@ -2531,6 +2533,8 @@ make_pack_expansion (tree arg)
             }
         }
 
+      pointer_set_destroy (ppd.visited);
+
       /* Create the pack expansion type for the base type.  */
       purpose = make_node (TYPE_PACK_EXPANSION);
       SET_PACK_EXPANSION_PATTERN (purpose, TREE_PURPOSE (arg));
@@ -2564,6 +2568,7 @@ make_pack_expansion (tree arg)
   ppd.parameter_packs = &parameter_packs;
   ppd.visited = pointer_set_create ();
   walk_tree (&arg, &find_parameter_packs_r, &ppd, ppd.visited);
+  pointer_set_destroy (ppd.visited);
 
   /* Make sure we found some parameter packs.  */
   if (parameter_packs == NULL_TREE)
@@ -2605,6 +2610,7 @@ check_for_bare_parameter_packs (tree t)
   ppd.parameter_packs = &parameter_packs;
   ppd.visited = pointer_set_create ();
   walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited);
+  pointer_set_destroy (ppd.visited);
 
   if (parameter_packs) {
     error ("parameter packs not expanded with `...':");
index 246e88b9875acc3441b466f305ec6a5557c84979..532e950e315e1a3a4fa5c0f1dc5896f2a8a2fee5 100644 (file)
@@ -68,8 +68,7 @@ cxx_print_type (FILE *file, tree node, int indent)
     case TEMPLATE_TEMPLATE_PARM:
     case BOUND_TEMPLATE_TEMPLATE_PARM:
       indent_to (file, indent + 3);
-      fprintf (file, "index " HOST_WIDE_INT_PRINT_DEC " level "
-              HOST_WIDE_INT_PRINT_DEC " orig_level " HOST_WIDE_INT_PRINT_DEC,
+      fprintf (file, "index %d level %d orig_level %d",
               TEMPLATE_TYPE_IDX (node), TEMPLATE_TYPE_LEVEL (node),
               TEMPLATE_TYPE_ORIG_LEVEL (node));
       return;
@@ -181,8 +180,7 @@ cxx_print_xnode (FILE *file, tree node, int indent)
       break;
     case TEMPLATE_PARM_INDEX:
       indent_to (file, indent + 3);
-      fprintf (file, "index " HOST_WIDE_INT_PRINT_DEC " level "
-              HOST_WIDE_INT_PRINT_DEC " orig_level " HOST_WIDE_INT_PRINT_DEC,
+      fprintf (file, "index %d level %d orig_level %d",
               TEMPLATE_PARM_IDX (node), TEMPLATE_PARM_LEVEL (node),
               TEMPLATE_PARM_ORIG_LEVEL (node));
       break;