[gdb/testsuite] Fix duplicate test-names in gdb.multi
[deliverable/binutils-gdb.git] / gdb / c-typeprint.c
index 43ad3b3e0e6ced43f3ecb405c7b9cc63edb25159..aaf9e0dfe0a1a70a5dbae4edfb96c80f168688fa 100644 (file)
@@ -1,5 +1,5 @@
 /* Support for printing C and C++ types for GDB, the GNU debugger.
-   Copyright (C) 1986-2019 Free Software Foundation, Inc.
+   Copyright (C) 1986-2020 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -58,7 +58,7 @@ static void c_type_print_varspec_prefix (struct type *,
 /* Print "const", "volatile", or address space modifiers.  */
 static void c_type_print_modifier (struct type *,
                                   struct ui_file *,
-                                  int, int);
+                                  int, int, enum language);
 
 static void c_type_print_base_1 (struct type *type, struct ui_file *stream,
                                 int show, int level, enum language language,
@@ -84,14 +84,14 @@ print_name_maybe_canonical (const char *name,
                            const struct type_print_options *flags,
                            struct ui_file *stream)
 {
-  std::string s;
+  gdb::unique_xmalloc_ptr<char> s;
 
   if (!flags->raw)
     s = cp_canonicalize_string_full (name,
                                     find_typedef_for_canonicalize,
                                     (void *) flags);
 
-  fputs_filtered (!s.empty () ? s.c_str () : name, stream);
+  fputs_filtered (s != nullptr ? s.get () : name, stream);
 }
 
 \f
@@ -148,7 +148,7 @@ c_print_type_1 (struct type *type,
       if (code == TYPE_CODE_FUNC || code == TYPE_CODE_METHOD)
        fputs_styled (varstring, function_name_style.style (), stream);
       else
-       fputs_filtered (varstring, stream);
+       fputs_styled (varstring, variable_name_style.style (), stream);
 
       /* For demangled function names, we have the arglist as part of
          the name, so don't print an additional pair of ()'s.  */
@@ -208,10 +208,10 @@ c_print_typedef (struct type *type,
   type_print (type, "", stream, -1);
   if (TYPE_NAME ((SYMBOL_TYPE (new_symbol))) == 0
       || strcmp (TYPE_NAME ((SYMBOL_TYPE (new_symbol))),
-                SYMBOL_LINKAGE_NAME (new_symbol)) != 0
+                new_symbol->linkage_name ()) != 0
       || TYPE_CODE (SYMBOL_TYPE (new_symbol)) == TYPE_CODE_TYPEDEF)
-    fprintf_filtered (stream, " %s", SYMBOL_PRINT_NAME (new_symbol));
-  fprintf_filtered (stream, ";\n");
+    fprintf_filtered (stream, " %s", new_symbol->print_name ());
+  fprintf_filtered (stream, ";");
 }
 
 /* If TYPE is a derived type, then print out derivation information.
@@ -337,7 +337,9 @@ cp_type_print_method_args (struct type *mtype, const char *prefix,
        fprintf_filtered (stream, " volatile");
 
       if (TYPE_RESTRICT (domain))
-       fprintf_filtered (stream, " restrict");
+       fprintf_filtered (stream, (language == language_cplus
+                                  ? " __restrict__"
+                                  : " restrict"));
 
       if (TYPE_ATOMIC (domain))
        fprintf_filtered (stream, " _Atomic");
@@ -383,7 +385,7 @@ c_type_print_varspec_prefix (struct type *type,
                                   stream, show, 1, 1, language, flags,
                                   podata);
       fprintf_filtered (stream, "*");
-      c_type_print_modifier (type, stream, 1, need_post_space);
+      c_type_print_modifier (type, stream, 1, need_post_space, language);
       break;
 
     case TYPE_CODE_MEMBERPTR:
@@ -420,7 +422,7 @@ c_type_print_varspec_prefix (struct type *type,
                                   stream, show, 1, 0, language, flags,
                                   podata);
       fprintf_filtered (stream, TYPE_CODE(type) == TYPE_CODE_REF ? "&" : "&&");
-      c_type_print_modifier (type, stream, 1, need_post_space);
+      c_type_print_modifier (type, stream, 1, need_post_space, language);
       break;
 
     case TYPE_CODE_METHOD:
@@ -481,7 +483,8 @@ c_type_print_varspec_prefix (struct type *type,
 
 static void
 c_type_print_modifier (struct type *type, struct ui_file *stream,
-                      int need_pre_space, int need_post_space)
+                      int need_pre_space, int need_post_space,
+                      enum language language)
 {
   int did_print_modifier = 0;
   const char *address_space_id;
@@ -509,7 +512,9 @@ c_type_print_modifier (struct type *type, struct ui_file *stream,
     {
       if (did_print_modifier || need_pre_space)
        fprintf_filtered (stream, " ");
-      fprintf_filtered (stream, "restrict");
+      fprintf_filtered (stream, (language == language_cplus
+                                ? "__restrict__"
+                                : "restrict"));
       did_print_modifier = 1;
     }
 
@@ -880,15 +885,14 @@ c_type_print_template_args (const struct type_print_options *flags,
       if (first)
        {
          wrap_here ("    ");
-         fprintf_filtered (stream, _("[with %s = "),
-                           SYMBOL_LINKAGE_NAME (sym));
+         fprintf_filtered (stream, _("[with %s = "), sym->linkage_name ());
          first = 0;
        }
       else
        {
          fputs_filtered (", ", stream);
          wrap_here ("         ");
-         fprintf_filtered (stream, "%s = ", SYMBOL_LINKAGE_NAME (sym));
+         fprintf_filtered (stream, "%s = ", sym->linkage_name ());
        }
 
       c_print_type (SYMBOL_TYPE (sym), "", stream, -1, 0, flags);
@@ -1051,7 +1055,7 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream,
       hash_holder.reset (local_flags.local_typedefs);
     }
 
-  c_type_print_modifier (type, stream, 0, 1);
+  c_type_print_modifier (type, stream, 0, 1, language);
   if (TYPE_CODE (type) == TYPE_CODE_UNION)
     fprintf_filtered (stream, "union ");
   else if (TYPE_DECLARED_CLASS (type))
@@ -1116,10 +1120,12 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream,
        {
          if (TYPE_STUB (type))
            fprintfi_filtered (level + 4, stream,
-                              _("<incomplete type>\n"));
+                              _("%p[<incomplete type>%p]\n"),
+                              metadata_style.style ().ptr (), nullptr);
          else
            fprintfi_filtered (level + 4, stream,
-                              _("<no data fields>\n"));
+                              _("%p[<no data fields>%p]\n"),
+                              metadata_style.style ().ptr (), nullptr);
        }
 
       /* Start off with no specific section type, so we can print
@@ -1277,7 +1283,8 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream,
                {
                  /* Keep GDB from crashing here.  */
                  fprintf_filtered (stream,
-                                   _("<undefined type> %s;\n"),
+                                   _("%p[<undefined type>%p] %s;\n"),
+                                   metadata_style.style ().ptr (), nullptr,
                                    TYPE_FN_FIELD_PHYSNAME (f, j));
                  break;
                }
