diff options
-rw-r--r-- | gcc/ChangeLog | 27 | ||||
-rw-r--r-- | gcc/bitmap.c | 14 | ||||
-rw-r--r-- | gcc/config/alpha/alpha.c | 11 | ||||
-rw-r--r-- | gcc/config/alpha/alpha.h | 2 | ||||
-rw-r--r-- | gcc/cppinit.c | 3 | ||||
-rw-r--r-- | gcc/expmed.c | 2 | ||||
-rw-r--r-- | gcc/flow.c | 62 | ||||
-rw-r--r-- | gcc/function.c | 2 | ||||
-rw-r--r-- | gcc/genrecog.c | 12 | ||||
-rw-r--r-- | gcc/lcm.c | 12 | ||||
-rw-r--r-- | gcc/mips-tfile.c | 46 | ||||
-rw-r--r-- | gcc/optabs.c | 3 | ||||
-rw-r--r-- | gcc/reload.c | 3 | ||||
-rw-r--r-- | gcc/reload1.c | 1 | ||||
-rw-r--r-- | gcc/sbitmap.c | 6 | ||||
-rw-r--r-- | gcc/unroll.c | 2 | ||||
-rw-r--r-- | gcc/varasm.c | 2 |
17 files changed, 152 insertions, 58 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index db5b0a851ce..0be42ce45c8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,30 @@ +Fri Feb 18 20:08:57 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu> + + * bitmap.c (bitmap_operation): Avoid using -1 for index since unsigned. + * cppinit.c (new_pending_define): Add cast to avoid warning. + * expmed.c (extract_bit_field): Likewise. + * flow.c (enum reorder_skip_type): New type. + (skip_insns_between_blcok): New it. + Rework to avoid warning about possibly undefined variable. + * function.c (assign_parms): Make thisparm_boundary unsigned. + * genrecog.c (write_switch): Cast XWINT result to int. + * lcm.c: Many static fcns and vars now #ifdef OPTIMIZE_MODE_SWITCHING. + * mips-tfile.c (init_file): Make two versions of FDR intializer: + one for MIPS and one for Alpha. + (get_tag, copy_object): Add casts to avoid warnings. + * optabs.c (init_one_libfunc): Cast NAME to (char *). + * reload.c (find_reloads): Make TYPE enum reload_type. + * sbitmap.c (dump_sbitmap): J is unsigned; don't use "1L". + * unroll.c (unroll_loop): Initialize UNROLL_NUMBER. + * varasm.c (compare_constant_1): Add cast to avoid warning. + * config/alpha/alpha.c (alpha_emit_xfloating_libcall): Cast FUNC + to (char *). + (alpha_expand_unaligned_load, alpha_expand_unaligned_store): + Cast switch operand of size to int. + (alpha_expand_epilogue): Always initialize fp_offset and sa_reg. + * config/alpha/alpha.h (INITIAL_ELIMINATION_OFFSET): Add abort + in unhandled case. + 2000-02-18 Nick Clifton <nickc@cygnus.com> * config/arm/elf.h (ASM_OUTPUT_ALIGN): Do not generate diff --git a/gcc/bitmap.c b/gcc/bitmap.c index 6c6c9787026..99b5f5a4e0e 100644 --- a/gcc/bitmap.c +++ b/gcc/bitmap.c @@ -395,10 +395,12 @@ bitmap_operation (to, from1, from2, operation) bitmap from2; enum bitmap_bits operation; { +#define HIGHEST_INDEX (unsigned int) ~0 + bitmap_element *from1_ptr = from1->first; bitmap_element *from2_ptr = from2->first; - unsigned int indx1 = (from1_ptr) ? from1_ptr->indx : -1; - unsigned int indx2 = (from2_ptr) ? from2_ptr->indx : -1; + unsigned int indx1 = (from1_ptr) ? from1_ptr->indx : HIGHEST_INDEX; + unsigned int indx2 = (from2_ptr) ? from2_ptr->indx : HIGHEST_INDEX; bitmap_element *to_ptr = to->first; bitmap_element *from1_tmp; bitmap_element *from2_tmp; @@ -449,9 +451,9 @@ bitmap_operation (to, from1, from2, operation) from1_tmp = from1_ptr; from2_tmp = from2_ptr; from1_ptr = from1_ptr->next; - indx1 = (from1_ptr) ? from1_ptr->indx : -1; + indx1 = (from1_ptr) ? from1_ptr->indx : HIGHEST_INDEX; from2_ptr = from2_ptr->next; - indx2 = (from2_ptr) ? from2_ptr->indx : -1; + indx2 = (from2_ptr) ? from2_ptr->indx : HIGHEST_INDEX; } else if (indx1 < indx2) { @@ -459,7 +461,7 @@ bitmap_operation (to, from1, from2, operation) from1_tmp = from1_ptr; from2_tmp = &bitmap_zero; from1_ptr = from1_ptr->next; - indx1 = (from1_ptr) ? from1_ptr->indx : -1; + indx1 = (from1_ptr) ? from1_ptr->indx : HIGHEST_INDEX; } else { @@ -467,7 +469,7 @@ bitmap_operation (to, from1, from2, operation) from1_tmp = &bitmap_zero; from2_tmp = from2_ptr; from2_ptr = from2_ptr->next; - indx2 = (from2_ptr) ? from2_ptr->indx : -1; + indx2 = (from2_ptr) ? from2_ptr->indx : HIGHEST_INDEX; } /* Find the appropriate element from TO. Begin by discarding diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c index f3ff40583f2..8ef62c8d8ce 100644 --- a/gcc/config/alpha/alpha.c +++ b/gcc/config/alpha/alpha.c @@ -1997,7 +1997,7 @@ alpha_emit_xfloating_libcall (func, target, operands, noperands, equiv) abort (); } - tmp = gen_rtx_MEM (QImode, gen_rtx_SYMBOL_REF (Pmode, func)); + tmp = gen_rtx_MEM (QImode, gen_rtx_SYMBOL_REF (Pmode, (char *) func)); tmp = emit_call_insn (gen_call_value (reg, tmp, const0_rtx, const0_rtx, const0_rtx)); CALL_INSN_FUNCTION_USAGE (tmp) = usage; @@ -2199,7 +2199,7 @@ alpha_expand_unaligned_load (tgt, mem, size, ofs, sign) { emit_move_insn (addr, plus_constant (XEXP (mem, 0), ofs)); emit_insn (gen_extxl (extl, meml, GEN_INT (size*8), addr)); - switch (size) + switch ((int) size) { case 2: emit_insn (gen_extwh (exth, memh, addr)); @@ -2262,7 +2262,7 @@ alpha_expand_unaligned_store (dst, src, size, ofs) emit_insn (gen_insxh (insh, gen_lowpart (DImode, src), GEN_INT (size*8), addr)); - switch (size) + switch ((int) size) { case 2: emit_insn (gen_inswl (insl, gen_lowpart (HImode, src), addr)); @@ -2278,7 +2278,7 @@ alpha_expand_unaligned_store (dst, src, size, ofs) emit_insn (gen_mskxh (dsth, dsth, GEN_INT (size*8), addr)); - switch (size) + switch ((int) size) { case 2: emit_insn (gen_mskxl (dstl, dstl, GEN_INT (0xffff), addr)); @@ -4579,6 +4579,8 @@ alpha_expand_epilogue () fp_is_frame_pointer = ((TARGET_OPEN_VMS && vms_is_stack_procedure) || (!TARGET_OPEN_VMS && frame_pointer_needed)); + fp_offset = 0; + sa_reg = stack_pointer_rtx; eh_ofs = cfun->machine->eh_epilogue_sp_ofs; if (sa_size) @@ -4592,7 +4594,6 @@ alpha_expand_epilogue () } /* Cope with very large offsets to the register save area. */ - sa_reg = stack_pointer_rtx; if (reg_offset + sa_size > 0x8000) { int low = ((reg_offset & 0xffff) ^ 0x8000) - 0x8000; diff --git a/gcc/config/alpha/alpha.h b/gcc/config/alpha/alpha.h index 1d64f37e4bd..b1c25c091d1 100644 --- a/gcc/config/alpha/alpha.h +++ b/gcc/config/alpha/alpha.h @@ -965,6 +965,8 @@ extern int alpha_memory_latency; + (ALPHA_ROUND (get_frame_size () \ + current_function_pretend_args_size) \ - current_function_pretend_args_size)); \ + else \ + abort (); \ } /* Define this if stack space is still allocated for a parameter passed diff --git a/gcc/cppinit.c b/gcc/cppinit.c index b7d230197f4..5e05511f0c4 100644 --- a/gcc/cppinit.c +++ b/gcc/cppinit.c @@ -1058,7 +1058,7 @@ new_pending_define (opts, text) struct pending_option *o = (struct pending_option *) xmalloc (sizeof (struct pending_option)); - o->arg = text; + o->arg = (char *) text; o->next = NULL; o->undef = 0; APPEND (opts->pending, define, o); @@ -1067,6 +1067,7 @@ new_pending_define (opts, text) /* Handle one command-line option in (argc, argv). Can be called multiple times, to handle multiple sets of options. Returns number of strings consumed. */ + int cpp_handle_option (pfile, argc, argv) cpp_reader *pfile; diff --git a/gcc/expmed.c b/gcc/expmed.c index f9383758905..736a7f2bdf7 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -1257,7 +1257,7 @@ extract_bit_field (str_rtx, bitsize, bitnum, unsignedp, if (bestmode == VOIDmode || (SLOW_UNALIGNED_ACCESS (bestmode, align) - && GET_MODE_SIZE (bestmode) > align)) + && GET_MODE_SIZE (bestmode) > (int) align)) goto extzv_loses; /* Compute offset as multiple of this unit, diff --git a/gcc/flow.c b/gcc/flow.c index b56fd981d77..c1ec515d8ba 100644 --- a/gcc/flow.c +++ b/gcc/flow.c @@ -7072,9 +7072,8 @@ typedef struct reorder_block_def { static int reorder_index; static basic_block reorder_last_visited; -#define REORDER_SKIP_BEFORE 0x1 -#define REORDER_SKIP_AFTER 0x2 -#define REORDER_SKIP_BLOCK_END 0x3 +enum reorder_skip_type {REORDER_SKIP_BEFORE, REORDER_SKIP_AFTER, + REORDER_SKIP_BLOCK_END}; /* Skip over insns BEFORE or AFTER BB which are typically associated with basic block BB. */ @@ -7082,7 +7081,7 @@ static basic_block reorder_last_visited; static rtx skip_insns_between_block (bb, skip_type) basic_block bb; - int skip_type; + enum reorder_skip_type skip_type; { rtx insn, last_insn; @@ -7090,6 +7089,7 @@ skip_insns_between_block (bb, skip_type) { if (bb == ENTRY_BLOCK_PTR) return 0; + last_insn = bb->head; for (insn = PREV_INSN (bb->head); insn && insn != BASIC_BLOCK (bb->index - 1)->end; @@ -7097,6 +7097,7 @@ skip_insns_between_block (bb, skip_type) { if (NEXT_INSN (insn) != last_insn) break; + if (GET_CODE (insn) == NOTE && NOTE_LINE_NUMBER (insn) != NOTE_INSN_LOOP_END && NOTE_LINE_NUMBER (insn) != NOTE_INSN_BASIC_BLOCK @@ -7106,8 +7107,8 @@ skip_insns_between_block (bb, skip_type) break; } } - else if (skip_type == REORDER_SKIP_AFTER - || skip_type == REORDER_SKIP_BLOCK_END) + + else { last_insn = bb->end; @@ -7128,6 +7129,7 @@ skip_insns_between_block (bb, skip_type) && (NOTE_LINE_NUMBER (insn) == NOTE_INSN_LOOP_END || NOTE_LINE_NUMBER (insn) == NOTE_INSN_BLOCK_END))) continue; + if (GET_CODE (insn) == CODE_LABEL && GET_CODE (NEXT_INSN (insn)) == JUMP_INSN && (GET_CODE (PATTERN (NEXT_INSN (insn))) == ADDR_VEC @@ -7139,34 +7141,40 @@ skip_insns_between_block (bb, skip_type) } break; } - } - if (skip_type == REORDER_SKIP_BLOCK_END) - { - int found_block_end = 0; - for (; insn; last_insn = insn, insn = NEXT_INSN (insn)) + if (skip_type == REORDER_SKIP_BLOCK_END) { - if (bb->index + 1 != n_basic_blocks - && insn == BASIC_BLOCK (bb->index + 1)->head) - break; + int found_block_end = 0; - if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_BLOCK_END) + for (; insn; last_insn = insn, insn = NEXT_INSN (insn)) { - found_block_end = 1; - continue; + if (bb->index + 1 != n_basic_blocks + && insn == BASIC_BLOCK (bb->index + 1)->head) + break; + + if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_BLOCK_END) + { + found_block_end = 1; + continue; + } + + if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED) + continue; + + if (GET_CODE (insn) == NOTE + && NOTE_LINE_NUMBER (insn) >= 0 + && NEXT_INSN (insn) + && (NOTE_LINE_NUMBER (NEXT_INSN (insn)) + == NOTE_INSN_BLOCK_END)) + continue; + break; } - if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED) - continue; - if (GET_CODE (insn) == NOTE - && NOTE_LINE_NUMBER (insn) >= 0 - && NEXT_INSN (insn) - && NOTE_LINE_NUMBER (NEXT_INSN (insn)) == NOTE_INSN_BLOCK_END) - continue; - break; + + if (! found_block_end) + last_insn = 0; } - if (! found_block_end) - last_insn = 0; } + return last_insn; } diff --git a/gcc/function.c b/gcc/function.c index 914cc959f52..ad9e868e48e 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -4348,7 +4348,7 @@ assign_parms (fndecl) for its ultimate type, don't use that slot after entry. We'll make another stack slot, if we need one. */ { - int thisparm_boundary + unsigned int thisparm_boundary = FUNCTION_ARG_BOUNDARY (promoted_mode, passed_type); if (GET_MODE_ALIGNMENT (nominal_mode) > thisparm_boundary) diff --git a/gcc/genrecog.c b/gcc/genrecog.c index 5db3aa29048..540a84a19b6 100644 --- a/gcc/genrecog.c +++ b/gcc/genrecog.c @@ -1785,19 +1785,21 @@ write_switch (start, depth) switch (type) { case DT_mode: - printf("GET_MODE (x%d)", depth); + printf ("GET_MODE (x%d)", depth); break; case DT_veclen: - printf("XVECLEN (x%d, 0)", depth); + printf ("XVECLEN (x%d, 0)", depth); break; case DT_elt_zero_int: - printf("XINT (x%d, 0)", depth); + printf ("XINT (x%d, 0)", depth); break; case DT_elt_one_int: - printf("XINT (x%d, 1)", depth); + printf ("XINT (x%d, 1)", depth); break; case DT_elt_zero_wide: - printf("XWINT (x%d, 0)", depth); + /* Convert result of XWINT to int for portability since some C + compilers won't do it and some will. */ + printf ("(int) XWINT (x%d, 0)", depth); break; default: abort (); diff --git a/gcc/lcm.c b/gcc/lcm.c index 7598b34d126..b850984b2f0 100644 --- a/gcc/lcm.c +++ b/gcc/lcm.c @@ -842,6 +842,7 @@ struct bb_info /* These bitmaps are used for the LCM algorithm. */ +#ifdef OPTIMIZE_MODE_SWITCHING static sbitmap *antic; static sbitmap *transp; static sbitmap *comp; @@ -850,12 +851,16 @@ static sbitmap *insert; static struct seginfo * new_seginfo PARAMS ((int, rtx, int, HARD_REG_SET));; static void add_seginfo PARAMS ((struct bb_info *, struct seginfo *)); -static void make_preds_opaque PARAMS ((basic_block, int)); static void reg_dies PARAMS ((rtx, HARD_REG_SET)); static void reg_becomes_live PARAMS ((rtx, rtx, void *)); +static void make_preds_opaque PARAMS ((basic_block, int)); +#endif + +#ifdef OPTIMIZE_MODE_SWITCHING /* This function will allocate a new BBINFO structure, initialized with the FP_MODE, INSN, and basic block BB parameters. */ + static struct seginfo * new_seginfo (mode, insn, bb, regs_live) int mode; @@ -876,6 +881,7 @@ new_seginfo (mode, insn, bb, regs_live) /* Add a seginfo element to the end of a list. HEAD is a pointer to the list beginning. INFO is the structure to be linked in. */ + static void add_seginfo (head, info) struct bb_info *head; @@ -899,6 +905,7 @@ add_seginfo (head, info) denotes that a mode set is to be done on that edge. J is the bit number in the bitmaps that corresponds to the entity that we are currently handling mode-switching for. */ + static void make_preds_opaque (b, j) basic_block b; @@ -917,6 +924,7 @@ make_preds_opaque (b, j) } /* Record in LIVE that register REG died. */ + static void reg_dies (reg, live) rtx reg; @@ -938,6 +946,7 @@ reg_dies (reg, live) /* Record in LIVE that register REG became live. This is called via note_stores. */ + static void reg_becomes_live (reg, setter, live) rtx reg; @@ -961,6 +970,7 @@ reg_becomes_live (reg, setter, live) SET_HARD_REG_BIT (* (HARD_REG_SET *) live, regno); } } +#endif /* Find all insns that need a particular mode setting, and insert the necessary mode switches. */ diff --git a/gcc/mips-tfile.c b/gcc/mips-tfile.c index abedec870b8..aaea9f4f425 100644 --- a/gcc/mips-tfile.c +++ b/gcc/mips-tfile.c @@ -1078,6 +1078,37 @@ typedef struct efdr { static efdr_t init_file = { { /* FDR structure */ +#ifdef __alpha + 0, /* adr: memory address of beginning of file */ + 0, /* cbLineOffset: byte offset from header for this file ln's */ + 0, /* cbLine: size of lines for this file */ + 0, /* cbSs: number of bytes in the ss */ + 0, /* rss: file name (of source, if known) */ + 0, /* issBase: file's string space */ + 0, /* isymBase: beginning of symbols */ + 0, /* csym: count file's of symbols */ + 0, /* ilineBase: file's line symbols */ + 0, /* cline: count of file's line symbols */ + 0, /* ioptBase: file's optimization entries */ + 0, /* copt: count of file's optimization entries */ + 0, /* ipdFirst: start of procedures for this file */ + 0, /* cpd: count of procedures for this file */ + 0, /* iauxBase: file's auxiliary entries */ + 0, /* caux: count of file's auxiliary entries */ + 0, /* rfdBase: index into the file indirect table */ + 0, /* crfd: count file indirect entries */ + langC, /* lang: language for this file */ + 1, /* fMerge: whether this file can be merged */ + 0, /* fReadin: true if read in (not just created) */ +#ifdef HOST_WORDS_BIG_ENDIAN + 1, /* fBigendian: if 1, compiled on big endian machine */ +#else + 0, /* fBigendian: if 1, compiled on big endian machine */ +#endif + 0, /* fTrim: whether the symbol table was trimmed */ + GLEVEL_2, /* glevel: level this file was compiled with */ + 0, /* reserved: reserved for future use */ +#else 0, /* adr: memory address of beginning of file */ 0, /* rss: file name (of source, if known) */ 0, /* issBase: file's string space */ @@ -1106,6 +1137,7 @@ static efdr_t init_file = 0, /* reserved: reserved for future use */ 0, /* cbLineOffset: byte offset from header for this file ln's */ 0, /* cbLine: size of lines for this file */ +#endif }, (FDR *) 0, /* orig_fdr: original file header pointer */ @@ -2327,7 +2359,8 @@ get_tag (tag_start, tag_end_p1, indx, basic_type) tag_ptr->same_name = hash_ptr->tag_ptr; tag_ptr->basic_type = basic_type; tag_ptr->indx = indx; - tag_ptr->ifd = (indx == indexNil) ? -1 : cur_file_ptr->file_index; + tag_ptr->ifd = (indx == indexNil + ? (symint_t) -1 : cur_file_ptr->file_index); tag_ptr->same_block = cur_tag_head->first_tag; cur_tag_head->first_tag = tag_ptr; @@ -4621,8 +4654,10 @@ copy_object __proto((void)) (st_t) eptr->asym.st, (sc_t) eptr->asym.sc, eptr->asym.value, - (symint_t) ((eptr->asym.index == indexNil) ? indexNil : 0), - ((long) ifd < orig_sym_hdr.ifdMax) ? remap_file_number[ ifd ] : ifd); + (eptr->asym.index == indexNil + ? (symint_t) indexNil : 0), + ((long) ifd < orig_sym_hdr.ifdMax + ? remap_file_number[ifd] : (int) ifd)); } @@ -4774,8 +4809,9 @@ copy_object __proto((void)) remaining > 0; remaining -= num_write) { - num_write = - (remaining <= (int) sizeof (buffer)) ? remaining : sizeof (buffer); + num_write + = (remaining <= (int) sizeof (buffer)) + ? remaining : (int) sizeof (buffer); sys_read = fread ((PTR_T) buffer, 1, num_write, obj_in_stream); if (sys_read <= 0) pfatal_with_name (obj_in_name); diff --git a/gcc/optabs.c b/gcc/optabs.c index 9ce0c926460..2898b49c870 100644 --- a/gcc/optabs.c +++ b/gcc/optabs.c @@ -4430,7 +4430,8 @@ init_one_libfunc (name) { if (ggc_p) name = ggc_alloc_string (name, -1); - return gen_rtx_SYMBOL_REF (Pmode, name); + + return gen_rtx_SYMBOL_REF (Pmode, (char *) name); } /* Mark ARG (which is really an OPTAB *) for GC. */ diff --git a/gcc/reload.c b/gcc/reload.c index ffad39973e7..0a51a28f882 100644 --- a/gcc/reload.c +++ b/gcc/reload.c @@ -4037,7 +4037,8 @@ find_reloads (insn, replace, ind_levels, live_known, reload_reg_p) { for (i = 0; i < n_reloads; i++) { - int first_num, type; + int first_num; + enum reload_type type; switch (rld[i].when_needed) { diff --git a/gcc/reload1.c b/gcc/reload1.c index f0aec4478d0..9b0b4d12ac0 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -3173,6 +3173,7 @@ mark_not_eliminable (dest, x, data) last call to set_initial_elim_offsets. This is used to catch cases where something illegal happened during reload_as_needed that could cause incorrect code to be generated if we did not check for it. */ + static void verify_initial_elim_offsets () { diff --git a/gcc/sbitmap.c b/gcc/sbitmap.c index 0046c57736e..335659d9b35 100644 --- a/gcc/sbitmap.c +++ b/gcc/sbitmap.c @@ -540,7 +540,8 @@ dump_sbitmap (file, bmap) FILE *file; sbitmap bmap; { - int i,j,n; + int i, n; + unsigned int j; int set_size = bmap->size; int total_bits = bmap->n_bits; @@ -551,7 +552,8 @@ dump_sbitmap (file, bmap) { if (n != 0 && n % 10 == 0) fprintf (file, " "); - fprintf (file, "%d", (bmap->elms[i] & (1L << j)) != 0); + fprintf (file, "%d", + (bmap->elms[i] & ((SBITMAP_ELT_TYPE) 1 << j)) != 0); } } fprintf (file, "\n"); diff --git a/gcc/unroll.c b/gcc/unroll.c index 48fa75743c0..115b92c8d7b 100644 --- a/gcc/unroll.c +++ b/gcc/unroll.c @@ -234,7 +234,7 @@ unroll_loop (loop, insn_count, end_insert_before, strength_reduce_p) { int i, j; unsigned HOST_WIDE_INT temp; - int unroll_number; + int unroll_number = 1; rtx copy_start, copy_end; rtx insn, sequence, pattern, tem; int max_labelno, max_insnno; diff --git a/gcc/varasm.c b/gcc/varasm.c index 76d91f71f2f..bfce0d8fef3 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -2539,7 +2539,7 @@ compare_constant_1 (exp, p) if (flag_writable_strings) return 0; - if (*p++ != TYPE_MODE (TREE_TYPE (exp))) + if ((enum machine_mode) *p++ != TYPE_MODE (TREE_TYPE (exp))) return 0; strp = TREE_STRING_POINTER (exp); |