diff --git a/compiler/heptagon/analysis/linear_typing.ml b/compiler/heptagon/analysis/linear_typing.ml index 06e0f32..697ab07 100644 --- a/compiler/heptagon/analysis/linear_typing.ml +++ b/compiler/heptagon/analysis/linear_typing.ml @@ -361,6 +361,8 @@ let rec fuse_args_lin args_lin collect_lins = | args_lin, [] -> args_lin | (Lat r)::args_lin, collect_lins -> (Lat r)::(fuse_args_lin args_lin collect_lins) + | (Lvar r)::args_lin, x::collect_lins -> + (Lvar r)::(fuse_args_lin args_lin collect_lins) | _::args_lin, x::collect_lins -> x::(fuse_args_lin args_lin collect_lins) diff --git a/test/bad/linear_map.ept b/test/bad/linear_map.ept new file mode 100644 index 0000000..522e28c --- /dev/null +++ b/test/bad/linear_map.ept @@ -0,0 +1,11 @@ +const n:int = 100 + +fun f(a:int^n at r) returns (o:int^n at r) +let + o = [ a with [0] = 0 ] +tel + +fun g(a:int^n^n) returns (o:int^n^n) +let + o = map<> f (a) +tel \ No newline at end of file