re PR debug/26881 (internal compiler error in dwarf2out_finish)
PR debug/26881 * cgraph.c: Fix comments. (cgraph_varpool_mark_needed_node): Mark only variables not already output to file. * cgraphunit.c: Update comments; include gt-cgraphunit.h (cgraph_varpool_assembled_nodes_queue): New static variable. (cgraph_varpool_assemble_decl): Record output decls for debug out code. (cgraph_varpool_output_debug_info): New function. (cgraph_finalize_compilation_unit, cgraph_optimize): Call it. * Makefile.in: Add gt-cgraphunit.h * gcc.dg/debug/pr26881.c: New file. From-SVN: r116374
This commit is contained in:
parent
96f4873b16
commit
a418679d8d
|
@ -1,3 +1,16 @@
|
|||
2006-08-24 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
PR debug/26881
|
||||
* cgraph.c: Fix comments.
|
||||
(cgraph_varpool_mark_needed_node): Mark only variables not already
|
||||
output to file.
|
||||
* cgraphunit.c: Update comments; include gt-cgraphunit.h
|
||||
(cgraph_varpool_assembled_nodes_queue): New static variable.
|
||||
(cgraph_varpool_assemble_decl): Record output decls for debug out code.
|
||||
(cgraph_varpool_output_debug_info): New function.
|
||||
(cgraph_finalize_compilation_unit, cgraph_optimize): Call it.
|
||||
* Makefile.in: Add gt-cgraphunit.h
|
||||
|
||||
2006-08-24 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* predict.c (probability_reliable_p): New predicate.
|
||||
|
|
|
@ -2290,7 +2290,8 @@ cgraphunit.o : cgraphunit.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
|
|||
$(TREE_H) langhooks.h $(TREE_INLINE_H) toplev.h $(FLAGS_H) $(GGC_H) \
|
||||
$(TARGET_H) $(CGRAPH_H) intl.h pointer-set.h $(FUNCTION_H) $(TREE_GIMPLE_H) \
|
||||
$(TREE_FLOW_H) tree-pass.h $(C_COMMON_H) debug.h $(DIAGNOSTIC_H) \
|
||||
$(FIBHEAP_H) output.h $(PARAMS_H) $(RTL_H) $(TIMEVAR_H) ipa-prop.h
|
||||
$(FIBHEAP_H) output.h $(PARAMS_H) $(RTL_H) $(TIMEVAR_H) ipa-prop.h \
|
||||
gt-cgraphunit.h
|
||||
ipa.o : ipa.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(CGRAPH_H)
|
||||
ipa-prop.o : ipa-prop.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
|
||||
langhooks.h $(GGC_H) $(TARGET_H) $(CGRAPH_H) ipa-prop.h \
|
||||
|
@ -2867,7 +2868,7 @@ GTFILES = $(srcdir)/input.h $(srcdir)/coretypes.h \
|
|||
$(srcdir)/ipa-reference.c $(srcdir)/tree-ssa-structalias.h \
|
||||
$(srcdir)/tree-ssa-structalias.c \
|
||||
$(srcdir)/c-pragma.h $(srcdir)/omp-low.c \
|
||||
$(srcdir)/targhooks.c $(out_file) \
|
||||
$(srcdir)/targhooks.c $(srcdir)/cgraphunit.c $(out_file) \
|
||||
@all_gtfiles@
|
||||
|
||||
GTFILES_FILES_LANGS = @all_gtfiles_files_langs@
|
||||
|
@ -2899,7 +2900,7 @@ gt-tree-profile.h gt-tree-ssa-address.h \
|
|||
gt-tree-ssanames.h gt-tree-iterator.h gt-gimplify.h \
|
||||
gt-tree-phinodes.h gt-tree-nested.h \
|
||||
gt-tree-ssa-operands.h gt-tree-ssa-propagate.h \
|
||||
gt-tree-ssa-structalias.h gt-ipa-inline.h \
|
||||
gt-tree-ssa-structalias.h gt-ipa-inline.h gt-cgraphunit.h \
|
||||
gt-stringpool.h gt-targhooks.h gt-omp-low.h : s-gtype ; @true
|
||||
|
||||
define echo_quoted_to_gtyp
|
||||
|
|
|
@ -47,9 +47,9 @@ The callgraph:
|
|||
be accessed in such an invisible way and it shall be considered an
|
||||
entry point to the callgraph.
|
||||
|
||||
Intraprocedural information:
|
||||
Interprocedural information:
|
||||
|
||||
Callgraph is place to store data needed for intraprocedural optimization.
|
||||
Callgraph is place to store data needed for interprocedural optimization.
|
||||
All data structures are divided into three components: local_info that
|
||||
is produced while analyzing the function, global_info that is result
|
||||
of global walking of the callgraph on the end of compilation and
|
||||
|
@ -921,7 +921,8 @@ cgraph_varpool_reset_queue (void)
|
|||
void
|
||||
cgraph_varpool_mark_needed_node (struct cgraph_varpool_node *node)
|
||||
{
|
||||
if (!node->needed && node->finalized)
|
||||
if (!node->needed && node->finalized
|
||||
&& !TREE_ASM_WRITTEN (node->decl))
|
||||
cgraph_varpool_enqueue_needed_node (node);
|
||||
node->needed = 1;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* Callgraph based intraprocedural optimizations.
|
||||
/* Callgraph based interprocedural optimizations.
|
||||
Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
|
||||
Contributed by Jan Hubicka
|
||||
|
||||
|
@ -20,7 +20,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
|
|||
02110-1301, USA. */
|
||||
|
||||
/* This module implements main driver of compilation process as well as
|
||||
few basic intraprocedural optimizers.
|
||||
few basic interprocedural optimizers.
|
||||
|
||||
The main scope of this file is to act as an interface in between
|
||||
tree based frontends and the backend (and middle end)
|
||||
|
@ -174,6 +174,9 @@ static tree record_reference (tree *, int *, void *);
|
|||
static void cgraph_output_pending_asms (void);
|
||||
static void cgraph_increase_alignment (void);
|
||||
|
||||
/* Lists all assembled variables to be sent to debugger output later on. */
|
||||
static GTY(()) struct cgraph_varpool_node *cgraph_varpool_assembled_nodes_queue;
|
||||
|
||||
/* Records tree nodes seen in record_reference. Simply using
|
||||
walk_tree_without_duplicates doesn't guarantee each node is visited
|
||||
once because it gets a new htab upon each recursive call from
|
||||
|
@ -856,18 +859,7 @@ cgraph_varpool_assemble_decl (struct cgraph_varpool_node *node)
|
|||
&& (TREE_CODE (decl) != VAR_DECL || !DECL_HAS_VALUE_EXPR_P (decl)))
|
||||
{
|
||||
assemble_variable (decl, 0, 1, 0);
|
||||
/* Local static variables are never seen by check_global_declarations
|
||||
so we need to output debug info by hand. */
|
||||
if (DECL_CONTEXT (decl)
|
||||
&& (TREE_CODE (DECL_CONTEXT (decl)) == BLOCK
|
||||
|| TREE_CODE (DECL_CONTEXT (decl)) == FUNCTION_DECL)
|
||||
&& errorcount == 0 && sorrycount == 0)
|
||||
{
|
||||
timevar_push (TV_SYMOUT);
|
||||
(*debug_hooks->global_decl) (decl);
|
||||
timevar_pop (TV_SYMOUT);
|
||||
}
|
||||
return true;
|
||||
return TREE_ASM_WRITTEN (decl);
|
||||
}
|
||||
|
||||
return false;
|
||||
|
@ -893,11 +885,39 @@ cgraph_varpool_assemble_pending_decls (void)
|
|||
|
||||
cgraph_varpool_nodes_queue = cgraph_varpool_nodes_queue->next_needed;
|
||||
if (cgraph_varpool_assemble_decl (node))
|
||||
changed = true;
|
||||
node->next_needed = NULL;
|
||||
{
|
||||
changed = true;
|
||||
node->next_needed = cgraph_varpool_assembled_nodes_queue;
|
||||
cgraph_varpool_assembled_nodes_queue = node;
|
||||
node->finalized = 1;
|
||||
}
|
||||
else
|
||||
node->next_needed = NULL;
|
||||
}
|
||||
return changed;
|
||||
}
|
||||
/* Output all variables enqueued to be assembled. */
|
||||
static void
|
||||
cgraph_varpool_output_debug_info (void)
|
||||
{
|
||||
timevar_push (TV_SYMOUT);
|
||||
if (errorcount == 0 && sorrycount == 0)
|
||||
while (cgraph_varpool_assembled_nodes_queue)
|
||||
{
|
||||
struct cgraph_varpool_node *node = cgraph_varpool_assembled_nodes_queue;
|
||||
|
||||
/* Local static variables are never seen by check_global_declarations
|
||||
so we need to output debug info by hand. */
|
||||
if (DECL_CONTEXT (node->decl)
|
||||
&& (TREE_CODE (DECL_CONTEXT (node->decl)) == BLOCK
|
||||
|| TREE_CODE (DECL_CONTEXT (node->decl)) == FUNCTION_DECL)
|
||||
&& errorcount == 0 && sorrycount == 0)
|
||||
(*debug_hooks->global_decl) (node->decl);
|
||||
cgraph_varpool_assembled_nodes_queue = node->next_needed;
|
||||
node->next_needed = 0;
|
||||
}
|
||||
timevar_pop (TV_SYMOUT);
|
||||
}
|
||||
|
||||
/* Output all asm statements we have stored up to be output. */
|
||||
|
||||
|
@ -1043,6 +1063,7 @@ cgraph_finalize_compilation_unit (void)
|
|||
{
|
||||
cgraph_output_pending_asms ();
|
||||
cgraph_assemble_pending_functions ();
|
||||
cgraph_varpool_output_debug_info ();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1495,6 +1516,7 @@ cgraph_optimize (void)
|
|||
{
|
||||
cgraph_output_pending_asms ();
|
||||
cgraph_varpool_assemble_pending_decls ();
|
||||
cgraph_varpool_output_debug_info ();
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1506,7 +1528,7 @@ cgraph_optimize (void)
|
|||
|
||||
timevar_push (TV_CGRAPHOPT);
|
||||
if (!quiet_flag)
|
||||
fprintf (stderr, "Performing intraprocedural optimizations\n");
|
||||
fprintf (stderr, "Performing interprocedural optimizations\n");
|
||||
|
||||
cgraph_function_and_variable_visibility ();
|
||||
if (cgraph_dump_file)
|
||||
|
@ -1551,6 +1573,7 @@ cgraph_optimize (void)
|
|||
cgraph_varpool_remove_unreferenced_decls ();
|
||||
|
||||
cgraph_varpool_assemble_pending_decls ();
|
||||
cgraph_varpool_output_debug_info ();
|
||||
}
|
||||
|
||||
if (cgraph_dump_file)
|
||||
|
@ -1891,3 +1914,4 @@ save_inline_function_body (struct cgraph_node *node)
|
|||
return first_clone;
|
||||
}
|
||||
|
||||
#include "gt-cgraphunit.h"
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2006-08-24 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
PR debug/26881
|
||||
* gcc.dg/debug/pr26881.c: New file.
|
||||
|
||||
2006-08-23 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/28788
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-g -O0" } */
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
if (0)
|
||||
{
|
||||
static union
|
||||
{
|
||||
}
|
||||
u;
|
||||
typedef char tt;
|
||||
static tt c[8];
|
||||
return c[0] == 0x01 && c[1] == 0x02;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue