summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/typecheck/pass/lexp_vec.sail10
-rw-r--r--test/typecheck/pass/lexp_vec/v1.expect11
-rw-r--r--test/typecheck/pass/lexp_vec/v1.sail17
-rw-r--r--test/typecheck/pass/lexp_vec/v2.expect7
-rw-r--r--test/typecheck/pass/lexp_vec/v2.sail17
5 files changed, 60 insertions, 2 deletions
diff --git a/test/typecheck/pass/lexp_vec.sail b/test/typecheck/pass/lexp_vec.sail
index b20da027..99ae0dca 100644
--- a/test/typecheck/pass/lexp_vec.sail
+++ b/test/typecheck/pass/lexp_vec.sail
@@ -2,10 +2,16 @@ default Order dec
$include <prelude.sail>
-register V : vector(1, dec, bitvector(32, dec))
+register V : vector(16, dec, bitvector(32, dec))
val zeros : forall 'n, 'n >= 0. unit -> bitvector('n, dec)
+val write_V : forall 'i, 0 <= 'i < 16. (int('i), bitvector(32, dec)) -> unit effect {wreg}
+
+function write_V(i, v) = {
+ V[i] = v
+}
+
function main() : unit -> unit = {
- V[0] = zeros()
+ write_V(0, zeros())
}
diff --git a/test/typecheck/pass/lexp_vec/v1.expect b/test/typecheck/pass/lexp_vec/v1.expect
new file mode 100644
index 00000000..953aa7d1
--- /dev/null
+++ b/test/typecheck/pass/lexp_vec/v1.expect
@@ -0,0 +1,11 @@
+Type error:
+[lexp_vec/v1.sail]:12:2-6
+12 | V[i] = v
+  | ^--^
+  | Bounds check failed for l-expression: (0 <= 'i & 'i < 16)
+  | This error was caused by:
+  | [lexp_vec/v1.sail]:12:2-6
+  | 12 | V[i] = v
+  |  | ^--^
+  |  | Bounds check failed for l-expression: (0 <= 'i & 'i < 16)
+  |
diff --git a/test/typecheck/pass/lexp_vec/v1.sail b/test/typecheck/pass/lexp_vec/v1.sail
new file mode 100644
index 00000000..862f20dd
--- /dev/null
+++ b/test/typecheck/pass/lexp_vec/v1.sail
@@ -0,0 +1,17 @@
+default Order dec
+
+$include <prelude.sail>
+
+register V : vector(16, dec, bitvector(32, dec))
+
+val zeros : forall 'n, 'n >= 0. unit -> bitvector('n, dec)
+
+val write_V : forall 'i. (int('i), bitvector(32, dec)) -> unit effect {wreg}
+
+function write_V(i, v) = {
+ V[i] = v
+}
+
+function main() : unit -> unit = {
+ write_V(0, zeros())
+}
diff --git a/test/typecheck/pass/lexp_vec/v2.expect b/test/typecheck/pass/lexp_vec/v2.expect
new file mode 100644
index 00000000..3cf52c8d
--- /dev/null
+++ b/test/typecheck/pass/lexp_vec/v2.expect
@@ -0,0 +1,7 @@
+Type error:
+[lexp_vec/v2.sail]:16:2-22
+16 | write_V(16, zeros())
+  | ^------------------^
+  | Could not resolve quantifiers for write_V
+  | * (0 <= 16 & 16 < 16)
+  |
diff --git a/test/typecheck/pass/lexp_vec/v2.sail b/test/typecheck/pass/lexp_vec/v2.sail
new file mode 100644
index 00000000..f0aaae1e
--- /dev/null
+++ b/test/typecheck/pass/lexp_vec/v2.sail
@@ -0,0 +1,17 @@
+default Order dec
+
+$include <prelude.sail>
+
+register V : vector(16, dec, bitvector(32, dec))
+
+val zeros : forall 'n, 'n >= 0. unit -> bitvector('n, dec)
+
+val write_V : forall 'i, 0 <= 'i < 16. (int('i), bitvector(32, dec)) -> unit effect {wreg}
+
+function write_V(i, v) = {
+ V[i] = v
+}
+
+function main() : unit -> unit = {
+ write_V(16, zeros())
+}