Nim icon indicating copy to clipboard operation
Nim copied to clipboard

`proc` with generic params spuriously disambiguating different types with same name across imported modules

Open tersec opened this issue 1 year ago • 0 comments

Description

m.nim:

import ./j
import ./e

proc u(d: int | int) =
  var r: Y
  static: doAssert r is j.Y  # because j is imported first
  doAssert r is j.Y

u(0)

j.nim and e.nim:

type Y* = object

nim c m

Nim Version

Nim Compiler Version 1.6.21 [Linux: amd64]
Compiled at 2024-04-17
Copyright (c) 2006-2023 by Andreas Rumpf

git hash: 8ebb4dc30af3a5d3dd14bc651698d02b715befed
active boot switches: -d:release
Nim Compiler Version 2.0.5 [Linux: amd64]
Compiled at 2024-04-17
Copyright (c) 2006-2023 by Andreas Rumpf

git hash: 3ad16028aae82aa7cc48e72744890dd3fe504796
active boot switches: -d:release
Nim Compiler Version 2.1.1 [Linux: amd64]
Compiled at 2024-04-17
Copyright (c) 2006-2024 by Andreas Rumpf

git hash: 49e1ca0b3e53709b993f63288a164cd843c70c82
active boot switches: -d:release

Current Output

Builds with
m.nim(2, 8) Warning: imported and not used: 'e' [UnusedImport]

Expected Output

Does not build, because it does not have enough information to disambiguate which Y symbol it should use. Replacing proc with template, or with a non-generic proc, shows

m.nim(5, 10) Error: ambiguous identifier: 'Y' -- use one of the following:
  j.Y: Y
  e.Y: Y

Possible Solution

No response

Additional Information

No response

tersec avatar Apr 17 '24 04:04 tersec