+2019-03-24  Tom Tromey  <tom@tromey.com>
+
+       * c-exp.y (typebase): Remove casts.
+       * gdbtypes.c (lookup_unsigned_typename, )
+       (lookup_signed_typename): Remove cast.
+       * eval.c (parse_to_comma_and_eval): Remove cast.
+       * parse.c (write_dollar_variable): Remove cast.
+       * block.h (struct block) <superblock>: Now const.
+       * symfile-debug.c (debug_qf_map_matching_symbols): Update.
+       * psymtab.c (psym_map_matching_symbols): Make "block" const.
+       (map_block): Make "block" const.
+       * symfile.h (struct quick_symbol_functions)
+       <map_matching_symbols>: Constify block argument to "callback".
+       * symtab.c (basic_lookup_transparent_type_quick): Make "block"
+       const.
+       (find_pc_sect_compunit_symtab): Make "b" const.
+       (find_symbol_at_address): Likewise.
+       (search_symbols): Likewise.
+       * dwarf2read.c (dw2_lookup_symbol): Make "block" const.
+       (dw2_debug_names_lookup_symbol): Likewise.
+       (dw2_map_matching_symbols): Update.
+       * p-valprint.c (pascal_val_print): Remove "block".
+       * ada-lang.c (ada_add_global_exceptions): Make "b" const.
+       (aux_add_nonlocal_symbols): Make "block" const.
+       (resolve_subexp): Remove cast.
+       * linespec.c (iterate_over_all_matching_symtabs): Make "block"
+       const.
+       (iterate_over_file_blocks): Likewise.
+       * f-exp.y (%union) <bval>: Remove.
+       * coffread.c (patch_opaque_types): Make "b" const.
+       * spu-tdep.c (spu_catch_start): Make "block" const.
+       * c-valprint.c (print_unpacked_pointer): Remove "block".
+       * symmisc.c (dump_symtab_1): Make "b" const.
+       (block_depth): Make "block" const.
+       * d-exp.y (%union) <bval>: Remove.
+       * cp-support.h (cp_lookup_rtti_type): Update.
+       * cp-support.c (cp_lookup_rtti_type): Make "block" const.
+       * psymtab.c (psym_lookup_symbol): Make "block" const.
+       (maintenance_check_psymtabs): Make "b" const.
+       * python/py-framefilter.c (extract_sym): Make "sym_block" const.
+       (enumerate_locals, enumerate_args): Update.
+       * python/py-symtab.c (stpy_global_block): Make "block" const.
+       (stpy_static_block): Likewise.
+       * inline-frame.c (block_starting_point_at): Make "new_block"
+       const.
+       * block.c (find_block_in_blockvector): Make return type const.
+       (blockvector_for_pc_sect): Make "b" const.
+       (find_block_in_blockvector): Make "b" const.
+
 2019-03-23  Tom Tromey  <tom@tromey.com>
 
        * varobj.c (varobj_create): Update.
 
 
           n_candidates =
             ada_lookup_symbol_list (ada_decoded_op_name (op),
-                                    (struct block *) NULL, VAR_DOMAIN,
+                                   NULL, VAR_DOMAIN,
                                     &candidates);
 
           i = ada_resolve_function (candidates.data (), n_candidates, argvec,
    other has been found.  */
 
 static int
-aux_add_nonlocal_symbols (struct block *block, struct symbol *sym, void *data0)
+aux_add_nonlocal_symbols (const struct block *block, struct symbol *sym,
+                         void *data0)
 {
   struct match_data *data = (struct match_data *) data0;
   
 
          for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
            {
-             struct block *b = BLOCKVECTOR_BLOCK (bv, i);
+             const struct block *b = BLOCKVECTOR_BLOCK (bv, i);
              struct block_iterator iter;
              struct symbol *sym;
 
 
 /* A helper function that checks whether PC is in the blockvector BL.
    It returns the containing block if there is one, or else NULL.  */
 
-static struct block *
+static const struct block *
 find_block_in_blockvector (const struct blockvector *bl, CORE_ADDR pc)
 {
-  struct block *b;
+  const struct block *b;
   int bot, top, half;
 
   /* If we have an addrmap mapping code addresses to blocks, then use
      that.  */
   if (BLOCKVECTOR_MAP (bl))
-    return (struct block *) addrmap_find (BLOCKVECTOR_MAP (bl), pc);
+    return (const struct block *) addrmap_find (BLOCKVECTOR_MAP (bl), pc);
 
   /* Otherwise, use binary search to find the last block that starts
      before PC.
                         struct compunit_symtab *cust)
 {
   const struct blockvector *bl;
-  struct block *b;
+  const struct block *b;
 
   if (cust == NULL)
     {
 
      case of C) is the STATIC_BLOCK.  The superblock of the
      STATIC_BLOCK is the GLOBAL_BLOCK.  */
 
-  struct block *superblock;
+  const struct block *superblock;
 
   /* This is used to store the symbols in the block.  */
 
 
                        { $$ = lookup_typename (parse_language (pstate),
                                                parse_gdbarch (pstate),
                                                "double",
-                                               (struct block *) NULL,
+                                               NULL,
                                                0); }
        |       LONG DOUBLE_KEYWORD
                        { $$ = lookup_typename (parse_language (pstate),
                                                parse_gdbarch (pstate),
                                                "long double",
-                                               (struct block *) NULL,
+                                               NULL,
                                                0); }
        |       STRUCT name
                        { $$ = lookup_struct (copy_name ($2),
 
          struct value *vt_val;
          struct symbol *wsym = NULL;
          struct type *wtype;
-         struct block *block = NULL;
 
          if (want_space)
            fputs_filtered (" ", stream);
            {
              const char *search_name
                = MSYMBOL_SEARCH_NAME (msymbol.minsym);
-             wsym = lookup_symbol_search_name (search_name, block,
+             wsym = lookup_symbol_search_name (search_name, NULL,
                                                VAR_DOMAIN).symbol;
            }
 
 
 static void
 patch_opaque_types (struct symtab *s)
 {
-  struct block *b;
+  const struct block *b;
   struct block_iterator iter;
   struct symbol *real_sym;
 
 
 /* Lookup the rtti type for a class name.  */
 
 struct type *
-cp_lookup_rtti_type (const char *name, struct block *block)
+cp_lookup_rtti_type (const char *name, const struct block *block)
 {
   struct symbol * rtti_sym;
   struct type * rtti_type;
 
    std::vector<symbol *> *overload_list);
 
 extern struct type *cp_lookup_rtti_type (const char *name,
-                                        struct block *block);
+                                        const struct block *block);
 
 /* Produce an unsigned hash value from SEARCH_NAME that is compatible
    with cp_symbol_name_matches.  Only the last component in
 
     struct symtoken ssym;
     int ival;
     int voidval;
-    struct block *bval;
     enum exp_opcode opcode;
     struct stoken_vector svec;
   }
 
       struct symbol *sym, *with_opaque = NULL;
       struct compunit_symtab *stab = dw2_instantiate_symtab (per_cu, false);
       const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (stab);
-      struct block *block = BLOCKVECTOR_BLOCK (bv, block_index);
+      const struct block *block = BLOCKVECTOR_BLOCK (bv, block_index);
 
       sym = block_find_symbol (block, name, domain,
                               block_find_non_opaque_type_preferred,
 dw2_map_matching_symbols (struct objfile *objfile,
                          const char * name, domain_enum domain,
                          int global,
-                         int (*callback) (struct block *,
+                         int (*callback) (const struct block *,
                                           struct symbol *, void *),
                          void *data, symbol_name_match_type match,
                          symbol_compare_ftype *ordered_compare)
       struct symbol *sym, *with_opaque = NULL;
       struct compunit_symtab *stab = dw2_instantiate_symtab (per_cu, false);
       const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (stab);
-      struct block *block = BLOCKVECTOR_BLOCK (bv, block_index);
+      const struct block *block = BLOCKVECTOR_BLOCK (bv, block_index);
 
       sym = block_find_symbol (block, name, domain,
                               block_find_non_opaque_type_preferred,
 
 struct value *
 parse_to_comma_and_eval (const char **expp)
 {
-  expression_up expr = parse_exp_1 (expp, 0, (struct block *) 0, 1);
+  expression_up expr = parse_exp_1 (expp, 0, nullptr, 1);
 
   return evaluate_expression (expr.get ());
 }
 
     struct ttype tsym;
     struct symtoken ssym;
     int voidval;
-    struct block *bval;
     enum exp_opcode opcode;
     struct internalvar *ivar;
 
 
 
   strcpy (uns, "unsigned ");
   strcpy (uns + 9, name);
-  return lookup_typename (language, gdbarch, uns, (struct block *) NULL, 0);
+  return lookup_typename (language, gdbarch, uns, NULL, 0);
 }
 
 struct type *
 
   strcpy (uns, "signed ");
   strcpy (uns + 7, name);
-  t = lookup_typename (language, gdbarch, uns, (struct block *) NULL, 1);
+  t = lookup_typename (language, gdbarch, uns, NULL, 1);
   /* If we don't find "signed FOO" just try again with plain "FOO".  */
   if (t != NULL)
     return t;
-  return lookup_typename (language, gdbarch, name, (struct block *) NULL, 0);
+  return lookup_typename (language, gdbarch, name, NULL, 0);
 }
 
 /* Lookup a structure type named "struct NAME",
 
 block_starting_point_at (CORE_ADDR pc, const struct block *block)
 {
   const struct blockvector *bv;
-  struct block *new_block;
+  const struct block *new_block;
 
   bv = blockvector_for_pc (pc, NULL);
   if (BLOCKVECTOR_MAP (bv) == NULL)
     return 0;
 
-  new_block = (struct block *) addrmap_find (BLOCKVECTOR_MAP (bv), pc - 1);
+  new_block = (const struct block *) addrmap_find (BLOCKVECTOR_MAP (bv),
+                                                  pc - 1);
   if (new_block == NULL)
     return 1;
 
 
 
            if (include_inline)
              {
-               struct block *block;
+               const struct block *block;
                int i;
 
                for (i = FIRST_LOCAL_BLOCK;
   (struct symtab *symtab, const lookup_name_info &name,
    domain_enum domain, gdb::function_view<symbol_found_callback_ftype> callback)
 {
-  struct block *block;
+  const struct block *block;
 
   for (block = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symtab), STATIC_BLOCK);
        block != NULL;
 
              struct value *vt_val;
              struct symbol *wsym = NULL;
              struct type *wtype;
-             struct block *block = NULL;
 
              if (want_space)
                fputs_filtered (" ", stream);
                {
                  const char *search_name
                    = MSYMBOL_SEARCH_NAME (msymbol.minsym);
-                 wsym = lookup_symbol_search_name (search_name, block,
+                 wsym = lookup_symbol_search_name (search_name, NULL,
                                                    VAR_DOMAIN).symbol;
                }
 
 
   /* On some systems, such as HP-UX and hppa-linux, certain system routines 
      have names beginning with $ or $$.  Check for those, first.  */
 
-  sym = lookup_symbol (copy_name (str), (struct block *) NULL,
-                      VAR_DOMAIN, NULL);
+  sym = lookup_symbol (copy_name (str), NULL, VAR_DOMAIN, NULL);
   if (sym.symbol)
     {
       write_exp_elt_opcode (ps, OP_VAR_VALUE);
 
             partial symtab is empty, we can assume it won't here
             because lookup_partial_symbol succeeded.  */
          const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (stab);
-         struct block *block = BLOCKVECTOR_BLOCK (bv, block_index);
+         const struct block *block = BLOCKVECTOR_BLOCK (bv, block_index);
 
          sym = block_find_symbol (block, name, domain,
                                   block_find_non_opaque_type_preferred,
 
 static int
 map_block (const char *name, domain_enum domain, struct objfile *objfile,
-          struct block *block,
-          int (*callback) (struct block *, struct symbol *, void *),
+          const struct block *block,
+          int (*callback) (const struct block *, struct symbol *, void *),
           void *data, symbol_name_match_type match)
 {
   struct block_iterator iter;
 psym_map_matching_symbols (struct objfile *objfile,
                           const char *name, domain_enum domain,
                           int global,
-                          int (*callback) (struct block *,
+                          int (*callback) (const struct block *,
                                            struct symbol *, void *),
                           void *data,
                           symbol_name_match_type match,
                                   ordered_compare))
        {
          struct compunit_symtab *cust = psymtab_to_symtab (objfile, ps);
-         struct block *block;
+         const struct block *block;
 
          if (cust == NULL)
            continue;
   struct symbol *sym;
   struct compunit_symtab *cust = NULL;
   const struct blockvector *bv;
-  struct block *b;
+  const struct block *b;
   int length;
 
   for (objfile *objfile : current_program_space->objfiles ())
 
 
 static enum ext_lang_bt_status
 extract_sym (PyObject *obj, gdb::unique_xmalloc_ptr<char> *name,
-            struct symbol **sym, struct block **sym_block,
+            struct symbol **sym, const struct block **sym_block,
             const struct language_defn **language)
 {
   gdbpy_ref<> result (PyObject_CallMethod (obj, "symbol", NULL));
       const struct language_defn *language;
       gdb::unique_xmalloc_ptr<char> sym_name;
       struct symbol *sym;
-      struct block *sym_block;
+      const struct block *sym_block;
       struct value *val;
       enum ext_lang_bt_status success = EXT_LANG_BT_ERROR;
 
       struct value *val;
       enum ext_lang_bt_status success = EXT_LANG_BT_ERROR;
       struct symbol *sym;
-      struct block *sym_block;
+      const struct block *sym_block;
       int local_indent = 8 + (8 * indent);
       gdb::optional<ui_out_emit_tuple> tuple;
 
 
 stpy_global_block (PyObject *self, PyObject *args)
 {
   struct symtab *symtab = NULL;
-  struct block *block = NULL;
+  const struct block *block = NULL;
   const struct blockvector *blockvector;
 
   STPY_REQUIRE_VALID (self, symtab);
 stpy_static_block (PyObject *self, PyObject *args)
 {
   struct symtab *symtab = NULL;
-  struct block *block = NULL;
+  const struct block *block = NULL;
   const struct blockvector *blockvector;
 
   STPY_REQUIRE_VALID (self, symtab);
 
   if (cust != NULL)
     {
       const struct blockvector *bv = COMPUNIT_BLOCKVECTOR (cust);
-      struct block *block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
+      const struct block *block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
       struct symbol *sym;
       struct symtab_and_line sal;
 
 
 debug_qf_map_matching_symbols (struct objfile *objfile,
                               const char *name, domain_enum domain,
                               int global,
-                              int (*callback) (struct block *,
+                              int (*callback) (const struct block *,
                                                struct symbol *, void *),
                               void *data,
                               symbol_name_match_type match,
 
   void (*map_matching_symbols) (struct objfile *,
                                const char *name, domain_enum domain,
                                int global,
-                               int (*callback) (struct block *,
+                               int (*callback) (const struct block *,
                                                 struct symbol *, void *),
                                void *data,
                                symbol_name_match_type match,
 
 
 /* Prototypes for local functions */
 
-static int block_depth (struct block *);
+static int block_depth (const struct block *);
 
 static void print_symbol (struct gdbarch *gdbarch, struct symbol *symbol,
                          int depth, ui_file *outfile);
   struct linetable *l;
   const struct blockvector *bv;
   struct symbol *sym;
-  struct block *b;
+  const struct block *b;
   int depth;
 
   fprintf_filtered (outfile, "\nSymtab for file %s\n",
 /* Return the nexting depth of a block within other blocks in its symtab.  */
 
 static int
-block_depth (struct block *block)
+block_depth (const struct block *block)
 {
   int i = 0;
 
 
 {
   struct compunit_symtab *cust;
   const struct blockvector *bv;
-  struct block *block;
+  const struct block *block;
   struct symbol *sym;
 
   if (!objfile->sf)
     {
       for (compunit_symtab *cust : obj_file->compunits ())
        {
-         struct block *b;
+         const struct block *b;
          const struct blockvector *bv;
 
          bv = COMPUNIT_BLOCKVECTOR (cust);
 
          for (int i = GLOBAL_BLOCK; i <= STATIC_BLOCK; ++i)
            {
-             struct block *b = BLOCKVECTOR_BLOCK (bv, i);
+             const struct block *b = BLOCKVECTOR_BLOCK (bv, i);
              struct block_iterator iter;
              struct symbol *sym;
 
                int nfiles, const char *files[])
 {
   const struct blockvector *bv;
-  struct block *b;
+  const struct block *b;
   int i = 0;
   struct block_iterator iter;
   struct symbol *sym;