diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a01c992d2af..87a5aae7ccb 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,24 @@ +2001-08-28 Eric Christopher + Richard Henderson + + * 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 * 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 * 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 - + * ssa-ccp.c (ssa_const_prop): Free ssa_edges. 2001-08-27 Alan Modra diff --git a/gcc/c-pragma.h b/gcc/c-pragma.h index f60a5662bd4..6f0d6ea15a0 100644 --- a/gcc/c-pragma.h +++ b/gcc/c-pragma.h @@ -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 diff --git a/gcc/config/mips/crti.asm b/gcc/config/mips/crti.asm new file mode 100644 index 00000000000..0b08529c6bf --- /dev/null +++ b/gcc/config/mips/crti.asm @@ -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 diff --git a/gcc/config/mips/crtn.asm b/gcc/config/mips/crtn.asm new file mode 100644 index 00000000000..be38a868746 --- /dev/null +++ b/gcc/config/mips/crtn.asm @@ -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 diff --git a/gcc/config/mips/elf.h b/gcc/config/mips/elf.h index 4b2e605d8ed..c7e68f1687f 100644 --- a/gcc/config/mips/elf.h +++ b/gcc/config/mips/elf.h @@ -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" diff --git a/gcc/config/mips/elf64.h b/gcc/config/mips/elf64.h index 570e01f515f..894ea511941 100644 --- a/gcc/config/mips/elf64.h +++ b/gcc/config/mips/elf64.h @@ -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" diff --git a/gcc/config/mips/rtems64.h b/gcc/config/mips/rtems64.h index 7a455e514fa..aedb02a87b5 100644 --- a/gcc/config/mips/rtems64.h +++ b/gcc/config/mips/rtems64.h @@ -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) \ diff --git a/gcc/config/mips/t-elf b/gcc/config/mips/t-elf index 43df4932993..955edf982bd 100644 --- a/gcc/config/mips/t-elf +++ b/gcc/config/mips/t-elf @@ -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 diff --git a/gcc/config/mips/vxworks.h b/gcc/config/mips/vxworks.h index ec6e13bcebc..9eca3b71c6a 100644 --- a/gcc/config/mips/vxworks.h +++ b/gcc/config/mips/vxworks.h @@ -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) \ diff --git a/gcc/output.h b/gcc/output.h index 0e05799198e..370589ad3ac 100644 --- a/gcc/output.h +++ b/gcc/output.h @@ -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)); diff --git a/gcc/varasm.c b/gcc/varasm.c index 7113d8aa8fe..a95994ca237 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -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); } }