/* __builtin_object_size (ptr, object_size_type) computation
- Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
Contributed by Jakub Jelinek <jakub@redhat.com>
This file is part of GCC.
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING. If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
+the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA. */
#include "config.h"
#include "system.h"
static bool merge_object_sizes (struct object_size_info *, tree, tree,
unsigned HOST_WIDE_INT);
static bool plus_expr_object_size (struct object_size_info *, tree, tree);
-static void compute_object_sizes (void);
+static unsigned int compute_object_sizes (void);
static void init_offset_limit (void);
static void check_for_plus_in_loops (struct object_size_info *, tree);
static void check_for_plus_in_loops_1 (struct object_size_info *, tree,
code = MINUS_EXPR;
t = fold_build1 (NEGATE_EXPR, TREE_TYPE (t), t);
}
- t = convert (sizetype, t);
+ t = fold_convert (sizetype, t);
off = size_binop (MULT_EXPR, TYPE_SIZE_UNIT (TREE_TYPE (expr)), t);
break;
E.g. p = &buf[0]; while (cond) p = p + 4; */
if (object_size_type & 2)
{
- osi.depths = xcalloc (num_ssa_names, sizeof (unsigned int));
- osi.stack = xmalloc (num_ssa_names * sizeof (unsigned int));
+ osi.depths = XCNEWVEC (unsigned int, num_ssa_names);
+ osi.stack = XNEWVEC (unsigned int, num_ssa_names);
osi.tos = osi.stack;
osi.pass = 1;
/* collect_object_sizes_for is changing
{
unsigned HOST_WIDE_INT off = tree_low_cst (op1, 1);
- bytes = compute_builtin_object_size (value, object_size_type);
+ bytes = compute_builtin_object_size (op0, object_size_type);
if (off > offset_limit)
bytes = unknown[object_size_type];
else if (off > bytes)
/* Compute object sizes for VAR.
For ADDR_EXPR an object size is the number of remaining bytes
- to the end of the object (where what is consindered an object depends on
+ to the end of the object (where what is considered an object depends on
OSI->object_size_type).
For allocation CALL_EXPR like malloc or calloc object size is the size
of the allocation.
switch (TREE_CODE (stmt))
{
case RETURN_EXPR:
- if (TREE_CODE (TREE_OPERAND (stmt, 0)) != MODIFY_EXPR)
- abort ();
+ gcc_assert (TREE_CODE (TREE_OPERAND (stmt, 0)) == MODIFY_EXPR);
stmt = TREE_OPERAND (stmt, 0);
/* FALLTHRU */
switch (TREE_CODE (stmt))
{
case RETURN_EXPR:
- if (TREE_CODE (TREE_OPERAND (stmt, 0)) != MODIFY_EXPR)
- abort ();
+ gcc_assert (TREE_CODE (TREE_OPERAND (stmt, 0)) == MODIFY_EXPR);
stmt = TREE_OPERAND (stmt, 0);
/* FALLTHRU */
switch (TREE_CODE (stmt))
{
case RETURN_EXPR:
- if (TREE_CODE (TREE_OPERAND (stmt, 0)) != MODIFY_EXPR)
- abort ();
+ gcc_assert (TREE_CODE (TREE_OPERAND (stmt, 0)) == MODIFY_EXPR);
stmt = TREE_OPERAND (stmt, 0);
/* FALLTHRU */
for (object_size_type = 0; object_size_type <= 3; object_size_type++)
{
- object_sizes[object_size_type]
- = xmalloc (num_ssa_names * sizeof (HOST_WIDE_INT));
+ object_sizes[object_size_type] = XNEWVEC (unsigned HOST_WIDE_INT, num_ssa_names);
computed[object_size_type] = BITMAP_ALLOC (NULL);
}
/* Simple pass to optimize all __builtin_object_size () builtins. */
-static void
+static unsigned int
compute_object_sizes (void)
{
basic_block bb;
}
if (!set_rhs (stmtp, result))
- abort ();
+ gcc_unreachable ();
update_stmt (*stmtp);
if (dump_file && (dump_flags & TDF_DETAILS))
}
fini_object_sizes ();
+ return 0;
}
struct tree_opt_pass pass_object_sizes =