c-pragma.h (add_weak): Move prototype from here...

2001-08-28  Eric Christopher <echristo@redhat.com>
	    Richard Henderson <rth@redhat.com>

	* c-pragma.h (add_weak): Move prototype from here...
	* output.h (add_weak): ... to here.
	* varasm.c (add_weak): Fix typo.
	* config/mips/crti.asm: New file.
	* config/mips/crtn.asm: Ditto.
	* config/mips/elf.h (SBSS_SECTION_ASM_OP) Add #undef.
	(CTOR_LISTS_DEFINED_EXTERNALLY): Remove.
	(INVOKE__main): Ditto.
	(INIT_SECTION_ASM_OP): New.
	(FINI_SECTION_ASM_OP): Ditto.
	(STARTFILE_SPEC): Add crti.
	(ENDFILE_SPEC): Add crtn.
	* config/mips/elf64.h: Same.
	* config/mips/rtems64.h (INVOKE__main, NAME__MAIN, SYMBOL__MAIN):
	Remove.
	* config/mips/vxworks.h: Ditto.
	* config/mips/t-elf: Support crti and crtn.

Co-Authored-By: Richard Henderson <rth@redhat.com>

From-SVN: r45243
This commit is contained in:
Eric Christopher 2001-08-28 23:03:52 +00:00 committed by Eric Christopher
parent 5dde01439e
commit 46f9491e74
11 changed files with 165 additions and 86 deletions

View File

