Accessing captured parameter in method precondition creates invalid ccode
Submitted by Ilya Mezhirov
Link to original bug (#635090)
Description
Created attachment 174698 to reproduce the bug
Consider this function:
public void foo(int[] a) requires (a.length > 10) {}
It correctly compiles into
void foo (gint* a, int a_length1) {
g_return_if_fail (a_length1 > 10);
}
However, if we add a lambda into the function's body:
do_nothing( (i) => {
print("%d\n", a[i]);
});
then suddenly the precondition looks like this:
g_return_if_fail (_data1_->a_length1 > 10);
which makes no sense because data1 is unassigned at that point.
Checked 0.10 and 0.11, the bug appears in both.
Attachment 174698, "to reproduce the bug":
foo.vala
Edited by Rico Tzschichholz