Fix TYPE_DECLARED_CLASS thinko
[deliverable/binutils-gdb.git] / gdb / compile / compile-cplus-types.c
index b04d6c6e4eaaec8c9354b35d8d79cb6275fc6796..ef5fbcf133a107c5b9c83c7080f98fe0e50f94fc 100644 (file)
@@ -1,6 +1,6 @@
 /* Convert types from GDB to GCC
 
-   Copyright (C) 2014-2020 Free Software Foundation, Inc.
+   Copyright (C) 2014-2021 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -383,7 +383,7 @@ compile_cplus_instance::new_scope (const char *type_name, struct type *type)
        {
          scope_component comp
            = {
-               decl_name (type->name ()).get (),
+               decl_name (type->name ()).get (),
                lookup_symbol (type->name (), block (), VAR_DOMAIN, nullptr)
              };
          scope.push_back (comp);
@@ -456,7 +456,7 @@ compile_cplus_convert_array (compile_cplus_instance *instance,
   struct type *range = type->index_type ();
   gcc_type element_type = instance->convert_type (TYPE_TARGET_TYPE (type));
 
-  if (TYPE_LOW_BOUND_KIND (range) != PROP_CONST)
+  if (range->bounds ()->low.kind () != PROP_CONST)
     {
       const char *s = _("array type with non-constant"
                        " lower bound is not supported");
@@ -464,7 +464,7 @@ compile_cplus_convert_array (compile_cplus_instance *instance,
       return instance->plugin ().error (s);
     }
 
-  if (TYPE_LOW_BOUND (range) != 0)
+  if (range->bounds ()->low.const_val () != 0)
     {
       const char *s = _("cannot convert array type with "
                        "non-zero lower bound to C");
@@ -472,10 +472,10 @@ compile_cplus_convert_array (compile_cplus_instance *instance,
       return instance->plugin ().error (s);
     }
 
-  if (TYPE_HIGH_BOUND_KIND (range) == PROP_LOCEXPR
-      || TYPE_HIGH_BOUND_KIND (range) == PROP_LOCLIST)
+  if (range->bounds ()->high.kind () == PROP_LOCEXPR
+      || range->bounds ()->high.kind () == PROP_LOCLIST)
     {
-      if (TYPE_VECTOR (type))
+      if (type->is_vector ())
        {
          const char *s = _("variably-sized vector type is not supported");
 
@@ -483,7 +483,7 @@ compile_cplus_convert_array (compile_cplus_instance *instance,
        }
 
       std::string upper_bound
-       = c_get_range_decl_name (&TYPE_RANGE_DATA (range)->high);
+       = c_get_range_decl_name (&range->bounds ()->high);
       return instance->plugin ().build_vla_array_type (element_type,
                                             upper_bound.c_str ());
     }
@@ -491,7 +491,7 @@ compile_cplus_convert_array (compile_cplus_instance *instance,
     {
       LONGEST low_bound, high_bound, count;
 
-      if (get_array_bounds (type, &low_bound, &high_bound) == 0)
+      if (!get_array_bounds (type, &low_bound, &high_bound))
        count = -1;
       else
        {
@@ -499,7 +499,7 @@ compile_cplus_convert_array (compile_cplus_instance *instance,
          count = high_bound + 1;
        }
 
-      if (TYPE_VECTOR (type))
+      if (type->is_vector ())
        return instance->plugin ().build_vector_type (element_type, count);
 
       return instance->plugin ().build_array_type (element_type, count);
@@ -668,7 +668,7 @@ compile_cplus_convert_method (compile_cplus_instance *instance,
      type and corresponding qualifier flags.  */
   gcc_type func_type = compile_cplus_convert_func (instance, method_type, true);
   gcc_type class_type = instance->convert_type (parent_type);
-  gcc_cp_qualifiers_flags quals = (enum gcc_cp_qualifiers) 0;
+  gcc_cp_qualifiers_flags quals = 0;
 
   if (TYPE_CONST (method_type))
     quals |= GCC_CP_QUALIFIER_CONST;
