This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix parts of PR46808


Currently we emit a type mismatch warning after erroring on overriding
a function with a variable at lto symtab merging time.  The warning
is spurious, fixed with the following patch.

Bootstrap and regtest on x86_64-unknown-linux-gnu, will apply if that
succeeds.

Thanks,
Richard.

2010-12-10  Richard Guenther  <rguenther@suse.de>

	PR lto/46808
	* lto-symtab.c (lto_symtab_merge_decls_2): Avoid type warnings
	after errors.
	(lto_symtab_merge_decls_1): Adjust.

Index: gcc/lto-symtab.c
===================================================================
*** gcc/lto-symtab.c	(revision 167686)
--- gcc/lto-symtab.c	(working copy)
*************** found:
*** 590,605 ****
  }
  
  /* Merge all decls in the symbol table chain to the prevailing decl and
!    issue diagnostics about type mismatches.  */
  
  static void
! lto_symtab_merge_decls_2 (void **slot)
  {
    lto_symtab_entry_t prevailing, e;
    VEC(tree, heap) *mismatches = NULL;
    unsigned i;
    tree decl;
-   bool diagnosed_p = false;
  
    /* Nothing to do for a single entry.  */
    prevailing = (lto_symtab_entry_t) *slot;
--- 590,605 ----
  }
  
  /* Merge all decls in the symbol table chain to the prevailing decl and
!    issue diagnostics about type mismatches.  If DIAGNOSED_P is true
!    do not issue further diagnostics.*/
  
  static void
! lto_symtab_merge_decls_2 (void **slot, bool diagnosed_p)
  {
    lto_symtab_entry_t prevailing, e;
    VEC(tree, heap) *mismatches = NULL;
    unsigned i;
    tree decl;
  
    /* Nothing to do for a single entry.  */
    prevailing = (lto_symtab_entry_t) *slot;
*************** lto_symtab_merge_decls_2 (void **slot)
*** 609,615 ****
    /* Try to merge each entry with the prevailing one.  */
    for (e = prevailing->next; e; e = e->next)
      {
!       if (!lto_symtab_merge (prevailing, e))
  	VEC_safe_push (tree, heap, mismatches, e->decl);
      }
    if (VEC_empty (tree, mismatches))
--- 609,616 ----
    /* Try to merge each entry with the prevailing one.  */
    for (e = prevailing->next; e; e = e->next)
      {
!       if (!lto_symtab_merge (prevailing, e)
! 	  && !diagnosed_p)
  	VEC_safe_push (tree, heap, mismatches, e->decl);
      }
    if (VEC_empty (tree, mismatches))
*************** lto_symtab_merge_decls_1 (void **slot, v
*** 748,759 ****
  
    /* Merge the chain to the single prevailing decl and diagnose
       mismatches.  */
!   lto_symtab_merge_decls_2 (slot);
! 
!   /* Drop all but the prevailing decl from the symtab.  */
!   if (TREE_CODE (prevailing->decl) != FUNCTION_DECL
!       && TREE_CODE (prevailing->decl) != VAR_DECL)
!     prevailing->next = NULL;
  
    /* Store resolution decision into the callgraph.  
       In LTRANS don't overwrite information we stored into callgraph at
--- 749,755 ----
  
    /* Merge the chain to the single prevailing decl and diagnose
       mismatches.  */
!   lto_symtab_merge_decls_2 (slot, diagnosed_p);
  
    /* Store resolution decision into the callgraph.  
       In LTRANS don't overwrite information we stored into callgraph at


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]