summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSon Ho2023-08-18 10:44:01 +0200
committerSon Ho2023-08-18 10:44:01 +0200
commita9c256fe95523842a1ff025e73f6e9ce7c2db38a (patch)
tree719ddcd09d212c4c69c6d406ee6e024c0ef277ef
parent26c25bf375742cf4d5a0ab160b9646e90c067f18 (diff)
Add tests which use const generics as values
Diffstat (limited to '')
-rw-r--r--compiler/PureMicroPasses.ml4
-rw-r--r--compiler/PureUtils.ml3
-rw-r--r--tests/coq/array/Array_Funs.v4
-rw-r--r--tests/fstar/array/Array.Funs.fst4
-rw-r--r--tests/lean/Array/Funs.lean4
5 files changed, 17 insertions, 2 deletions
diff --git a/compiler/PureMicroPasses.ml b/compiler/PureMicroPasses.ml
index 65dc7ff2..b2f3bb9f 100644
--- a/compiler/PureMicroPasses.ml
+++ b/compiler/PureMicroPasses.ml
@@ -681,8 +681,8 @@ let inline_useless_var_reassignments (inline_named : bool) (inline_pure : bool)
| _ -> false
in
(* And either:
- * 2.1 the right-expression is a variable or a global *)
- let var_or_global = is_var re || is_global re in
+ * 2.1 the right-expression is a variable, a global or a const generic var *)
+ let var_or_global = is_var re || is_cvar re || is_global re in
(* Or:
* 2.2 the right-expression is a constant value, an ADT value,
* a projection or a primitive function call *and* the flag
diff --git a/compiler/PureUtils.ml b/compiler/PureUtils.ml
index 461098f2..f099ef9c 100644
--- a/compiler/PureUtils.ml
+++ b/compiler/PureUtils.ml
@@ -185,6 +185,9 @@ let is_var (e : texpression) : bool =
let as_var (e : texpression) : VarId.id =
match e.e with Var v -> v | _ -> raise (Failure "Unreachable")
+let is_cvar (e : texpression) : bool =
+ match e.e with CVar _ -> true | _ -> false
+
let is_global (e : texpression) : bool =
match e.e with Qualif { id = Global _; _ } -> true | _ -> false
diff --git a/tests/coq/array/Array_Funs.v b/tests/coq/array/Array_Funs.v
index 6d791873..d47e4633 100644
--- a/tests/coq/array/Array_Funs.v
+++ b/tests/coq/array/Array_Funs.v
@@ -183,6 +183,10 @@ Definition index_index_array_fwd
array_index_shared u32 32%usize a j
.
+(** [array::const_gen_ret]: forward function *)
+Definition const_gen_ret_fwd (N : usize) : result usize :=
+ Return N.
+
(** [array::update_update_array]: forward function *)
Definition update_update_array_fwd
(s : array (array u32 32%usize) 32%usize) (i : usize) (j : usize) :
diff --git a/tests/fstar/array/Array.Funs.fst b/tests/fstar/array/Array.Funs.fst
index 7c1d0b09..72163585 100644
--- a/tests/fstar/array/Array.Funs.fst
+++ b/tests/fstar/array/Array.Funs.fst
@@ -139,6 +139,10 @@ let index_index_array_fwd
let* a = array_index_shared (array u32 32) 32 s i in
array_index_shared u32 32 a j
+(** [array::const_gen_ret]: forward function *)
+let const_gen_ret_fwd (n : usize) : result usize =
+ Return n
+
(** [array::update_update_array]: forward function *)
let update_update_array_fwd
(s : array (array u32 32) 32) (i : usize) (j : usize) : result unit =
diff --git a/tests/lean/Array/Funs.lean b/tests/lean/Array/Funs.lean
index ad737dca..8d10c660 100644
--- a/tests/lean/Array/Funs.lean
+++ b/tests/lean/Array/Funs.lean
@@ -166,6 +166,10 @@ def index_index_array
Array.index_shared (Array U32 (Usize.ofInt 32)) (Usize.ofInt 32) s i
Array.index_shared U32 (Usize.ofInt 32) a j
+/- [array::const_gen_ret]: forward function -/
+def const_gen_ret (N : Usize) : Result Usize :=
+ Result.ret N
+
/- [array::update_update_array]: forward function -/
def update_update_array
(s : Array (Array U32 (Usize.ofInt 32)) (Usize.ofInt 32)) (i : Usize)