Verify symtab order
authorJan Hubicka <jh@suse.cz>
Sat, 1 Aug 2020 15:57:08 +0000 (17:57 +0200)
committerJan Hubicka <jh@suse.cz>
Sat, 1 Aug 2020 15:57:08 +0000 (17:57 +0200)
* symtab.c (symtab_node::verify_base): Verify order.
(symtab_node::verify_symtab_nodes): Verify order.

gcc/symtab.c

index 0e852d4c24d4d315d8f41f389490c358ab465c55..d7dfbb676df23c301d7b01815023c47fa15b7397 100644 (file)
@@ -1085,6 +1085,11 @@ symtab_node::verify_base (void)
       error ("node has unknown type");
       error_found = true;
     }
+  if (order < 0 || order >= symtab->order)
+    {
+      error ("node has invalid order %i", order);
+      error_found = true;
+    }
    
   if (symtab->state != LTO_STREAMING)
     {
@@ -1326,6 +1331,14 @@ symtab_node::verify_symtab_nodes (void)
 {
   symtab_node *node;
   hash_map<tree, symtab_node *> comdat_head_map (251);
+  asm_node *anode;
+
+  for (anode = symtab->first_asm_symbol (); anode; anode = anode->next)
+    if (anode->order < 0 || anode->order >= symtab->order)
+       {
+         error ("invalid order in asm node %i", anode->order);
+         internal_error ("symtab_node::verify failed");
+       }
 
   FOR_EACH_SYMBOL (node)
     {