re PR middle-end/85450 (ICE: invalid types in nop conversion during GIMPLE pass: ompexp)
2018-04-26 Richard Biener <rguenther@suse.de> PR middle-end/85450 * tree-cfg.c (verify_gimple_assign_unary): Restore proper checking of integer<->pointer conversions. * omp-expand.c (expand_omp_for_static_nochunk): Avoid sign-/zero-extending pointer types. (expand_omp_for_static_chunk): Likewise. From-SVN: r259667
This commit is contained in:
parent
e92306590e
commit
bde84d5120
@ -1,3 +1,12 @@
|
||||
2018-04-26 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR middle-end/85450
|
||||
* tree-cfg.c (verify_gimple_assign_unary): Restore proper
|
||||
checking of integer<->pointer conversions.
|
||||
* omp-expand.c (expand_omp_for_static_nochunk): Avoid
|
||||
sign-/zero-extending pointer types.
|
||||
(expand_omp_for_static_chunk): Likewise.
|
||||
|
||||
2018-03-22 Hans-Peter Nilsson <hp@axis.com>
|
||||
Jean Lee <xiaoyur347@gmail.com>
|
||||
|
||||
|
@ -3501,7 +3501,12 @@ expand_omp_for_static_nochunk (struct omp_region *region,
|
||||
t = fold_convert (itype, s0);
|
||||
t = fold_build2 (MULT_EXPR, itype, t, step);
|
||||
if (POINTER_TYPE_P (type))
|
||||
t = fold_build_pointer_plus (n1, t);
|
||||
{
|
||||
t = fold_build_pointer_plus (n1, t);
|
||||
if (!POINTER_TYPE_P (TREE_TYPE (startvar))
|
||||
&& TYPE_PRECISION (TREE_TYPE (startvar)) > TYPE_PRECISION (type))
|
||||
t = fold_convert (signed_type_for (type), t);
|
||||
}
|
||||
else
|
||||
t = fold_build2 (PLUS_EXPR, type, t, n1);
|
||||
t = fold_convert (TREE_TYPE (startvar), t);
|
||||
@ -3515,7 +3520,12 @@ expand_omp_for_static_nochunk (struct omp_region *region,
|
||||
t = fold_convert (itype, e0);
|
||||
t = fold_build2 (MULT_EXPR, itype, t, step);
|
||||
if (POINTER_TYPE_P (type))
|
||||
t = fold_build_pointer_plus (n1, t);
|
||||
{
|
||||
t = fold_build_pointer_plus (n1, t);
|
||||
if (!POINTER_TYPE_P (TREE_TYPE (startvar))
|
||||
&& TYPE_PRECISION (TREE_TYPE (startvar)) > TYPE_PRECISION (type))
|
||||
t = fold_convert (signed_type_for (type), t);
|
||||
}
|
||||
else
|
||||
t = fold_build2 (PLUS_EXPR, type, t, n1);
|
||||
t = fold_convert (TREE_TYPE (startvar), t);
|
||||
@ -4000,7 +4010,12 @@ expand_omp_for_static_chunk (struct omp_region *region,
|
||||
t = fold_convert (itype, s0);
|
||||
t = fold_build2 (MULT_EXPR, itype, t, step);
|
||||
if (POINTER_TYPE_P (type))
|
||||
t = fold_build_pointer_plus (n1, t);
|
||||
{
|
||||
t = fold_build_pointer_plus (n1, t);
|
||||
if (!POINTER_TYPE_P (TREE_TYPE (startvar))
|
||||
&& TYPE_PRECISION (TREE_TYPE (startvar)) > TYPE_PRECISION (type))
|
||||
t = fold_convert (signed_type_for (type), t);
|
||||
}
|
||||
else
|
||||
t = fold_build2 (PLUS_EXPR, type, t, n1);
|
||||
t = fold_convert (TREE_TYPE (startvar), t);
|
||||
@ -4014,7 +4029,12 @@ expand_omp_for_static_chunk (struct omp_region *region,
|
||||
t = fold_convert (itype, e0);
|
||||
t = fold_build2 (MULT_EXPR, itype, t, step);
|
||||
if (POINTER_TYPE_P (type))
|
||||
t = fold_build_pointer_plus (n1, t);
|
||||
{
|
||||
t = fold_build_pointer_plus (n1, t);
|
||||
if (!POINTER_TYPE_P (TREE_TYPE (startvar))
|
||||
&& TYPE_PRECISION (TREE_TYPE (startvar)) > TYPE_PRECISION (type))
|
||||
t = fold_convert (signed_type_for (type), t);
|
||||
}
|
||||
else
|
||||
t = fold_build2 (PLUS_EXPR, type, t, n1);
|
||||
t = fold_convert (TREE_TYPE (startvar), t);
|
||||
|
@ -3842,7 +3842,7 @@ verify_gimple_assign_unary (gassign *stmt)
|
||||
|| (POINTER_TYPE_P (rhs1_type)
|
||||
&& INTEGRAL_TYPE_P (lhs_type)
|
||||
&& (TYPE_PRECISION (rhs1_type) >= TYPE_PRECISION (lhs_type)
|
||||
|| ptrofftype_p (sizetype))))
|
||||
|| ptrofftype_p (lhs_type))))
|
||||
return false;
|
||||
|
||||
/* Allow conversion from integral to offset type and vice versa. */
|
||||
|
Loading…
Reference in New Issue
Block a user