+2020-09-16  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+       * ada-lang.c (ada_language_data): Remove la_array_ordering
+       initializer.
+       * c-lang.c (c_language_data): Likewise.
+       (cplus_language_data): Likewise.
+       (asm_language_data): Likewise.
+       (minimal_language_data): Likewise.
+       * d-lang.c (d_language_data): Likewise.
+       * dwarf2/read.c (read_array_order): Update for call to
+       array_ordering.
+       * f-lang.c (f_language_data): Remove la_array_ordering
+       initializer.
+       (f_language::array_ordering): New member function.
+       * go-lang.c (go_language_data): Remove la_array_ordering
+       initializer.
+       * language.c (unknown_language_data): Likewise.
+       (auto_language_data): Likewise.
+       * language.h (language_data): Delete la_array_ordering field.
+       (language_defn::array_ordering): New member function.
+       * m2-lang.c (m2_language_data): Remove la_array_ordering
+       initializer.
+       * objc-lang.c (objc_language_data): Likewise.
+       * opencl-lang.c (opencl_language_data): Likewise.
+       * p-lang.c (pascal_language_data): Likewise.
+       * rust-lang.c (rust_language_data): Likewise.
+
 2020-09-16  Andrew Burgess  <andrew.burgess@embecosm.com>
 
        * ada-lang.c (ada_language_data): Remove la_case_sensitivity
 
 
 extern const struct language_data ada_language_data =
 {
-  array_row_major,
   macro_expansion_no,
   &ada_exp_descriptor,
   ada_op_print_tab,             /* expression operators for printing */
 
 
 extern const struct language_data c_language_data =
 {
-  array_row_major,
   macro_expansion_c,
   &exp_descriptor_c,
   c_op_print_tab,              /* expression operators for printing */
 
 extern const struct language_data cplus_language_data =
 {
-  array_row_major,
   macro_expansion_c,
   &exp_descriptor_c,
   c_op_print_tab,              /* expression operators for printing */
 
 extern const struct language_data asm_language_data =
 {
-  array_row_major,
   macro_expansion_c,
   &exp_descriptor_c,
   c_op_print_tab,              /* expression operators for printing */
 
 extern const struct language_data minimal_language_data =
 {
-  array_row_major,
   macro_expansion_c,
   &exp_descriptor_c,
   c_op_print_tab,              /* expression operators for printing */
 
 
 extern const struct language_data d_language_data =
 {
-  array_row_major,
   macro_expansion_no,
   &exp_descriptor_c,
   d_op_print_tab,              /* Expression operators for printing.  */
 
       return DW_ORD_row_major;
     }
 
-  switch (cu->language_defn->la_array_ordering)
+  switch (cu->language_defn->array_ordering ())
     {
     case array_column_major:
       return DW_ORD_col_major;
 
 
 extern const struct language_data f_language_data =
 {
-  array_column_major,
   macro_expansion_no,
   &exp_descriptor_f,
   f_op_print_tab,              /* expression operators for printing */
   enum case_sensitivity case_sensitivity () const override
   { return case_sensitive_off; }
 
+  /* See language.h.  */
+
+  enum array_ordering array_ordering () const override
+  { return array_column_major; }
+
 protected:
 
   /* See language.h.  */
 
 
 extern const struct language_data go_language_data =
 {
-  array_row_major,
   macro_expansion_no,
   &exp_descriptor_c,
   go_op_print_tab,             /* Expression operators for printing.  */
 
 
 extern const struct language_data unknown_language_data =
 {
-  array_row_major,
   macro_expansion_no,
   &exp_descriptor_standard,
   unk_op_print_tab,            /* expression operators for printing */
 
 extern const struct language_data auto_language_data =
 {
-  array_row_major,
   macro_expansion_no,
   &exp_descriptor_standard,
   unk_op_print_tab,            /* expression operators for printing */
 
 
 struct language_data
   {
-    /* Multi-dimensional array ordering.  */
-    enum array_ordering la_array_ordering;
-
     /* Style of macro expansion, if any, supported by this language.  */
     enum macro_expansion la_macro_expansion;
 
   virtual enum case_sensitivity case_sensitivity () const
   { return case_sensitive_on; }
 
+
+  /* Multi-dimensional array ordering.  */
+
+  virtual enum array_ordering array_ordering () const
+  { return array_row_major; }
+
 protected:
 
   /* This is the overridable part of the GET_SYMBOL_NAME_MATCHER method.
 
 
 extern const struct language_data m2_language_data =
 {
-  array_row_major,
   macro_expansion_no,
   &exp_descriptor_modula2,
   m2_op_print_tab,             /* expression operators for printing */
 
 
 extern const struct language_data objc_language_data =
 {
-  array_row_major,
   macro_expansion_c,
   &exp_descriptor_standard,
   objc_op_print_tab,           /* Expression operators for printing */
 
 /* Constant data representing the OpenCL language.  */
 extern const struct language_data opencl_language_data =
 {
-  array_row_major,
   macro_expansion_c,
   &exp_descriptor_opencl,
   c_op_print_tab,              /* expression operators for printing */
 
 
 extern const struct language_data pascal_language_data =
 {
-  array_row_major,
   macro_expansion_no,
   &exp_descriptor_standard,
   pascal_op_print_tab,         /* expression operators for printing */
 
 
 extern const struct language_data rust_language_data =
 {
-  array_row_major,
   macro_expansion_no,
   &exp_descriptor_rust,
   c_op_print_tab,              /* expression operators for printing */