diff options
| author | Alasdair | 2019-11-05 20:03:28 +0000 |
|---|---|---|
| committer | Alasdair | 2019-11-05 20:08:28 +0000 |
| commit | 03cda7bbb5dccd6d6be4bc9c5d11fcaef5031e18 (patch) | |
| tree | d9949c5243e0d05789d1460270a3a7adab419580 /test/typecheck | |
| parent | d474f256c7dfde3af9ef089ad9de5b7ff01f2d9f (diff) | |
Forbid types declared after a scattered union being used in clauses
The following is therefore always forbidden
```
scattered union U
enum E = A | B | C
union clause U = Ctor : E
```
We attempt to detect when this occurs and include a hint indicating the
likely reason why a 'Undefined type E' error might occur in this
circumstance
Diffstat (limited to 'test/typecheck')
| -rw-r--r-- | test/typecheck/fail/scattered_union_rec.expect | 16 | ||||
| -rw-r--r-- | test/typecheck/fail/scattered_union_rec.sail | 6 |
2 files changed, 22 insertions, 0 deletions
diff --git a/test/typecheck/fail/scattered_union_rec.expect b/test/typecheck/fail/scattered_union_rec.expect new file mode 100644 index 00000000..cbc9f70a --- /dev/null +++ b/test/typecheck/fail/scattered_union_rec.expect @@ -0,0 +1,16 @@ +Type error: +[[96mscattered_union_rec.sail[0m]:6:24-25 +6[96m |[0munion clause U = Ctor : E + [91m |[0m [91m^[0m + [91m |[0m Undefined type E + [91m |[0m This error was caused by: + [91m |[0m [[96mscattered_union_rec.sail[0m]:6:0-25 + [91m |[0m 6[96m |[0munion clause U = Ctor : E + [91m |[0m [91m |[0m[91m^-----------------------^[0m + [91m |[0m [91m |[0m Types are not well-formed within this type definition. Note that recursive types are forbidden. + [91m |[0m This error was caused by: + [91m |[0m [[96mscattered_union_rec.sail[0m]:6:13-14 + [91m |[0m 6[96m |[0munion clause U = Ctor : E + [91m |[0m [91m |[0m [91m^[0m + [91m |[0m [91m |[0m As this is a scattered union clause, this could also be caused by using a type defined after the 'scattered union' declaration + [91m |[0m diff --git a/test/typecheck/fail/scattered_union_rec.sail b/test/typecheck/fail/scattered_union_rec.sail new file mode 100644 index 00000000..9f005f4e --- /dev/null +++ b/test/typecheck/fail/scattered_union_rec.sail @@ -0,0 +1,6 @@ + +scattered union U + +enum E = A | B | C + +union clause U = Ctor : E |