@ -1,3 +1,24 @@
2001-08-28 Eric Christopher <echristo@redhat.com>
Richard Henderson <rth@redhat.com>
* c-pragma.h (add_weak): Move prototype from here...
* output.h (add_weak): ... to here.
* varasm.c (add_weak): Fix typo.
* config/mips/crti.asm: New file.
* config/mips/crtn.asm: Ditto.
* config/mips/elf.h (SBSS_SECTION_ASM_OP) Add #undef.
(CTOR_LISTS_DEFINED_EXTERNALLY): Remove.
(INVOKE__main): Ditto.
(INIT_SECTION_ASM_OP): New.
(FINI_SECTION_ASM_OP): Ditto.
(STARTFILE_SPEC): Add crti.
(ENDFILE_SPEC): Add crtn.
* config/mips/elf64.h: Same.
* config/mips/rtems64.h (INVOKE__main, NAME__MAIN, SYMBOL__MAIN):
Remove.
* config/mips/vxworks.h: Ditto.
* config/mips/t-elf: Support crti and crtn.
2001-08-28 Alexandre Oliva <aoliva@redhat.com>
* jump.c (mark_jump_label): Fix typo: REG_LABEL is EXPR_LIST, not
@ -47,7 +68,7 @@
bordered, bunordered, buneq, bunge, bungt, bunle, bunlt, bltgt,
bordered_rev, bunordered_rev, buneq_rev, bunge_rev, bungt_rev,
bunle_rev, bunlt_rev, bltgt_rev): New patterns.
2001-08-27 Roman Zippel <zippel@linux-m68k.org>
* config/m68k/m68k.md (subreghi1ashrdi_const32, bsetmemqi,
@ -104,13 +125,13 @@
PRESENCE_SET, ABSENCE_SET, DEFINE_BYPASS, DEFINE_AUTOMATON,
AUTOMATA_OPTION, DEFINE_RESERVATION, DEFINE_INSN_RESERVATION): New
RTL constructions.
* genattr.c (main): New variable num_insn_reservations. Increase
it if there is DEFINE_INSN_RESERVATION. Output automaton based
pipeline hazard recognizer interface.
* genattrtab.h: New file.
* genattrtab.c: Include genattrtab.h.
(attr_printf, check_attr_test, make_internal_attr,
make_numeric_value): Move protypes into genattrtab.h. Define them
@ -124,11 +145,11 @@
* genautomata.c: New file.
* rtl.h (LINK_COST_ZERO, LINK_COST_FREE): Remove them.
* sched-int.h: (curr_state): Add the external definition for
automaton pipeline interface.
(haifa_insn_data): Add comments for members blockage and units.
* target-def.h (TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE,
TARGET_SCHED_INIT_DFA_PRE_CYCLE_INSN,
TARGET_SCHED_DFA_PRE_CYCLE_INSN,
@ -143,7 +164,7 @@
dfa_pre_cycle_insn, init_dfa_post_cycle_insn, dfa_post_cycle_insn,
first_cycle_multipass_dfa_lookahead, init_dfa_bubbles,
dfa_bubble): New members in gcc_target.sched.
* haifa-sched.c (insert_schedule_bubbles_p): New variable.
(MAX_INSN_QUEUE_INDEX): New macro for automaton interface.
(insn_queue): Redefine it as pointer to array.
@ -177,7 +198,7 @@
Initiate insn cost by -1.
(sched_finish): Free the current automaton state and finalize
automaton pipeline interface.
* sched-rgn.c: Include target.h.
(init_ready_list, new_ready, debug_dependencies): Add new code for
automaton pipeline interface.
@ -185,7 +206,7 @@
* sched-vis.c: Include target.h.
(get_visual_tbl_length): Add code for automaton interface.
(target_units, print_block_visualization): Add comments.
* Makefile.in (GETRUNTIME, HASHTAB, HOST_GETRUNTIME, HOST_HASHTAB,
USE_HOST_GETRUNTIME, USE_HOST_HASHTAB, HOST_VARRAY): New variables.
(sched-rgn.o, sched-vis.o): Add new dependency file target.h.
@ -195,7 +216,7 @@
(getruntime.o, hashtab.o): New entries for canadian cross.
* doc/md.texi: Description of automaton based model.
* doc/tm.texi (TARGET_SCHED_ISSUE_RATE, TARGET_SCHED_ADJUST_COST):
Add comments.
(TARGET_SCHED_USE_DFA_PIPELINE_INTERFACE,
@ -208,7 +229,7 @@
hook descriptions.
(TRADITIONAL_PIPELINE_INTERFACE, DFA_PIPELINE_INTERFACE,
MAX_DFA_ISSUE_RATE): New macro descriptions.
* doc/contrib.texi: Add dfa based scheduler contribution.
* doc/gcc.texi: Add more information about genattrtab.
@ -241,7 +262,7 @@
* c-tree.h: Add prototyp for c_sizeof_nowarn.
2001-08-25 Dan Nicolaescu <dann@ics.uci.edu>
* ssa-ccp.c (ssa_const_prop): Free ssa_edges.
2001-08-27 Alan Modra <amodra@bigpond.net.au>

View File

@ -41,11 +41,6 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#define HANDLE_PRAGMA_PACK 1
#endif /* HANDLE_PRAGMA_PACK_PUSH_POP */
#ifdef HANDLE_PRAGMA_WEAK
extern int add_weak PARAMS ((const char *, const char *));
#endif /* HANDLE_PRAGMA_WEAK */
extern void init_pragma PARAMS ((void));
/* Duplicate prototypes for the register_pragma stuff and the typedef for

26
gcc/config/mips/crti.asm Normal file
View File

@ -0,0 +1,26 @@
/* 4 slots for argument spill area. 1 for cpreturn, 1 for stack.
Return spill offset of 40 and 20. */
.section .init,"ax",@progbits
.globl _init
.type _init,@function
_init:
#ifdef __mips64
dsubu $sp,$sp,48
sd $31,40($sp)
#else
subu $sp,$sp,32
sw $31,20($sp)
#endif
.section .fini,"ax",@progbits
.globl _fini
.type _fini,@function
_fini:
#ifdef __mips64
dsubu $sp,$sp,48
sd $31,40($sp)
#else
subu $sp,$sp,32
sw $31,20($sp)
#endif

22
gcc/config/mips/crtn.asm Normal file
View File

@ -0,0 +1,22 @@
/* 4 slots for argument spill area. 1 for cpreturn, 1 for stack.
Return spill offset of 40 and 20. */
.section .init,"ax",@progbits
#ifdef __mips64
ld $31,40($sp)
daddu $sp,$sp,48
#else
lw $31,20($sp)
addu $sp,$sp,32
#endif
j $31
.section .fini,"ax",@progbits
#ifdef __mips64
ld $31,40($sp)
daddu $sp,$sp,48
#else
lw $31,20($sp)
addu $sp,$sp,32
#endif
j $31

View File

@ -99,10 +99,12 @@ do { \
uninitialized global data will be output in the data section if
`-fno-common' is passed, otherwise `ASM_OUTPUT_COMMON' will be
used. */
#ifndef BSS_SECTION_ASM_OP
#define BSS_SECTION_ASM_OP "\t.section\t.bss"
#endif
#undef SBSS_SECTION_ASM_OP
#define SBSS_SECTION_ASM_OP "\t.section .sbss"
/* Like `ASM_OUTPUT_BSS' except takes the required alignment as a
@ -213,17 +215,10 @@ do { \
#define UNIQUE_SECTION(DECL,RELOC) \
mips_unique_section ((DECL), (RELOC))
/* There's no point providing a default definition of __CTOR_LIST__
since people are expected either to use crtbegin.o, or an equivalent,
or provide their own definition. */
#define CTOR_LISTS_DEFINED_EXTERNALLY
/* A list of other sections which the compiler might be "in" at any
given time. */
#undef EXTRA_SECTIONS
#define EXTRA_SECTIONS in_sdata, in_sbss, in_rdata
#define INVOKE__main
#undef EXTRA_SECTION_FUNCTIONS
#define EXTRA_SECTION_FUNCTIONS \
@ -241,12 +236,23 @@ void FN () \
} \
}
/* On elf, we *do* have support for the .init and .fini sections, and we
can put stuff in there to be executed before and after `main'. We let
crtstuff.c and other files know this by defining the following symbols.
The definitions say how to change sections to the .init and .fini
sections. This is the same for all known elf assemblers. */
#undef INIT_SECTION_ASM_OP
#define INIT_SECTION_ASM_OP "\t.section\t.init"
#undef FINI_SECTION_ASM_OP
#define FINI_SECTION_ASM_OP "\t.section\t.fini"
/* Don't set the target flags, this is done by the linker script */
#undef LIB_SPEC
#define LIB_SPEC ""
#undef STARTFILE_SPEC
#define STARTFILE_SPEC "crtbegin%O%s %{!mno-crt0:crt0%O%s}"
#define STARTFILE_SPEC "crti%O%s crtbegin%O%s %{!mno-crt0:crt0%O%s}"
#undef ENDFILE_SPEC
#define ENDFILE_SPEC "crtend%O%s"
#define ENDFILE_SPEC "crtend%O%s crtn%O%s"

