On Mon, 21 Aug 2017, Richard Biener wrote:

> 
> This was agreed upon and now that early LTO debug landed here it is.
> 
> Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.
> 
> In case the gcc_unreachable () gets through I'll instead remove the
> if as noted in my followup TODO.

Applied w/o the

@@ -10259,7 +10001,10 @@ output_die (dw_die_ref die)
          on the section beginning, not on the actual DIE.  */
       && (!flag_generate_lto
          || die->die_tag != DW_TAG_compile_unit))
-    output_die_symbol (die);
+    {
+      output_die_symbol (die);
+      gcc_unreachable ();
+    }

   dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (%#lx) %s)",
                               (unsigned long)die->die_offset,

hunk, I'll remove it as followup (passed LTO bootstrap and the dwarf
tests with -flto -g w/o ICEing).

Richard.

> Richard.
> 
> 2017-08-21  Richard Biener  <rguent...@suse.de>
> 
>       * common.opt (feliminate-dwarf2-dups): Ignore.
>       * doc/invoke.texi (feliminate-dwarf2-dups): Remove documentation.
>       * dwarf2out.c (push_new_compile_unit, pop_compile_unit,
>       same_die_p_wrap, compute_section_prefix,
>       is_symbol_die, assign_symbol_names, break_out_includes): Remove.
>       (comdat_symbol_id, comdat_symbol_number): Likewise.
>       (cu_hash_table_entry, cu_hash_table_entry_hasher, cu_hash_type):
>       Likewise.
>       (check_duplicate_cu, record_comdat_symbol_number): Likewise.
>       (output_die): Mark unreachable path unreachable.
>       (dwarf2out_start_source_file): Do not create DW_TAG_GNU_BINCL.
>       (dwarf2out_end_source_file): Do not create DW_TAG_GNU_EINCL.
>       (dwarf2out_init): Remove code handling flag_eliminate_dwarf2_dups.
>       (dwarf2out_early_finish): Likewise.
> 
>       * g++.dg/debug/dwarf2/dwarf2-1.C: Remove -feliminate-dwarf2-dups.
>       * g++.dg/debug/dwarf2/dwarf2-2.C: Likewise.
>       * g++.dg/debug/dwarf2/pr46123-2.C: Likewise.
>       * g++.dg/debug/dwarf2/typedef5.C: Likewise.
>       * gcc.dg/debug/dwarf2/dwarf2-3.c: Likewise.
>       * gcc.dg/debug/dwarf2/dwarf2-3.h: Likewise.
>       * gcc.dg/debug/dwarf2/dups-types.c: Remove.
>       * gcc.dg/debug/dwarf2/dups-types.h: Likewise.
> 
> Index: gcc/common.opt
> ===================================================================
> --- gcc/common.opt    (revision 251222)
> +++ gcc/common.opt    (working copy)
> @@ -1303,8 +1303,8 @@ Common Report Var(flag_early_inlining) I
>  Perform early inlining.
>  
>  feliminate-dwarf2-dups
> -Common Report Var(flag_eliminate_dwarf2_dups)
> -Perform DWARF duplicate elimination.
> +Common Ignore
> +Does nothing.  Preserved for backward compatibility.
>  
>  fipa-sra
>  Common Report Var(flag_ipa_sra) Init(0) Optimization
> Index: gcc/doc/invoke.texi
> ===================================================================
> --- gcc/doc/invoke.texi       (revision 251222)
> +++ gcc/doc/invoke.texi       (working copy)
> @@ -347,7 +347,7 @@ Objective-C and Objective-C++ Dialects}.
>  -gcolumn-info  -gno-column-info @gol
>  -gvms  -gxcoff  -gxcoff+  -gz@r{[}=@var{type}@r{]} @gol
>  -fdebug-prefix-map=@var{old}=@var{new}  -fdebug-types-section @gol
> --feliminate-dwarf2-dups  -fno-eliminate-unused-debug-types @gol
> +-fno-eliminate-unused-debug-types @gol
>  -femit-struct-debug-baseonly  -femit-struct-debug-reduced @gol
>  -femit-struct-debug-detailed@r{[}=@var{spec-list}@r{]} @gol
>  -feliminate-unused-debug-symbols  -femit-class-debug-always @gol
> @@ -6834,8 +6834,8 @@ for maximum benefit.
>  
>  GCC no longer supports DWARF Version 1, which is substantially
>  different than Version 2 and later.  For historical reasons, some
> -other DWARF-related options (including @option{-feliminate-dwarf2-dups} 
> -and @option{-fno-dwarf2-cfi-asm}) retain a reference to DWARF Version 2
> +other DWARF-related options such as
> +@option{-fno-dwarf2-cfi-asm}) retain a reference to DWARF Version 2
>  in their names, but apply to all currently-supported versions of DWARF.
>  
>  @item -gstabs
> @@ -7027,12 +7027,6 @@ writing compressed debug sections, the o
>  if the assembler does not support them, @option{-gz} is silently ignored
>  when producing object files.
>  
> -@item -feliminate-dwarf2-dups
> -@opindex feliminate-dwarf2-dups
> -Compress DWARF debugging information by eliminating duplicated
> -information about each symbol.  This option only makes sense when
> -generating DWARF debugging information.
> -
>  @item -femit-struct-debug-baseonly
>  @opindex femit-struct-debug-baseonly
>  Emit debug information for struct-like types
> Index: gcc/dwarf2out.c
> ===================================================================
> --- gcc/dwarf2out.c   (revision 251222)
> +++ gcc/dwarf2out.c   (working copy)
> @@ -3422,8 +3422,6 @@ static void equate_decl_number_to_die (t
>  static struct var_loc_node *add_var_loc_to_decl (tree, rtx, const char *);
>  static void print_spaces (FILE *);
>  static void print_die (dw_die_ref, FILE *);
> -static dw_die_ref push_new_compile_unit (dw_die_ref, dw_die_ref);
> -static dw_die_ref pop_compile_unit (dw_die_ref);
>  static void loc_checksum (dw_loc_descr_ref, struct md5_ctx *);
>  static void attr_checksum (dw_attr_node *, struct md5_ctx *, int *);
>  static void die_checksum (dw_die_ref, struct md5_ctx *, int *);
> @@ -3441,14 +3439,9 @@ static int same_loc_p (dw_loc_descr_ref,
>  static int same_dw_val_p (const dw_val_node *, const dw_val_node *, int *);
>  static int same_attr_p (dw_attr_node *, dw_attr_node *, int *);
>  static int same_die_p (dw_die_ref, dw_die_ref, int *);
> -static int same_die_p_wrap (dw_die_ref, dw_die_ref);
> -static void compute_section_prefix (dw_die_ref);
>  static int is_type_die (dw_die_ref);
>  static int is_comdat_die (dw_die_ref);
> -static int is_symbol_die (dw_die_ref);
>  static inline bool is_template_instantiation (dw_die_ref);
> -static void assign_symbol_names (dw_die_ref);
> -static void break_out_includes (dw_die_ref);
>  static int is_declaration_die (dw_die_ref);
>  static int should_move_die_to_comdat (dw_die_ref);
>  static dw_die_ref clone_as_declaration (dw_die_ref);
> @@ -5545,7 +5538,7 @@ dwarf2out_die_ref_for_decl (tree decl, c
>    while (die->die_parent)
>      die = die->die_parent;
>    /* For the containing CU DIE we compute a die_symbol in
> -     compute_section_prefix.  */
> +     compute_comp_unit_symbol.  */
>    gcc_assert (die->die_tag == DW_TAG_compile_unit
>             && die->die_id.die_symbol != NULL);
>    *sym = die->die_id.die_symbol;
> @@ -6468,31 +6461,6 @@ check_die (dw_die_ref die)
>      }
>  }
>  
> -/* Start a new compilation unit DIE for an include file.  OLD_UNIT is the CU
> -   for the enclosing include file, if any.  BINCL_DIE is the DW_TAG_GNU_BINCL
> -   DIE that marks the start of the DIEs for this include file.  */
> -
> -static dw_die_ref
> -push_new_compile_unit (dw_die_ref old_unit, dw_die_ref bincl_die)
> -{
> -  const char *filename = get_AT_string (bincl_die, DW_AT_name);
> -  dw_die_ref new_unit = gen_compile_unit_die (filename);
> -
> -  new_unit->die_sib = old_unit;
> -  return new_unit;
> -}
> -
> -/* Close an include-file CU and reopen the enclosing one.  */
> -
> -static dw_die_ref
> -pop_compile_unit (dw_die_ref old_unit)
> -{
> -  dw_die_ref new_unit = old_unit->die_sib;
> -
> -  old_unit->die_sib = NULL;
> -  return new_unit;
> -}
> -
>  #define CHECKSUM(FOO) md5_process_bytes (&(FOO), sizeof (FOO), ctx)
>  #define CHECKSUM_BLOCK(FOO, SIZE) md5_process_bytes ((FOO), (SIZE), ctx)
>  #define CHECKSUM_STRING(FOO) md5_process_bytes ((FOO), strlen (FOO), ctx)
> @@ -7462,27 +7430,6 @@ same_die_p (dw_die_ref die1, dw_die_ref
>    return 1;
>  }
>  
> -/* Do the dies look the same?  Wrapper around same_die_p.  */
> -
> -static int
> -same_die_p_wrap (dw_die_ref die1, dw_die_ref die2)
> -{
> -  int mark = 0;
> -  int ret = same_die_p (die1, die2, &mark);
> -
> -  unmark_all_dies (die1);
> -  unmark_all_dies (die2);
> -
> -  return ret;
> -}
> -
> -/* The prefix to attach to symbols on DIEs in the current comdat debug
> -   info section.  */
> -static const char *comdat_symbol_id;
> -
> -/* The index of the current symbol within the current comdat CU.  */
> -static unsigned int comdat_symbol_number;
> -
>  /* Calculate the MD5 checksum of the compilation unit DIE UNIT_DIE and its
>     children, and set die_symbol.  */
>  
> @@ -7523,15 +7470,6 @@ compute_comp_unit_symbol (dw_die_ref uni
>    unit_die->die_id.die_symbol = xstrdup (name);
>  }
>  
> -static void
> -compute_section_prefix (dw_die_ref unit_die)
> -{
> -  compute_comp_unit_symbol (unit_die);
> -  unit_die->comdat_type_p = true;
> -  comdat_symbol_id = unit_die->die_id.die_symbol;
> -  comdat_symbol_number = 0;
> -}
> -
>  /* Returns nonzero if DIE represents a type, in the sense of TYPE_P.  */
>  
>  static int
> @@ -7595,18 +7533,6 @@ is_comdat_die (dw_die_ref c)
>    return is_type_die (c);
>  }
>  
> -/* Returns 1 iff C is the sort of DIE that might be referred to from another
> -   compilation unit.  */
> -
> -static int
> -is_symbol_die (dw_die_ref c)
> -{
> -  return (is_type_die (c)
> -       || is_declaration_die (c)
> -       || c->die_tag == DW_TAG_namespace
> -       || c->die_tag == DW_TAG_module);
> -}
> -
>  /* Returns true iff C is a compile-unit DIE.  */
>  
>  static inline bool
> @@ -7683,190 +7609,6 @@ gen_internal_sym (const char *prefix)
>    return xstrdup (buf);
>  }
>  
> -/* Assign symbols to all worthy DIEs under DIE.  */
> -
> -static void
> -assign_symbol_names (dw_die_ref die)
> -{
> -  dw_die_ref c;
> -
> -  if (is_symbol_die (die) && !die->comdat_type_p)
> -    {
> -      if (comdat_symbol_id)
> -     {
> -       char *p = XALLOCAVEC (char, strlen (comdat_symbol_id) + 64);
> -
> -       sprintf (p, "%s.%s.%x", DIE_LABEL_PREFIX,
> -                comdat_symbol_id, comdat_symbol_number++);
> -       die->die_id.die_symbol = xstrdup (p);
> -     }
> -      else
> -     die->die_id.die_symbol = gen_internal_sym ("LDIE");
> -    }
> -
> -  FOR_EACH_CHILD (die, c, assign_symbol_names (c));
> -}
> -
> -struct cu_hash_table_entry
> -{
> -  dw_die_ref cu;
> -  unsigned min_comdat_num, max_comdat_num;
> -  struct cu_hash_table_entry *next;
> -};
> -
> -/* Helpers to manipulate hash table of CUs.  */
> -
> -struct cu_hash_table_entry_hasher : pointer_hash <cu_hash_table_entry>
> -{
> -  typedef die_struct *compare_type;
> -  static inline hashval_t hash (const cu_hash_table_entry *);
> -  static inline bool equal (const cu_hash_table_entry *, const die_struct *);
> -  static inline void remove (cu_hash_table_entry *);
> -};
> -
> -inline hashval_t
> -cu_hash_table_entry_hasher::hash (const cu_hash_table_entry *entry)
> -{
> -  return htab_hash_string (entry->cu->die_id.die_symbol);
> -}
> -
> -inline bool
> -cu_hash_table_entry_hasher::equal (const cu_hash_table_entry *entry1,
> -                                const die_struct *entry2)
> -{
> -  return !strcmp (entry1->cu->die_id.die_symbol, entry2->die_id.die_symbol);
> -}
> -
> -inline void
> -cu_hash_table_entry_hasher::remove (cu_hash_table_entry *entry)
> -{
> -  struct cu_hash_table_entry *next;
> -
> -  while (entry)
> -    {
> -      next = entry->next;
> -      free (entry);
> -      entry = next;
> -    }
> -}
> -
> -typedef hash_table<cu_hash_table_entry_hasher> cu_hash_type;
> -
> -/* Check whether we have already seen this CU and set up SYM_NUM
> -   accordingly.  */
> -static int
> -check_duplicate_cu (dw_die_ref cu, cu_hash_type *htable, unsigned int 
> *sym_num)
> -{
> -  struct cu_hash_table_entry dummy;
> -  struct cu_hash_table_entry **slot, *entry, *last = &dummy;
> -
> -  dummy.max_comdat_num = 0;
> -
> -  slot = htable->find_slot_with_hash (cu,
> -                                   htab_hash_string (cu->die_id.die_symbol),
> -                                   INSERT);
> -  entry = *slot;
> -
> -  for (; entry; last = entry, entry = entry->next)
> -    {
> -      if (same_die_p_wrap (cu, entry->cu))
> -     break;
> -    }
> -
> -  if (entry)
> -    {
> -      *sym_num = entry->min_comdat_num;
> -      return 1;
> -    }
> -
> -  entry = XCNEW (struct cu_hash_table_entry);
> -  entry->cu = cu;
> -  entry->min_comdat_num = *sym_num = last->max_comdat_num;
> -  entry->next = *slot;
> -  *slot = entry;
> -
> -  return 0;
> -}
> -
> -/* Record SYM_NUM to record of CU in HTABLE.  */
> -static void
> -record_comdat_symbol_number (dw_die_ref cu, cu_hash_type *htable,
> -                          unsigned int sym_num)
> -{
> -  struct cu_hash_table_entry **slot, *entry;
> -
> -  slot = htable->find_slot_with_hash (cu,
> -                                   htab_hash_string (cu->die_id.die_symbol),
> -                                   NO_INSERT);
> -  entry = *slot;
> -
> -  entry->max_comdat_num = sym_num;
> -}
> -
> -/* Traverse the DIE (which is always comp_unit_die), and set up
> -   additional compilation units for each of the include files we see
> -   bracketed by BINCL/EINCL.  */
> -
> -static void
> -break_out_includes (dw_die_ref die)
> -{
> -  dw_die_ref c;
> -  dw_die_ref unit = NULL;
> -  limbo_die_node *node, **pnode;
> -
> -  c = die->die_child;
> -  if (c) do {
> -    dw_die_ref prev = c;
> -    c = c->die_sib;
> -    while (c->die_tag == DW_TAG_GNU_BINCL || c->die_tag == DW_TAG_GNU_EINCL
> -        || (unit && is_comdat_die (c)))
> -      {
> -     dw_die_ref next = c->die_sib;
> -
> -     /* This DIE is for a secondary CU; remove it from the main one.  */
> -     remove_child_with_prev (c, prev);
> -
> -     if (c->die_tag == DW_TAG_GNU_BINCL)
> -       unit = push_new_compile_unit (unit, c);
> -     else if (c->die_tag == DW_TAG_GNU_EINCL)
> -       unit = pop_compile_unit (unit);
> -     else
> -       add_child_die (unit, c);
> -     c = next;
> -     if (c == die->die_child)
> -       break;
> -      }
> -  } while (c != die->die_child);
> -
> -#if 0
> -  /* We can only use this in debugging, since the frontend doesn't check
> -     to make sure that we leave every include file we enter.  */
> -  gcc_assert (!unit);
> -#endif
> -
> -  assign_symbol_names (die);
> -  cu_hash_type cu_hash_table (10);
> -  for (node = limbo_die_list, pnode = &limbo_die_list;
> -       node;
> -       node = node->next)
> -    {
> -      int is_dupl;
> -
> -      compute_section_prefix (node->die);
> -      is_dupl = check_duplicate_cu (node->die, &cu_hash_table,
> -                     &comdat_symbol_number);
> -      assign_symbol_names (node->die);
> -      if (is_dupl)
> -     *pnode = node->next;
> -      else
> -     {
> -       pnode = &node->next;
> -       record_comdat_symbol_number (node->die, &cu_hash_table,
> -             comdat_symbol_number);
> -     }
> -    }
> -}
> -
>  /* Return non-zero if this DIE is a declaration.  */
>  
>  static int
> @@ -10259,7 +10001,10 @@ output_die (dw_die_ref die)
>           on the section beginning, not on the actual DIE.  */
>        && (!flag_generate_lto
>         || die->die_tag != DW_TAG_compile_unit))
> -    output_die_symbol (die);
> +    {
> +      output_die_symbol (die);
> +      gcc_unreachable ();
> +    }
>  
>    dw2_asm_output_data_uleb128 (die->die_abbrev, "(DIE (%#lx) %s)",
>                              (unsigned long)die->die_offset,
> @@ -10452,9 +10197,9 @@ output_die (dw_die_ref die)
>                 else
>                   size = DWARF_OFFSET_SIZE;
>                 /* ???  We cannot unconditionally output die_offset if
> -                  non-zero - at least -feliminate-dwarf2-dups will
> -                  create references to those DIEs via symbols.  And we
> -                  do not clear its DIE offset after outputting it
> +                  non-zero - others might create references to those
> +                  DIEs via symbols.
> +                  And we do not clear its DIE offset after outputting it
>                    (and the label refers to the actual DIEs, not the
>                    DWARF CU unit header which is when using label + offset
>                    would be the correct thing to do).
> @@ -26946,15 +26691,6 @@ dwarf2out_source_line (unsigned int line
>  static void
>  dwarf2out_start_source_file (unsigned int lineno, const char *filename)
>  {
> -  if (flag_eliminate_dwarf2_dups)
> -    {
> -      /* Record the beginning of the file for break_out_includes.  */
> -      dw_die_ref bincl_die;
> -
> -      bincl_die = new_die (DW_TAG_GNU_BINCL, comp_unit_die (), NULL);
> -      add_AT_string (bincl_die, DW_AT_name, remap_debug_filename (filename));
> -    }
> -
>    if (debug_info_level >= DINFO_LEVEL_VERBOSE)
>      {
>        macinfo_entry e;
> @@ -26970,10 +26706,6 @@ dwarf2out_start_source_file (unsigned in
>  static void
>  dwarf2out_end_source_file (unsigned int lineno ATTRIBUTE_UNUSED)
>  {
> -  if (flag_eliminate_dwarf2_dups)
> -    /* Record the end of the file for break_out_includes.  */
> -    new_die (DW_TAG_GNU_EINCL, comp_unit_die (), NULL);
> -
>    if (debug_info_level >= DINFO_LEVEL_VERBOSE)
>      {
>        macinfo_entry e;
> @@ -27634,14 +27366,6 @@ init_sections_and_labels (bool early_lto
>  static void
>  dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
>  {
> -  /* This option is currently broken, see (PR53118 and PR46102).  */
> -  if (flag_eliminate_dwarf2_dups
> -      && strstr (lang_hooks.name, "C++"))
> -    {
> -      warning (0, "-feliminate-dwarf2-dups is broken for C++, ignoring");
> -      flag_eliminate_dwarf2_dups = 0;
> -    }
> -
>    /* Allocate the file_table.  */
>    file_table = hash_table<dwarf_file_hasher>::create_ggc (50);
>  
> @@ -30790,21 +30514,6 @@ dwarf2out_early_finish (const char *file
>        prune_unused_types ();
>      }
>  
> -  /* Generate separate CUs for each of the include files we've seen.
> -     They will go into limbo_die_list and from there to cu_die_list.  */
> -  if (flag_eliminate_dwarf2_dups)
> -    {
> -      gcc_assert (limbo_die_list == NULL);
> -      break_out_includes (comp_unit_die ());
> -      limbo_die_node *cu;
> -      while ((cu = limbo_die_list))
> -     {
> -       limbo_die_list = cu->next;
> -       cu->next = cu_die_list;
> -       cu_die_list = cu;
> -     }
> -    }
> -
>    /* Traverse the DIE's and note DIEs with DW_OP_GNU_variable_value still
>       with dw_val_class_decl_ref operand.  */
>    note_variable_value (comp_unit_die ());
> Index: gcc/testsuite/g++.dg/debug/dwarf2/dwarf2-1.C
> ===================================================================
> --- gcc/testsuite/g++.dg/debug/dwarf2/dwarf2-1.C      (revision 251222)
> +++ gcc/testsuite/g++.dg/debug/dwarf2/dwarf2-1.C      (working copy)
> @@ -1,11 +1,10 @@
> -/* { dg-bogus "-feliminate-dwarf2-dups is broken for C\\+\\+, ignoring" 
> "broken -feliminate-dwarf2-dups" { xfail *-*-* } } */
>  // Copyright (C) 2006 Free Software Foundation, Inc.
>  // Contributed by Nathan Sidwell 6 Jan 2006 <nat...@codesourcery.com>
>  
>  // PR 24824
>  // Origin:            wande...@rsu.ru
>  
> -// { dg-options "-gdwarf -feliminate-dwarf2-dups" }
> +// { dg-options "-gdwarf" }
>  
>  namespace N
>  {
> Index: gcc/testsuite/g++.dg/debug/dwarf2/dwarf2-2.C
> ===================================================================
> --- gcc/testsuite/g++.dg/debug/dwarf2/dwarf2-2.C      (revision 251222)
> +++ gcc/testsuite/g++.dg/debug/dwarf2/dwarf2-2.C      (working copy)
> @@ -1,7 +1,6 @@
> -/* { dg-bogus "-feliminate-dwarf2-dups is broken for C\\+\\+, ignoring" 
> "broken -feliminate-dwarf2-dups" { xfail *-*-* } } */
>  // PR debug/27057
>  // { dg-do compile }
> -// { dg-options "-gdwarf -feliminate-dwarf2-dups" }
> +// { dg-options "-gdwarf" }
>  
>  namespace N
>  {
> Index: gcc/testsuite/g++.dg/debug/dwarf2/pr46123-2.C
> ===================================================================
> --- gcc/testsuite/g++.dg/debug/dwarf2/pr46123-2.C     (revision 251222)
> +++ gcc/testsuite/g++.dg/debug/dwarf2/pr46123-2.C     (working copy)
> @@ -1,7 +1,6 @@
> -/* { dg-bogus "-feliminate-dwarf2-dups is broken for C\\+\\+, ignoring" 
> "broken -feliminate-dwarf2-dups" { xfail *-*-* } } */
>  // PR debug/46123
>  // { dg-do compile }
> -// { dg-options "-g -feliminate-dwarf2-dups" }
> +// { dg-options "-g" }
>  
>  struct foo
>  {
> Index: gcc/testsuite/g++.dg/debug/dwarf2/typedef5.C
> ===================================================================
> --- gcc/testsuite/g++.dg/debug/dwarf2/typedef5.C      (revision 251222)
> +++ gcc/testsuite/g++.dg/debug/dwarf2/typedef5.C      (working copy)
> @@ -1,6 +1,5 @@
> -/* { dg-bogus "-feliminate-dwarf2-dups is broken for C\\+\\+, ignoring" 
> "broken -feliminate-dwarf2-dups" { xfail *-*-* } } */
>  // Origin: PR debug/46101
> -// { dg-options "-gdwarf-2 -feliminate-dwarf2-dups" }
> +// { dg-options "-gdwarf-2" }
>  // { dg-do compile }
>  
>  typedef struct
> Index: gcc/testsuite/gcc.dg/debug/dwarf2/dups-types.c
> ===================================================================
> --- gcc/testsuite/gcc.dg/debug/dwarf2/dups-types.c    (revision 251222)
> +++ gcc/testsuite/gcc.dg/debug/dwarf2/dups-types.c    (nonexistent)
> @@ -1,8 +0,0 @@
> -/* Test that these two options can work together.  */
> -/* { dg-options "-gdwarf-4 -dA -feliminate-dwarf2-dups 
> -fdebug-types-section" } */
> -/* { dg-final { scan-assembler "DW.dups_types\.h\[^)\]*. DW_TAG_typedef" } } 
> */
> -/* { dg-final { scan-assembler "DW_TAG_type_unit" } } */
> -
> -#include "dups-types.h"
> -
> -A2 a;
> Index: gcc/testsuite/gcc.dg/debug/dwarf2/dups-types.h
> ===================================================================
> --- gcc/testsuite/gcc.dg/debug/dwarf2/dups-types.h    (revision 251222)
> +++ gcc/testsuite/gcc.dg/debug/dwarf2/dups-types.h    (nonexistent)
> @@ -1,10 +0,0 @@
> -struct A
> -{
> -  int i;
> -  int j;
> -};
> -
> -typedef struct A A2;
> -extern A2 a;
> -
> -A2 f(A2);
> Index: gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-3.c
> ===================================================================
> --- gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-3.c      (revision 251222)
> +++ gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-3.c      (working copy)
> @@ -1,7 +1,6 @@
> -/* Test -feliminate-dwarf2-dups */
>  /* Contributed by Devang Patel <dpa...@apple.com> */
>  /* { dg-do compile } */
> -/* { dg-options "-gdwarf -feliminate-dwarf2-dups" } */
> +/* { dg-options "-gdwarf" } */
>  
>  #include "dwarf2-3.h"
>  
> Index: gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-3.h
> ===================================================================
> --- gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-3.h      (revision 251222)
> +++ gcc/testsuite/gcc.dg/debug/dwarf2/dwarf2-3.h      (working copy)
> @@ -1,4 +1,3 @@
> -/* Test -feliminate-dwarf2-dups */
>  /* Contributed by Devang Patel <dpa...@apple.com> */
>  
>  struct point
> 

-- 
Richard Biener <rguent...@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 
21284 (AG Nuernberg)

Reply via email to