This testcase was fixed with r13-1695-gb0f02eeb906b63 which added an Ada testcase for the issue but adding a C testcase is a good idea and that is what this does.
Committed after making sure it passes on x86_64-linux-gnu. PR ipa/110705 gcc/testsuite/ChangeLog: * gcc.c-torture/compile/pr110705-1.c: New test. Signed-off-by: Andrew Pinski <quic_apin...@quicinc.com> --- .../gcc.c-torture/compile/pr110705-1.c | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr110705-1.c diff --git a/gcc/testsuite/gcc.c-torture/compile/pr110705-1.c b/gcc/testsuite/gcc.c-torture/compile/pr110705-1.c new file mode 100644 index 00000000000..6c0029c99e3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr110705-1.c @@ -0,0 +1,27 @@ +/* PR ipa/110705 */ + +/* We used to ICE in gimplify_modify_expr due to + the gimplifier not handling VCE between an struct + and an integer type. */ + +struct a { + long b; +}; +union d { + struct a b; + int e; +}v; +long c; +int f; +static void g(union d h, long i) { + while (1) + switch (c) + case 4: + if (h.e) + c = 4; +} +void j(union d *h) { + if (f) + g(*h, h->b.b); +} +void k() { union d *h = &v; j(h); } -- 2.39.3