Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Nil Pointer Dereference Error When Declaring Duplicate Functions in Main and Test File of the Same Package #2763

Open
notJoon opened this issue Sep 6, 2024 · 0 comments

Comments

@notJoon
Copy link
Member

notJoon commented Sep 6, 2024

Description

When the same function is declared in both the main source and test file within the same package, a nil pointer dereference error occurs instead of the expected redclared in this block error.

Reproduction Code

// foo/a.gno
package foo

func Add(a, b int) int {
    return add2(a, b)
}

func add2(a, b int) int {
    return a + b
}
// foo/a_test.gno
package foo

import (
    "testing"
)

func TestFoo(t *testing.T) {
    a := 1
    b := 2

    if Add(a, b) != 3 {
        t.Errorf("Add(%d, %d) = %d, want %d", a, b, Add(a, b), a+b)
    }
}

func add2(a, b int) int {
    return a + b
}

Current Output

examples/gno.land/p/demo/foo: test pkg: panic: runtime error: invalid memory address or nil pointer dereference
--- preprocess stack ---
stack 1: file{ package foo; import testing; func TestFoo(t *(testing<VPUverse(0)>.T)) { a<VPUverse(0)> := 1; b<VPUverse(0)> := 2; if Add<VPUverse(0)>(a<VPUverse(0)>, b<VPUverse(0)>) != 3 { t<VPUverse(0)>.Errorf("Add(%d, %d) = %d, want %d", a<VPUverse(0)>, b<VPUverse(0)>, Add<VPUverse(0)>(a<VPUverse(0)>, b<VPUverse(0)>), a<VPUverse(0)> + b<VPUverse(0)>) } }; func add2(a int<VPUverse(0)>, b int<VPUverse(0)>)  int<VPUverse(0)> { return a<VPUverse(0)> + b<VPUverse(0)> } }
stack 0: package(foo)
------------------------
stack:
goroutine 1 [running]:
runtime/debug.Stack()
        /Users/not_joon/go/pkg/mod/golang.org/[email protected]/src/runtime/debug/stack.go:24 +0x64
main.runTestFiles.func1()
        /Users/not_joon/gno-core/gnovm/cmd/gno/test.go:445 +0x48
panic({0x100fe0680?, 0x14009ad4cc0?})
        /Users/not_joon/go/pkg/mod/golang.org/[email protected]/src/runtime/panic.go:770 +0x124
github.com/gnolang/gno/gnovm/pkg/gnolang.initStaticBlocks.func1.1()
        /Users/not_joon/gno-core/gnovm/pkg/gnolang/preprocess.go:137 +0x290
panic({0x100fc3b40?, 0x101714510?})
        /Users/not_joon/go/pkg/mod/golang.org/[email protected]/src/runtime/panic.go:770 +0x124
github.com/gnolang/gno/gnovm/pkg/gnolang.(*StaticBlock).Define2(0x1400042c930, 0x0, {0x140004135a4, 0x4}, {0x0, 0x0}, {{0x0, 0x0}, {0x0, 0x0}, ...})
        /Users/not_joon/gno-core/gnovm/pkg/gnolang/nodes.go:1825 +0x508
github.com/gnolang/gno/gnovm/pkg/gnolang.(*StaticBlock).Predefine(...)
        /Users/not_joon/gno-core/gnovm/pkg/gnolang/nodes.go:1787
github.com/gnolang/gno/gnovm/pkg/gnolang.initStaticBlocks.func1({0x14000143200?, 0x14000143200?, 0x2?}, 0x20?, 0x101054e46?, {0x1010e1d00, 0x14000428c08}, 0x8?)
        /Users/not_joon/gno-core/gnovm/pkg/gnolang/preprocess.go:214 +0x394
github.com/gnolang/gno/gnovm/pkg/gnolang.transcribe(0x14008519280, {0x14000143200, 0x1, 0x20}, 0x4d, 0x2, {0x1010e1d00, 0x14000428c08}, 0x14008518f6f)
        /Users/not_joon/gno-core/gnovm/pkg/gnolang/transcribe.go:140 +0x74
github.com/gnolang/gno/gnovm/pkg/gnolang.transcribe(0x14008519280, {0x14000143200, 0x0, 0x20}, 0x0, 0x0, {0x1010e1e68, 0x1400042cc08}, 0x140085191e7)
        /Users/not_joon/gno-core/gnovm/pkg/gnolang/transcribe.go:717 +0x2c6c
