if (syms[i].symbol->is_objfile_owned ())
            symtab = symbol_symtab (syms[i].symbol);
 
-         if (SYMBOL_LINE (syms[i].symbol) != 0 && symtab != NULL)
+         if (syms[i].symbol->line () != 0 && symtab != NULL)
            {
              printf_filtered ("[%d] ", i + first_choice);
              ada_print_symbol_signature (gdb_stdout, syms[i].symbol,
                                          &type_print_raw_options);
              printf_filtered (_(" at %s:%d\n"),
                               symtab_to_filename_for_display (symtab),
-                              SYMBOL_LINE (syms[i].symbol));
+                              syms[i].symbol->line ());
            }
          else if (is_enumeral
                   && syms[i].symbol->type ()->name () != NULL)
 
 {
   gcc_type sym_type;
   const char *filename = symbol_symtab (sym.symbol)->filename;
-  unsigned short line = SYMBOL_LINE (sym.symbol);
+  unsigned short line = sym.symbol->line ();
 
   context->error_symbol_once (sym.symbol);
 
 
   /* Squash compiler warning.  */
   gcc_type sym_type = 0;
   const char *filename = symbol_symtab (sym.symbol)->filename;
-  unsigned short line = SYMBOL_LINE (sym.symbol);
+  unsigned short line = sym.symbol->line ();
 
   instance->error_symbol_once (sym.symbol);
 
 
                    continue;
                  }
                const char *filename = symbol_symtab (sym.symbol)->filename;
-               unsigned int line = SYMBOL_LINE (sym.symbol);
+               unsigned int line = sym.symbol->line ();
 
                physaddr = SYMBOL_VALUE_ADDRESS (sym.symbol);
                instance->plugin ().build_decl
            }
 
          const char *filename = symbol_symtab (sym.symbol)->filename;
-         unsigned int line = SYMBOL_LINE (sym.symbol);
+         unsigned int line = sym.symbol->line ();
          CORE_ADDR address = BLOCK_START (SYMBOL_BLOCK_VALUE (sym.symbol));
          const char *kind;
 
 
                          inlined_func ? DW_AT_call_line : DW_AT_decl_line,
                          cu);
       if (attr != nullptr)
-       SYMBOL_LINE (sym) = attr->constant_value (0);
+       sym->set_line (attr->constant_value (0));
 
       attr = dwarf2_attr (die,
                          inlined_func ? DW_AT_call_file : DW_AT_decl_file,
 
       gdb_assert (sym);
 
       symtab_and_line sal;
-      if (SYMBOL_LINE (sym) != 0)
+      if (sym->line () != 0)
        {
          sal.symtab = symbol_symtab (sym);
-         sal.line = SYMBOL_LINE (sym);
+         sal.line = sym->line ();
        }
       else
        /* If the symbol does not have a location, we don't know where
 
     = syscm_get_valid_symbol_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
   const struct symbol *symbol = s_smob->symbol;
 
-  return scm_from_int (SYMBOL_LINE (symbol));
+  return scm_from_int (symbol->line ());
 }
 
 /* (symbol-value <gdb:symbol> [#:frame <gdb:frame>]) -> <gdb:value>
 
          *result = {};
          result->symtab = symbol_symtab (sym);
          result->symbol = sym;
-         result->line = SYMBOL_LINE (sym);
+         result->line = sym->line ();
          result->pc = SYMBOL_VALUE_ADDRESS (sym);
          result->pspace = result->symtab->pspace ();
          result->explicit_pc = 1;
        {
          /* Nothing.  */
        }
-      else if (SYMBOL_LINE (sym) != 0)
+      else if (sym->line () != 0)
        {
          /* We know its line number.  */
          *result = {};
          result->symtab = symbol_symtab (sym);
          result->symbol = sym;
-         result->line = SYMBOL_LINE (sym);
+         result->line = sym->line ();
          result->pc = SYMBOL_VALUE_ADDRESS (sym);
          result->pspace = result->symtab->pspace ();
          return 1;
 
 {
   ui_out_emit_tuple tuple_emitter (uiout, NULL);
 
-  if (SYMBOL_LINE (sym) != 0)
-    uiout->field_unsigned ("line", SYMBOL_LINE (sym));
+  if (sym->line () != 0)
+    uiout->field_unsigned ("line", sym->line ());
   uiout->field_string ("name", sym->print_name ());
 
   if (kind == FUNCTIONS_DOMAIN || kind == VARIABLES_DOMAIN)
 
 
   SYMPY_REQUIRE_VALID (self, symbol);
 
-  return gdb_py_object_from_longest (SYMBOL_LINE (symbol)).release ();
+  return gdb_py_object_from_longest (symbol->line ()).release ();
 }
 
 /* Implementation of gdb.Symbol.is_valid (self) -> Boolean.
 
     {
       /* GCC 2.x puts the line number in desc.  SunOS apparently puts in the
         number of bytes occupied by a type or object, which we ignore.  */
-      SYMBOL_LINE (sym) = desc;
+      sym->set_line (desc);
     }
   else
     {
-      SYMBOL_LINE (sym) = 0;   /* unknown */
+      sym->set_line (0);       /* unknown */
     }
 
   sym->set_language (get_current_subfile ()->language,
 
       b = BLOCK_SUPERBLOCK (b);
     }
   if (function_block != NULL
-      && SYMBOL_LINE (BLOCK_FUNCTION (function_block)) != 0)
+      && BLOCK_FUNCTION (function_block)->line () != 0)
     {
-      sal->line = SYMBOL_LINE (BLOCK_FUNCTION (function_block));
+      sal->line = BLOCK_FUNCTION (function_block)->line ();
       sal->symtab = symbol_symtab (BLOCK_FUNCTION (function_block));
     }
 }
                              && sym->domain () != MODULE_DOMAIN)
                          || (kind == MODULES_DOMAIN
                              && sym->domain () == MODULE_DOMAIN
-                             && SYMBOL_LINE (sym) != 0))))
+                             && sym->line () != 0))))
                {
                  if (result_set->size () < m_max_search_results)
                    {
                                          s_filename));
        }
 
-      if (SYMBOL_LINE (sym) != 0)
-       printf_filtered ("%d:\t", SYMBOL_LINE (sym));
+      if (sym->line () != 0)
+       printf_filtered ("%d:\t", sym->line ());
       else
        puts_filtered ("\t");
     }
 
     m_type = type;
   }
 
+  unsigned short line () const
+  {
+    return m_line;
+  }
+
+  void set_line (unsigned short line)
+  {
+    m_line = line;
+  }
+
   /* Data type of value */
 
   struct type *m_type = nullptr;
      to debug files longer than 64K lines?  What about machine
      generated programs?  */
 
-  unsigned short line = 0;
+  unsigned short m_line = 0;
 
   /* An arbitrary data pointer, allowing symbol readers to record
      additional information on a per-symbol basis.  Note that this data
 /* Note: There is no accessor macro for symbol.owner because it is
    "private".  */
 
-#define SYMBOL_LINE(symbol)            (symbol)->line
 #define SYMBOL_COMPUTED_OPS(symbol)    ((symbol)->impl ().ops_computed)
 #define SYMBOL_BLOCK_OPS(symbol)       ((symbol)->impl ().ops_block)
 #define SYMBOL_REGISTER_OPS(symbol)    ((symbol)->impl ().ops_register)