Commit 6de66680 by Zack Weinberg

langhooks.c: Don't include gt-langhooks.h.

	* langhooks.c: Don't include gt-langhooks.h.
	(var_labelno): Delete.
	(lhd_set_decl_assembler_name): Do not append a distinguishing
	number to file-scope internal-linkage declarations for the first
	input file, even if they have DECL_CONTEXT set.  Use DECL_UID of
	the declaration itself (if at block scope), or its containing
	TRANSLATION_UNIT_DECL (if at file scope) for the distinguishing
	number.

	* opts.c (cur_in_fname): New global.
	* opts.h: Declare it.
	* tree.c: Include opts.h.
	(make_node_stat): If creating a TRANSLATION_UNIT_DECL, give it
	DECL_UID equal to cur_in_fname.
	(copy_node_stat): Do not change DECL_UID when copying a
	TRANSLATION_UNIT_DECL.
	(build_common_tree_nodes): Adjust next_decl_uid to reserve the
	range 0 .. num_in_fnames-1 for TRANSLATION_UNIT_DECLs.

	* c-decl.c (c_static_assembler_name): Delete.
	* c-tree.h (c_static_assembler_name): Delete prototype.
	* c-lang.c, objc/objc-lang.c: Don't override
	LANG_HOOKS_SET_DECL_ASSEMBLER_NAME.

	* Makefile.in (tree.o): Update dependencies.
	(GTFILES): Remove langhooks.c.

cp:
	* decl.c (cxx_init_decl_processing): Call
	build_common_tree_nodes before creating the global NAMESPACE_DECL.