View File

@ -256,17 +256,10 @@ do { \
DECL_SECTION_NAME (DECL) = build_string (len, string); \
} while (0)
/* There's no point providing a default definition of __CTOR_LIST__
since people are expected either to use crtbegin.o, or an equivalent,
or provide their own definition. */
#define CTOR_LISTS_DEFINED_EXTERNALLY
/* A list of other sections which the compiler might be "in" at any
given time. */
#undef EXTRA_SECTIONS
#define EXTRA_SECTIONS in_sdata, in_rdata
#define INVOKE__main
#undef EXTRA_SECTION_FUNCTIONS
#define EXTRA_SECTION_FUNCTIONS \
@ -282,12 +275,24 @@ void FN () \
in_section = ENUM; \
} \
}
/* On elf, we *do* have support for the .init and .fini sections, and we
can put stuff in there to be executed before and after `main'. We let
crtstuff.c and other files know this by defining the following symbols.
The definitions say how to change sections to the .init and .fini
sections. This is the same for all known elf assemblers. */
#undef INIT_SECTION_ASM_OP
#define INIT_SECTION_ASM_OP "\t.section\t.init"
#undef FINI_SECTION_ASM_OP
#define FINI_SECTION_ASM_OP "\t.section\t.fini"
/* Don't set the target flags, this is done by the linker script */
#undef LIB_SPEC
#define LIB_SPEC ""
#undef STARTFILE_SPEC
#define STARTFILE_SPEC "crtbegin%O%s %{!mno-crt0:crt0%O%s}"
#define STARTFILE_SPEC "crti%O%s crtbegin%O%s %{!mno-crt0:crt0%O%s}"
#undef ENDFILE_SPEC
#define ENDFILE_SPEC "crtend%O%s"
#define ENDFILE_SPEC "crtend%O%s crtn%O%s"

