c++: Simplify canonical_type_parameter
authorNathan Sidwell <nathan@acm.org>
Wed, 13 May 2020 20:11:36 +0000 (13:11 -0700)
committerNathan Sidwell <nathan@acm.org>
Wed, 13 May 2020 20:11:36 +0000 (13:11 -0700)
Use a single vec_safe_grow_cleared, rather than that or a vec_alloc.
Use a for loop that returns early.

* pt.c (canonical_type_parameter): Simplify.

gcc/cp/ChangeLog
gcc/cp/pt.c

index b75025f389baf6e292f5c5a4416bf098adbc6190..10f212f2e53a14db175233014770a6f35e8f8a2f 100644 (file)
@@ -1,5 +1,7 @@
 2020-05-13  Nathan Sidwell  <nathan@acm.org>
 
+       * pt.c (canonical_type_parameter): Simplify.
+
        Formatting fixups & some simplifications.
        * pt.c (spec_hash_table): New typedef.
        (decl_specializations, type_specializations): Use it.
index a732ced2d8d81778be10410e83b177a4e8c37df9..ec2ca3e19def7bc9e377e0a554ed9f6bff7b68c1 100644 (file)
@@ -4417,29 +4417,21 @@ build_template_parm_index (int index,
 static tree
 canonical_type_parameter (tree type)
 {
-  tree list;
   int idx = TEMPLATE_TYPE_IDX (type);
 
   gcc_assert (TREE_CODE (type) != TEMPLATE_TEMPLATE_PARM);
 
-  if (!canonical_template_parms)
-    vec_alloc (canonical_template_parms, idx + 1);
-
-  if (canonical_template_parms->length () <= (unsigned) idx)
+  if (vec_safe_length (canonical_template_parms) <= (unsigned) idx)
     vec_safe_grow_cleared (canonical_template_parms, idx + 1);
 
-  list = (*canonical_template_parms)[idx];
-  while (list && !comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
-    list = TREE_CHAIN (list);
+  for (tree list = (*canonical_template_parms)[idx];
+       list; list = TREE_CHAIN (list))
+    if (comptypes (type, TREE_VALUE (list), COMPARE_STRUCTURAL))
+      return TREE_VALUE (list);
 
-  if (list)
-    return TREE_VALUE (list);
-  else
-    {
-      (*canonical_template_parms)[idx]
-       = tree_cons (NULL_TREE, type, (*canonical_template_parms)[idx]);
-      return type;
-    }
+  (*canonical_template_parms)[idx]
+    = tree_cons (NULL_TREE, type, (*canonical_template_parms)[idx]);
+  return type;
 }
 
 /* Return a TEMPLATE_PARM_INDEX, similar to INDEX, but whose