gnolang / gno

Gno: An interpreted, stack-based Go virtual machine to build succinct and composable apps + Gno.land: a blockchain for timeless code and fair open-source.
https://gno.land/
Other
893 stars 371 forks source link

error: primitive type int cannot be indexed #2660

Open piux2 opened 2 months ago

piux2 commented 2 months ago

Description

Problem: file test failed with panic: primitive type int cannot be indexed

package main

func Inc()int  {
    a := [1]int{0}
    defer func() {
        a[0]++
    }()
    return a[0]
}

func main(){
    i := Inc()
    println(i)
}

// Output:
// 0

Trace:

Machine.RunMain() panic: primitive type int cannot be indexed
Machine:
    CheckTypes: false
    Op: [OpHalt OpPopResults OpExec OpBody OpDefine OpBody OpReturnFromBlock OpReturnCallDefers OpBody]
    Values: (len: 2)
          #1 (Inc func()( int))
          #0 (main func()())
    Exprs:
    Stmts:
          #3 bodyStmt[0/0/1]=(end)
          #2 bodyStmt[0/0/3]=(end)
          #1 bodyStmt[0/0/1]=(const (println func(xs ...interface{})()))(i<VPBlock(1,0)>)*
          #0 return
    Blocks:
          @(145) Block(ID:0000000000000000000000000000000000000000:0,Addr:0x140003fcd20,Source:func func(){ a<VPBlock(2,0)>[(co...,Parent:0x140003fcb40)
 (s vals) @(145) Block(ID:0000000000000000000000000000000000000000:0,Addr:0x14000362e30,Source:func func(){ a<VPBlock(2,0)>[(co...,Parent:0x140003bb430)
 (s typs) @(145) []
          @(253) Block(ID:0000000000000000000000000000000000000000:0,Addr:0x140003fcb40,Source:func Inc()  (const-type int) { a...,Parent:0x140003fc5a0)
            a: (0 int)
            .res_0: (undefined)
 (s vals) @(253) Block(ID:0000000000000000000000000000000000000000:0,Addr:0x140003bb430,Source:func Inc()  (const-type int) { a...,Parent:0x140003e0630)
            a: (nil [1]int)
            .res_0: (0 int)
 (s typs) @(253) [[1]int int]
          @(402) Block(ID:0000000000000000000000000000000000000000:0,Addr:0x140003fc5a0,Source:file{ package main; func Inc()  ...,Parent:0x140003425a0)
 (s vals) @(402) Block(ID:0000000000000000000000000000000000000000:0,Addr:0x140003e0630,Source:file{ package main; func Inc()  ...,Parent:0x140001a3b30)
 (s typs) @(402) []
          @(511) main
    Blocks (other):
          #2 Block(ID:0000000000000000000000000000000000000000:0,Addr:0x140003fcb40,Source:func Inc()  (const-type int) { a...,Parent:0x140003fc5a0)
            a: (0 int)
            .res_0: (undefined)
 (static) #2 Block(ID:0000000000000000000000000000000000000000:0,Addr:0x140003bb430,Source:func Inc()  (const-type int) { a...,Parent:0x140003e0630)
            a: (nil [1]int)
            .res_0: (0 int)
          #1 Block(ID:0000000000000000000000000000000000000000:0,Addr:0x140003fc960,Source:func main() { i<VPBlock(1,0)> :=...,Parent:0x140003fc5a0)
            i: (undefined)
 (static) #1 Block(ID:0000000000000000000000000000000000000000:0,Addr:0x140003bb830,Source:func main() { i<VPBlock(1,0)> :=...,Parent:0x140003e0630)
            i: (0 int)
    Frames:
          #1 [FRAME FUNC:Inc RECV:(undefined) (0 args) 5/1/0/2/2 LASTPKG:main LASTRLM:Realm(nil)]
          #0 [FRAME FUNC:main RECV:(undefined) (0 args) 2/0/0/0/1 LASTPKG:main LASTRLM:Realm(nil)]
    Exceptions:

OUTPUT:

ERROR:
primitive type int cannot be indexed
goroutine 36 [running]:
runtime/debug.Stack()
    /Users/b/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.22.4.darwin-arm64/src/runtime/debug/stack.go:24 +0x64
runtime/debug.PrintStack()
    /Users/b/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.22.4.darwin-arm64/src/runtime/debug/stack.go:16 +0x1c
github.com/gnolang/gno/gnovm/tests.RunFileTest.func1.1()
    /Users/b/dev/gnoplay/gno/gnovm/tests/file.go:153 +0x1e0
panic({0x1052bc860?, 0x140003fe040?})
    /Users/b/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.22.4.darwin-arm64/src/runtime/panic.go:770 +0x124
github.com/gnolang/gno/gnovm/pkg/gnolang.(*Machine).RunMain.func1()
    /Users/b/dev/gnoplay/gno/gnovm/pkg/gnolang/machine.go:752 +0xb0
panic({0x1052bc860?, 0x140003fe040?})
    /Users/b/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.22.4.darwin-arm64/src/runtime/panic.go:770 +0x124
github.com/gnolang/gno/gnovm/pkg/gnolang.(*TypedValue).GetPointerAtIndex(0x14000392050, 0x140003fcb40?, {0x1053bd3f0, 0x1400033e8c0}, 0x14000392078)
    /Users/b/dev/gnoplay/gno/gnovm/pkg/gnolang/values.go:2029 +0xa88
github.com/gnolang/gno/gnovm/pkg/gnolang.(*Machine).PopAsPointer(0x1?, {0x1053b3d80?, 0x140003ad540?})
    /Users/b/dev/gnoplay/gno/gnovm/pkg/gnolang/machine.go:2032 +0x168
github.com/gnolang/gno/gnovm/pkg/gnolang.(*Machine).doOpInc(0x14000364b48)
    /Users/b/dev/gnoplay/gno/gnovm/pkg/gnolang/op_inc_dec.go:14 +0xc4
github.com/gnolang/gno/gnovm/pkg/gnolang.(*Machine).Run(0x14000364b48)
    /Users/b/dev/gnoplay/gno/gnovm/pkg/gnolang/machine.go:1486 +0xa6c
github.com/gnolang/gno/gnovm/pkg/gnolang.(*Machine).RunStatement(0x14000364b48, {0x1053b4c80, 0x140003c4700})
    /Users/b/dev/gnoplay/gno/gnovm/pkg/gnolang/machine.go:864 +0x330
github.com/gnolang/gno/gnovm/pkg/gnolang.(*Machine).RunMain(0x14000364b48)
    /Users/b/dev/gnoplay/gno/gnovm/pkg/gnolang/machine.go:755 +0x154
github.com/gnolang/gno/gnovm/tests.RunFileTest.func1(0x7?, 0x1053a6aa8?, {0x0?, 0x0?}, 0x140001a0c18, {0x1050a31d5, 0x4}, {0x1050a31d5, 0x4}, {0x1053bd3f0, ...}, ...)
    /Users/b/dev/gnoplay/gno/gnovm/tests/file.go:176 +0x7e0
github.com/gnolang/gno/gnovm/tests.RunFileTest({0x1400036fc98, 0x5}, {0x1400036fc70, 0xd}, {0x140003611e0, 0x3, 0x4?})
    /Users/b/dev/gnoplay/gno/gnovm/tests/file.go:245 +0x218
github.com/gnolang/gno/gnovm/tests.runFileTest(0x14000374340, {0x1400036fc70, 0xd}, {0x140001966b0, 0x1, 0x104be0098?})
    /Users/b/dev/gnoplay/gno/gnovm/tests/file_test.go:140 +0x1c8
github.com/gnolang/gno/gnovm/tests.runFileTests.func1(0x14000374340?)
    /Users/b/dev/gnoplay/gno/gnovm/tests/file_test.go:64 +0x38
thehowl commented 1 day ago

This sounds like an error's that not supposed to be there, but not causing major disruption, so removing mainnet launch requirement.