@@ -681,7 +681,7 @@ compile_cplus_convert_method (compile_cplus_instance *instance,
   gcc_cp_ref_qualifiers_flags rquals = GCC_CP_REF_QUAL_NONE;
 
   return instance->plugin ().build_method_type
-    (class_type, func_type, quals, rquals);
+    (class_type, func_type, quals.raw (), rquals.raw ());
 }
 
 /* Convert a member or method pointer represented by TYPE.  */
@@ -745,7 +745,7 @@ compile_cplus_convert_struct_or_union_methods (compile_cplus_instance *instance,
                     (sym_kind
                      | get_method_access_flag (type, i, j)
                      | GCC_CP_FLAG_VIRTUAL_FUNCTION
-                     | GCC_CP_FLAG_PURE_VIRTUAL_FUNCTION),
+                     | GCC_CP_FLAG_PURE_VIRTUAL_FUNCTION).raw (),
                     method_type, nullptr, 0, nullptr, 0);
                  continue;
                }
@@ -787,7 +787,7 @@ compile_cplus_convert_struct_or_union_methods (compile_cplus_instance *instance,
 
          instance->plugin ().build_decl
            (kind, overloaded_name.get (),
-            sym_kind | get_method_access_flag (type, i, j),
+            (sym_kind | get_method_access_flag (type, i, j)).raw (),
             method_type, nullptr, address, filename, line);
        }
     }
