http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54328
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-08-20 07:24:38 UTC --- 'a' isn't a pointer, it's an array, so the closure has a copy of the array and a[0] = 2 doesn't alter the closure's copy.