View File

@ -33,10 +33,6 @@ Boston, MA 02111-1307, USA. */
#undef EXTRA_SECTIONS
#define EXTRA_SECTIONS in_sdata, in_rdata
#undef INVOKE__main
#undef NAME__MAIN
#undef SYMBOL__MAIN
#undef EXTRA_SECTION_FUNCTIONS
#define EXTRA_SECTION_FUNCTIONS \
SECTION_FUNCTION_TEMPLATE(sdata_section, in_sdata, SDATA_SECTION_ASM_OP) \

View File

@ -1,9 +1,17 @@
CONFIG2_H = $(srcdir)/config/mips/ecoff.h
EXTRA_MULTILIB_PARTS = crtbegin.o crtend.o
# Don't let CTOR_LIST end up in sdata section.
CRTSTUFF_T_CFLAGS = -G 0
# Assemble startup files.
$(T)crti.o: $(srcdir)/config/mips/crti.asm $(GCC_PASSES)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
-c -o crti.o -x assembler-with-cpp $(srcdir)/config/mips/crti.asm
$(T)crtn.o: $(srcdir)/config/mips/crtn.asm $(GCC_PASSES)
$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(MULTILIB_CFLAGS) $(INCLUDES) \
-c -o crtn.o -x assembler-with-cpp $(srcdir)/config/mips/crtn.asm
LIB1ASMSRC = mips/mips16.S
LIB1ASMFUNCS = _m16addsf3 _m16subsf3 _m16mulsf3 _m16divsf3 \
_m16eqsf2 _m16nesf2 _m16gtsf2 _m16gesf2 _m16lesf2 _m16ltsf2 \
@ -48,6 +56,7 @@ fp-bit.c: $(srcdir)/config/fp-bit.c
MULTILIB_OPTIONS = msoft-float/msingle-float EL/EB mips1/mips3
MULTILIB_DIRNAMES = soft-float single el eb mips1 mips3
MULTILIB_MATCHES = msingle-float=m4650
EXTRA_PARTS = crtbegin.o crtend.o crti.o crtn.o
LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib

View File

@ -20,10 +20,6 @@ Boston, MA 02111-1307, USA. */
#undef EXTRA_SECTIONS
#define EXTRA_SECTIONS in_sdata, in_rdata, in_sbss
#undef INVOKE__main
#undef NAME__MAIN
#undef SYMBOL__MAIN
#undef EXTRA_SECTION_FUNCTIONS
#define EXTRA_SECTION_FUNCTIONS \
SECTION_FUNCTION_TEMPLATE(sdata_section, in_sdata, SDATA_SECTION_ASM_OP) \

View File

@ -135,6 +135,10 @@ extern void leaf_renumber_regs_insn PARAMS ((rtx));
/* Locate the proper template for the given insn-code. */
extern const char *get_insn_template PARAMS ((int, rtx));
/* Add function NAME to the weak symbols list. VALUE is a weak alias
associated with NAME. */
extern int add_weak PARAMS ((const char *, const char *));
/* Functions in flow.c */
extern void allocate_for_life_analysis PARAMS ((void));
extern int regno_uninitialized PARAMS ((int));

