The result of symtab expansion is always a primary symtab.
authorDoug Evans <xdje42@gmail.com>
Tue, 18 Nov 2014 16:08:00 +0000 (08:08 -0800)
committerDoug Evans <xdje42@gmail.com>
Tue, 18 Nov 2014 16:08:00 +0000 (08:08 -0800)
gdb/ChangeLog:

* dwarf2read.c (dw2_instantiate_symtab): Add assert.
(dw2_lookup_symbol): Remove unnecessary test for primary symbol table.
* psymtab.c (lookup_symbol_aux_psymtabs): Ditto.
(psymtab_to_symtab): Add comment and assert.
(map_matching_symbols_psymtab): Remove unnecessary test for
non-primary symtab.

gdb/ChangeLog
gdb/dwarf2read.c
gdb/psymtab.c

index 6bd84c0..2a22d82 100644 (file)
@@ -1,3 +1,13 @@
+2014-11-18  Doug Evans  <xdje42@gmail.com>
+
+       The result of symtab expansion is always a primary symtab.
+       * dwarf2read.c (dw2_instantiate_symtab): Add assert.
+       (dw2_lookup_symbol): Remove unnecessary test for primary symbol table.
+       * psymtab.c (lookup_symbol_aux_psymtabs): Ditto.
+       (psymtab_to_symtab): Add comment and assert.
+       (map_matching_symbols_psymtab): Remove unnecessary test for
+       non-primary symtab.
+
 2014-11-15  Doug Evans  <xdje42@gmail.com>
 
        PR symtab/17559
index 9762d98..d929017 100644 (file)
@@ -2660,6 +2660,10 @@ dw2_instantiate_symtab (struct dwarf2_per_cu_data *per_cu)
       process_cu_includes ();
       do_cleanups (back_to);
     }
+
+  /* The result of symtab expansion is always the primary symtab.  */
+  gdb_assert (per_cu->v.quick->symtab->primary);
+
   return per_cu->v.quick->symtab;
 }
 
@@ -3611,17 +3615,13 @@ dw2_lookup_symbol (struct objfile *objfile, int block_index,
        {
          struct symbol *sym = NULL;
          struct symtab *stab = dw2_instantiate_symtab (per_cu);
+         const struct blockvector *bv = BLOCKVECTOR (stab);
+         struct block *block = BLOCKVECTOR_BLOCK (bv, block_index);
 
          /* Some caution must be observed with overloaded functions
             and methods, since the index will not contain any overload
             information (but NAME might contain it).  */
-         if (stab->primary)
-           {
-             const struct blockvector *bv = BLOCKVECTOR (stab);
-             struct block *block = BLOCKVECTOR_BLOCK (bv, block_index);
-
-             sym = block_lookup_symbol (block, name, domain);
-           }
+         sym = block_lookup_symbol (block, name, domain);
 
          if (sym && strcmp_iw (SYMBOL_SEARCH_NAME (sym), name) == 0)
            {
index 2514b55..9cfc2c1 100644 (file)
@@ -510,17 +510,16 @@ lookup_symbol_aux_psymtabs (struct objfile *objfile,
       {
        struct symbol *sym = NULL;
        struct symtab *stab = psymtab_to_symtab (objfile, ps);
+       /* Note: While psymtab_to_symtab can return NULL if the partial symtab
+          is empty, we can assume it won't here because lookup_partial_symbol
+          succeeded.  */
+       const struct blockvector *bv = BLOCKVECTOR (stab);
+       struct block *block = BLOCKVECTOR_BLOCK (bv, block_index);
 
        /* Some caution must be observed with overloaded functions
           and methods, since the psymtab will not contain any overload
           information (but NAME might contain it).  */
-       if (stab->primary)
-         {
-           const struct blockvector *bv = BLOCKVECTOR (stab);
-           struct block *block = BLOCKVECTOR_BLOCK (bv, block_index);
-
-           sym = block_lookup_symbol (block, name, domain);
-         }
+       sym = block_lookup_symbol (block, name, domain);
 
        if (sym && strcmp_iw (SYMBOL_SEARCH_NAME (sym), name) == 0)
          {
@@ -756,7 +755,10 @@ lookup_partial_symbol (struct objfile *objfile,
 }
 
 /* Get the symbol table that corresponds to a partial_symtab.
-   This is fast after the first time you do it.  */
+   This is fast after the first time you do it.
+   The result will be NULL if the primary symtab has no symbols,
+   which can happen.  Otherwise the result is the primary symtab
+   that contains PST.  */
 
 static struct symtab *
 psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst)
@@ -779,6 +781,9 @@ psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst)
       do_cleanups (back_to);
     }
 
+  if (pst->symtab != NULL)
+    gdb_assert (pst->symtab->primary);
+
   return pst->symtab;
 }
 
@@ -1259,7 +1264,7 @@ map_matching_symbols_psymtab (struct objfile *objfile,
          struct symtab *s = psymtab_to_symtab (objfile, ps);
          struct block *block;
 
-         if (s == NULL || !s->primary)
+         if (s == NULL)
            continue;
          block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), block_kind);
          if (map_block (name, namespace, objfile, block,