The Inliner generates expressions like this:
*((float *) &edges[num]) = decomp_2_renamed_2_i163;
which should be simplified into just edges[num] = decomp_2_renamed_2_i163
The problem is that the expression should have never been generated with that nonsensical (float *) cast (which is, perhaps unsurprisingly, valid C). This is because of the propagation of argument expressions into parameter references, which is done every time a function is inlined. The fix would simply have us remove the cast from the expression, turning it into *(&edges[num]), which the inliner is already capable of simplifying into edges[num] at a later pass.