summaryrefslogtreecommitdiff
path: root/test/c
diff options
context:
space:
mode:
authorAlasdair Armstrong2018-09-13 17:38:09 +0100
committerAlasdair Armstrong2018-09-13 17:38:09 +0100
commit03387349dceaecd8feb708eb467a0bde372cb664 (patch)
tree7fa4134a58d5d76fe345a680eed1bd9e6a079352 /test/c
parent61abeccf6c37169bc22a1674897caf482195857f (diff)
C: Fix an issue with assigning to unitialized variables at end of blocks
Assigning to an uninitialized variable as the last statement in a block is almost certainly a type, and if that occurs then the lift_assign re-write will introduce empty blocks causing this error to occur. Now when we see such an empty block when converting to A-normal form we turn it into unit, and emit a warning stating that an empty block has been found as well as the probable cause (uninitialized variable).
Diffstat (limited to 'test/c')
-rw-r--r--test/c/anf_block.expect1
-rw-r--r--test/c/anf_block.sail13
2 files changed, 14 insertions, 0 deletions
diff --git a/test/c/anf_block.expect b/test/c/anf_block.expect
new file mode 100644
index 00000000..9766475a
--- /dev/null
+++ b/test/c/anf_block.expect
@@ -0,0 +1 @@
+ok
diff --git a/test/c/anf_block.sail b/test/c/anf_block.sail
new file mode 100644
index 00000000..bd26f67a
--- /dev/null
+++ b/test/c/anf_block.sail
@@ -0,0 +1,13 @@
+
+val print = "print_endline" : string -> unit
+
+val main : unit -> unit
+
+function main() = {
+ match () {
+ _ => {
+ TEST = ()
+ }
+ };
+ print("ok")
+} \ No newline at end of file