===================================================================
@@ -446,6 +446,8 @@ pp_c_specifier_qualifier_list (c_pretty_
{
const enum tree_code code = TREE_CODE (t);
+ if (TREE_CODE (t) != POINTER_TYPE)
+ pp_c_type_qualifier_list (pp, t);
switch (code)
{
case REFERENCE_TYPE:
@@ -492,8 +494,6 @@ pp_c_specifier_qualifier_list (c_pretty_
pp_simple_type_specifier (pp, t);
break;
}
- if (TREE_CODE (t) != POINTER_TYPE)
- pp_c_type_qualifier_list (pp, t);
}
/* parameter-type-list:
===================================================================
@@ -2813,7 +2813,7 @@ DEFHOOKPOD
"True if the @code{.debug_pubtypes} and @code{.debug_pubnames} sections\
should be emitted. These sections are not used on most platforms, and\
in particular GDB does not use them.",
- bool, true)
+ bool, false)
DEFHOOKPOD
(delay_sched2, "True if sched2 is not to be run at its normal place. \
===================================================================
@@ -19,7 +19,7 @@ const char* S3<char>::h(int) { return __
int main()
{
if (strcmp (S3<double>::h(7),
- "static char const* S3<T>::h(U) [with U = int; T = double]") == 0)
+ "static const char* S3<T>::h(U) [with U = int; T = double]") == 0)
return 0;
else
return 1;
===================================================================
@@ -16,4 +16,4 @@ int main ()
{
printf ("%s\n", D<int>().foo (0));
}
-// { dg-final { scan-assembler "char const\\* D<U>::foo\\(typename B<U>::X\\)" } }
+// { dg-final { scan-assembler "const char\\* D<U>::foo\\(typename B<U>::X\\)" } }
===================================================================
@@ -10,7 +10,7 @@ struct x {typedef int type;};
int main()
{
- if (strcmp (foo(x(), 3), "char const* foo(T, typename T::type) "
+ if (strcmp (foo(x(), 3), "const char* foo(T, typename T::type) "
"[with T = x; typename T::type = int]") == 0)
return 0;
else
===================================================================
@@ -8,7 +8,7 @@ public:
};
class Y {
- const int var;// { dg-warning "non-static const member 'int const Y::var' in class without a constructor" }
+ const int var;// { dg-warning "non-static const member 'const int Y::var' in class without a constructor" }
public:
int g(){ return 2*var; }
};
===================================================================
@@ -4,5 +4,5 @@
int* foo (volatile int *p)
{
- return (int*)p; // { dg-warning "cast from type 'int volatile\\*' to type 'int\\*' casts away qualifiers" }
+ return (int*)p; // { dg-warning "cast from type 'volatile int\\*' to type 'int\\*' casts away qualifiers" }
}
===================================================================
@@ -7,4 +7,4 @@ namespace { S f() { const char * s = __P
int main() { f(); }
-// { dg-final { scan-assembler "S \\(anonymous namespace\\)::f" } }
+// { dg-final { scan-assembler "S \{anonymous\}::f" } }
===================================================================
@@ -1028,7 +1028,7 @@ dump_decl (tree t, int flags)
dump_scope (CP_DECL_CONTEXT (t), flags);
flags &= ~TFF_UNQUALIFIED_NAME;
if (DECL_NAME (t) == NULL_TREE)
- pp_cxx_ws_string (cxx_pp, M_("(anonymous namespace)"));
+ pp_cxx_ws_string (cxx_pp, M_("{anonymous}"));
else
pp_cxx_tree_identifier (cxx_pp, DECL_NAME (t));
}
@@ -2595,8 +2595,6 @@ lang_decl_name (tree decl, int v, bool t
if (TREE_CODE (decl) == FUNCTION_DECL)
dump_function_name (decl, TFF_PLAIN_IDENTIFIER);
- else if (DECL_NAME (decl) == NULL && TREE_CODE (decl) == NAMESPACE_DECL)
- pp_string (cxx_pp, M_("(anonymous namespace)"));
else
dump_decl (DECL_NAME (decl), TFF_PLAIN_IDENTIFIER);
===================================================================
@@ -3347,7 +3347,6 @@ static void output_comp_unit (dw_die_ref
static void output_comdat_type_unit (comdat_type_node *);
static const char *dwarf2_name (tree, int);
static void add_pubname (tree, dw_die_ref);
-static void add_enumerator_pubname (const char *, const char *, dw_die_ref);
static void add_pubname_string (const char *, dw_die_ref);
static void add_pubtype (tree, dw_die_ref);
static void output_pubnames (VEC (pubname_entry,gc) *);
@@ -3551,12 +3550,6 @@ static void gen_scheduled_generic_parms_
#ifndef COLD_TEXT_SECTION_LABEL
#define COLD_TEXT_SECTION_LABEL "Ltext_cold"
#endif
-#ifndef DEBUG_PUBNAMES_SECTION_LABEL
-#define DEBUG_PUBNAMES_SECTION_LABEL "Ldebug_pubnames"
-#endif
-#ifndef DEBUG_PUBTYPES_SECTION_LABEL
-#define DEBUG_PUBTYPES_SECTION_LABEL "Ldebug_pubtypes"
-#endif
#ifndef DEBUG_LINE_SECTION_LABEL
#define DEBUG_LINE_SECTION_LABEL "Ldebug_line"
#endif
@@ -3593,8 +3586,6 @@ static char cold_end_label[MAX_ARTIFICIA
static char abbrev_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
static char debug_info_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
static char debug_line_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
-static char debug_pubnames_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
-static char debug_pubtypes_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
static char macinfo_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
static char loc_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
static char ranges_section_label[2 * MAX_ARTIFICIAL_LABEL_BYTES];
@@ -6729,22 +6720,6 @@ is_cu_die (dw_die_ref c)
return c && c->die_tag == DW_TAG_compile_unit;
}
-/* Returns true iff C is a namespace DIE. */
-
-static inline bool
-is_namespace_die (dw_die_ref c)
-{
- return c && c->die_tag == DW_TAG_namespace;
-}
-
-/* Returns true iff C is a class DIE. */
-
-static inline bool
-is_class_die (dw_die_ref c)
-{
- return c && c->die_tag == DW_TAG_class_type;
-}
-
static char *
gen_internal_sym (const char *prefix)
{
@@ -7317,15 +7292,6 @@ break_out_comdat_types (dw_die_ref die)
type_node->root_die = unit;
type_node->next = comdat_type_list;
comdat_type_list = type_node;
- if (targetm.want_debug_pub_sections)
- {
- /* FIXME: Should use add_AT_pubnamesptr. This works because most
- targets don't care what the base section is. */
- add_AT_lineptr (unit, DW_AT_GNU_pubnames,
- debug_pubnames_section_label);
- add_AT_lineptr (unit, DW_AT_GNU_pubtypes,
- debug_pubtypes_section_label);
- }
/* Generate the type signature. */
generate_type_signature (c, type_node);
@@ -8732,35 +8698,16 @@ add_pubname_string (const char *str, dw_
static void
add_pubname (tree decl, dw_die_ref die)
{
- if (!GENERATE_MINIMUM_LINE_TABLE && targetm.want_debug_pub_sections)
+ if (!GENERATE_MINIMUM_LINE_TABLE
+ && targetm.want_debug_pub_sections
+ && TREE_PUBLIC (decl))
{
- if ((TREE_PUBLIC (decl) && !is_class_die (die->die_parent))
- || is_cu_die (die->die_parent) || is_namespace_die (die->die_parent))
- {
- const char *name = dwarf2_name (decl, 1);
- if (name)
- add_pubname_string (name, die);
- }
+ const char *name = dwarf2_name (decl, 1);
+ if (name)
+ add_pubname_string (name, die);
}
}
-/* Add an enumerator to the pubnames section. */
-
-static void
-add_enumerator_pubname (const char *scope_name, const char *sep, dw_die_ref die)
-{
- const char *name;
- pubname_entry e;
-
- if (scope_name)
- name = concat (scope_name, sep, get_AT_string (die, DW_AT_name), NULL);
- else
- name = xstrdup (get_AT_string (die, DW_AT_name));
- e.name = name;
- e.die = die;
- VEC_safe_push (pubname_entry, gc, pubtype_table, &e);
-}
-
/* Add a new entry to .debug_pubtypes if appropriate. */
static void
@@ -8773,47 +8720,34 @@ add_pubtype (tree decl, dw_die_ref die)
e.name = NULL;
if ((TREE_PUBLIC (decl)
- || is_cu_die (die->die_parent) || is_namespace_die (die->die_parent))
+ || is_cu_die (die->die_parent))
&& (die->die_tag == DW_TAG_typedef || COMPLETE_TYPE_P (decl)))
{
- tree scope = NULL;
- const char *scope_name = NULL;
- const char *sep = is_cxx () ? "::" : ".";
- const char *name = NULL;
-
+ e.die = die;
if (TYPE_P (decl))
- name = type_tag (decl);
+ {
+ if (TYPE_NAME (decl))
+ {
+ if (TREE_CODE (TYPE_NAME (decl)) == IDENTIFIER_NODE)
+ e.name = IDENTIFIER_POINTER (TYPE_NAME (decl));
+ else if (TREE_CODE (TYPE_NAME (decl)) == TYPE_DECL
+ && DECL_NAME (TYPE_NAME (decl)))
+ e.name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (decl)));
+ else
+ e.name = xstrdup ((const char *) get_AT_string (die, DW_AT_name));
+ }
+ }
else
- name = lang_hooks.dwarf_name (decl, 1);
+ {
+ e.name = dwarf2_name (decl, 1);
+ if (e.name)
+ e.name = xstrdup (e.name);
+ }
/* If we don't have a name for the type, there's no point in adding
it to the table. */
- if (name == NULL || name[0] == '\0')
- return;
-
- e.die = die;
- e.name = xstrdup (name);
-
- scope = TYPE_P (decl) ? TYPE_CONTEXT (decl) : NULL;
- if (scope && TREE_CODE (scope) == NAMESPACE_DECL)
- {
- scope_name = lang_hooks.dwarf_name (scope, 1);
- if (scope_name != NULL)
- e.name = concat (scope_name, sep, e.name, NULL);
- }
- VEC_safe_push (pubname_entry, gc, pubtype_table, &e);
-
- /* Although it might be more consistent to add the pubinfo for the
- enumerators as their dies are created, they should only be added if the
- enum type meets the criteria above. So rather than re-check the parent
- enum type whenever an enumerator die is created, just output them all
- here. */
- if (die->die_tag == DW_TAG_enumeration_type)
- {
- dw_die_ref c;
-
- FOR_EACH_CHILD (die, c, add_enumerator_pubname (scope_name, sep, c));
- }
+ if (e.name && e.name[0] != '\0')
+ VEC_safe_push (pubname_entry, gc, pubtype_table, &e);
}
}
@@ -8827,18 +8761,6 @@ output_pubnames (VEC (pubname_entry, gc)
unsigned long pubnames_length = size_of_pubnames (names);
pubname_ref pub;
- if (!targetm.want_debug_pub_sections || !info_section_emitted)
- return;
- if (names == pubname_table)
- {
- switch_to_section (debug_pubnames_section);
- ASM_OUTPUT_LABEL (asm_out_file, debug_pubnames_section_label);
- }
- else
- {
- switch_to_section (debug_pubtypes_section);
- ASM_OUTPUT_LABEL (asm_out_file, debug_pubtypes_section_label);
- }
if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
dw2_asm_output_data (4, 0xffffffff,
"Initial length escape value indicating 64-bit DWARF extension");
@@ -9750,7 +9672,6 @@ base_type_die (tree type)
add_AT_unsigned (base_type_result, DW_AT_byte_size,
int_size_in_bytes (type));
add_AT_unsigned (base_type_result, DW_AT_encoding, encoding);
- add_pubtype (type, base_type_result);
return base_type_result;
}
@@ -19556,8 +19477,6 @@ gen_namespace_die (tree decl, dw_die_ref
add_AT_die_ref (namespace_die, DW_AT_import, origin_die);
equate_decl_number_to_die (decl, namespace_die);
}
- /* Bypass dwarf2_name's check for DECL_NAMELESS. */
- add_pubname_string (lang_hooks.dwarf_name (decl, 1), namespace_die);
}
/* Generate Dwarf debug information for a decl described by DECL.
@@ -21259,10 +21178,6 @@ dwarf2out_init (const char *filename ATT
ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
DEBUG_INFO_SECTION_LABEL, 0);
- ASM_GENERATE_INTERNAL_LABEL (debug_pubnames_section_label,
- DEBUG_PUBNAMES_SECTION_LABEL, 0);
- ASM_GENERATE_INTERNAL_LABEL (debug_pubtypes_section_label,
- DEBUG_PUBTYPES_SECTION_LABEL, 0);
ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
DEBUG_LINE_SECTION_LABEL, 0);
ASM_GENERATE_INTERNAL_LABEL (ranges_section_label,
@@ -22605,7 +22520,6 @@ optimize_location_lists (dw_die_ref die)
htab_delete (htab);
}
-
/* Output stuff that dwarf requires at the end of every file,
and generate the DWARF-2 debugging info. */
@@ -22862,17 +22776,6 @@ dwarf2out_finish (const char *filename)
}
htab_delete (comdat_type_table);
- /* Add the DW_AT_GNU_pubnames and DW_AT_GNU_pubtypes attributes. */
- if (targetm.want_debug_pub_sections)
- {
- /* FIXME: Should use add_AT_pubnamesptr. This works because most targets
- don't care what the base section is. */
- add_AT_lineptr (comp_unit_die (), DW_AT_GNU_pubnames,
- debug_pubnames_section_label);
- add_AT_lineptr (comp_unit_die (), DW_AT_GNU_pubtypes,
- debug_pubtypes_section_label);
- }
-
/* Output the main compilation unit if non-empty or if .debug_macinfo
will be emitted. */
output_comp_unit (comp_unit_die (), debug_info_level >= DINFO_LEVEL_VERBOSE);
@@ -22896,12 +22799,42 @@ dwarf2out_finish (const char *filename)
output_location_lists (comp_unit_die ());
}
- /* Output public names and types tables if necessary. */
- output_pubnames (pubname_table);
+ /* Output public names table if necessary. */
+ if (!VEC_empty (pubname_entry, pubname_table))
+ {
+ gcc_assert (info_section_emitted);
+ switch_to_section (debug_pubnames_section);
+ output_pubnames (pubname_table);
+ }
+
+ /* Output public types table if necessary. */
/* ??? Only defined by DWARF3, but emitted by Darwin for DWARF2.
It shouldn't hurt to emit it always, since pure DWARF2 consumers
simply won't look for the section. */
- output_pubnames (pubtype_table);
+ if (!VEC_empty (pubname_entry, pubtype_table))
+ {
+ bool empty = false;
+
+ if (flag_eliminate_unused_debug_types)
+ {
+ /* The pubtypes table might be emptied by pruning unused items. */
+ unsigned i;
+ pubname_ref p;
+ empty = true;
+ FOR_EACH_VEC_ELT (pubname_entry, pubtype_table, i, p)
+ if (p->die->die_offset != 0)
+ {
+ empty = false;
+ break;
+ }
+ }
+ if (!empty)
+ {
+ gcc_assert (info_section_emitted);
+ switch_to_section (debug_pubtypes_section);
+ output_pubnames (pubtype_table);
+ }
+ }
/* Output the address range information if a CU (.debug_info section)
was emitted. We output an empty table even if we had no functions