diff --git a/gdb/c-typeprint.c b/gdb/c-typeprint.c
index 6690ca53bcd..43ad3b3e0e6 100644
--- a/gdb/c-typeprint.c
+++ b/gdb/c-typeprint.c
@@ -205,7 +205,7 @@ c_print_typedef (struct type *type,
 {
   type = check_typedef (type);
   fprintf_filtered (stream, "typedef ");
-  type_print (type, "", stream, 0);
+  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
diff --git a/gdb/testsuite/gdb.ada/info_auto_lang.exp b/gdb/testsuite/gdb.ada/info_auto_lang.exp
index be1deae99ef..68457827d2f 100644
--- a/gdb/testsuite/gdb.ada/info_auto_lang.exp
+++ b/gdb/testsuite/gdb.ada/info_auto_lang.exp
@@ -53,10 +53,7 @@ set func_in_c(ada_syntax)    "${decimal}:	procedure proc_in_c;"
 set func_in_ada(c_syntax)    "${decimal}:	void proc_in_ada\\\(void\\\);"
 set func_in_ada(ada_syntax)  "${decimal}:	procedure proc_in_ada;"
 
-set type_in_c(c_syntax) [multi_line \
-			    "${decimal}:	typedef struct {" \
-			    "    int some_component_in_c;" \
-			    "} some_type_in_c;" ]
+set type_in_c(c_syntax) "${decimal}:	typedef struct {\\.\\.\\.} some_type_in_c;"
 set type_in_c(ada_syntax) [multi_line \
 			      "${decimal}:	record" \
 			      "    some_component_in_c: int;" \
diff --git a/gdb/testsuite/gdb.base/info-types.c b/gdb/testsuite/gdb.base/info-types.c
index 6746238801d..de9320da888 100644
--- a/gdb/testsuite/gdb.base/info-types.c
+++ b/gdb/testsuite/gdb.base/info-types.c
@@ -38,6 +38,37 @@ enum enum_t
 typedef enum enum_t my_enum_t;
 typedef my_enum_t nested_enum_t;
 
+typedef struct
+{
+  double d;
+  float f;
+} anon_struct_t;
+
+typedef anon_struct_t nested_anon_struct_t;
+
+typedef enum
+{
+ DD, EE, FF
+} anon_enum_t;
+
+typedef anon_enum_t nested_anon_enum_t;
+
+union union_t
+{
+  int i;
+  float f;
+};
+
+typedef union union_t nested_union_t;
+
+typedef union
+{
+  int i;
+  double d;
+} anon_union_t;
+
+typedef anon_union_t nested_anon_union_t;
+
 volatile int var_a;
 volatile float var_b;
 volatile my_int_t var_c;
@@ -53,6 +84,14 @@ volatile baz_ptr var_l;
 volatile enum enum_t var_m;
 volatile my_enum_t var_n;
 volatile nested_enum_t var_o;
+volatile anon_struct_t var_p;
+volatile nested_anon_struct_t var_q;
+volatile anon_enum_t var_r;
+volatile nested_anon_enum_t var_s;
+volatile union union_t var_t;
+volatile nested_union_t var_u;
+volatile anon_union_t var_v;
+volatile nested_anon_union_t var_w;
 
 #ifdef __cplusplus
 
diff --git a/gdb/testsuite/gdb.base/info-types.exp b/gdb/testsuite/gdb.base/info-types.exp
index a5808425398..3a514b5bc19 100644
--- a/gdb/testsuite/gdb.base/info-types.exp
+++ b/gdb/testsuite/gdb.base/info-types.exp
@@ -57,25 +57,35 @@ proc run_test { lang } {
 		 "All defined types:" \
 		 "" \
 		 "File .*:" \
-		 "59:\[\t \]+CL;" \
+		 "98:\[\t \]+CL;" \
+		 "42:\[\t \]+anon_struct_t;" \
+		 "65:\[\t \]+anon_union_t;" \
 		 "21:\[\t \]+baz_t;" \
 		 "33:\[\t \]+enum_t;" \
+		 "56:\[\t \]+union_t;" \
+		 "52:\[\t \]+typedef enum {\\.\\.\\.} anon_enum_t;" \
+		 "45:\[\t \]+typedef anon_struct_t anon_struct_t;" \
+		 "68:\[\t \]+typedef anon_union_t anon_union_t;" \
 		 "28:\[\t \]+typedef baz_t baz;" \
 		 "31:\[\t \]+typedef baz_t \\* baz_ptr;" \
 		 "27:\[\t \]+typedef baz_t baz_t;" \
 		 "\[\t \]+double" \
 		 "\[\t \]+float" \
 		 "\[\t \]+int" \
-		 "64:\[\t \]+typedef CL my_cl;" \
+		 "103:\[\t \]+typedef CL my_cl;" \
 		 "38:\[\t \]+typedef enum_t my_enum_t;" \
 		 "17:\[\t \]+typedef float my_float_t;" \
 		 "16:\[\t \]+typedef int my_int_t;" \
-		 "65:\[\t \]+typedef CL \\* my_ptr;" \
+		 "104:\[\t \]+typedef CL \\* my_ptr;" \
+		 "54:\[\t \]+typedef enum {\\.\\.\\.} nested_anon_enum_t;" \
+		 "47:\[\t \]+typedef anon_struct_t nested_anon_struct_t;" \
+		 "70:\[\t \]+typedef anon_union_t nested_anon_union_t;" \
 		 "30:\[\t \]+typedef baz_t nested_baz;" \
 		 "29:\[\t \]+typedef baz_t nested_baz_t;" \
 		 "39:\[\t \]+typedef enum_t nested_enum_t;" \
 		 "19:\[\t \]+typedef float nested_float_t;" \
 		 "18:\[\t \]+typedef int nested_int_t;" \
+		 "62:\[\t \]+typedef union_t nested_union_t;" \
 		 "\[\t \]+unsigned int"]
     } else {
 	set output_re \
@@ -83,6 +93,9 @@ proc run_test { lang } {
 		 "All defined types:" \
 		 "" \
 		 "File .*:" \
+		 "52:\[\t \]+typedef enum {\\.\\.\\.} anon_enum_t;" \
+		 "45:\[\t \]+typedef struct {\\.\\.\\.} anon_struct_t;" \
+		 "68:\[\t \]+typedef union {\\.\\.\\.} anon_union_t;" \
 		 "28:\[\t \]+typedef struct baz_t baz;" \
 		 "31:\[\t \]+typedef struct baz_t \\* baz_ptr;" \
 		 "21:\[\t \]+struct baz_t;" \
@@ -93,11 +106,16 @@ proc run_test { lang } {
 		 "38:\[\t \]+typedef enum enum_t my_enum_t;" \
 		 "17:\[\t \]+typedef float my_float_t;" \
 		 "16:\[\t \]+typedef int my_int_t;" \
+		 "54:\[\t \]+typedef enum {\\.\\.\\.} nested_anon_enum_t;" \
+		 "47:\[\t \]+typedef struct {\\.\\.\\.} nested_anon_struct_t;" \
+		 "70:\[\t \]+typedef union {\\.\\.\\.} nested_anon_union_t;" \
 		 "30:\[\t \]+typedef struct baz_t nested_baz;" \
 		 "29:\[\t \]+typedef struct baz_t nested_baz_t;" \
 		 "39:\[\t \]+typedef enum enum_t nested_enum_t;" \
 		 "19:\[\t \]+typedef float nested_float_t;" \
 		 "18:\[\t \]+typedef int nested_int_t;" \
+		 "62:\[\t \]+typedef union union_t nested_union_t;" \
+		 "56:\[\t \]+union union_t;" \
 		 "\[\t \]+unsigned int" ]
     }
 