@@ -828,7 +828,7 @@ compile_cplus_convert_struct_or_union (compile_cplus_instance *instance,
   gcc_decl resuld;
   if (type->code () == TYPE_CODE_STRUCT)
     {
-      const char *what = TYPE_DECLARED_CLASS (type) ? "struct" : "class";
+      const char *what = TYPE_DECLARED_CLASS (type) ? "class" : "struct";
 
       resuld = instance->plugin ().build_decl
        (what, name.get (), (GCC_CP_SYMBOL_CLASS | nested_access
@@ -848,33 +848,29 @@ compile_cplus_convert_struct_or_union (compile_cplus_instance *instance,
   gcc_type result;
   if (type->code () == TYPE_CODE_STRUCT)
     {
-      struct gcc_vbase_array bases;
       int num_baseclasses = TYPE_N_BASECLASSES (type);
+      std::vector<gcc_type> elements (num_baseclasses);
+      std::vector<enum gcc_cp_symbol_kind> flags (num_baseclasses);
 
-      memset (&bases, 0, sizeof (bases));
+      struct gcc_vbase_array bases {};
+      bases.elements = elements.data ();
+      bases.flags = flags.data ();
+      bases.n_elements = num_baseclasses;
 
-      if (num_baseclasses > 0)
+      for (int i = 0; i < num_baseclasses; ++i)
        {
-         bases.elements = XNEWVEC (gcc_type, num_baseclasses);
-         bases.flags = XNEWVEC (enum gcc_cp_symbol_kind, num_baseclasses);
-         bases.n_elements = num_baseclasses;
-         for (int i = 0; i < num_baseclasses; ++i)
-           {
-             struct type *base_type = TYPE_BASECLASS (type, i);
-
-             bases.flags[i] = GCC_CP_SYMBOL_BASECLASS
-               | get_field_access_flag (type, i)
-               | (BASETYPE_VIA_VIRTUAL (type, i)
-                  ? GCC_CP_FLAG_BASECLASS_VIRTUAL
-                  : GCC_CP_FLAG_BASECLASS_NOFLAG);
-             bases.elements[i] = instance->convert_type (base_type);
-           }
+         struct type *base_type = TYPE_BASECLASS (type, i);
+
+         bases.flags[i] = (GCC_CP_SYMBOL_BASECLASS
+                           | get_field_access_flag (type, i)
+                           | (BASETYPE_VIA_VIRTUAL (type, i)
+                              ? GCC_CP_FLAG_BASECLASS_VIRTUAL
+                              : GCC_CP_FLAG_BASECLASS_NOFLAG));
+         bases.elements[i] = instance->convert_type (base_type);
        }
 
       result = instance->plugin ().start_class_type
        (name.get (), resuld, &bases, filename, line);
-      xfree (bases.flags);
-      xfree (bases.elements);
     }
   else
     {
@@ -929,7 +925,7 @@ compile_cplus_convert_enum (compile_cplus_instance *instance, struct type *type,
   instance->enter_scope (std::move (scope));
 
   gcc_type int_type
-    = instance->plugin ().get_int_type (TYPE_UNSIGNED (type),
+    = instance->plugin ().get_int_type (type->is_unsigned (),
                                        TYPE_LENGTH (type), nullptr);
   gcc_type result
     = instance->plugin ().start_enum_type (name.get (), int_type,
@@ -964,7 +960,7 @@ static gcc_type
 compile_cplus_convert_func (compile_cplus_instance *instance,
                            struct type *type, bool strip_artificial)
 {
-  int is_varargs = TYPE_VARARGS (type);
+  int is_varargs = type->has_varargs ();
   struct type *target_type = TYPE_TARGET_TYPE (type);
 
   /* Functions with no debug info have no return type.  Ideally we'd
@@ -974,10 +970,10 @@ compile_cplus_convert_func (compile_cplus_instance *instance,
      GDB's parser used to do.  */
   if (target_type == nullptr)
     {
-      if (TYPE_OBJFILE_OWNED (type))
-       target_type = objfile_type (TYPE_OWNER (type).objfile)->builtin_int;
+      if (type->is_objfile_owned ())
+       target_type = objfile_type (type->objfile_owner ())->builtin_int;
       else
-       target_type = builtin_type (TYPE_OWNER (type).gdbarch)->builtin_int;
+       target_type = builtin_type (type->arch_owner ())->builtin_int;
       warning (_("function has unknown return type; assuming int"));
     }
 
@@ -985,8 +981,8 @@ compile_cplus_convert_func (compile_cplus_instance *instance,
      types.  Those are impossible in C, though.  */
   gcc_type return_type = instance->convert_type (target_type);
 
-  struct gcc_type_array array =
-    { type->num_fields (), XNEWVEC (gcc_type, type->num_fields ()) };
+  std::vector<gcc_type> elements (type->num_fields ());
+  struct gcc_type_array array = { type->num_fields (), elements.data () };
   int artificials = 0;
   for (int i = 0; i < type->num_fields (); ++i)
     {
@@ -1006,7 +1002,6 @@ compile_cplus_convert_func (compile_cplus_instance *instance,
      with some minsyms like printf (compile-cplus.exp has examples).  */
   gcc_type result = instance->plugin ().build_function_type
     (return_type, &array, is_varargs);
-  xfree (array.elements);
   return result;
 }
 
@@ -1015,14 +1010,14 @@ compile_cplus_convert_func (compile_cplus_instance *instance,
 static gcc_type
 compile_cplus_convert_int (compile_cplus_instance *instance, struct type *type)
 {
-  if (TYPE_NOSIGN (type))
+  if (type->has_no_signedness ())
     {
       gdb_assert (TYPE_LENGTH (type) == 1);
       return instance->plugin ().get_char_type ();
     }
 
   return instance->plugin ().get_int_type
-    (TYPE_UNSIGNED (type), TYPE_LENGTH (type), type->name ());
+    (type->is_unsigned (), TYPE_LENGTH (type), type->name ());
 }
 
 /* Convert a floating-point type to its gcc representation.  */
@@ -1060,7 +1055,7 @@ compile_cplus_instance::convert_qualified_base (gcc_type base,
   gcc_type result = base;
 
   if (quals != 0)
-    result = plugin ().build_qualified_type (base, quals);
+    result = plugin ().build_qualified_type (base, quals.raw ());
 
   return result;
 }
@@ -1135,9 +1130,9 @@ convert_type_cplus_basic (compile_cplus_instance *instance,
 {
   /* If we are converting a qualified type, first convert the
      unqualified type and then apply the qualifiers.  */
-  if ((TYPE_INSTANCE_FLAGS (type) & (TYPE_INSTANCE_FLAG_CONST
-                                    | TYPE_INSTANCE_FLAG_VOLATILE
-                                    | TYPE_INSTANCE_FLAG_RESTRICT)) != 0)
+  if ((type->instance_flags () & (TYPE_INSTANCE_FLAG_CONST
+                                 | TYPE_INSTANCE_FLAG_VOLATILE
+                                 | TYPE_INSTANCE_FLAG_RESTRICT)) != 0)
     return compile_cplus_convert_qualified (instance, type);
 
   switch (type->code ())
This page took 0.027511 seconds and 4 git commands to generate.