convert.c (convert_to_integer): Don't assume an input pointer is POINTER_SIZE wide.

* convert.c (convert_to_integer): Don't assume an input pointer is
        POINTER_SIZE wide.  Fetch from the type instead.

From-SVN: r151060
This commit is contained in:
Olivier Hainque 2009-08-24 21:23:22 +00:00 committed by Olivier Hainque
parent df58e64872
commit c767899ef2
2 changed files with 11 additions and 3 deletions

View File

@ -1,3 +1,8 @@
2009-08-24 Olivier Hainque <hainque@adacore.com>
* convert.c (convert_to_integer): Don't assume an input pointer is
POINTER_SIZE wide. Fetch from the type instead.
2009-08-24 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
* configure.ac (AC_PREREQ): Bump to 2.64.

View File

@ -530,10 +530,13 @@ convert_to_integer (tree type, tree expr)
if (integer_zerop (expr))
return build_int_cst (type, 0);
/* Convert to an unsigned integer of the correct width first,
and from there widen/truncate to the required type. */
/* Convert to an unsigned integer of the correct width first, and from
there widen/truncate to the required type. Some targets support the
coexistence of multiple valid pointer sizes, so fetch the one we need
from the type. */
expr = fold_build1 (CONVERT_EXPR,
lang_hooks.types.type_for_size (POINTER_SIZE, 0),
lang_hooks.types.type_for_size
(TYPE_PRECISION (intype), 0),
expr);
return fold_convert (type, expr);