On May 4, 2012, at 2:34 PM, Richard Guenther wrote:

> On Fri, May 4, 2012 at 2:27 PM, Tristan Gingold <ging...@adacore.com> wrote:
>> Hi,
>> 
>> get_string_length assumes that precision of size_t is the same as precision 
>> of a pointer, which isn't always true at least on VMS.
>> This patch simply add a conversion in case of mismatch.
>> 
>> Tested on ia64/VMS by cross-bootstrapping.
>> Bootstrapped and regtested on i386/GNU Linux.
>> 
>> Ok for trunk ?
> 
> Hmm, isn't the issue that size_t precision is not the same precision as
> sizetype?

Yes, that's right.

>  You probably should use ptrofftype_p (TREE_TYPE (lhs))
> instead of spelling out 'sizetype' here.

Will try.  Thanks for the hint.

Tristan.

> 
> Richard.
> 
>> Tristan.
>> 
>> 2012-05-04  Tristan Gingold  <ging...@adacore.com>
>> 
>>        * tree-ssa-strlen.c (get_string_length): Convert lhs if needed.
>> 
>> diff --git a/gcc/tree-ssa-strlen.c b/gcc/tree-ssa-strlen.c
>> index a37633a..bda5ffb 100644
>> --- a/gcc/tree-ssa-strlen.c
>> +++ b/gcc/tree-ssa-strlen.c
>> @@ -427,6 +427,12 @@ get_string_length (strinfo si)
>>                                    NULL);
>>          add_referenced_var (lhs_var);
>>          tem = gimple_call_arg (stmt, 0);
>> +          if (!useless_type_conversion_p (sizetype, TREE_TYPE (lhs)))
>> +            {
>> +              lhs = convert_to_ptrofftype (lhs);
>> +              lhs = force_gimple_operand_gsi (&gsi, lhs, true, NULL_TREE,
>> +                                              true, GSI_SAME_STMT);
>> +            }
>>          lenstmt
>>            = gimple_build_assign_with_ops (POINTER_PLUS_EXPR,
>>                                            make_ssa_name (lhs_var, NULL),
>> 

Reply via email to