gimplifier: handle POLY_INT_CST-sized TARGET_EXPRs
authorRichard Sandiford <richard.sandiford@arm.com>
Wed, 15 Jan 2020 16:52:18 +0000 (16:52 +0000)
committerRichard Sandiford <richard.sandiford@arm.com>
Fri, 17 Jan 2020 09:20:24 +0000 (09:20 +0000)
commit507de5ee23efdc8a16d6b0b6488e118055c711cd
treee7235c4e9347a06ba96dddc8c2eac472a2f51d0d
parente4a5f73449d7352ba8128fecbc9a9570d746abdb
gimplifier: handle POLY_INT_CST-sized TARGET_EXPRs

If a TARGET_EXPR has poly-int size, the gimplifier would treat it
like a VLA and use gimplify_vla_decl.  gimplify_vla_decl in turn
would use an alloca and expect all references to be gimplified
via the DECL_VALUE_EXPR.  This caused confusion later in
gimplify_var_or_parm_decl_1 when we (correctly) had direct rather
than indirect references.

For completeness, the patch also fixes similar tests in the RETURN_EXPR
handling and OpenMP depend clauses.

2020-01-17  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* gimplify.c (gimplify_return_expr): Use poly_int_tree_p rather
than testing directly for INTEGER_CST.
(gimplify_target_expr, gimplify_omp_depend): Likewise.

gcc/testsuite/
* g++.target/aarch64/sve/acle/general-c++/gimplify_1.C: New test.
gcc/ChangeLog
gcc/gimplify.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.target/aarch64/sve/acle/general-c++/gimplify_1.C [new file with mode: 0644]