Work around an apparent gcc-4.8 optimisation bug.

Seems that 4.8.0 (with some optimisations enabled) doesn't like

  foo = func();
  memmove(foo, bar, baz)
  fred[jim] = foo;

– foo gets zeroed.

-O2 is known to cause this, whereas -O0 works fine.