[Bug c++/69756] Passing a multidimensional variable-length array into a lambda (by reference) causes an error
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Feb 11 08:39:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69756
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |ice-on-valid-code,
| |wrong-code
Known to fail| |4.7.4, 6.0
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
Ok, it's that way already during into-SSA.
It seems that we gimplify type sizes and end up using the main()s type size
in the lambda which is uninitialized there:
main()::<lambda()> (const struct __lambda0 * const __closure)
{
sizetype D.2424;
sizetype D.2425;
int[0:D.2357][0:D.2347] * D.2426;
int[0:(sizetype) __closure->__array.max][0:D.2357][0:D.2347] & array
[value-expr: (int[0:(sizetype) __closure->__array.max][0:D.2357][0:D.2347] &)
__closure->__array.ptr];
{
int i4;
int i5;
int i6;
int output;
typedef struct ._0 ._0;
i4 = 1;
i5 = 2;
i6 = 3;
D.2424 = D.2371 /[ex] 4;
D.2371 is defined in main().
This hits at invalid tree (type) sharing between functions and/or invalid
gimplification or un-nesting. Not sure how lambdas are exactly implemented.
More information about the Gcc-bugs
mailing list