Message ID | C43ED110-6E71-4DB6-A824-95A1A2AE4376@adacore.com |
---|---|
State | New |
Headers | show |
On Fri, May 4, 2012 at 2:27 PM, Tristan Gingold <gingold@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? You probably should use ptrofftype_p (TREE_TYPE (lhs)) instead of spelling out 'sizetype' here. Richard. > Tristan. > > 2012-05-04 Tristan Gingold <gingold@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), >
On May 4, 2012, at 2:34 PM, Richard Guenther wrote: > On Fri, May 4, 2012 at 2:27 PM, Tristan Gingold <gingold@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 <gingold@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), >>
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),