diff --git a/gnovm/pkg/gnolang/nodes.go b/gnovm/pkg/gnolang/nodes.go index 445968a2c9c..3f2b2246f78 100644 --- a/gnovm/pkg/gnolang/nodes.go +++ b/gnovm/pkg/gnolang/nodes.go @@ -2143,6 +2143,11 @@ const ( ) func NewValuePath(t VPType, depth uint8, index uint16, n Name) ValuePath { + // no ValuePath depths should exceed uint8/2 + if depth > 127 { + panic("value path depth overflow") + } + vp := ValuePath{ Type: t, Depth: depth, diff --git a/gnovm/tests/files/block1.gno b/gnovm/tests/files/block1.gno new file mode 100644 index 00000000000..6eb2403c163 --- /dev/null +++ b/gnovm/tests/files/block1.gno @@ -0,0 +1,669 @@ +// You can edit this code! +// Click here and start typing. +package main + +var v int = 1 + +func main() { + v++ + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } +} + +// Output: +// 3 +// 4 +// 5 +// 6 +// 7 +// 8 +// 9 +// 10 +// 11 +// 12 +// 13 +// 14 +// 15 +// 16 +// 17 +// 18 +// 19 +// 20 +// 21 +// 22 +// 23 +// 24 +// 25 +// 26 +// 27 +// 28 +// 29 +// 30 +// 31 +// 32 +// 33 +// 34 +// 35 +// 36 +// 37 +// 38 +// 39 +// 40 +// 41 +// 42 +// 43 +// 44 +// 45 +// 46 +// 47 +// 48 +// 49 +// 50 +// 51 +// 52 +// 53 +// 54 +// 55 +// 56 +// 57 +// 58 +// 59 +// 60 +// 61 +// 62 +// 63 +// 64 +// 65 +// 66 +// 67 +// 68 +// 69 +// 70 +// 71 +// 72 +// 73 +// 74 +// 75 +// 76 +// 77 +// 78 +// 79 +// 80 +// 81 +// 82 +// 83 +// 84 +// 85 +// 86 +// 87 +// 88 +// 89 +// 90 +// 91 +// 92 +// 93 +// 94 +// 95 +// 96 +// 97 +// 98 +// 99 +// 100 +// 101 +// 102 +// 103 +// 104 +// 105 +// 106 +// 107 +// 108 +// 109 +// 110 +// 111 +// 112 +// 113 +// 114 +// 115 +// 116 +// 117 +// 118 +// 119 +// 120 +// 121 +// 122 +// 123 +// 124 +// 125 +// 126 diff --git a/gnovm/tests/files/block2.gno b/gnovm/tests/files/block2.gno new file mode 100644 index 00000000000..f2514d8afda --- /dev/null +++ b/gnovm/tests/files/block2.gno @@ -0,0 +1,550 @@ +// You can edit this code! +// Click here and start typing. +package main + +var v int = 1 + +func main() { + v++ + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + + if v >= 1 { + v++ + println(v) + if v >= 1 { + v++ + println(v) + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } +} + +// Error: +// main/files/block2.gno:419:129: value path depth overflow