Folding with concetenate segfaults
The following program takes a 2D array and flattens it into a 1D array by folding a[0], a[1], ..., a[m - 1] with the ++ operator. Compiled with
sac2c 1.3.3-MijasCosta-1079-g648dba
build-type: DEBUG
built-by: "thomas" at 2023-10-11T13:19:03
and no arguments. Segfaults during execution.
noinline
int[.] cat(int[.] a, int[.] b)
{
len_a = _sel_VxA_([0], _shape_A_(a));
len_b = _sel_VxA_([0], _shape_A_(b));
return with {
([0] <= iv < [len_a]): _sel_VxA_(iv, a);
([len_a] <= iv < [_add_SxS_(len_a, len_b)]): _sel_VxA_(iv, b);
}: genarray([_add_SxS_(len_a, len_b)], 0);
}
int[.] sel(int i, int[., .] a)
{
n = _sel_VxA_([1], _shape_A_(a));
return with {
([0] <= [j] < [n]): _sel_VxA_([i, j], a);
}: genarray([n], 0);
}
noinline
int[.] flatten(int[., .] a)
{
n = _sel_VxA_([0], _shape_A_(a));
return with {
([0] <= [i] < [n]): sel(i, a);
}: fold(cat, []);
/* return with {
([0] <= iv < shape(a)[0]): a[iv];
}: fold(++, []); */
}
int main()
{
m = 42;
n = 4242;
a = with {
([0, 0] <= [i, j] < [m, n]): _add_SxS_(i, j);
}: genarray([m, n], 0);
b = flatten(a);
return _sel_VxA_([0], b);
}