This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Better varpool patch
- From: Jan Hubicka <hubicka at ucw dot cz>
- To: gcc-patches at gcc dot gnu dot org, rth at redhat dot com
- Date: Sun, 22 Jun 2003 00:28:02 +0200
- Subject: Better varpool patch
Hi,
my variable pool patch changed behaviour of wrapup_global_declarations.
I assumed that frontend will like to register the declarations himself
without deferring them, but now I notice that this mechanizm is used for
various funny semantics - like forward declarations and such, so I
prevent the behavious and simply replace test for TREE_ASM_WRITTEN by
test on whether the variable is already in the database.
I also cleaned up way the queue is managed and killed bogus
DECL_DEFER_OUTPUT checks like in the previous patch.
The code finds some positives (dead global variables) even during GCC
bootstrap so I will send a patch for warning and fix for these in
separate patch.
Regtested/bootstrapped i386 with the previous patch. OK?
Honza
Sun Jun 22 02:13:41 CEST 2003 Jan Hubicka <jh@suse.cz>
* Makefile.in (varpool.o): New object.
(cgraphunit.o, toplev.o, varasm.o): Depend on varpool.h
* cgraphunit.c: (cgraph_finalize_compilation_unit): Assemble pending
decls.
(record_call_1): Record needed variables.
* toplev.c: Include varpool.h
(wrapup_global_declarations): Do not rely on TREE_ASM_WRITEN in varpool
mode.
(compile_file): assemble pending decls.
(rest_of_decl_copmilation): Add variable into varpool in unit-at-a-time
mode.
* varasm.c: Include varpool.h
(assemble_name): Mark varpool node as needed.
* varpool.c: New.
* varpool.h: New.
diff -Nrc3p gcc.tmp/cgraphunit.c gcc/cgraphunit.c
*** gcc.tmp/cgraphunit.c Sun Jun 22 02:08:31 2003
--- gcc/cgraphunit.c Sun Jun 22 02:10:30 2003
*************** Software Foundation, 59 Temple Place - S
*** 33,38 ****
--- 33,39 ----
#include "debug.h"
#include "target.h"
#include "cgraph.h"
+ #include "varpool.h"
#include "diagnostic.h"
static void cgraph_expand_functions PARAMS ((void));
*************** record_call_1 (tp, walk_subtrees, data)
*** 98,103 ****
--- 94,101 ----
int *walk_subtrees;
void *data;
{
+ if (TREE_CODE (*tp) == VAR_DECL && (TREE_STATIC (*tp) || DECL_EXTERNAL (*tp)))
+ varpool_mark_needed_node (varpool_node (*tp));
/* Record dereferences to the functions. This makes the functions
reachable unconditionally. */
if (TREE_CODE (*tp) == ADDR_EXPR)
*************** cgraph_finalize_compilation_unit ()
*** 147,152 ****
--- 147,154 ----
struct cgraph_node *node;
struct cgraph_edge *edge;
+ varpool_assemble_pending_decls ();
+
if (!quiet_flag)
{
fprintf (stderr, "\n\nInitial entry points:");
*************** cgraph_finalize_compilation_unit ()
*** 191,196 ****
--- 193,199 ----
cgraph_mark_needed_node (edge->callee, 0);
}
node->lowered = true;
+ varpool_assemble_pending_decls ();
}
/* Collect entry points to the unit. */
diff -Nrc3p gcc.tmp/toplev.c gcc/toplev.c
*** gcc.tmp/toplev.c Sun Jun 22 01:50:24 2003
--- gcc/toplev.c Sat Jun 21 19:32:56 2003
*************** Software Foundation, 59 Temple Place - S
*** 76,81 ****
--- 76,82 ----
#include "cfgloop.h"
#include "hosthooks.h"
#include "cgraph.h"
+ #include "varpool.h"
#include "opts.h"
#if defined (DWARF2_UNWIND_INFO) || defined (DWARF2_DEBUGGING_INFO)
*************** wrapup_global_declarations (tree *vec, i
*** 2054,2060 ****
{
bool needed = 1;
! if (TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)))
/* needed */;
else if (DECL_COMDAT (decl))
needed = 0;
--- 2063,2073 ----
{
bool needed = 1;
! if (flag_unit_at_a_time)
! needed = ((TREE_USED (decl)
! || TREE_USED (DECL_ASSEMBLER_NAME (decl)))
! && !varpool_node (decl)->finalized);
! else if (TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)))
/* needed */;
else if (DECL_COMDAT (decl))
needed = 0;
*************** compile_file (void)
*** 2226,2231 ****
--- 2259,2266 ----
(*lang_hooks.decls.final_write_globals)();
+ varpool_assemble_pending_decls ();
+
/* This must occur after the loop to output deferred functions.
Else the coverage initializer would not be emitted if all the
functions in this compilation unit were deferred. */
*************** rest_of_decl_compilation (tree decl,
*** 2326,2332 ****
/* Don't output anything when a tentative file-scope definition
is seen. But at end of compilation, do output code for them. */
if (at_end || !DECL_DEFER_OUTPUT (decl))
! assemble_variable (decl, top_level, at_end, 0);
#ifdef ASM_FINISH_DECLARE_OBJECT
if (decl == last_assemble_variable_decl)
--- 2361,2373 ----
/* Don't output anything when a tentative file-scope definition
is seen. But at end of compilation, do output code for them. */
if (at_end || !DECL_DEFER_OUTPUT (decl))
! {
! if (flag_unit_at_a_time && TREE_CODE (decl) != FUNCTION_DECL
! && top_level)
! varpool_finalize_decl (decl);
! else
! assemble_variable (decl, top_level, at_end, 0);
! }
#ifdef ASM_FINISH_DECLARE_OBJECT
if (decl == last_assemble_variable_decl)
diff -Nrc3p gcc.tmp/varasm.c gcc/varasm.c
*** gcc.tmp/varasm.c Sun Jun 22 02:08:31 2003
--- gcc/varasm.c Fri Jun 20 23:09:59 2003
*************** Software Foundation, 59 Temple Place - S
*** 50,55 ****
--- 50,56 ----
#include "debug.h"
#include "target.h"
#include "cgraph.h"
+ #include "varpool.h"
#ifdef XCOFF_DEBUGGING_INFO
#include "xcoffout.h" /* Needed for external data
*************** assemble_name (file, name)
*** 1746,1757 ****
id = maybe_get_identifier (real_name);
if (id)
{
! if (!TREE_SYMBOL_REFERENCED (id)
! && !cgraph_global_info_ready)
{
! struct cgraph_node *node = cgraph_node_for_identifier (id);
! if (node)
! cgraph_mark_needed_node (node, 1);
}
TREE_SYMBOL_REFERENCED (id) = 1;
}
--- 1750,1767 ----
id = maybe_get_identifier (real_name);
if (id)
{
! if (!TREE_SYMBOL_REFERENCED (id))
{
! struct varpool_node *vnode = varpool_node_for_identifier (id);
! if (vnode)
! varpool_mark_needed_node (vnode);
!
! if (!cgraph_global_info_ready)
! {
! struct cgraph_node *node = cgraph_node_for_identifier (id);
! if (node)
! cgraph_mark_needed_node (node, 1);
! }
}
TREE_SYMBOL_REFERENCED (id) = 1;
}
diff -Nrc3p gcc.tmp/varpool.c gcc/varpool.c
*** gcc.tmp/varpool.c Thu Jan 1 01:00:00 1970
--- gcc/varpool.c Sat Jun 21 18:35:24 2003
***************
*** 0 ****
--- 1,213 ----
+ /* Variable management code.
+ Copyright (C) 2003 Free Software Foundation, Inc.
+ Contributed by Jan Hubicka
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2, or (at your option) any later
+ version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING. If not, write to the Free
+ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+ 02111-1307, USA. */
+
+ #include "config.h"
+ #include "system.h"
+ #include "coretypes.h"
+ #include "tm.h"
+ #include "tree.h"
+ #include "tree-inline.h"
+ #include "langhooks.h"
+ #include "hashtab.h"
+ #include "toplev.h"
+ #include "flags.h"
+ #include "ggc.h"
+ #include "debug.h"
+ #include "target.h"
+ #include "varpool.h"
+ #include "varray.h"
+ #include "output.h"
+
+ /* The known declarations must not get garbage collected. Value graph
+ datastructures should not get saved via PCH code since this would
+ make it difficult to extend into intra-module optimizer later. So
+ we store only the references into the array to prevent gabrage
+ collector from deleting live data. */
+ static GTY(()) varray_type known_decls;
+
+ /* Hash table used to convert declarations into nodes. */
+ static htab_t varpool_hash = 0;
+
+ /* The linked list of cgraph nodes. */
+ struct varpool_node *varpool_nodes;
+
+ /* Queue of cgraph nodes scheduled to be lowered and output. */
+ struct varpool_node *varpool_nodes_queue;
+
+ /* Number of nodes in existence. */
+ int varpool_n_nodes;
+
+ /* Returns a hash code for P. */
+
+ static hashval_t
+ varpool_hash_node (const PTR p)
+ {
+ return (hashval_t)
+ htab_hash_pointer (DECL_ASSEMBLER_NAME
+ (((struct varpool_node *) p)->decl));
+ }
+
+ /* Returns non-zero if P1 and P2 are equal. */
+
+ static int
+ eq_varpool_node (const PTR p1, const PTR p2)
+ {
+ return ((DECL_ASSEMBLER_NAME (((struct varpool_node *) p1)->decl)) ==
+ (tree) p2);
+ }
+
+ /* Return varpool node assigned to DECL. Create new one when needed. */
+ struct varpool_node *
+ varpool_node (tree decl)
+ {
+ struct varpool_node *node;
+ struct varpool_node **slot;
+
+ if (!DECL_P (decl) || TREE_CODE (decl) == FUNCTION_DECL)
+ abort ();
+
+ if (!varpool_hash)
+ {
+ varpool_hash = htab_create (10, varpool_hash_node, eq_varpool_node, NULL);
+ VARRAY_TREE_INIT (known_decls, 32, "known_decls");
+ }
+
+ slot =
+ (struct varpool_node **) htab_find_slot_with_hash (varpool_hash,
+ DECL_ASSEMBLER_NAME (decl),
+ htab_hash_pointer
+ (DECL_ASSEMBLER_NAME
+ (decl)), 1);
+ if (*slot)
+ return *slot;
+ node = xcalloc (sizeof (*node), 1);
+ node->decl = decl;
+ node->next = varpool_nodes;
+ if (varpool_nodes)
+ varpool_nodes->previous = node;
+ node->previous = NULL;
+ varpool_nodes = node;
+ varpool_n_nodes++;
+ *slot = node;
+ VARRAY_PUSH_TREE (known_decls, decl);
+ return node;
+ }
+
+ /* Try to find existing function for identifier ID. */
+ struct varpool_node *
+ varpool_node_for_identifier (tree id)
+ {
+ struct varpool_node **slot;
+
+ if (TREE_CODE (id) != IDENTIFIER_NODE)
+ abort ();
+
+ if (!varpool_hash)
+ {
+ varpool_hash = htab_create (10, varpool_hash_node, eq_varpool_node, NULL);
+ VARRAY_TREE_INIT (known_decls, 32, "known_decls");
+ }
+
+ slot =
+ (struct varpool_node **) htab_find_slot_with_hash (varpool_hash, id,
+ htab_hash_pointer (id), 0);
+ if (!slot)
+ return NULL;
+ return *slot;
+ }
+
+ /* Notify finalize_compilation_unit that given node is reachable
+ or needed. */
+ void
+ varpool_mark_needed_node (struct varpool_node *node)
+ {
+ if (!node->needed && node->finalized)
+ {
+ node->aux = varpool_nodes_queue;
+ varpool_nodes_queue = node;
+ }
+ node->needed = 1;
+ }
+
+ void
+ varpool_finalize_decl (tree decl)
+ {
+ struct varpool_node *node = varpool_node (decl);
+
+ if (node->needed && !node->finalized)
+ {
+ node->aux = varpool_nodes_queue;
+ varpool_nodes_queue = node;
+ }
+ node->finalized = true;
+
+ if (/* Externally visible variables must be output. The exception are
+ COMDAT functions that must be output only when they are needed. */
+ (TREE_PUBLIC (decl) && !DECL_COMDAT (decl))
+ /* Function whose name is output to the assembler file must be produced.
+ It is possible to assemble the name later after finalizing the function
+ and the fact is noticed in assemble_name then. */
+ || (DECL_ASSEMBLER_NAME_SET_P (decl)
+ && TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))))
+ {
+ varpool_mark_needed_node (node);
+ }
+ }
+
+ bool
+ varpool_assemble_pending_decls ()
+ {
+ bool changed = false;
+
+ while (varpool_nodes_queue)
+ {
+ tree decl = varpool_nodes_queue->decl;
+ struct varpool_node *node = varpool_nodes_queue;
+
+ varpool_nodes_queue = varpool_nodes_queue->aux;
+ if (!TREE_ASM_WRITTEN (decl))
+ {
+ assemble_variable (decl, 0, 1, 0);
+ changed = true;
+ }
+ node->aux = NULL;
+ }
+ return changed;
+ }
+
+ /* Dump the callgraph. */
+
+ void
+ dump_varpool (FILE *f)
+ {
+ struct varpool_node *node;
+
+ fprintf (f, "\nKnown values:\n\n");
+ for (node = varpool_nodes; node; node = node->next)
+ {
+ fprintf (f, "%s", IDENTIFIER_POINTER (DECL_NAME (node->decl)));
+ if (node->needed)
+ fprintf (f, " needed");
+ fprintf (f, "\n");
+ }
+ }
+
+ #include "gt-varpool.h"
diff -Nrc3p gcc.tmp/varpool.h gcc/varpool.h
*** gcc.tmp/varpool.h Thu Jan 1 01:00:00 1970
--- gcc/varpool.h Fri Jun 20 23:09:59 2003
***************
*** 0 ****
--- 1,57 ----
+ /* Variable management code.
+ Copyright (C) 2003 Free Software Foundation, Inc.
+ Contributed by Jan Hubicka
+
+ This file is part of GCC.
+
+ GCC is free software; you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation; either version 2, or (at your option) any later
+ version.
+
+ GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GCC; see the file COPYING. If not, write to the Free
+ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+ 02111-1307, USA. */
+
+ #ifndef GCC_VGRAPH_H
+ #define GCC_VGRAPH_H
+
+ /* The varpool data strutcture.
+ Each function decl has assigned varpool_node listing calees and callers. */
+
+ struct varpool_node
+ {
+ tree decl;
+ struct varpool_node *next, *previous;
+ void *aux;
+
+ /* Set when function must be output - it is externally visible
+ or it's address is taken. */
+ bool needed;
+ /* Set once it has been finalized so we consider it to be output. */
+ bool finalized;
+ /* Set when function is scheduled to be assembled. */
+ bool output;
+ };
+
+ extern struct varpool_node *varpool_nodes;
+ extern int varpool_n_nodes;
+ extern bool varpool_global_info_ready;
+ extern struct varpool_node *varpool_nodes_queue;
+
+ /* In varpool.c */
+ void dump_varpool (FILE *);
+ void varpool_remove_node (struct varpool_node *);
+ struct varpool_node *varpool_node (tree decl);
+ struct varpool_node *varpool_node_for_identifier (tree id);
+ void varpool_mark_needed_node (struct varpool_node *);
+ void varpool_finalize_decl (tree);
+ bool varpool_assemble_pending_decls (void);
+
+ #endif /* GCC_VGRAPH_H */
*** gcc.tmp/Makefile.in Sun Jun 22 01:50:18 2003
--- gcc/Makefile.in Sun Jun 22 02:31:10 2003
*************** OBJS = alias.o bb-reorder.o bitmap.o bui
*** 822,828 ****
stor-layout.o stringpool.o timevar.o toplev.o tracer.o tree.o tree-dump.o \
tree-inline.o unroll.o varasm.o varray.o version.o vmsdbgout.o xcoffout.o \
alloc-pool.o et-forest.o cgraph.o cgraphunit.o cfghooks.o \
! $(GGC) $(out_object_file) $(EXTRA_OBJS) $(host_hook_obj)
BACKEND = main.o libbackend.a
--- 822,828 ----
stor-layout.o stringpool.o timevar.o toplev.o tracer.o tree.o tree-dump.o \
tree-inline.o unroll.o varasm.o varray.o version.o vmsdbgout.o xcoffout.o \
alloc-pool.o et-forest.o cgraph.o cgraphunit.o cfghooks.o \
! varpool.o $(GGC) $(out_object_file) $(EXTRA_OBJS) $(host_hook_obj)
BACKEND = main.o libbackend.a
*************** toplev.o : toplev.c $(CONFIG_H) $(SYSTEM
*** 1489,1495 ****
graph.h $(LOOP_H) except.h $(REGS_H) $(TIMEVAR_H) $(lang_options_files) \
ssa.h $(PARAMS_H) $(TM_P_H) reload.h dwarf2asm.h $(TARGET_H) \
langhooks.h insn-flags.h options_.h cfglayout.h real.h cfgloop.h \
! hosthooks.h $(LANGHOOKS_DEF_H) cgraph.h
$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
-DTARGET_NAME=\"$(target_alias)\" \
-c $(srcdir)/toplev.c $(OUTPUT_OPTION)
--- 1489,1495 ----
graph.h $(LOOP_H) except.h $(REGS_H) $(TIMEVAR_H) $(lang_options_files) \
ssa.h $(PARAMS_H) $(TM_P_H) reload.h dwarf2asm.h $(TARGET_H) \
langhooks.h insn-flags.h options_.h cfglayout.h real.h cfgloop.h \
! hosthooks.h $(LANGHOOKS_DEF_H) cgraph.h varpool.h
$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
-DTARGET_NAME=\"$(target_alias)\" \
-c $(srcdir)/toplev.c $(OUTPUT_OPTION)
*************** errors.o : errors.c $(CONFIG_H) $(SYSTEM
*** 1516,1522 ****
varasm.o : varasm.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) \
flags.h function.h $(EXPR_H) hard-reg-set.h $(REGS_H) \
output.h c-pragma.h toplev.h xcoffout.h debug.h $(GGC_H) $(TM_P_H) \
! $(HASHTAB_H) $(TARGET_H) langhooks.h gt-varasm.h real.h
function.o : function.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
flags.h function.h $(EXPR_H) $(OPTABS_H) libfuncs.h $(REGS_H) hard-reg-set.h \
insn-config.h $(RECOG_H) output.h toplev.h except.h $(HASHTAB_H) $(GGC_H) \
--- 1516,1522 ----
varasm.o : varasm.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) \
flags.h function.h $(EXPR_H) hard-reg-set.h $(REGS_H) \
output.h c-pragma.h toplev.h xcoffout.h debug.h $(GGC_H) $(TM_P_H) \
! $(HASHTAB_H) $(TARGET_H) langhooks.h gt-varasm.h real.h varpool.h cgraph.h
function.o : function.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
flags.h function.h $(EXPR_H) $(OPTABS_H) libfuncs.h $(REGS_H) hard-reg-set.h \
insn-config.h $(RECOG_H) output.h toplev.h except.h $(HASHTAB_H) $(GGC_H) \
*************** simplify-rtx.o : simplify-rtx.c $(CONFIG
*** 1595,1602 ****
output.h function.h $(GGC_H) $(OBSTACK_H) $(TM_P_H) $(TREE_H) $(TARGET_H)
cgraph.o : cgraph.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 gt-cgraph.h
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
coverage.o : coverage.c gcov-io.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
$(TM_H) $(RTL_H) $(TREE_H) flags.h output.h $(REGS_H) $(EXPR_H) function.h \
toplev.h $(GGC_H) $(TARGET_H) langhooks.h $(COVERAGE_H) libfuncs.h \
--- 1595,1604 ----
output.h function.h $(GGC_H) $(OBSTACK_H) $(TM_P_H) $(TREE_H) $(TARGET_H)
cgraph.o : cgraph.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 gt-cgraph.h
+ varpool.o : varpool.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
+ langhooks.h tree-inline.h toplev.h flags.h ggc.h $(TARGET_H) varpool.h gt-varpool.h
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 varpool.h
coverage.o : coverage.c gcov-io.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
$(TM_H) $(RTL_H) $(TREE_H) flags.h output.h $(REGS_H) $(EXPR_H) function.h \
toplev.h $(GGC_H) $(TARGET_H) langhooks.h $(COVERAGE_H) libfuncs.h \
*************** GTFILES = $(srcdir)/input.h $(srcdir)/co
*** 1997,2003 ****
$(srcdir)/profile.c $(srcdir)/ra-build.c $(srcdir)/regclass.c \
$(srcdir)/reg-stack.c \
$(srcdir)/sdbout.c $(srcdir)/stmt.c $(srcdir)/stor-layout.c \
! $(srcdir)/stringpool.c $(srcdir)/tree.c $(srcdir)/varasm.c \
$(out_file) \
@all_gtfiles@
--- 1999,2005 ----
$(srcdir)/profile.c $(srcdir)/ra-build.c $(srcdir)/regclass.c \
$(srcdir)/reg-stack.c \
$(srcdir)/sdbout.c $(srcdir)/stmt.c $(srcdir)/stor-layout.c \
! $(srcdir)/stringpool.c $(srcdir)/tree.c $(srcdir)/varasm.c $(srcdir)/varpool.c \
$(out_file) \
@all_gtfiles@
*************** gt-expr.h gt-sdbout.h gt-optabs.h gt-bit
*** 2014,2020 ****
gt-dwarf2out.h gt-ra-build.h gt-reg-stack.h gt-dwarf2asm.h \
gt-dbxout.h gt-c-common.h gt-c-decl.h gt-c-parse.h \
gt-c-pragma.h gt-c-objc-common.h gtype-c.h gt-input.h \
! gt-stringpool.h : s-gtype ; @true
gtyp-gen.h: Makefile
echo "/* This file is machine generated. Do not edit. */" > tmp-gtyp.h
--- 2016,2022 ----
gt-dwarf2out.h gt-ra-build.h gt-reg-stack.h gt-dwarf2asm.h \
gt-dbxout.h gt-c-common.h gt-c-decl.h gt-c-parse.h \
gt-c-pragma.h gt-c-objc-common.h gtype-c.h gt-input.h \
! gt-stringpool.h gt-varpool.h : s-gtype ; @true
gtyp-gen.h: Makefile
echo "/* This file is machine generated. Do not edit. */" > tmp-gtyp.h