diff options
author | Richard Kenner <kenner@vlsi1.ultra.nyu.edu> | 2000-02-20 01:11:00 +0000 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 2000-02-19 20:11:00 -0500 |
commit | 06ceef4e7bd12a2097bef4cd68d8d7397dac83ff (patch) | |
tree | 7f6c09091ffe927c1ab220b0ad2180cb341a9a84 /gcc/fold-const.c | |
parent | ccd4c273d9fd62fa7d57061387ad73ffb1043aa0 (diff) | |
download | gcc-06ceef4e7bd12a2097bef4cd68d8d7397dac83ff.zip gcc-06ceef4e7bd12a2097bef4cd68d8d7397dac83ff.tar.gz gcc-06ceef4e7bd12a2097bef4cd68d8d7397dac83ff.tar.bz2 |
c-common.c (decl_attributes): Set DECL_SIZE_UNIT.
* c-common.c (decl_attributes): Set DECL_SIZE_UNIT.
* c-decl.c (duplicate_decls, finish_enum): Likewise.
(finish_decl): Remove -Wlarger-than code from here.
* flags.h (id_clash_len): Now int.
(larger_than_size): Now HOST_WIDE_INT.
* fold-const.c (size_int_wide): No more HIGH parm; NUMBER is signed.
Clean up checking to see if in table.
(make_bit_field_ref): Remove extra parm to bitsize_int.
* ggc-common.c (ggc_mark_tree_children): Mark DECL_SIZE_UNIT.
* print-tree.c (print_node): Print DECL_SIZE_UNIT and TYPE_SIZE_UNIT.
* stmt.c (expand_decl): Use DECL_SIZE_UNIT for stack checking size
and for computing size of decl.
* stor-layout.c (layout_decl): Set DECL_SIZE_UNIT.
Move -Wlarger-than code to here.
(layout_record): Remove extra arg to bitsize_int.
Set TYPE_BINFO_SIZE_UNIT.
(layout_union): Remove extra arg to bitsize_int.
Use proper type for size of QUAL_UNION.
(layout_type): Remove extra arg to bitsize_int.
* toplev.c (id_clash_len): Now int.
(larger_than_size): Now HOST_WIDE_INT.
(decode_W_option): Clean up id-clash and larger-than- cases.
* tree.c (get_identifier, maybe_get_identifier): Remove unneeded casts.
(expr_align, case FUNCTION_DECL): DECL_ALIGN is not defined.
* tree.h (BINFO_SIZE_UNIT, TYPE_BINFO_SIZE_UNIT, DECL_SIZE_UNIT): New.
(struct tree_decl): New field size_unit.
(size_int_wide): No HIGH operand; NUMBER is now signed.
(size_int_2): Deleted.
(size_int, bitsize_int): Don't use it and rework args.
* varasm.c (assemble_variable, output_constructor): Use DECL_SIZE_UNIT.
* ch/decl.c (layout_enum): Set DECL_SIZE_UNIT.
* ch/satisfy.c (safe_satisfy_decl): Likewise.
* cp/class.c (build_primary_vtable, layout_vtable_decl): Likewise.
(avoid_overlap, build_base_field): Likewise.
(build_base_field, build_base_fields, is_empty_class):
Test DECL_SIZE with integer_zero.
(layout_class_type): Set CLASSTYPE_SIZE_UNIT.
* cp/cp-tree.h (struct lang_type): New field size_unit.
(CLASSTYPE_SIZE_UNIT): New macro.
* cp/decl.c (init_decl_processing): Set DECL_SIZE_UNIT.
(cp_finish_decl): Delete -Wlarger-than processing.
* cp/optimize.c (remap_decl): Walk DECL_SIZE_UNIT.
* cp/pt.c (tsubst_decl): Set DECL_SIZE_UNIT.
* cp/tree.c (make_binfo): binfo vector is one entry longer.
(walk_tree): Walk DECL_SIZE_UNIT.
* f/com.c (ffecom_sym_transform): Use DECL_SIZE_UNIT.
(ffecom_transform_common_, ffecom_transform_equiv_): Likewise.
(duplicate_decls): Likewise.
(ffecom_tree_canonize_ptr_): Delete extra arg to bitsize_int.
(finish_decl): Delete -Wlarger-than processing.
* java/class.c (build_class_ref, push_super_field): Set DECL_SIZE_UNIT.
* java/constants.c (build_constants_constructor): Likewise.
From-SVN: r32068
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r-- | gcc/fold-const.c | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c index e98a7f7..ff925c9 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -1,5 +1,6 @@ /* Fold a constant sub-tree into a single node for C-compiler - Copyright (C) 1987, 88, 92-99, 2000 Free Software Foundation, Inc. + Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, + 1999, 2000 Free Software Foundation, Inc. This file is part of GNU CC. @@ -1795,16 +1796,16 @@ const_binop (code, arg1, arg2, notrunc) return 0; } -/* Return an INTEGER_CST with value whose HOST_BITS_PER_WIDE_INT bits are - given by HIGH and whose HOST_BITS_PER_WIDE_INT bits are given by NUMBER. +/* Return an INTEGER_CST with value whose low-order HOST_BITS_PER_WIDE_INT + bits are given by NUMBER. If BIT_P is nonzero, this represents a size in bit and the type of the result will be bitsizetype, othewise it represents a size in bytes and the type of the result will be sizetype. */ tree -size_int_wide (number, high, bit_p) - unsigned HOST_WIDE_INT number, high; +size_int_wide (number, bit_p) + HOST_WIDE_INT number; int bit_p; { /* Type-size nodes already made for small sizes. */ @@ -1819,12 +1820,15 @@ size_int_wide (number, high, bit_p) init_p = 1; } - if (number < 2*HOST_BITS_PER_WIDE_INT + 1 && high == 0 - && size_table[number][bit_p] != 0) - return size_table[number][bit_p]; - - if (number < 2*HOST_BITS_PER_WIDE_INT + 1 && high == 0) + /* If this is a positive number that fits in the table we use to hold + cached entries, see if it is already in the table and put it there + if not. */ + if (number >= 0 + && number < (int) (sizeof size_table / sizeof size_table[0]) / 2) { + if (size_table[number][bit_p] != 0) + return size_table[number][bit_p]; + if (! ggc_p) { /* Make this a permanent node. */ @@ -1842,7 +1846,7 @@ size_int_wide (number, high, bit_p) return t; } - t = build_int_2 (number, high); + t = build_int_2 (number, 0); TREE_TYPE (t) = bit_p ? bitsizetype : sizetype; TREE_OVERFLOW (t) = TREE_CONSTANT_OVERFLOW (t) = force_fit_type (t, 0); return t; @@ -2809,7 +2813,7 @@ make_bit_field_ref (inner, type, bitsize, bitpos, unsignedp) int unsignedp; { tree result = build (BIT_FIELD_REF, type, inner, - size_int (bitsize), bitsize_int (bitpos, 0L)); + size_int (bitsize), bitsize_int (bitpos)); TREE_UNSIGNED (result) = unsignedp; |