Files
Nim/tests/destructor/tgotoexceptions7.nim
ringabout b5ee81fd23 fix #18977; disallow change branch of an object variant in ORC (#21526)
* fix #18977 disallow change branch of an object variant in ORC

* check errors for goto exception

* fixes conditions

* fixes tests

* add a test case for #18977
2023-03-16 16:06:26 +01:00

50 lines
801 B
Nim

discard """
cmd: "nim c --gc:arc --exceptions:goto --panics:off $file"
output: '''prevented!
caught
AssertionDefect
900'''
"""
type
E = enum
kindA, kindB
Obj = object
case kind: E
of kindA: s: string
of kindB: i: int
ObjA = ref object of RootObj
ObjB = ref object of ObjA
proc takeRange(x: range[0..4]) = discard
proc bplease(x: ObjB) = discard
proc helper = doAssert(false)
proc main(i: int) =
var obj = Obj(kind: kindA, s: "abc")
{.cast(uncheckedAssign).}:
obj.kind = kindB
obj.i = 2
try:
var objA = ObjA()
bplease(ObjB(objA))
except ObjectConversionDefect:
echo "prevented!"
try:
takeRange(i)
except RangeDefect:
echo "caught"
try:
helper()
except AssertionDefect:
echo "AssertionDefect"
echo i * i
main(30)