@@ -1325,9 +1332,9 @@ c_type_print_base_struct_union (struct type *type, struct ui_file *stream,
                                                 &local_flags);
                    }
                  else
-                   fprintf_filtered (stream,
-                                     _("<badly mangled name '%s'>"),
-                                     mangled_name);
+                   fprintf_styled (stream, metadata_style.style (),
+                                   _("<badly mangled name '%s'>"),
+                                   mangled_name);
                }
              else
                {
@@ -1465,7 +1472,7 @@ c_type_print_base_1 (struct type *type, struct ui_file *stream,
 
   if (type == NULL)
     {
-      fputs_filtered (_("<type unknown>"), stream);
+      fputs_styled (_("<type unknown>"), metadata_style.style (), stream);
       return;
     }
 
@@ -1475,7 +1482,7 @@ c_type_print_base_1 (struct type *type, struct ui_file *stream,
   if (show <= 0
       && TYPE_NAME (type) != NULL)
     {
-      c_type_print_modifier (type, stream, 0, 1);
+      c_type_print_modifier (type, stream, 0, 1, language);
 
       /* If we have "typedef struct foo {. . .} bar;" do we want to
         print it as "struct foo" or as "bar"?  Pick the latter for
@@ -1511,7 +1518,8 @@ c_type_print_base_1 (struct type *type, struct ui_file *stream,
         couldn't resolve TYPE_TARGET_TYPE.  Not much we can do.  */
       gdb_assert (TYPE_NAME (type) == NULL);
       gdb_assert (TYPE_TARGET_TYPE (type) == NULL);
-      fprintf_filtered (stream, _("<unnamed typedef>"));
+      fprintf_styled (stream, metadata_style.style (),
+                     _("<unnamed typedef>"));
       break;
 
     case TYPE_CODE_FUNC:
@@ -1539,7 +1547,7 @@ c_type_print_base_1 (struct type *type, struct ui_file *stream,
       break;
 
     case TYPE_CODE_ENUM:
-      c_type_print_modifier (type, stream, 0, 1);
+      c_type_print_modifier (type, stream, 0, 1, language);
       fprintf_filtered (stream, "enum ");
       if (TYPE_DECLARED_CLASS (type))
        fprintf_filtered (stream, "class ");
@@ -1592,7 +1600,8 @@ c_type_print_base_1 (struct type *type, struct ui_file *stream,
              if (i)
                fprintf_filtered (stream, ", ");
              wrap_here ("    ");
-             fputs_filtered (TYPE_FIELD_NAME (type, i), stream);
+             fputs_styled (TYPE_FIELD_NAME (type, i),
+                           variable_name_style.style (), stream);
              if (lastval != TYPE_FIELD_ENUMVAL (type, i))
                {
                  fprintf_filtered (stream, " = %s",
@@ -1611,7 +1620,7 @@ c_type_print_base_1 (struct type *type, struct ui_file *stream,
 
        local_flags.local_typedefs = NULL;
 
-       c_type_print_modifier (type, stream, 0, 1);
+       c_type_print_modifier (type, stream, 0, 1, language);
        fprintf_filtered (stream, "flag ");
        print_name_maybe_canonical (TYPE_NAME (type), flags, stream);
        if (show > 0)
@@ -1622,10 +1631,12 @@ c_type_print_base_1 (struct type *type, struct ui_file *stream,
              {
                if (TYPE_STUB (type))
                  fprintfi_filtered (level + 4, stream,
-                                    _("<incomplete type>\n"));
+                                    _("%p[<incomplete type>%p]\n"),
+                                    metadata_style.style ().ptr (), nullptr);
                else
                  fprintfi_filtered (level + 4, stream,
-                                    _("<no data fields>\n"));
+                                    _("%p[<no data fields>%p]\n"),
+                                    metadata_style.style ().ptr (), nullptr);
              }
            len = TYPE_NFIELDS (type);
            for (i = 0; i < len; i++)
@@ -1668,7 +1679,7 @@ c_type_print_base_1 (struct type *type, struct ui_file *stream,
 
     case TYPE_CODE_RANGE:
       /* This should not occur.  */
-      fprintf_filtered (stream, _("<range type>"));
+      fprintf_styled (stream, metadata_style.style (), _("<range type>"));
       break;
 
     case TYPE_CODE_NAMESPACE:
@@ -1683,15 +1694,15 @@ c_type_print_base_1 (struct type *type, struct ui_file *stream,
          type name, then complain.  */
       if (TYPE_NAME (type) != NULL)
        {
-         c_type_print_modifier (type, stream, 0, 1);
+         c_type_print_modifier (type, stream, 0, 1, language);
          print_name_maybe_canonical (TYPE_NAME (type), flags, stream);
        }
       else
        {
          /* At least for dump_symtab, it is important that this not
             be an error ().  */
-         fprintf_filtered (stream, _("<invalid type code %d>"),
-                           TYPE_CODE (type));
+         fprintf_styled (stream, metadata_style.style (),
+                         _("<invalid type code %d>"), TYPE_CODE (type));
        }
       break;
     }
This page took 0.046297 seconds and 4 git commands to generate.