This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
PATCH: Remove make_function_rtl
- To: gcc-patches at gcc dot gnu dot org
- Subject: PATCH: Remove make_function_rtl
- From: Mark Mitchell <mark at codesourcery dot com>
- Date: Wed, 10 Jan 2001 15:04:09 -0800
- Organization: CodeSourcery, LLC
This patch removes make_function_rtl, which did exactly what
make_decl_rtl did when passed the same parameters.
The third parameter to make_decl_rtl was misguided. This parameter
was used to indicate whether or not a variable was "toplevel", i.e.,
whether or not it had file scope. That data was then misused (for
example, we would not object to C++ static data members placed in a
register, since the entity was not "toplevel", even though it might as
well be).
In addition, toplevel-ness is something that can be directly observed
from the DECL: the variable is file-scoped if and only if it has a
NULL DECL_CONTEXT.
Finally, being able to compute RTL for a DECL without additional
inputs is useful in that I want to compute RTL lazily, so that I can
compute mangled names lazily, in C++. (This will save much memory.)
Most of the attached patch simply changes callers; look at the
varasm.c bits to see the real meat.
Bootsrapped and tested on i686-pc-linux-gnu.
--
Mark Mitchell mark@codesourcery.com
CodeSourcery, LLC http://www.codesourcery.com
2001-01-10 Mark Mitchell <mark@codesourcery.com>
* output.h (make_function_rtl): Remove prototype.
(make_decl_rtl): Likewise.
* varasm.c (make_function_rtl): Remove.
(make_decl_rtl): Determine top-levelness from DECL_CONTEXT, rather
than from a third parameter.
* tree.h (make_decl_rtl): Remove last parameter.
* c-decl.c (builtin_function): Remove last argument in call to
make_decl_rtl; use make_function_rtl instead of make_decl_rtl.
(start_function): Likewise.
* except.c (call_get_eh_context): Likewise.
* expr.c (emit_block_move): Likewise.
(clear_storage): Likewise.
* profile.c (output_func_start_profiler): Likewise.
* toplev.c (rest_of_decl_compilation): Likewise.
* objc/objc-act.c (create_builtin_decl): Likewise.
(synth_module_prologue): Likewise.
(generate_static_reference): Likewise.
(build_selector_reference_decl): Likewise.
(build_class_reference_decl): Likewise.
(build_objc_string_decl): Likewise.
(build_protocol_reference): Likewise.
2001-01-10 Mark Mitchell <mark@codesourcery.com>
* class.c (finish_struct_1): Remove last argument in call to
make_decl_rtl; use make_function_rtl instead of make_decl_rtl.
* decl.c (builtin_function): Likewise.
(build_cp_library_fn): Likewise.
(check_initializer): Likewise.
(make_rtl_for_nonlocal_decl): Likewise.
(cp_finish_decl): Likewise.
(start_function): Likewise.
* decl2.c (finish_anon_union): Likewise.
* friend.c (do_friend): Likewise.
* init.c (build_java_class_ref): Likewise.
* method.c (make_thunk): Likewise.
* pt.c (tsubst_friend_function): Likewise.
* semantics.c (expand_body): Likewise.
Wed Jan 10 14:39:45 2001 Mark Mitchell <mark@codesourcery.com>
* com.c (ffecom_init_zero_): Remove last argument in call to
make_decl_rtl; use make_function_rtl instead of make_decl_rtl.
(ffecom_lookup_label_): Likewise.
(builtin_function): Likewise.
(start_function): Likewise.
2001-01-10 Mark Mitchell <mark@codesourcery.com>
* class.c (build_utf8_ref): Remove last argument in call to
make_decl_rtl; use make_function_rtl instead of make_decl_rtl.
(build_class_ref): Likewise.
(build_static_field_ref): Likewise.
(get_dispatch_table): Likewise.
(layout_class_method): Likewise.
(emit_register_classes): Likewise.
* constants.c (build_constant_data_ref): Likewise.
* decl.c (builtin_function): Likewise.
(create_primitive_vtable): Likewise.
* expr.c (build_known_method_def): Likewise.
(build_jni_stub): Likewise.
(java_lang_expand_expr): Likewise.
Index: c-decl.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/c-decl.c,v
retrieving revision 1.200
diff -c -p -r1.200 c-decl.c
*** c-decl.c 2001/01/07 23:15:46 1.200
--- c-decl.c 2001/01/10 22:19:56
*************** builtin_function (name, type, function_c
*** 3152,3158 ****
DECL_BUILT_IN_NONANSI (decl) = 1;
if (library_name)
DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
! make_decl_rtl (decl, NULL_PTR, 1);
pushdecl (decl);
DECL_BUILT_IN_CLASS (decl) = class;
DECL_FUNCTION_CODE (decl) = function_code;
--- 3152,3158 ----
DECL_BUILT_IN_NONANSI (decl) = 1;
if (library_name)
DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
! make_decl_rtl (decl, NULL_PTR);
pushdecl (decl);
DECL_BUILT_IN_CLASS (decl) = class;
DECL_FUNCTION_CODE (decl) = function_code;
*************** start_function (declspecs, declarator, p
*** 5951,5957 ****
declare_parm_level (1);
current_binding_level->subblocks_tag_transparent = 1;
! make_function_rtl (current_function_decl);
restype = TREE_TYPE (TREE_TYPE (current_function_decl));
/* Promote the value to int before returning it. */
--- 5951,5957 ----
declare_parm_level (1);
current_binding_level->subblocks_tag_transparent = 1;
! make_decl_rtl (current_function_decl, NULL);
restype = TREE_TYPE (TREE_TYPE (current_function_decl));
/* Promote the value to int before returning it. */
Index: except.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/except.c,v
retrieving revision 1.140
diff -c -p -r1.140 except.c
*** except.c 2000/12/03 23:58:44 1.140
--- except.c 2001/01/10 22:19:59
*************** call_get_eh_context ()
*** 1156,1162 ****
TREE_PUBLIC (fn) = 1;
DECL_ARTIFICIAL (fn) = 1;
TREE_READONLY (fn) = 1;
! make_decl_rtl (fn, NULL_PTR, 1);
assemble_external (fn);
ggc_add_tree_root (&fn, 1);
--- 1156,1162 ----
TREE_PUBLIC (fn) = 1;
DECL_ARTIFICIAL (fn) = 1;
TREE_READONLY (fn) = 1;
! make_decl_rtl (fn, NULL_PTR);
assemble_external (fn);
ggc_add_tree_root (&fn, 1);
Index: expr.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/expr.c,v
retrieving revision 1.286
diff -c -p -r1.286 expr.c
*** expr.c 2001/01/02 16:46:26 1.286
--- expr.c 2001/01/10 22:20:05
*************** emit_block_move (x, y, size, align)
*** 1758,1764 ****
DECL_EXTERNAL (fn) = 1;
TREE_PUBLIC (fn) = 1;
DECL_ARTIFICIAL (fn) = 1;
! make_decl_rtl (fn, NULL_PTR, 1);
assemble_external (fn);
}
--- 1758,1764 ----
DECL_EXTERNAL (fn) = 1;
TREE_PUBLIC (fn) = 1;
DECL_ARTIFICIAL (fn) = 1;
! make_decl_rtl (fn, NULL_PTR);
assemble_external (fn);
}
*************** clear_storage (object, size, align)
*** 2655,2661 ****
DECL_EXTERNAL (fn) = 1;
TREE_PUBLIC (fn) = 1;
DECL_ARTIFICIAL (fn) = 1;
! make_decl_rtl (fn, NULL_PTR, 1);
assemble_external (fn);
}
--- 2655,2661 ----
DECL_EXTERNAL (fn) = 1;
TREE_PUBLIC (fn) = 1;
DECL_ARTIFICIAL (fn) = 1;
! make_decl_rtl (fn, NULL_PTR);
assemble_external (fn);
}
Index: output.h
===================================================================
RCS file: /cvs/gcc/egcs/gcc/output.h,v
retrieving revision 1.52
diff -c -p -r1.52 output.h
*** output.h 2000/10/06 06:01:27 1.52
--- output.h 2001/01/10 22:20:06
*************** extern void function_section PARAMS ((t
*** 202,212 ****
/* Tell assembler to switch to the section for the exception table. */
extern void exception_section PARAMS ((void));
- /* Create the rtl to represent a function, for a function definition.
- DECL is a FUNCTION_DECL node which describes which function.
- The rtl is stored into DECL. */
- extern void make_function_rtl PARAMS ((tree));
-
/* Declare DECL to be a weak symbol. */
extern void declare_weak PARAMS ((tree));
#endif /* TREE_CODE */
--- 202,207 ----
*************** extern void weak_finish PARAMS ((void)
*** 224,238 ****
extern int decode_reg_name PARAMS ((const char *));
#ifdef TREE_CODE
- /* Create the DECL_RTL for a declaration for a static or external variable
- or static or external function.
- ASMSPEC, if not 0, is the string which the user specified
- as the assembler symbol name.
- TOP_LEVEL is nonzero if this is a file-scope variable.
-
- This is never called for PARM_DECL nodes. */
- extern void make_decl_rtl PARAMS ((tree, const char *, int));
-
/* Make the rtl for variable VAR be volatile.
Use this only for static variables. */
extern void make_var_volatile PARAMS ((tree));
--- 219,224 ----
Index: profile.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/profile.c,v
retrieving revision 1.50
diff -c -p -r1.50 profile.c
*** profile.c 2000/12/07 01:58:23 1.50
--- profile.c 2001/01/10 22:20:06
*************** output_func_start_profiler ()
*** 1117,1123 ****
announce_function (fndecl);
current_function_decl = fndecl;
DECL_INITIAL (fndecl) = error_mark_node;
! make_function_rtl (fndecl);
init_function_start (fndecl, input_filename, lineno);
pushlevel (0);
expand_function_start (fndecl, 0);
--- 1117,1123 ----
announce_function (fndecl);
current_function_decl = fndecl;
DECL_INITIAL (fndecl) = error_mark_node;
! make_decl_rtl (fndecl, NULL);
init_function_start (fndecl, input_filename, lineno);
pushlevel (0);
expand_function_start (fndecl, 0);
Index: toplev.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/toplev.c,v
retrieving revision 1.414
diff -c -p -r1.414 toplev.c
*** toplev.c 2001/01/09 10:53:59 1.414
--- toplev.c 2001/01/10 22:20:10
*************** rest_of_decl_compilation (decl, asmspec,
*** 2579,2585 ****
|| TREE_CODE (decl) == FUNCTION_DECL)
{
timevar_push (TV_VARCONST);
! make_decl_rtl (decl, asmspec, top_level);
/* Initialized extern variable exists to be replaced
with its value, or represents something that will be
output in another file. */
--- 2579,2585 ----
|| TREE_CODE (decl) == FUNCTION_DECL)
{
timevar_push (TV_VARCONST);
! make_decl_rtl (decl, asmspec);
/* Initialized extern variable exists to be replaced
with its value, or represents something that will be
output in another file. */
*************** rest_of_decl_compilation (decl, asmspec,
*** 2606,2618 ****
if (decode_reg_name (asmspec) >= 0)
{
DECL_RTL (decl) = 0;
! make_decl_rtl (decl, asmspec, top_level);
}
else
{
error ("invalid register name `%s' for register variable", asmspec);
DECL_REGISTER (decl) = 0;
! make_decl_rtl (decl, NULL, top_level);
}
}
#if defined (DBX_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO)
--- 2606,2618 ----
if (decode_reg_name (asmspec) >= 0)
{
DECL_RTL (decl) = 0;
! make_decl_rtl (decl, asmspec);
}
else
{
error ("invalid register name `%s' for register variable", asmspec);
DECL_REGISTER (decl) = 0;
! make_decl_rtl (decl, NULL);
}
}
#if defined (DBX_DEBUGGING_INFO) || defined (XCOFF_DEBUGGING_INFO)
Index: tree.h
===================================================================
RCS file: /cvs/gcc/egcs/gcc/tree.h,v
retrieving revision 1.216
diff -c -p -r1.216 tree.h
*** tree.h 2001/01/09 10:54:00 1.216
--- tree.h 2001/01/10 22:20:12
*************** extern void set_yydebug PARAMS ((int))
*** 2766,2772 ****
extern void fixup_signed_type PARAMS ((tree));
/* varasm.c */
! extern void make_decl_rtl PARAMS ((tree, const char *, int));
extern void make_decl_one_only PARAMS ((tree));
extern int supports_one_only PARAMS ((void));
extern void variable_section PARAMS ((tree, int));
--- 2766,2772 ----
extern void fixup_signed_type PARAMS ((tree));
/* varasm.c */
! extern void make_decl_rtl PARAMS ((tree, const char *));
extern void make_decl_one_only PARAMS ((tree));
extern int supports_one_only PARAMS ((void));
extern void variable_section PARAMS ((tree, int));
Index: varasm.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/varasm.c,v
retrieving revision 1.155
diff -c -p -r1.155 varasm.c
*** varasm.c 2001/01/06 01:00:22 1.155
--- varasm.c 2001/01/10 22:20:14
*************** exception_section ()
*** 515,597 ****
#endif
}
- /* Create the rtl to represent a function, for a function definition.
- DECL is a FUNCTION_DECL node which describes which function.
- The rtl is stored into DECL. */
-
- void
- make_function_rtl (decl)
- tree decl;
- {
- const char *name;
- const char *new_name;
-
- if (DECL_RTL (decl) != 0)
- {
- /* ??? Another way to do this would be to do what halfpic.c does
- and maintain a hashed table of such critters. */
- /* ??? Another way to do this would be to pass a flag bit to
- ENCODE_SECTION_INFO saying whether this is a new decl or not. */
- /* Let the target reassign the RTL if it wants.
- This is necessary, for example, when one machine specific
- decl attribute overrides another. */
- #ifdef REDO_SECTION_INFO_P
- if (REDO_SECTION_INFO_P (decl))
- ENCODE_SECTION_INFO (decl);
- #endif
- return;
- }
-
- name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
- new_name = name;
-
- /* Rename a nested function to avoid conflicts, unless it's a member of
- a local class, in which case the class name is already unique. */
- if (decl_function_context (decl) != 0
- && ! TYPE_P (DECL_CONTEXT (decl))
- && DECL_INITIAL (decl) != 0
- && DECL_RTL (decl) == 0)
- {
- char *label;
- ASM_FORMAT_PRIVATE_NAME (label, name, var_labelno);
- var_labelno++;
- new_name = label;
- }
- /* When -fprefix-function-name is used, every function name is
- prefixed. Even static functions are prefixed because they
- could be declared latter. Note that a nested function name
- is not prefixed. */
- else if (flag_prefix_function_name)
- {
- size_t name_len = IDENTIFIER_LENGTH (DECL_ASSEMBLER_NAME (decl));
- char *pname;
-
- pname = alloca (name_len + CHKR_PREFIX_SIZE + 1);
- memcpy (pname, CHKR_PREFIX, CHKR_PREFIX_SIZE);
- memcpy (pname + CHKR_PREFIX_SIZE, name, name_len + 1);
- new_name = pname;
- }
-
- if (name != new_name)
- {
- DECL_ASSEMBLER_NAME (decl) = get_identifier (new_name);
- name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
- }
-
- DECL_RTL (decl)
- = gen_rtx_MEM (DECL_MODE (decl),
- gen_rtx_SYMBOL_REF (Pmode, name));
-
- /* Optionally set flags or add text to the name to record
- information such as that it is a function name. If the name
- is changed, the macro ASM_OUTPUT_LABELREF will have to know
- how to strip this information. */
- #ifdef ENCODE_SECTION_INFO
- ENCODE_SECTION_INFO (decl);
- #endif
- }
-
-
/* Given NAME, a putative register name, discard any customary prefixes. */
static const char *
--- 515,520 ----
*************** decode_reg_name (asmspec)
*** 671,686 ****
or static or external function.
ASMSPEC, if not 0, is the string which the user specified
as the assembler symbol name.
- TOP_LEVEL is nonzero if this is a file-scope variable.
This is never called for PARM_DECL nodes. */
void
! make_decl_rtl (decl, asmspec, top_level)
tree decl;
const char *asmspec;
- int top_level;
{
const char *name = 0;
const char *new_name = 0;
int reg_number;
--- 594,608 ----
or static or external function.
ASMSPEC, if not 0, is the string which the user specified
as the assembler symbol name.
This is never called for PARM_DECL nodes. */
void
! make_decl_rtl (decl, asmspec)
tree decl;
const char *asmspec;
{
+ int top_level = (DECL_CONTEXT (decl) == NULL_TREE);
const char *name = 0;
const char *new_name = 0;
int reg_number;
*************** make_decl_rtl (decl, asmspec, top_level)
*** 741,747 ****
{
int nregs;
! if (DECL_INITIAL (decl) != 0 && top_level)
{
DECL_INITIAL (decl) = 0;
error ("global register variable has initial value");
--- 663,669 ----
{
int nregs;
! if (DECL_INITIAL (decl) != 0 && !TREE_STATIC (decl))
{
DECL_INITIAL (decl) = 0;
error ("global register variable has initial value");
*************** make_decl_rtl (decl, asmspec, top_level)
*** 760,766 ****
REGNO (DECL_RTL (decl)) = reg_number;
REG_USERVAR_P (DECL_RTL (decl)) = 1;
! if (top_level)
{
/* Make this register global, so not usable for anything
else. */
--- 682,688 ----
REGNO (DECL_RTL (decl)) = reg_number;
REG_USERVAR_P (DECL_RTL (decl)) = 1;
! if (TREE_STATIC (decl))
{
/* Make this register global, so not usable for anything
else. */
*************** assemble_alias (decl, target)
*** 4890,4896 ****
{
const char *name;
! make_decl_rtl (decl, (char *) 0, 1);
name = XSTR (XEXP (DECL_RTL (decl), 0), 0);
#ifdef ASM_OUTPUT_DEF
--- 4812,4818 ----
{
const char *name;
! make_decl_rtl (decl, (char *) 0);
name = XSTR (XEXP (DECL_RTL (decl), 0), 0);
#ifdef ASM_OUTPUT_DEF
Index: cp/class.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cp/class.c,v
retrieving revision 1.353
diff -c -p -r1.353 class.c
*** class.c 2001/01/09 11:37:06 1.353
--- class.c 2001/01/10 22:20:20
*************** finish_struct_1 (t)
*** 5224,5230 ****
&& TREE_TYPE (x) == t)
{
DECL_MODE (x) = TYPE_MODE (t);
! make_decl_rtl (x, NULL, 0);
}
}
--- 5224,5230 ----
&& TREE_TYPE (x) == t)
{
DECL_MODE (x) = TYPE_MODE (t);
! make_decl_rtl (x, NULL);
}
}
Index: cp/decl.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cp/decl.c,v
retrieving revision 1.734
diff -c -p -r1.734 decl.c
*** decl.c 2001/01/08 14:41:00 1.734
--- decl.c 2001/01/10 22:20:28
*************** builtin_function (name, type, code, clas
*** 6671,6677 ****
function in the namespace. */
if (libname)
DECL_ASSEMBLER_NAME (decl) = get_identifier (libname);
! make_function_rtl (decl);
/* Warn if a function in the namespace for users
is used without an occasion to consider it declared. */
--- 6671,6677 ----
function in the namespace. */
if (libname)
DECL_ASSEMBLER_NAME (decl) = get_identifier (libname);
! make_decl_rtl (decl, NULL);
/* Warn if a function in the namespace for users
is used without an occasion to consider it declared. */
*************** build_library_fn (name, type)
*** 6709,6715 ****
tree type;
{
tree fn = build_library_fn_1 (name, ERROR_MARK, type);
! make_function_rtl (fn);
return fn;
}
--- 6709,6715 ----
tree type;
{
tree fn = build_library_fn_1 (name, ERROR_MARK, type);
! make_decl_rtl (fn, NULL);
return fn;
}
*************** build_cp_library_fn (name, operator_code
*** 6725,6731 ****
TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
set_mangled_name_for_decl (fn);
! make_function_rtl (fn);
return fn;
}
--- 6725,6731 ----
TREE_NOTHROW (fn) = TYPE_NOTHROW_P (type);
DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
set_mangled_name_for_decl (fn);
! make_decl_rtl (fn, NULL);
return fn;
}
*************** check_initializer (decl, init)
*** 7612,7618 ****
else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
{
if (TREE_STATIC (decl))
! make_decl_rtl (decl, NULL_PTR, toplevel_bindings_p ());
grok_reference_init (decl, type, init);
init = NULL_TREE;
}
--- 7612,7618 ----
else if (!DECL_EXTERNAL (decl) && TREE_CODE (type) == REFERENCE_TYPE)
{
if (TREE_STATIC (decl))
! make_decl_rtl (decl, NULL_PTR);
grok_reference_init (decl, type, init);
init = NULL_TREE;
}
*************** make_rtl_for_nonlocal_decl (decl, init,
*** 7739,7745 ****
/* If we're deferring the variable, just make RTL. Do not actually
emit the variable. */
if (defer_p)
! make_decl_rtl (decl, asmspec, toplev);
/* If we're not deferring, go ahead and assemble the variable. */
else
rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
--- 7739,7745 ----
/* If we're deferring the variable, just make RTL. Do not actually
emit the variable. */
if (defer_p)
! make_decl_rtl (decl, asmspec);
/* If we're not deferring, go ahead and assemble the variable. */
else
rest_of_decl_compilation (decl, asmspec, toplev, at_eof);
*************** cp_finish_decl (decl, init, asmspec_tree
*** 8020,8026 ****
grokclassfn. Lay this out fresh. */
DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
! make_decl_rtl (decl, asmspec, 0);
}
/* Deduce size of array from initialization, if not already known. */
--- 8020,8026 ----
grokclassfn. Lay this out fresh. */
DECL_RTL (TREE_TYPE (decl)) = NULL_RTX;
DECL_ASSEMBLER_NAME (decl) = get_identifier (asmspec);
! make_decl_rtl (decl, asmspec);
}
/* Deduce size of array from initialization, if not already known. */
*************** start_function (declspecs, declarator, a
*** 13598,13604 ****
/* We need to do this even if we aren't expanding yet so that
assemble_external works. */
! make_function_rtl (decl1);
/* Promote the value to int before returning it. */
if (C_PROMOTING_INTEGER_TYPE_P (restype))
--- 13598,13604 ----
/* We need to do this even if we aren't expanding yet so that
assemble_external works. */
! make_decl_rtl (decl1, NULL);
/* Promote the value to int before returning it. */
if (C_PROMOTING_INTEGER_TYPE_P (restype))
Index: cp/decl2.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cp/decl2.c,v
retrieving revision 1.424
diff -c -p -r1.424 decl2.c
*** decl2.c 2001/01/09 10:54:01 1.424
--- decl2.c 2001/01/10 22:20:31
*************** finish_anon_union (anon_union_decl)
*** 2232,2238 ****
if (static_p)
{
! make_decl_rtl (main_decl, 0, toplevel_bindings_p ());
DECL_RTL (anon_union_decl) = DECL_RTL (main_decl);
expand_anon_union_decl (anon_union_decl,
NULL_TREE,
--- 2232,2238 ----
if (static_p)
{
! make_decl_rtl (main_decl, 0);
DECL_RTL (anon_union_decl) = DECL_RTL (main_decl);
expand_anon_union_decl (anon_union_decl,
NULL_TREE,
Index: cp/friend.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cp/friend.c,v
retrieving revision 1.62
diff -c -p -r1.62 friend.c
*** friend.c 2000/09/17 07:38:20 1.62
--- friend.c 2001/01/10 22:20:32
***************
*** 1,5 ****
/* Help friends in C++.
! Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
This file is part of GNU CC.
--- 1,5 ----
/* Help friends in C++.
! Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
This file is part of GNU CC.
*************** do_friend (ctype, declarator, decl, parm
*** 409,415 ****
}
}
! make_decl_rtl (decl, NULL_PTR, 1);
add_friend (current_class_type,
is_friend_template ? DECL_TI_TEMPLATE (decl) : decl);
DECL_FRIEND_P (decl) = 1;
--- 409,415 ----
}
}
! make_decl_rtl (decl, NULL_PTR);
add_friend (current_class_type,
is_friend_template ? DECL_TI_TEMPLATE (decl) : decl);
DECL_FRIEND_P (decl) = 1;
Index: cp/init.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cp/init.c,v
retrieving revision 1.224
diff -c -p -r1.224 init.c
*** init.c 2001/01/03 03:28:50 1.224
--- init.c 2001/01/10 22:20:34
*************** build_java_class_ref (type)
*** 2217,2223 ****
DECL_ARTIFICIAL (class_decl) = 1;
DECL_IGNORED_P (class_decl) = 1;
pushdecl_top_level (class_decl);
! make_decl_rtl (class_decl, NULL_PTR, 1);
}
return class_decl;
}
--- 2217,2223 ----
DECL_ARTIFICIAL (class_decl) = 1;
DECL_IGNORED_P (class_decl) = 1;
pushdecl_top_level (class_decl);
! make_decl_rtl (class_decl, NULL_PTR);
}
return class_decl;
}
Index: cp/method.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cp/method.c,v
retrieving revision 1.184
diff -c -p -r1.184 method.c
*** method.c 2001/01/03 14:39:08 1.184
--- method.c 2001/01/10 22:20:35
*************** make_thunk (function, delta, vcall_index
*** 2177,2183 ****
/* So that finish_file can write out any thunks that need to be: */
pushdecl_top_level (thunk);
/* Create RTL for this thunk so that its address can be taken. */
! make_function_rtl (thunk);
}
return thunk;
}
--- 2177,2183 ----
/* So that finish_file can write out any thunks that need to be: */
pushdecl_top_level (thunk);
/* Create RTL for this thunk so that its address can be taken. */
! make_decl_rtl (thunk, NULL);
}
return thunk;
}
Index: cp/pt.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cp/pt.c,v
retrieving revision 1.499
diff -c -p -r1.499 pt.c
*** pt.c 2001/01/08 14:41:01 1.499
--- pt.c 2001/01/10 22:20:41
*************** tsubst_friend_function (decl, args)
*** 4525,4531 ****
{
set_mangled_name_for_decl (new_friend);
DECL_RTL (new_friend) = 0;
! make_decl_rtl (new_friend, NULL_PTR, 1);
}
if (DECL_NAMESPACE_SCOPE_P (new_friend))
--- 4525,4531 ----
{
set_mangled_name_for_decl (new_friend);
DECL_RTL (new_friend) = 0;
! make_decl_rtl (new_friend, NULL_PTR);
}
if (DECL_NAMESPACE_SCOPE_P (new_friend))
*************** tsubst_decl (t, args, type, in_decl)
*** 5789,5795 ****
}
DECL_RTL (r) = 0;
! make_decl_rtl (r, NULL_PTR, 1);
/* Like grokfndecl. If we don't do this, pushdecl will
mess up our TREE_CHAIN because it doesn't find a
--- 5789,5795 ----
}
DECL_RTL (r) = 0;
! make_decl_rtl (r, NULL_PTR);
/* Like grokfndecl. If we don't do this, pushdecl will
mess up our TREE_CHAIN because it doesn't find a
Index: cp/semantics.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cp/semantics.c,v
retrieving revision 1.184
diff -c -p -r1.184 semantics.c
*** semantics.c 2000/12/22 14:51:22 1.184
--- semantics.c 2001/01/10 22:20:43
***************
*** 3,9 ****
building RTL. These routines are used both during actual parsing
and during the instantiation of template functions.
! Copyright (C) 1998, 1999, 2000 Free Software Foundation, Inc.
Written by Mark Mitchell (mmitchell@usa.net) based on code found
formerly in parse.y and pt.c.
--- 3,9 ----
building RTL. These routines are used both during actual parsing
and during the instantiation of template functions.
! Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
Written by Mark Mitchell (mmitchell@usa.net) based on code found
formerly in parse.y and pt.c.
*************** expand_body (fn)
*** 2367,2373 ****
{
/* Give the function RTL now so that we can assign it to a
function pointer, etc. */
! make_function_rtl (fn);
/* Set DECL_EXTERNAL so that assemble_external will be called as
necessary. We'll clear it again in finish_file. */
if (!DECL_EXTERNAL (fn))
--- 2367,2373 ----
{
/* Give the function RTL now so that we can assign it to a
function pointer, etc. */
! make_decl_rtl (fn, NULL);
/* Set DECL_EXTERNAL so that assemble_external will be called as
necessary. We'll clear it again in finish_file. */
if (!DECL_EXTERNAL (fn))
Index: f/com.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/f/com.c,v
retrieving revision 1.104
diff -c -p -r1.104 com.c
*** com.c 2001/01/09 10:54:01 1.104
--- com.c 2001/01/10 22:20:51
*************** ffecom_init_zero_ (tree decl)
*** 6460,6466 ****
if (incremental)
{
! make_decl_rtl (decl, NULL, TREE_PUBLIC (decl) ? 1 : 0);
assemble_variable (decl, TREE_PUBLIC (decl) ? 1 : 0, 0, 1);
}
--- 6460,6466 ----
if (incremental)
{
! make_decl_rtl (decl, NULL);
assemble_variable (decl, TREE_PUBLIC (decl) ? 1 : 0, 0, 1);
}
*************** ffecom_lookup_label (ffelab label)
*** 12266,12272 ****
TREE_STATIC (glabel) = 1;
DECL_CONTEXT (glabel) = 0;
DECL_INITIAL (glabel) = NULL;
! make_decl_rtl (glabel, NULL, 0);
expand_decl (glabel);
ffecom_save_tree_forever (glabel);
--- 12266,12272 ----
TREE_STATIC (glabel) = 1;
DECL_CONTEXT (glabel) = 0;
DECL_INITIAL (glabel) = NULL;
! make_decl_rtl (glabel, NULL);
expand_decl (glabel);
ffecom_save_tree_forever (glabel);
*************** builtin_function (const char *name, tree
*** 13568,13574 ****
TREE_PUBLIC (decl) = 1;
if (library_name)
DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
! make_decl_rtl (decl, NULL_PTR, 1);
pushdecl (decl);
DECL_BUILT_IN_CLASS (decl) = class;
DECL_FUNCTION_CODE (decl) = function_code;
--- 13568,13574 ----
TREE_PUBLIC (decl) = 1;
if (library_name)
DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
! make_decl_rtl (decl, NULL_PTR);
pushdecl (decl);
DECL_BUILT_IN_CLASS (decl) = class;
DECL_FUNCTION_CODE (decl) = function_code;
*************** start_function (tree name, tree type, in
*** 14426,14432 ****
if (TREE_CODE (current_function_decl) != ERROR_MARK)
{
! make_function_rtl (current_function_decl);
restype = TREE_TYPE (TREE_TYPE (current_function_decl));
DECL_RESULT (current_function_decl)
--- 14426,14432 ----
if (TREE_CODE (current_function_decl) != ERROR_MARK)
{
! make_decl_rtl (current_function_decl, NULL);
restype = TREE_TYPE (TREE_TYPE (current_function_decl));
DECL_RESULT (current_function_decl)
Index: java/class.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/java/class.c,v
retrieving revision 1.82
diff -c -p -r1.82 class.c
*** class.c 2001/01/08 23:28:56 1.82
--- class.c 2001/01/10 22:20:53
***************
*** 1,5 ****
/* Functions related to building classes and their related objects.
! Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
This file is part of GNU CC.
--- 1,5 ----
/* Functions related to building classes and their related objects.
! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
This file is part of GNU CC.
*************** build_utf8_ref (name)
*** 855,861 ****
pushdecl (decl);
rest_of_decl_compilation (decl, (char*) 0, global_bindings_p (), 0);
utf8_decl_list = decl;
! make_decl_rtl (decl, (char*) 0, 1);
ref = build1 (ADDR_EXPR, utf8const_ptr_type, decl);
IDENTIFIER_UTF8_REF (name) = ref;
return ref;
--- 855,861 ----
pushdecl (decl);
rest_of_decl_compilation (decl, (char*) 0, global_bindings_p (), 0);
utf8_decl_list = decl;
! make_decl_rtl (decl, (char*) 0);
ref = build1 (ADDR_EXPR, utf8const_ptr_type, decl);
IDENTIFIER_UTF8_REF (name) = ref;
return ref;
*************** build_class_ref (type)
*** 891,897 ****
DECL_IGNORED_P (decl) = 1;
DECL_ARTIFICIAL (decl) = 1;
DECL_ASSEMBLER_NAME (decl) = mangle_class_field (type);
! make_decl_rtl (decl, NULL, 1);
pushdecl_top_level (decl);
if (is_compiled == 1)
DECL_EXTERNAL (decl) = 1;
--- 891,897 ----
DECL_IGNORED_P (decl) = 1;
DECL_ARTIFICIAL (decl) = 1;
DECL_ASSEMBLER_NAME (decl) = mangle_class_field (type);
! make_decl_rtl (decl, NULL);
pushdecl_top_level (decl);
if (is_compiled == 1)
DECL_EXTERNAL (decl) = 1;
*************** build_class_ref (type)
*** 943,949 ****
decl = build_decl (VAR_DECL, decl_name, class_type_node);
TREE_STATIC (decl) = 1;
TREE_PUBLIC (decl) = 1;
! make_decl_rtl (decl, NULL, 1);
pushdecl_top_level (decl);
if (is_compiled == 1)
DECL_EXTERNAL (decl) = 1;
--- 943,949 ----
decl = build_decl (VAR_DECL, decl_name, class_type_node);
TREE_STATIC (decl) = 1;
TREE_PUBLIC (decl) = 1;
! make_decl_rtl (decl, NULL);
pushdecl_top_level (decl);
if (is_compiled == 1)
DECL_EXTERNAL (decl) = 1;
*************** build_static_field_ref (fdecl)
*** 974,980 ****
{
if (DECL_RTL (fdecl) == 0)
{
! make_decl_rtl (fdecl, NULL, 1);
if (is_compiled == 1)
DECL_EXTERNAL (fdecl) = 1;
}
--- 974,980 ----
{
if (DECL_RTL (fdecl) == 0)
{
! make_decl_rtl (fdecl, NULL);
if (is_compiled == 1)
DECL_EXTERNAL (fdecl) = 1;
}
*************** get_dispatch_table (type, this_class_add
*** 1222,1228 ****
else
{
if (DECL_RTL (method) == 0)
! make_decl_rtl (method, NULL, 1);
method = build1 (ADDR_EXPR, nativecode_ptr_type_node, method);
}
list = tree_cons (NULL_TREE /*DECL_VINDEX (method) + 2*/,
--- 1222,1228 ----
else
{
if (DECL_RTL (method) == 0)
! make_decl_rtl (method, NULL);
method = build1 (ADDR_EXPR, nativecode_ptr_type_node, method);
}
list = tree_cons (NULL_TREE /*DECL_VINDEX (method) + 2*/,
*************** layout_class_method (this_class, super_c
*** 2122,2128 ****
if (! METHOD_ABSTRACT (method_decl)
|| (CLASS_INTERFACE (TYPE_NAME (this_class))
&& (DECL_CLINIT_P (method_decl))))
! make_function_rtl (method_decl);
obstack_free (&temporary_obstack, asm_name);
if (ID_INIT_P (method_name))
--- 2122,2128 ----
if (! METHOD_ABSTRACT (method_decl)
|| (CLASS_INTERFACE (TYPE_NAME (this_class))
&& (DECL_CLINIT_P (method_decl))))
! make_decl_rtl (method_decl, NULL);
obstack_free (&temporary_obstack, asm_name);
if (ID_INIT_P (method_name))
*************** emit_register_classes ()
*** 2219,2225 ****
/* DECL_EXTERNAL (init_decl) = 1;*/
TREE_PUBLIC (init_decl) = 1;
pushlevel (0);
! make_function_rtl (init_decl);
init_function_start (init_decl, input_filename, 0);
expand_function_start (init_decl, 0);
--- 2219,2225 ----
/* DECL_EXTERNAL (init_decl) = 1;*/
TREE_PUBLIC (init_decl) = 1;
pushlevel (0);
! make_decl_rtl (init_decl, NULL);
init_function_start (init_decl, input_filename, 0);
expand_function_start (init_decl, 0);
Index: java/constants.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/java/constants.c,v
retrieving revision 1.14
diff -c -p -r1.14 constants.c
*** constants.c 2000/10/13 06:26:45 1.14
--- constants.c 2001/01/10 22:20:53
***************
*** 1,5 ****
/* Handle the constant pool of the Java(TM) Virtual Machine.
! Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
This file is part of GNU CC.
--- 1,5 ----
/* Handle the constant pool of the Java(TM) Virtual Machine.
! Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
This file is part of GNU CC.
*************** build_constant_data_ref ()
*** 402,408 ****
build_array_type (ptr_type_node,
one_elt_array_domain_type));
TREE_STATIC (decl) = 1;
! make_decl_rtl (decl, NULL, 1);
TYPE_CPOOL_DATA_REF (current_class) = current_constant_pool_data_ref
= build1 (ADDR_EXPR, ptr_type_node, decl);
}
--- 402,408 ----
build_array_type (ptr_type_node,
one_elt_array_domain_type));
TREE_STATIC (decl) = 1;
! make_decl_rtl (decl, NULL);
TYPE_CPOOL_DATA_REF (current_class) = current_constant_pool_data_ref
= build1 (ADDR_EXPR, ptr_type_node, decl);
}
Index: java/decl.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/java/decl.c,v
retrieving revision 1.81
diff -c -p -r1.81 decl.c
*** decl.c 2001/01/08 23:28:56 1.81
--- decl.c 2001/01/10 22:20:54
***************
*** 1,6 ****
/* Process declarations and variables for the GNU compiler for the
Java(TM) language.
! Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
This file is part of GNU CC.
--- 1,6 ----
/* Process declarations and variables for the GNU compiler for the
Java(TM) language.
! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
This file is part of GNU CC.
*************** builtin_function (name, type, function_c
*** 399,405 ****
TREE_PUBLIC (decl) = 1;
if (library_name)
DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
! make_decl_rtl (decl, NULL_PTR, 1);
pushdecl (decl);
DECL_BUILT_IN_CLASS (decl) = class;
DECL_FUNCTION_CODE (decl) = function_code;
--- 399,405 ----
TREE_PUBLIC (decl) = 1;
if (library_name)
DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
! make_decl_rtl (decl, NULL_PTR);
pushdecl (decl);
DECL_BUILT_IN_CLASS (decl) = class;
DECL_FUNCTION_CODE (decl) = function_code;
*************** create_primitive_vtable (name)
*** 417,423 ****
sprintf (buf, "_Jv_%sVTable", name);
r = build_decl (VAR_DECL, get_identifier (buf), ptr_type_node);
DECL_EXTERNAL (r) = 1;
! make_decl_rtl (r, buf, 1);
return r;
}
--- 417,423 ----
sprintf (buf, "_Jv_%sVTable", name);
r = build_decl (VAR_DECL, get_identifier (buf), ptr_type_node);
DECL_EXTERNAL (r) = 1;
! make_decl_rtl (r, buf);
return r;
}
Index: java/expr.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/java/expr.c,v
retrieving revision 1.92
diff -c -p -r1.92 expr.c
*** expr.c 2000/12/24 00:43:40 1.92
--- expr.c 2001/01/10 22:20:56
***************
*** 1,5 ****
/* Process expressions for the GNU compiler for the Java(TM) language.
! Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
This file is part of GNU CC.
--- 1,5 ----
/* Process expressions for the GNU compiler for the Java(TM) language.
! Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
This file is part of GNU CC.
*************** build_known_method_ref (method, method_t
*** 1680,1686 ****
tree func;
if (is_compiled_class (self_type))
{
! make_decl_rtl (method, NULL, 1);
func = build1 (ADDR_EXPR, method_ptr_type_node, method);
}
else
--- 1680,1686 ----
tree func;
if (is_compiled_class (self_type))
{
! make_decl_rtl (method, NULL);
func = build1 (ADDR_EXPR, method_ptr_type_node, method);
}
else
*************** build_jni_stub (method)
*** 2000,2006 ****
TREE_STATIC (meth_var) = 1;
TREE_PUBLIC (meth_var) = 0;
DECL_EXTERNAL (meth_var) = 0;
! make_decl_rtl (meth_var, NULL, 0);
meth_var = pushdecl_top_level (meth_var);
/* One strange way that the front ends are different is that they
--- 2000,2006 ----
TREE_STATIC (meth_var) = 1;
TREE_PUBLIC (meth_var) = 0;
DECL_EXTERNAL (meth_var) = 0;
! make_decl_rtl (meth_var, NULL);
meth_var = pushdecl_top_level (meth_var);
/* One strange way that the front ends are different is that they
*************** java_lang_expand_expr (exp, target, tmod
*** 2364,2370 ****
DECL_IGNORED_P (init_decl) = 1;
TREE_READONLY (init_decl) = 1;
TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (init_decl)) = 1;
! make_decl_rtl (init_decl, NULL, 1);
init = build1 (ADDR_EXPR, TREE_TYPE (exp), init_decl);
r = expand_expr (init, target, tmode, modifier);
return r;
--- 2364,2370 ----
DECL_IGNORED_P (init_decl) = 1;
TREE_READONLY (init_decl) = 1;
TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (init_decl)) = 1;
! make_decl_rtl (init_decl, NULL);
init = build1 (ADDR_EXPR, TREE_TYPE (exp), init_decl);
r = expand_expr (init, target, tmode, modifier);
return r;
*************** java_lang_expand_expr (exp, target, tmod
*** 2387,2393 ****
DECL_IGNORED_P (init_decl) = 1;
TREE_READONLY (init_decl) = 1;
TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (init_decl)) = 1;
! make_decl_rtl (init_decl, NULL, 1);
init = init_decl;
}
expand_assignment (build (COMPONENT_REF, TREE_TYPE (data_fld),
--- 2387,2393 ----
DECL_IGNORED_P (init_decl) = 1;
TREE_READONLY (init_decl) = 1;
TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (init_decl)) = 1;
! make_decl_rtl (init_decl, NULL);
init = init_decl;
}
expand_assignment (build (COMPONENT_REF, TREE_TYPE (data_fld),
Index: objc/objc-act.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/objc/objc-act.c,v
retrieving revision 1.62
diff -c -p -r1.62 objc-act.c
*** objc-act.c 2001/01/09 10:54:01 1.62
--- objc-act.c 2001/01/10 22:21:00
*************** create_builtin_decl (code, type, name)
*** 1226,1232 ****
if (code == VAR_DECL)
{
TREE_STATIC (decl) = 1;
! make_decl_rtl (decl, 0, 1);
pushdecl (decl);
}
--- 1226,1232 ----
if (code == VAR_DECL)
{
TREE_STATIC (decl) = 1;
! make_decl_rtl (decl, 0);
pushdecl (decl);
}
*************** synth_module_prologue ()
*** 1304,1310 ****
if (flag_traditional && TAG_MSGSEND[0] != '_')
DECL_BUILT_IN_NONANSI (umsg_decl) = 1;
! make_decl_rtl (umsg_decl, NULL_PTR, 1);
pushdecl (umsg_decl);
}
else
--- 1304,1310 ----
if (flag_traditional && TAG_MSGSEND[0] != '_')
DECL_BUILT_IN_NONANSI (umsg_decl) = 1;
! make_decl_rtl (umsg_decl, NULL_PTR);
pushdecl (umsg_decl);
}
else
*************** generate_static_references ()
*** 1977,1983 ****
type = build_array_type (build_pointer_type (void_type_node), 0);
decl = build_decl (VAR_DECL, ident, type);
! make_decl_rtl (decl, 0, 1);
TREE_USED (decl) = 1;
decls
= tree_cons (NULL_TREE, build_unary_op (ADDR_EXPR, decl, 1), decls);
--- 1977,1983 ----
type = build_array_type (build_pointer_type (void_type_node), 0);
decl = build_decl (VAR_DECL, ident, type);
! make_decl_rtl (decl, 0);
TREE_USED (decl) = 1;
decls
= tree_cons (NULL_TREE, build_unary_op (ADDR_EXPR, decl, 1), decls);
*************** build_selector_reference_decl ()
*** 2070,2076 ****
DECL_ARTIFICIAL (decl) = 1;
DECL_CONTEXT (decl) = 0;
! make_decl_rtl (decl, 0, 1);
pushdecl_top_level (decl);
return decl;
--- 2070,2076 ----
DECL_ARTIFICIAL (decl) = 1;
DECL_CONTEXT (decl) = 0;
! make_decl_rtl (decl, 0);
pushdecl_top_level (decl);
return decl;
*************** build_class_reference_decl ()
*** 2292,2298 ****
DECL_CONTEXT (decl) = 0;
DECL_ARTIFICIAL (decl) = 1;
! make_decl_rtl (decl, 0, 1);
pushdecl_top_level (decl);
return decl;
--- 2292,2298 ----
DECL_CONTEXT (decl) = 0;
DECL_ARTIFICIAL (decl) = 1;
! make_decl_rtl (decl, 0);
pushdecl_top_level (decl);
return decl;
*************** build_objc_string_decl (section)
*** 2435,2441 ****
DECL_CONTEXT (decl) = 0;
DECL_ARTIFICIAL (decl) = 1;
! make_decl_rtl (decl, 0, 1);
pushdecl_top_level (decl);
return decl;
--- 2435,2441 ----
DECL_CONTEXT (decl) = 0;
DECL_ARTIFICIAL (decl) = 1;
! make_decl_rtl (decl, 0);
pushdecl_top_level (decl);
return decl;
*************** build_protocol_reference (p)
*** 5329,5335 ****
TREE_USED (decl) = 1;
DECL_ARTIFICIAL (decl) = 1;
! make_decl_rtl (decl, 0, 1);
pushdecl_top_level (decl);
}
--- 5329,5335 ----
TREE_USED (decl) = 1;
DECL_ARTIFICIAL (decl) = 1;
! make_decl_rtl (decl, 0);
pushdecl_top_level (decl);
}