From-SVN: r84123
parent ab0e8f66
2004-07-05 Zack Weinberg <zack@codesourcery.com>
* langhooks.c: Don't include gt-langhooks.h.
(var_labelno): Delete.
(lhd_set_decl_assembler_name): Do not append a distinguishing
number to file-scope internal-linkage declarations for the first
input file, even if they have DECL_CONTEXT set. Use DECL_UID of
the declaration itself (if at block scope), or its containing
TRANSLATION_UNIT_DECL (if at file scope) for the distinguishing
number.
* opts.c (cur_in_fname): New global.
* opts.h: Declare it.
* tree.c: Include opts.h.
(make_node_stat): If creating a TRANSLATION_UNIT_DECL, give it
DECL_UID equal to cur_in_fname.
(copy_node_stat): Do not change DECL_UID when copying a
TRANSLATION_UNIT_DECL.
(build_common_tree_nodes): Adjust next_decl_uid to reserve the
range 0 .. num_in_fnames-1 for TRANSLATION_UNIT_DECLs.
* c-decl.c (c_static_assembler_name): Delete.
* c-tree.h (c_static_assembler_name): Delete prototype.
* c-lang.c, objc/objc-lang.c: Don't override
LANG_HOOKS_SET_DECL_ASSEMBLER_NAME.
* Makefile.in (tree.o): Update dependencies.
(GTFILES): Remove langhooks.c.
2004-07-05 Roger Sayle <roger@eyesopen.com> 2004-07-05 Roger Sayle <roger@eyesopen.com>
* fold-const.c (fold) <TRUNC_MOD_EXPR>: Optimize unsigned modulus * fold-const.c (fold) <TRUNC_MOD_EXPR>: Optimize unsigned modulus
......
...@@ -1569,7 +1569,7 @@ langhooks.o : langhooks.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) ...@@ -1569,7 +1569,7 @@ langhooks.o : langhooks.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H)
$(LANGHOOKS_DEF_H) $(FLAGS_H) $(GGC_H) gt-langhooks.h diagnostic.h $(LANGHOOKS_DEF_H) $(FLAGS_H) $(GGC_H) gt-langhooks.h diagnostic.h
tree.o : tree.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(FLAGS_H) function.h \ tree.o : tree.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(FLAGS_H) function.h \
toplev.h $(GGC_H) $(HASHTAB_H) $(TARGET_H) output.h $(TM_P_H) langhooks.h \ toplev.h $(GGC_H) $(HASHTAB_H) $(TARGET_H) output.h $(TM_P_H) langhooks.h \
real.h gt-tree.h tree-iterator.h $(BASIC_BLOCK_H) $(TREE_FLOW_H) real.h gt-tree.h tree-iterator.h $(BASIC_BLOCK_H) $(TREE_FLOW_H) opts.h
tree-dump.o: tree-dump.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \ tree-dump.o: tree-dump.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
$(C_TREE_H) $(FLAGS_H) langhooks.h toplev.h output.h c-pragma.h $(RTL_H) \ $(C_TREE_H) $(FLAGS_H) langhooks.h toplev.h output.h c-pragma.h $(RTL_H) \
$(GGC_H) $(EXPR_H) $(SPLAY_TREE_H) $(TREE_DUMP_H) tree-iterator.h $(GGC_H) $(EXPR_H) $(SPLAY_TREE_H) $(TREE_DUMP_H) tree-iterator.h
...@@ -2337,7 +2337,7 @@ GTFILES = $(srcdir)/input.h $(srcdir)/coretypes.h \ ...@@ -2337,7 +2337,7 @@ GTFILES = $(srcdir)/input.h $(srcdir)/coretypes.h \
$(srcdir)/fold-const.c $(srcdir)/function.c \ $(srcdir)/fold-const.c $(srcdir)/function.c \
$(srcdir)/gcse.c $(srcdir)/integrate.c $(srcdir)/lists.c $(srcdir)/optabs.c \ $(srcdir)/gcse.c $(srcdir)/integrate.c $(srcdir)/lists.c $(srcdir)/optabs.c \
$(srcdir)/profile.c $(srcdir)/ra-build.c $(srcdir)/regclass.c \ $(srcdir)/profile.c $(srcdir)/ra-build.c $(srcdir)/regclass.c \
$(srcdir)/reg-stack.c $(srcdir)/cfglayout.c $(srcdir)/langhooks.c \ $(srcdir)/reg-stack.c $(srcdir)/cfglayout.c \
$(srcdir)/sdbout.c $(srcdir)/stmt.c $(srcdir)/stor-layout.c \ $(srcdir)/sdbout.c $(srcdir)/stmt.c $(srcdir)/stor-layout.c \
$(srcdir)/stringpool.c $(srcdir)/tree.c $(srcdir)/varasm.c \ $(srcdir)/stringpool.c $(srcdir)/tree.c $(srcdir)/varasm.c \
$(srcdir)/tree-mudflap.c $(srcdir)/tree-flow.h \ $(srcdir)/tree-mudflap.c $(srcdir)/tree-flow.h \
......
...@@ -6576,22 +6576,6 @@ make_pointer_declarator (tree type_quals_attrs, tree target) ...@@ -6576,22 +6576,6 @@ make_pointer_declarator (tree type_quals_attrs, tree target)
return build1 (INDIRECT_REF, quals, itarget); return build1 (INDIRECT_REF, quals, itarget);
} }
/* A wrapper around lhd_set_decl_assembler_name that gives static
variables their C names if they are at file scope and only one
translation unit is being compiled, for backwards compatibility
with certain bizarre assembler hacks (like crtstuff.c). */
void
c_static_assembler_name (tree decl)
{
if (num_in_fnames == 1
&& !TREE_PUBLIC (decl) && DECL_CONTEXT (decl)
&& TREE_CODE (DECL_CONTEXT (decl)) == TRANSLATION_UNIT_DECL)
SET_DECL_ASSEMBLER_NAME (decl, DECL_NAME (decl));
else
lhd_set_decl_assembler_name (decl);
}
/* Perform final processing on file-scope data. */ /* Perform final processing on file-scope data. */
static void static void
c_write_global_declarations_1 (tree globals) c_write_global_declarations_1 (tree globals)
......
...@@ -76,8 +76,6 @@ enum c_language_kind c_language = clk_c; ...@@ -76,8 +76,6 @@ enum c_language_kind c_language = clk_c;
#define LANG_HOOKS_UNSAFE_FOR_REEVAL c_common_unsafe_for_reeval #define LANG_HOOKS_UNSAFE_FOR_REEVAL c_common_unsafe_for_reeval
#undef LANG_HOOKS_STATICP #undef LANG_HOOKS_STATICP
#define LANG_HOOKS_STATICP c_staticp #define LANG_HOOKS_STATICP c_staticp
#undef LANG_HOOKS_SET_DECL_ASSEMBLER_NAME
#define LANG_HOOKS_SET_DECL_ASSEMBLER_NAME c_static_assembler_name
#undef LANG_HOOKS_NO_BODY_BLOCKS #undef LANG_HOOKS_NO_BODY_BLOCKS
#define LANG_HOOKS_NO_BODY_BLOCKS true #define LANG_HOOKS_NO_BODY_BLOCKS true
#undef LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL #undef LANG_HOOKS_WARN_UNUSED_GLOBAL_DECL
......
...@@ -189,7 +189,6 @@ extern tree start_struct (enum tree_code, tree); ...@@ -189,7 +189,6 @@ extern tree start_struct (enum tree_code, tree);
extern void store_parm_decls (void); extern void store_parm_decls (void);
extern tree xref_tag (enum tree_code, tree); extern tree xref_tag (enum tree_code, tree);
extern int c_expand_decl (tree); extern int c_expand_decl (tree);
extern void c_static_assembler_name (tree);
extern tree make_pointer_declarator (tree, tree); extern tree make_pointer_declarator (tree, tree);
/* in c-objc-common.c */ /* in c-objc-common.c */
......
2004-07-05 Zack Weinberg <zack@codesourcery.com>
* decl.c (cxx_init_decl_processing): Call
build_common_tree_nodes before creating the global NAMESPACE_DECL.
2004-07-05 Giovanni Bajo <giovannibajo@gcc.gnu.org> 2004-07-05 Giovanni Bajo <giovannibajo@gcc.gnu.org>
PR c++/2518 PR c++/2518
......
...@@ -2887,6 +2887,8 @@ cxx_init_decl_processing (void) ...@@ -2887,6 +2887,8 @@ cxx_init_decl_processing (void)
tree void_ftype; tree void_ftype;
tree void_ftype_ptr; tree void_ftype_ptr;
build_common_tree_nodes (flag_signed_char);
/* Create all the identifiers we need. */ /* Create all the identifiers we need. */
initialize_predefined_identifiers (); initialize_predefined_identifiers ();
...@@ -2926,8 +2928,6 @@ cxx_init_decl_processing (void) ...@@ -2926,8 +2928,6 @@ cxx_init_decl_processing (void)
/* Initially, C. */ /* Initially, C. */
current_lang_name = lang_name_c; current_lang_name = lang_name_c;
build_common_tree_nodes (flag_signed_char);
error_mark_list = build_tree_list (error_mark_node, error_mark_node); error_mark_list = build_tree_list (error_mark_node, error_mark_node);
TREE_TYPE (error_mark_list) = error_mark_node; TREE_TYPE (error_mark_list) = error_mark_node;
......
...@@ -157,11 +157,6 @@ lhd_warn_unused_global_decl (tree decl) ...@@ -157,11 +157,6 @@ lhd_warn_unused_global_decl (tree decl)
return true; return true;
} }
/* Number for making the label on the next
static variable internal to a function. */
static GTY(()) int var_labelno;
/* Set the DECL_ASSEMBLER_NAME for DECL. */ /* Set the DECL_ASSEMBLER_NAME for DECL. */
void void
lhd_set_decl_assembler_name (tree decl) lhd_set_decl_assembler_name (tree decl)
...@@ -184,18 +179,33 @@ lhd_set_decl_assembler_name (tree decl) ...@@ -184,18 +179,33 @@ lhd_set_decl_assembler_name (tree decl)
Can't use just the variable's own name for a variable whose Can't use just the variable's own name for a variable whose
scope is less than the whole compilation. Concatenate a scope is less than the whole compilation. Concatenate a
distinguishing number. */ distinguishing number. If the decl is at block scope, the
if (!TREE_PUBLIC (decl) && DECL_CONTEXT (decl)) number assigned is the DECL_UID; if the decl is at file
scope, the number is the DECL_UID of the surrounding
TRANSLATION_UNIT_DECL, except for the T_U_D with UID 0.
Those (the file-scope internal-linkage declarations from the
first input file) get no suffix, which is consistent with
what has historically been done for file-scope declarations
with internal linkage. */
if (TREE_PUBLIC (decl)
|| DECL_CONTEXT (decl) == NULL_TREE
|| (TREE_CODE (DECL_CONTEXT (decl)) == TRANSLATION_UNIT_DECL
&& DECL_UID (DECL_CONTEXT (decl)) == 0))
SET_DECL_ASSEMBLER_NAME (decl, DECL_NAME (decl));
else
{ {
const char *name = IDENTIFIER_POINTER (DECL_NAME (decl)); const char *name = IDENTIFIER_POINTER (DECL_NAME (decl));
char *label; char *label;
unsigned int uid;
ASM_FORMAT_PRIVATE_NAME (label, name, var_labelno); if (TREE_CODE (DECL_CONTEXT (decl)) == TRANSLATION_UNIT_DECL)
var_labelno++; uid = DECL_UID (DECL_CONTEXT (decl));
else
uid = DECL_UID (decl);
ASM_FORMAT_PRIVATE_NAME (label, name, uid);
SET_DECL_ASSEMBLER_NAME (decl, get_identifier (label)); SET_DECL_ASSEMBLER_NAME (decl, get_identifier (label));
} }
else
SET_DECL_ASSEMBLER_NAME (decl, DECL_NAME (decl));
} }
else else
/* Nobody should ever be asking for the DECL_ASSEMBLER_NAME of /* Nobody should ever be asking for the DECL_ASSEMBLER_NAME of
...@@ -581,5 +591,3 @@ lhd_make_node (enum tree_code code) ...@@ -581,5 +591,3 @@ lhd_make_node (enum tree_code code)
{ {
return make_node (code); return make_node (code);
} }
#include "gt-langhooks.h"
...@@ -73,8 +73,6 @@ enum c_language_kind c_language = clk_objc; ...@@ -73,8 +73,6 @@ enum c_language_kind c_language = clk_objc;
#define LANG_HOOKS_UNSAFE_FOR_REEVAL c_common_unsafe_for_reeval #define LANG_HOOKS_UNSAFE_FOR_REEVAL c_common_unsafe_for_reeval
#undef LANG_HOOKS_STATICP #undef LANG_HOOKS_STATICP
#define LANG_HOOKS_STATICP c_staticp #define LANG_HOOKS_STATICP c_staticp
#undef LANG_HOOKS_SET_DECL_ASSEMBLER_NAME
#define LANG_HOOKS_SET_DECL_ASSEMBLER_NAME c_static_assembler_name
#undef LANG_HOOKS_NO_BODY_BLOCKS #undef LANG_HOOKS_NO_BODY_BLOCKS
#define LANG_HOOKS_NO_BODY_BLOCKS true #define LANG_HOOKS_NO_BODY_BLOCKS true
#undef LANG_HOOKS_DUP_LANG_SPECIFIC_DECL #undef LANG_HOOKS_DUP_LANG_SPECIFIC_DECL
......
...@@ -92,6 +92,7 @@ static bool flag_peel_loops_set, flag_branch_probabilities_set; ...@@ -92,6 +92,7 @@ static bool flag_peel_loops_set, flag_branch_probabilities_set;
/* Input file names. */ /* Input file names. */
const char **in_fnames; const char **in_fnames;
unsigned num_in_fnames; unsigned num_in_fnames;
unsigned cur_in_fname;
static size_t find_opt (const char *, int); static size_t find_opt (const char *, int);
static int common_handle_option (size_t scode, const char *arg, int value); static int common_handle_option (size_t scode, const char *arg, int value);
......
...@@ -57,4 +57,8 @@ extern const char **in_fnames; ...@@ -57,4 +57,8 @@ extern const char **in_fnames;
extern unsigned num_in_fnames; extern unsigned num_in_fnames;
/* Current input filename index. */
extern unsigned cur_in_fname;
#endif #endif
...@@ -48,6 +48,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA ...@@ -48,6 +48,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "tree-iterator.h" #include "tree-iterator.h"
#include "basic-block.h" #include "basic-block.h"
#include "tree-flow.h" #include "tree-flow.h"
#include "opts.h"
/* obstack.[ch] explicitly declined to prototype this. */ /* obstack.[ch] explicitly declined to prototype this. */
extern int _obstack_allocated_p (struct obstack *h, void *obj); extern int _obstack_allocated_p (struct obstack *h, void *obj);
...@@ -309,6 +310,9 @@ make_node_stat (enum tree_code code MEM_STAT_DECL) ...@@ -309,6 +310,9 @@ make_node_stat (enum tree_code code MEM_STAT_DECL)
DECL_USER_ALIGN (t) = 0; DECL_USER_ALIGN (t) = 0;
DECL_IN_SYSTEM_HEADER (t) = in_system_header; DECL_IN_SYSTEM_HEADER (t) = in_system_header;
DECL_SOURCE_LOCATION (t) = input_location; DECL_SOURCE_LOCATION (t) = input_location;
if (code == TRANSLATION_UNIT_DECL)
DECL_UID (t) = cur_in_fname;
else
DECL_UID (t) = next_decl_uid++; DECL_UID (t) = next_decl_uid++;
/* We have not yet computed the alias set for this declaration. */ /* We have not yet computed the alias set for this declaration. */
...@@ -382,7 +386,7 @@ copy_node_stat (tree node MEM_STAT_DECL) ...@@ -382,7 +386,7 @@ copy_node_stat (tree node MEM_STAT_DECL)
TREE_VISITED (t) = 0; TREE_VISITED (t) = 0;
t->common.ann = 0; t->common.ann = 0;
if (TREE_CODE_CLASS (code) == 'd') if (TREE_CODE_CLASS (code) == 'd' && code != TRANSLATION_UNIT_DECL)
DECL_UID (t) = next_decl_uid++; DECL_UID (t) = next_decl_uid++;
else if (TREE_CODE_CLASS (code) == 't') else if (TREE_CODE_CLASS (code) == 't')
{ {
...@@ -5310,6 +5314,14 @@ make_or_reuse_type (unsigned size, int unsignedp) ...@@ -5310,6 +5314,14 @@ make_or_reuse_type (unsigned size, int unsignedp)
void void
build_common_tree_nodes (int signed_char) build_common_tree_nodes (int signed_char)
{ {
/* This function is called after command line parsing is complete,
but before any DECL nodes should have been created. Therefore,
now is the appropriate time to adjust next_decl_uid so that the
range 0 .. num_in_fnames-1 is reserved for TRANSLATION_UNIT_DECLs. */
if (next_decl_uid)
abort ();
next_decl_uid = num_in_fnames;
error_mark_node = make_node (ERROR_MARK); error_mark_node = make_node (ERROR_MARK);
TREE_TYPE (error_mark_node) = error_mark_node; TREE_TYPE (error_mark_node) = error_mark_node;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment