diff options
author | Araq <rumpf_a@web.de> | 2016-12-10 02:30:57 +0100 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2016-12-10 02:30:57 +0100 |
commit | 34143ee12285c55d0773ea8ebda38b95351c6592 (patch) | |
tree | 436d89470bc86d14a1f20f57d069820caa4e09e3 /tests | |
parent | 94e1488c242e8507beddf669b6ba776d016af0a6 (diff) | |
download | Nim-34143ee12285c55d0773ea8ebda38b95351c6592.tar.gz |
fixes serious codegen regression that caused Nimble to misbehave
Diffstat (limited to 'tests')
-rw-r--r-- | tests/ccgbugs/tmarkerproc_regression.nim | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/tests/ccgbugs/tmarkerproc_regression.nim b/tests/ccgbugs/tmarkerproc_regression.nim new file mode 100644 index 000000000..261f746fc --- /dev/null +++ b/tests/ccgbugs/tmarkerproc_regression.nim @@ -0,0 +1,47 @@ +discard """ + output: "done" +""" + +type + Version* = distinct string + Special* = distinct string + + VersionRangeEnum* = enum + verLater, # > V + verEarlier, # < V + verEqLater, # >= V -- Equal or later + verEqEarlier, # <= V -- Equal or earlier + verIntersect, # > V & < V + verEq, # V + verAny, # * + verSpecial # #head + + VersionRange* = ref VersionRangeObj + VersionRangeObj = object + case kind*: VersionRangeEnum + of verLater, verEarlier, verEqLater, verEqEarlier, verEq: + ver*: Version + of verSpecial: + spe*: Special + of verIntersect: + verILeft, verIRight: VersionRange + of verAny: + nil + +proc foo(x: string): VersionRange = + new(result) + result.kind = verEq + result.ver = Version(x) + +proc main = + var a: array[5000, VersionRange] + for i in 0 ..< 5000: + a[i] = foo($i & "some longer text here " & $i) + GC_fullcollect() + for i in 0 ..< 5000: + let expected = $i & "some longer text here " & $i + if a[i].ver.string != expected: + quit "bug!" + echo "done" + +main() |