Hi,
while looking into the chromium build issue I noticed that order can get
pretty large.  This patch adds checking so we know if it ever overflows
or if someone uses it incorrectly (the second is important since one
uninitialized order may disturb lto streaming)

Honza

gcc/ChangeLog:

2020-08-01  Jan Hubicka  <hubi...@ucw.cz>

        * symtab.c (symtab_node::verify_base): Verify order.
        (symtab_node::verify_symtab_nodes): Verify order.

diff --git a/gcc/symtab.c b/gcc/symtab.c
index 0e852d4c24d..d7dfbb676df 100644
--- a/gcc/symtab.c
+++ b/gcc/symtab.c
@@ -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)
     {

Reply via email to