View File

@ -206,7 +206,7 @@ static enum in_section { no_section, in_text, in_data, in_named
((TREE_CODE (DECL) == FUNCTION_DECL || TREE_CODE (DECL) == VAR_DECL) \
&& DECL_SECTION_NAME (DECL) != NULL_TREE)
#endif
/* Text of section name when in_section == in_named. */
static const char *in_named_name;
@ -621,7 +621,7 @@ decode_reg_name (asmspec)
/* Get rid of confusing prefixes. */
asmspec = strip_reg_name (asmspec);
/* Allow a decimal number as a "register name". */
for (i = strlen (asmspec) - 1; i >= 0; i--)
if (! (asmspec[i] >= '0' && asmspec[i] <= '9'))
@ -697,7 +697,7 @@ make_decl_rtl (decl, asmspec)
&& !DECL_REGISTER (decl)))
abort ();
/* And that we were not given a type or a label. */
else if (TREE_CODE (decl) == TYPE_DECL
else if (TREE_CODE (decl) == TYPE_DECL
|| TREE_CODE (decl) == LABEL_DECL)
abort ();
@ -772,7 +772,7 @@ make_decl_rtl (decl, asmspec)
kludge to avoid setting DECL_RTL to frame_pointer_rtx. */
SET_DECL_RTL (decl,
gen_rtx_REG (DECL_MODE (decl),
gen_rtx_REG (DECL_MODE (decl),
FIRST_PSEUDO_REGISTER));
REGNO (DECL_RTL (decl)) = reg_number;
REG_USERVAR_P (DECL_RTL (decl)) = 1;
@ -1082,7 +1082,7 @@ assemble_start_function (decl, fnname)
if (align_functions_log > align)
{
#ifdef ASM_OUTPUT_MAX_SKIP_ALIGN
ASM_OUTPUT_MAX_SKIP_ALIGN (asm_out_file,
ASM_OUTPUT_MAX_SKIP_ALIGN (asm_out_file,
align_functions_log, align_functions-1);
#else
ASM_OUTPUT_ALIGN (asm_out_file, align_functions_log);
@ -1271,14 +1271,14 @@ asm_emit_uninitialised (decl, name, size, rounded)
asm_dest_local
}
destination = asm_dest_local;
if (TREE_PUBLIC (decl))
{
#if defined ASM_EMIT_BSS
if (! DECL_COMMON (decl))
destination = asm_dest_bss;
else
#endif
#endif
destination = asm_dest_common;
}
@ -1401,7 +1401,7 @@ assemble_variable (decl, top_level, at_end, dont_output_data)
/* Make sure ENCODE_SECTION_INFO is invoked before we set ASM_WRITTEN. */
decl_rtl = DECL_RTL (decl);
TREE_ASM_WRITTEN (decl) = 1;
/* Do no output if -fsyntax-only. */
@ -1498,14 +1498,14 @@ assemble_variable (decl, top_level, at_end, dont_output_data)
rounded += (BIGGEST_ALIGNMENT / BITS_PER_UNIT) - 1;
rounded = (rounded / (BIGGEST_ALIGNMENT / BITS_PER_UNIT)
* (BIGGEST_ALIGNMENT / BITS_PER_UNIT));
/* Don't continue this line--convex cc version 4.1 would lose. */
#if !defined(ASM_OUTPUT_ALIGNED_COMMON) && !defined(ASM_OUTPUT_ALIGNED_DECL_COMMON) && !defined(ASM_OUTPUT_ALIGNED_BSS)
if ((unsigned HOST_WIDE_INT) DECL_ALIGN (decl) / BITS_PER_UNIT > rounded)
warning_with_decl
warning_with_decl
(decl, "requested alignment for %s is greater than implemented alignment of %d.",rounded);
#endif
asm_emit_uninitialised (decl, name, size, rounded);
return;
@ -1519,7 +1519,7 @@ assemble_variable (decl, top_level, at_end, dont_output_data)
if (TREE_PUBLIC (decl) && DECL_NAME (decl))
{
#ifdef ASM_WEAKEN_LABEL
if (DECL_WEAK (decl))
if (DECL_WEAK (decl))
{
ASM_WEAKEN_LABEL (asm_out_file, name);
/* Remove this variable from the pending weak list so that
@ -1690,7 +1690,7 @@ assemble_name (file, name)
tree id;
STRIP_NAME_ENCODING (real_name, name);
if (flag_prefix_function_name
if (flag_prefix_function_name
&& ! memcmp (real_name, CHKR_PREFIX, CHKR_PREFIX_SIZE))
real_name = real_name + CHKR_PREFIX_SIZE;
@ -1916,7 +1916,7 @@ assemble_integer (x, size, align, force)
{
enum machine_mode omode, imode;
unsigned int i;
omode = mode_for_size (BITS_PER_UNIT, MODE_INT, 0);
imode = mode_for_size (size * BITS_PER_UNIT, MODE_INT, 0);
@ -2333,7 +2333,7 @@ struct constant_descriptor
const char *label;
rtx rtl;
/* Make sure the data is reasonably aligned. */
union
union
{
unsigned char contents[1];
#ifdef HAVE_LONG_DOUBLE
@ -2361,7 +2361,7 @@ static htab_t const_str_htab;
/* Mark a const_hash_table descriptor for GC. */
static void
static void
mark_const_hash_entry (ptr)
void *ptr;
{
@ -2376,7 +2376,7 @@ mark_const_hash_entry (ptr)
/* Mark the hash-table element X (which is really a pointer to an
struct deferred_string *). */
static int
mark_const_str_htab_1 (x, data)
void **x;
@ -2388,7 +2388,7 @@ mark_const_str_htab_1 (x, data)
/* Mark a const_str_htab for GC. */
static void
static void
mark_const_str_htab (htab)
void *htab;
{
@ -2529,7 +2529,7 @@ const_hash (exp)
case CONVERT_EXPR:
case NON_LVALUE_EXPR:
return const_hash (TREE_OPERAND (exp, 0)) * 7 + 2;
default:
/* A language specific constant. Just hash the code. */
return (int) code % MAX_HASH_TABLE;
@ -2655,7 +2655,7 @@ compare_constant_1 (exp, p)
p += sizeof length;
/* For record constructors, insist that the types match.
For arrays, just verify both constructors are for arrays.
For arrays, just verify both constructors are for arrays.
Then insist that either both or none have any TREE_PURPOSE
values. */
if (TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE)
@ -2898,7 +2898,7 @@ record_constant_1 (exp)
obstack_grow (&permanent_obstack, (char *) &type, sizeof type);
if (TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE)
obstack_grow (&permanent_obstack, &mode, sizeof mode);
obstack_grow (&permanent_obstack, (char *) &have_purpose,
sizeof have_purpose);
@ -3166,18 +3166,18 @@ output_constant_def (exp, defer)
the label number already assigned. */
hash = const_hash (exp) % MAX_HASH_TABLE;
for (desc = const_hash_table[hash]; desc; desc = desc->next)
if (compare_constant (exp, desc))
break;
if (desc == 0)
{
/* No constant equal to EXP is known to have been output.
Make a constant descriptor to enter EXP in the hash table.
Assign the label number and record it in the descriptor for
future calls to this function to find. */
/* Create a string containing the label name, in LABEL. */
labelno = const_labelno++;
ASM_GENERATE_INTERNAL_LABEL (label, "LC", labelno);
@ -3186,7 +3186,7 @@ output_constant_def (exp, defer)
desc->next = const_hash_table[hash];
desc->label = ggc_strdup (label);
const_hash_table[hash] = desc;
/* We have a symbol name; construct the SYMBOL_REF and the MEM. */
desc->rtl
= gen_rtx_MEM (TYPE_MODE (TREE_TYPE (exp)),
@ -3390,7 +3390,7 @@ init_varasm_status (f)
/* Mark PC for GC. */
static void
static void
mark_pool_constant (pc)
struct pool_constant *pc;
{
@ -3526,7 +3526,7 @@ decode_rtx_const (mode, x, value)
case LABEL_REF:
/* For a LABEL_REF, compare labels. */
value->un.addr.base = XEXP (value->un.addr.base, 0);
default:
break;
}
@ -3608,7 +3608,7 @@ record_constant_rtx (mode, x)
{
struct constant_descriptor *ptr;
ptr = ((struct constant_descriptor *)
ptr = ((struct constant_descriptor *)
xcalloc (1, (offsetof (struct constant_descriptor, u)
+ sizeof (struct rtx_const))));
decode_rtx_const (mode, x, (struct rtx_const *) ptr->u.contents);
@ -3870,7 +3870,7 @@ output_constant_pool (fnname, fndecl)
x = const0_rtx;
}
break;
default:
break;
}
@ -4162,7 +4162,7 @@ initializer_constant_valid_p (value, endtype)
return
initializer_constant_valid_p (TREE_VALUE (CONSTRUCTOR_ELTS (value)),
endtype);
return TREE_STATIC (value) ? null_pointer_node : 0;
case INTEGER_CST:
@ -4345,7 +4345,7 @@ output_constant (exp, size, align)
That way we get the constant (we hope) inside it. Also, strip off any
NOP_EXPR that converts between two record, union, array, or set types
or a CONVERT_EXPR that converts to a union TYPE. */
while ((TREE_CODE (exp) == NOP_EXPR
while ((TREE_CODE (exp) == NOP_EXPR
&& (TREE_TYPE (exp) == TREE_TYPE (TREE_OPERAND (exp, 0))
|| AGGREGATE_TYPE_P (TREE_TYPE (exp))))
|| (TREE_CODE (exp) == CONVERT_EXPR
@ -4482,7 +4482,7 @@ array_size_for_constructor (val)
return 0;
/* Compute the total number of array elements. */
i = size_binop (MINUS_EXPR, convert (sizetype, max_index),
i = size_binop (MINUS_EXPR, convert (sizetype, max_index),
convert (sizetype,
TYPE_MIN_VALUE (TYPE_DOMAIN (TREE_TYPE (val)))));
i = size_binop (PLUS_EXPR, i, convert (sizetype, integer_one_node));
@ -4607,7 +4607,7 @@ output_constructor (exp, size, align)
/* Find the alignment of this element. */
align2 = min_align (align, BITS_PER_UNIT * pos);
/* Determine size this element should occupy. */
if (field)
{
@ -4799,9 +4799,9 @@ output_constructor (exp, size, align)
assemble_zeros (size - total_bytes);
}
/* This structure contains any weak symbol declarations waiting to be
emitted. */
/* This structure contains any weak symbol declarations waiting
to be emitted. */
struct weak_syms
{
struct weak_syms * next;
@ -4812,8 +4812,8 @@ struct weak_syms
static struct weak_syms * weak_decls;
/* Add function NAME to the weak symbols list. VALUE is a weak alias
associatd with NAME. */
associated with NAME. */
int
add_weak (name, value)
const char *name;
@ -4878,7 +4878,6 @@ weak_finish ()
/* Remove NAME from the pending list of weak symbols. This prevents
the compiler from emitting multiple .weak directives which confuses
some assemblers. */
static void
remove_from_pending_weak_list (name)
const char *name;
@ -4890,12 +4889,12 @@ remove_from_pending_weak_list (name)
{
t = *p;
if (strcmp (name, t->name) == 0)
{
*p = t->next;
free (t);
}
{
*p = t->next;
free (t);
}
else
p = &(t->next);
p = &(t->next);
}
}