Explicitly list all tree codes in gcc/tree-streamer.c:record_common_node
authorThomas Schwinge <thomas@codesourcery.com>
Mon, 17 Oct 2016 15:56:22 +0000 (17:56 +0200)
committerThomas Schwinge <tschwinge@gcc.gnu.org>
Mon, 17 Oct 2016 15:56:22 +0000 (17:56 +0200)
gcc/
* tree-streamer.c (record_common_node): Explicitly list expected
tree codes.

From-SVN: r241246

gcc/ChangeLog
gcc/tree-streamer.c

index 86df616ab8d1421df32f9fa3e3803ddc418ac2c4..9acc738accce32779b5832b77cb163347690e3c0 100644 (file)
@@ -1,3 +1,8 @@
+2016-10-17  Thomas Schwinge  <thomas@codesourcery.com>
+
+       * tree-streamer.c (record_common_node): Explicitly list expected
+       tree codes.
+
 2016-10-17  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/77988
index 7ea70963ce79e4928c48f154f032d80c51bfda47..2139e96634e0331fa01e7ee88cdb12bbaf376e2b 100644 (file)
@@ -277,12 +277,28 @@ record_common_node (struct streamer_tree_cache_d *cache, tree node)
      in the cache as hash value.  */
   streamer_tree_cache_append (cache, node, cache->nodes.length ());
 
-  if (POINTER_TYPE_P (node)
-      || TREE_CODE (node) == COMPLEX_TYPE
-      || TREE_CODE (node) == ARRAY_TYPE)
-    record_common_node (cache, TREE_TYPE (node));
-  else if (TREE_CODE (node) == RECORD_TYPE)
+  switch (TREE_CODE (node))
     {
+    case ERROR_MARK:
+    case FIELD_DECL:
+    case FIXED_POINT_TYPE:
+    case IDENTIFIER_NODE:
+    case INTEGER_CST:
+    case INTEGER_TYPE:
+    case POINTER_BOUNDS_TYPE:
+    case REAL_TYPE:
+    case TREE_LIST:
+    case VOID_CST:
+    case VOID_TYPE:
+      /* No recursive trees.  */
+      break;
+    case ARRAY_TYPE:
+    case COMPLEX_TYPE:
+    case POINTER_TYPE:
+    case REFERENCE_TYPE:
+      record_common_node (cache, TREE_TYPE (node));
+      break;
+    case RECORD_TYPE:
       /* The FIELD_DECLs of structures should be shared, so that every
         COMPONENT_REF uses the same tree node when referencing a field.
         Pointer equality between FIELD_DECLs is used by the alias
@@ -291,6 +307,10 @@ record_common_node (struct streamer_tree_cache_d *cache, tree node)
         nonoverlapping_component_refs_of_decl_p).  */
       for (tree f = TYPE_FIELDS (node); f; f = TREE_CHAIN (f))
        record_common_node (cache, f);
+      break;
+    default:
+      /* Unexpected tree code.  */
+      gcc_unreachable ();
     }
 }