http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55149
David Abdurachmanov <david.abdurachmanov at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |david.abdurachmanov at gmail
dot c
| |om
--- Comment #9 from David Abdurachmanov <david.abdurachmanov at gmail dot com>
---
I am looking into 55520, which is marked a being duplicate of this ticket.
The example 1 below from 55520, still ICE on 4.9.0 (r199649). Yet it's marked
as RESOLVED FIXED. Jason, w/ 4.8.{0,1} VLA capture by reference in lambda works
fine, or at least compiles. Yet it now fails w/ 4.9.0. Details in example 2.
1. Is 55520 and this bug really RESOLVED FIXED? Example 1 produces ICE under
4.9.0.
2. Does capturing VLA by reference works **only** in 4.9.0? Example 2 compiles
under 4.8.{0,1}.
3. Looking at example 2, I would say capturing VLA by reference doesn't work in
4.9.0, or am I missing something here? Should I file a bug report?
### EXAMPLE 1 ###
int main(int argc, char** argv)
{
int x[1][argc];
[&x](int i)
{
x[0][i] = 0;
}(5);
return 0;
}
### GCC OUTPUT ###
test2.cxx: In lambda function:
test2.cxx:7:15: internal compiler error: in expand_expr_real_1, at expr.c:9361
x[0][i] = 0;
^
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
### EXAMPLE 2 ###
134 uint32_t index[nt];
135 float e[nt];
136 for (std::size_t k=0; k!=nt; ++k) {
137 e[k]=towers[k].eta();
138 index[k]=k;
139 std::push_heap(index,index+k+1,[&e](uint32_t i, uint32_t j){ return
e[i]<e[j];});
140 }
### GCC OUTPUT ###
RecoEgamma/EgammaIsolationAlgos/interface/EgammaTowerIsolation.h:139:38: error:
size of array is not an integral constant-expression
std::push_heap(index,index+k+1,[&e](uint32_t i, uint32_t j){ return
e[i]<e[j];});
Here caret points to ``&e''.
david