github.com/gnolang/gno/gnovm/pkg/gnolang.Transcribe({0x1010e1e68, 0x1400042cc08}, 0x140003a5280)
        /Users/not_joon/gno-core/gnovm/pkg/gnolang/transcribe.go:133 +0xb4
github.com/gnolang/gno/gnovm/pkg/gnolang.initStaticBlocks({0x1010ee508, 0x1400010db80}, {0x1010ec6b0, 0x1400042c908}, {0x1010ec8e0, 0x1400042cc08})
        /Users/not_joon/gno-core/gnovm/pkg/gnolang/preprocess.go:117 +0x13c
github.com/gnolang/gno/gnovm/pkg/gnolang.PredefineFileSet({0x1010ee508, 0x1400010db80}, 0x1400042c908, 0x1400000c258)
        /Users/not_joon/gno-core/gnovm/pkg/gnolang/preprocess.go:27 +0x98
github.com/gnolang/gno/gnovm/pkg/gnolang.(*Machine).runFileDecls(0x14000033688, {0x140000746d0, 0x1, 0x1})
        /Users/not_joon/gno-core/gnovm/pkg/gnolang/machine.go:626 +0x1c8
github.com/gnolang/gno/gnovm/pkg/gnolang.(*Machine).RunFiles(0x14000033688, {0x140000746d0?, 0x1000158?, 0x101d23dd8?})
        /Users/not_joon/gno-core/gnovm/pkg/gnolang/machine.go:584 +0x30
main.runTestFiles(0x14000033688, 0x1400000cc00, {0x140004134d7, 0x3}, 0x1, 0x0, {0x0, 0x0}, {0x1010e5ff0, 0x14000415090}, ...)
        /Users/not_joon/gno-core/gnovm/cmd/gno/test.go:464 +0x194
main.gnoTestPkg({0x16f98f6a4, 0x1c}, {0x1400040e560?, 0x1, 0x14?}, {0x0, 0x0, 0xe71e6eb300000000?}, 0x1400016d6c0, {0x1010e5ff0, ...})
        /Users/not_joon/gno-core/gnovm/cmd/gno/test.go:311 +0xf44
main.execTest(0x1400016d6c0, {0x1400040e540?, 0x1?, 0x1?}, {0x1010e5ff0, 0x14000415090})
        /Users/not_joon/gno-core/gnovm/cmd/gno/test.go:205 +0x35c
main.newTestCmd.func1({0x0?, 0x140000300f0?}, {0x1400040e540?, 0x14000110d20?, 0x0?})
        /Users/not_joon/gno-core/gnovm/cmd/gno/test.go:99 +0x3c
github.com/gnolang/gno/tm2/pkg/commands.(*Command).Run(0x14000392d10?, {0x1010d8fd0?, 0x1017b6540?})
        /Users/not_joon/gno-core/tm2/pkg/commands/command.go:255 +0x17c
github.com/gnolang/gno/tm2/pkg/commands.(*Command).Run(0x14000392d10?, {0x1010d8fd0?, 0x1017b6540?})
        /Users/not_joon/gno-core/tm2/pkg/commands/command.go:259 +0x12c
github.com/gnolang/gno/tm2/pkg/commands.(*Command).ParseAndRun(0x14000392d10, {0x1010d8fd0, 0x1017b6540}, {0x140000300d0?, 0x14000393290?, 0x14000393340?})
        /Users/not_joon/gno-core/tm2/pkg/commands/command.go:140 +0x4c
github.com/gnolang/gno/tm2/pkg/commands.(*Command).Execute(0x1010e5ff0?, {0x1010d8fd0?, 0x1017b6540?}, {0x140000300d0?, 0x1016d1ef8?, 0x140000021c0?})
        /Users/not_joon/gno-core/tm2/pkg/commands/command.go:117 +0x28
main.main()
        /Users/not_joon/gno-core/gnovm/cmd/gno/main.go:13 +0x6c

gno machine: Machine:
    CheckTypes: false
    Op: []
    Values: (len: 0)
    Exprs:
    Stmts:
    Blocks:
          @(33) gno.land/p/demo/foo
    Blocks (other):
    Frames:
    Exceptions:

FAIL
FAIL    examples/gno.land/p/demo/foo    0.89s
FAIL
FAIL
FAIL: 0 build errors, 1 test errors

Expected Output

add2 redeclared in this block
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: No status
Status: Triage
Development

No branches or pull requests

1 participant