in tree-mudflap.c to change usage of fold_conver to build_int_cst http://gcc.gnu.org/wiki/Partial_Transitions. I am not 100% sure this is correct but maybe someone can shed some light.
--- gcc/tree-mudflap.c | 38 ++++++++++++++++++++------------------ 1 files changed, 20 insertions(+), 18 deletions(-) diff --git a/gcc/tree-mudflap.c b/gcc/tree-mudflap.c index e4f6ec0..684b7b4 100644 --- a/gcc/tree-mudflap.c +++ b/gcc/tree-mudflap.c @@ -567,8 +567,7 @@ mf_build_check_statement_for (tree base, tree limit, /* Build: __mf_base = (uintptr_t) <base address expression>. */ seq = gimple_seq_alloc (); - t = fold_convert_loc (location, mf_uintptr_type, - unshare_expr (base)); + t = build_int_cst_type (mf_uintptr_type, TREE_INT_CST_LOW (unshare_expr (base))); t = force_gimple_operand (t, &stmts, false, NULL_TREE); gimple_seq_add_seq (&seq, stmts); g = gimple_build_assign (mf_base, t); @@ -576,8 +575,7 @@ mf_build_check_statement_for (tree base, tree limit, gimple_seq_add_stmt (&seq, g); /* Build: __mf_limit = (uintptr_t) <limit address expression>. */ - t = fold_convert_loc (location, mf_uintptr_type, - unshare_expr (limit)); + t = build_int_cst_type (mf_uintptr_type, TREE_INT_CST_LOW (unshare_expr (limit))); t = force_gimple_operand (t, &stmts, false, NULL_TREE); gimple_seq_add_seq (&seq, stmts); g = gimple_build_assign (mf_limit, t); @@ -853,18 +851,21 @@ mf_xform_derefs_1 (gimple_stmt_iterator *iter, tree *tp, if (elt) elt = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (elt)), elt); - addr = fold_convert_loc (location, ptr_type_node, elt ? elt : base); + addr = build_int_cst_type (ptr_type_node, elt ? TREE_INT_CST_LOW (elt) : + TREE_INT_CST_LOW (base)); addr = fold_build_pointer_plus_loc (location, addr, byte_position (field)); } else addr = build1 (ADDR_EXPR, build_pointer_type (type), t); - + limit = fold_build2_loc (location, MINUS_EXPR, mf_uintptr_type, - fold_build2_loc (location, PLUS_EXPR, mf_uintptr_type, - fold_convert (mf_uintptr_type, addr), - size), - integer_one_node); + fold_build2_loc (location, PLUS_EXPR, mf_uintptr_type, + build_int_cst_type (mf_uintptr_type, + TREE_INT_CST_LOW (addr)), + + size), + integer_one_node); } break; @@ -908,17 +909,17 @@ mf_xform_derefs_1 (gimple_stmt_iterator *iter, tree *tp, return; bpu = bitsize_int (BITS_PER_UNIT); - ofs = fold_convert (bitsizetype, TREE_OPERAND (t, 2)); + ofs = build_int_cst_type (bitsizetype, TREE_INT_CST_LOW (TREE_OPERAND (t, 2))); rem = size_binop_loc (location, TRUNC_MOD_EXPR, ofs, bpu); ofs = size_binop_loc (location, TRUNC_DIV_EXPR, ofs, bpu); - size = fold_convert (bitsizetype, TREE_OPERAND (t, 1)); + size = build_int_cst_type (bitsizetype, TREE_INT_CST_LOW (TREE_OPERAND (t, 1))); size = size_binop_loc (location, PLUS_EXPR, size, rem); size = size_binop_loc (location, CEIL_DIV_EXPR, size, bpu); - size = fold_convert (sizetype, size); + size = build_int_cst_type (sizetype, TREE_INT_CST_LOW (size)); addr = TREE_OPERAND (TREE_OPERAND (t, 0), 0); - addr = fold_convert (ptr_type_node, addr); + addr = build_int_cst_type (ptr_type_node, TREE_INT_CST_LOW (addr)); addr = fold_build_pointer_plus_loc (location, addr, ofs); base = addr; @@ -1048,8 +1049,8 @@ mx_register_decls (tree decl, gimple_seq seq, location_t location) /* Variable-sized objects should have sizes already been gimplified when we got here. */ - size = fold_convert (size_type_node, - TYPE_SIZE_UNIT (TREE_TYPE (decl))); + size = build_int_cst_type (size_type_node, + TREE_INT_CST_LOW (TYPE_SIZE_UNIT (TREE_TYPE (decl)))); gcc_assert (is_gimple_val (size)); @@ -1233,11 +1234,12 @@ mudflap_register_call (tree obj, tree object_size, tree varname) tree arg, call_stmt; arg = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (obj)), obj); - arg = fold_convert (ptr_type_node, arg); + arg = build_int_cst_type (ptr_type_node, TREE_INT_CST_LOW (arg)); call_stmt = build_call_expr (mf_register_fndecl, 4, arg, - fold_convert (size_type_node, object_size), + build_int_cst_type (size_type_node, + TREE_INT_CST_LOW (object_size)), /* __MF_TYPE_STATIC */ build_int_cst (integer_type_node, 4), varname); -- 1.7.5.4