nim-lang / Nim

Nim is a statically typed compiled systems programming language. It combines successful concepts from mature languages like Python, Ada and Modula. Its design focuses on efficiency, expressiveness, and elegance (in that order of priority).
https://nim-lang.org
Other
16.22k stars 1.46k forks source link

Constructing case object with discriminator of field of other object fails with `the field(s) 'g' are in conflict with this value` #23762

Open tersec opened 2 days ago

tersec commented 2 days ago

Description

type U = object
  h: bool

type K = object
  case h: bool
  of true, false: g: int

let x = default(U)

block:
  # This does build
  let v = x.h
  case v
  of true, false: discard K(h: v, g: 0)

# This does not build
case x.h
of true, false: discard K(h: x.h, g: 0)

With the let v = x.h helper, it does figure out that the K case object can be constructed, but not when directly accessing both as x.h.

Nim Version

Nim Compiler Version 2.0.6 [Linux: amd64]
Compiled at 2024-06-26
Copyright (c) 2006-2023 by Andreas Rumpf

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

git hash: 8096fa45bdf5367f0d89ffe22ba5776ad1abf097
active boot switches: -d:release

Current Output

c.nim(17, 26) Error: a case selecting discriminator 'h' with value 'x.h' appears in the object construction, but the field(s) 'g' are in conflict with this value.

Expected Output

Builds

Possible Solution

No response

Additional Information

No response

juancarlospaco commented 2 days ago

!nim c

type U = object
  h: bool

type K = object
  case h: bool
  of true, false: g: int

let x = default(U)

block:
  let v = x.h
  case v
  of true, false: discard K(h: v, g: 0)

case x.h
of true, false: discard K(h: x.h, g: 0)
github-actions[bot] commented 2 days ago
:penguin: Linux bisect by @juancarlospaco (collaborator)
devel :-1: FAIL

Output

``` Error: Command failed: nim c --run -d:nimDebug -d:nimDebugDlOpen -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --verbosity:0 --hints:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim /home/runner/work/Nim/Nim/temp.nim(12, 26) Error: a case selecting discriminator 'h' with value 'x.h' appears in the object construction, but the field(s) 'g' are in conflict with this value. assertions.nim(34) raiseAssert Error: unhandled exception: errGenerated [AssertionDefect] ```

IR

Compiled filesize 0 (0 bytes) ```cpp ```

Stats

  • Started 2024-06-26T14:17:26
  • Finished 2024-06-26T14:17:26
  • Duration

AST

```nim nnkStmtList.newTree( nnkTypeSection.newTree( nnkTypeDef.newTree( newIdentNode("U"), newEmptyNode(), nnkObjectTy.newTree( newEmptyNode(), newEmptyNode(), nnkRecList.newTree( nnkIdentDefs.newTree( newIdentNode("h"), newIdentNode("bool"), newEmptyNode() ) ) ) ) ), nnkTypeSection.newTree( nnkTypeDef.newTree( newIdentNode("K"), newEmptyNode(), nnkObjectTy.newTree( newEmptyNode(), newEmptyNode(), nnkRecList.newTree( nnkRecCase.newTree( nnkIdentDefs.newTree( newIdentNode("h"), newIdentNode("bool"), newEmptyNode() ), nnkOfBranch.newTree( newIdentNode("true"), newIdentNode("false"), nnkIdentDefs.newTree( newIdentNode("g"), newIdentNode("int"), newEmptyNode() ) ) ) ) ) ) ), nnkLetSection.newTree( nnkIdentDefs.newTree( newIdentNode("x"), newEmptyNode(), nnkCall.newTree( newIdentNode("default"), newIdentNode("U") ) ) ), nnkBlockStmt.newTree( newEmptyNode(), nnkStmtList.newTree( nnkLetSection.newTree( nnkIdentDefs.newTree( newIdentNode("v"), newEmptyNode(), nnkDotExpr.newTree( newIdentNode("x"), newIdentNode("h") ) ) ), nnkCaseStmt.newTree( newIdentNode("v"), nnkOfBranch.newTree( newIdentNode("true"), newIdentNode("false"), nnkStmtList.newTree( nnkDiscardStmt.newTree( nnkObjConstr.newTree( newIdentNode("K"), nnkExprColonExpr.newTree( newIdentNode("h"), newIdentNode("v") ), nnkExprColonExpr.newTree( newIdentNode("g"), newLit(0) ) ) ) ) ) ) ) ), nnkCaseStmt.newTree( nnkDotExpr.newTree( newIdentNode("x"), newIdentNode("h") ), nnkOfBranch.newTree( newIdentNode("true"), newIdentNode("false"), nnkStmtList.newTree( nnkDiscardStmt.newTree( nnkObjConstr.newTree( newIdentNode("K"), nnkExprColonExpr.newTree( newIdentNode("h"), nnkDotExpr.newTree( newIdentNode("x"), newIdentNode("h") ) ), nnkExprColonExpr.newTree( newIdentNode("g"), newLit(0) ) ) ) ) ) ) ) ```
stable :-1: FAIL

Output

``` Error: Command failed: nim c --run -d:nimDebug -d:nimDebugDlOpen -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --verbosity:0 --hints:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim /home/runner/work/Nim/Nim/temp.nim(12, 26) Error: a case selecting discriminator 'h' with value 'x.h' appears in the object construction, but the field(s) 'g' are in conflict with this value. assertions.nim(34) raiseAssert Error: unhandled exception: options.nim(682, 5) `false` errGenerated [AssertionDefect] ```

IR

Compiled filesize 0 (0 bytes) ```cpp ```

Stats

  • Started 2024-06-26T14:17:27
  • Finished 2024-06-26T14:17:27
  • Duration

AST

```nim nnkStmtList.newTree( nnkTypeSection.newTree( nnkTypeDef.newTree( newIdentNode("U"), newEmptyNode(), nnkObjectTy.newTree( newEmptyNode(), newEmptyNode(), nnkRecList.newTree( nnkIdentDefs.newTree( newIdentNode("h"), newIdentNode("bool"), newEmptyNode() ) ) ) ) ), nnkTypeSection.newTree( nnkTypeDef.newTree( newIdentNode("K"), newEmptyNode(), nnkObjectTy.newTree( newEmptyNode(), newEmptyNode(), nnkRecList.newTree( nnkRecCase.newTree( nnkIdentDefs.newTree( newIdentNode("h"), newIdentNode("bool"), newEmptyNode() ), nnkOfBranch.newTree( newIdentNode("true"), newIdentNode("false"), nnkIdentDefs.newTree( newIdentNode("g"), newIdentNode("int"), newEmptyNode() ) ) ) ) ) ) ), nnkLetSection.newTree( nnkIdentDefs.newTree( newIdentNode("x"), newEmptyNode(), nnkCall.newTree( newIdentNode("default"), newIdentNode("U") ) ) ), nnkBlockStmt.newTree( newEmptyNode(), nnkStmtList.newTree( nnkLetSection.newTree( nnkIdentDefs.newTree( newIdentNode("v"), newEmptyNode(), nnkDotExpr.newTree( newIdentNode("x"), newIdentNode("h") ) ) ), nnkCaseStmt.newTree( newIdentNode("v"), nnkOfBranch.newTree( newIdentNode("true"), newIdentNode("false"), nnkStmtList.newTree( nnkDiscardStmt.newTree( nnkObjConstr.newTree( newIdentNode("K"), nnkExprColonExpr.newTree( newIdentNode("h"), newIdentNode("v") ), nnkExprColonExpr.newTree( newIdentNode("g"), newLit(0) ) ) ) ) ) ) ) ), nnkCaseStmt.newTree( nnkDotExpr.newTree( newIdentNode("x"), newIdentNode("h") ), nnkOfBranch.newTree( newIdentNode("true"), newIdentNode("false"), nnkStmtList.newTree( nnkDiscardStmt.newTree( nnkObjConstr.newTree( newIdentNode("K"), nnkExprColonExpr.newTree( newIdentNode("h"), nnkDotExpr.newTree( newIdentNode("x"), newIdentNode("h") ) ), nnkExprColonExpr.newTree( newIdentNode("g"), newLit(0) ) ) ) ) ) ) ) ```
2.0.4 :-1: FAIL

Output

``` Error: Command failed: nim c --run -d:nimDebug -d:nimDebugDlOpen -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --verbosity:0 --hints:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim /home/runner/work/Nim/Nim/temp.nim(12, 26) Error: a case selecting discriminator 'h' with value 'x.h' appears in the object construction, but the field(s) 'g' are in conflict with this value. assertions.nim(34) raiseAssert Error: unhandled exception: options.nim(681, 5) `false` errGenerated [AssertionDefect] ```

IR

Compiled filesize 0 (0 bytes) ```cpp ```

Stats

  • Started 2024-06-26T14:17:30
  • Finished 2024-06-26T14:17:30
  • Duration

AST

```nim nnkStmtList.newTree( nnkTypeSection.newTree( nnkTypeDef.newTree( newIdentNode("U"), newEmptyNode(), nnkObjectTy.newTree( newEmptyNode(), newEmptyNode(), nnkRecList.newTree( nnkIdentDefs.newTree( newIdentNode("h"), newIdentNode("bool"), newEmptyNode() ) ) ) ) ), nnkTypeSection.newTree( nnkTypeDef.newTree( newIdentNode("K"), newEmptyNode(), nnkObjectTy.newTree( newEmptyNode(), newEmptyNode(), nnkRecList.newTree( nnkRecCase.newTree( nnkIdentDefs.newTree( newIdentNode("h"), newIdentNode("bool"), newEmptyNode() ), nnkOfBranch.newTree( newIdentNode("true"), newIdentNode("false"), nnkIdentDefs.newTree( newIdentNode("g"), newIdentNode("int"), newEmptyNode() ) ) ) ) ) ) ), nnkLetSection.newTree( nnkIdentDefs.newTree( newIdentNode("x"), newEmptyNode(), nnkCall.newTree( newIdentNode("default"), newIdentNode("U") ) ) ), nnkBlockStmt.newTree( newEmptyNode(), nnkStmtList.newTree( nnkLetSection.newTree( nnkIdentDefs.newTree( newIdentNode("v"), newEmptyNode(), nnkDotExpr.newTree( newIdentNode("x"), newIdentNode("h") ) ) ), nnkCaseStmt.newTree( newIdentNode("v"), nnkOfBranch.newTree( newIdentNode("true"), newIdentNode("false"), nnkStmtList.newTree( nnkDiscardStmt.newTree( nnkObjConstr.newTree( newIdentNode("K"), nnkExprColonExpr.newTree( newIdentNode("h"), newIdentNode("v") ), nnkExprColonExpr.newTree( newIdentNode("g"), newLit(0) ) ) ) ) ) ) ) ), nnkCaseStmt.newTree( nnkDotExpr.newTree( newIdentNode("x"), newIdentNode("h") ), nnkOfBranch.newTree( newIdentNode("true"), newIdentNode("false"), nnkStmtList.newTree( nnkDiscardStmt.newTree( nnkObjConstr.newTree( newIdentNode("K"), nnkExprColonExpr.newTree( newIdentNode("h"), nnkDotExpr.newTree( newIdentNode("x"), newIdentNode("h") ) ), nnkExprColonExpr.newTree( newIdentNode("g"), newLit(0) ) ) ) ) ) ) ) ```
2.0.0 :-1: FAIL

Output

``` Error: Command failed: nim c --run -d:nimDebug -d:nimDebugDlOpen -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --verbosity:0 --hints:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim /home/runner/work/Nim/Nim/temp.nim(12, 26) Error: a case selecting discriminator 'h' with value 'x.h' appears in the object construction, but the field(s) 'g' are in conflict with this value. assertions.nim(34) raiseAssert Error: unhandled exception: options.nim(664, 5) `false` errGenerated [AssertionDefect] ```

IR

Compiled filesize 0 (0 bytes) ```cpp ```

Stats

  • Started 2024-06-26T14:17:33
  • Finished 2024-06-26T14:17:34
  • Duration

AST

```nim nnkStmtList.newTree( nnkTypeSection.newTree( nnkTypeDef.newTree( newIdentNode("U"), newEmptyNode(), nnkObjectTy.newTree( newEmptyNode(), newEmptyNode(), nnkRecList.newTree( nnkIdentDefs.newTree( newIdentNode("h"), newIdentNode("bool"), newEmptyNode() ) ) ) ) ), nnkTypeSection.newTree( nnkTypeDef.newTree( newIdentNode("K"), newEmptyNode(), nnkObjectTy.newTree( newEmptyNode(), newEmptyNode(), nnkRecList.newTree( nnkRecCase.newTree( nnkIdentDefs.newTree( newIdentNode("h"), newIdentNode("bool"), newEmptyNode() ), nnkOfBranch.newTree( newIdentNode("true"), newIdentNode("false"), nnkIdentDefs.newTree( newIdentNode("g"), newIdentNode("int"), newEmptyNode() ) ) ) ) ) ) ), nnkLetSection.newTree( nnkIdentDefs.newTree( newIdentNode("x"), newEmptyNode(), nnkCall.newTree( newIdentNode("default"), newIdentNode("U") ) ) ), nnkBlockStmt.newTree( newEmptyNode(), nnkStmtList.newTree( nnkLetSection.newTree( nnkIdentDefs.newTree( newIdentNode("v"), newEmptyNode(), nnkDotExpr.newTree( newIdentNode("x"), newIdentNode("h") ) ) ), nnkCaseStmt.newTree( newIdentNode("v"), nnkOfBranch.newTree( newIdentNode("true"), newIdentNode("false"), nnkStmtList.newTree( nnkDiscardStmt.newTree( nnkObjConstr.newTree( newIdentNode("K"), nnkExprColonExpr.newTree( newIdentNode("h"), newIdentNode("v") ), nnkExprColonExpr.newTree( newIdentNode("g"), newLit(0) ) ) ) ) ) ) ) ), nnkCaseStmt.newTree( nnkDotExpr.newTree( newIdentNode("x"), newIdentNode("h") ), nnkOfBranch.newTree( newIdentNode("true"), newIdentNode("false"), nnkStmtList.newTree( nnkDiscardStmt.newTree( nnkObjConstr.newTree( newIdentNode("K"), nnkExprColonExpr.newTree( newIdentNode("h"), nnkDotExpr.newTree( newIdentNode("x"), newIdentNode("h") ) ), nnkExprColonExpr.newTree( newIdentNode("g"), newLit(0) ) ) ) ) ) ) ) ```
1.6.20 :-1: FAIL

Output

``` Error: Command failed: nim c --run -d:nimDebug -d:nimDebugDlOpen -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --verbosity:0 --hints:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim /home/runner/work/Nim/Nim/temp.nim(12, 26) Error: a case selecting discriminator 'h' with value 'x.h' appears in the object construction, but the field(s) 'g' are in conflict with this value. fatal.nim(54) sysFatal Error: unhandled exception: options.nim(662, 14) `false` errGenerated [AssertionDefect] ```

IR

Compiled filesize 0 (0 bytes) ```cpp ```

Stats

  • Started 2024-06-26T14:17:36
  • Finished 2024-06-26T14:17:37
  • Duration

AST

```nim nnkStmtList.newTree( nnkTypeSection.newTree( nnkTypeDef.newTree( newIdentNode("U"), newEmptyNode(), nnkObjectTy.newTree( newEmptyNode(), newEmptyNode(), nnkRecList.newTree( nnkIdentDefs.newTree( newIdentNode("h"), newIdentNode("bool"), newEmptyNode() ) ) ) ) ), nnkTypeSection.newTree( nnkTypeDef.newTree( newIdentNode("K"), newEmptyNode(), nnkObjectTy.newTree( newEmptyNode(), newEmptyNode(), nnkRecList.newTree( nnkRecCase.newTree( nnkIdentDefs.newTree( newIdentNode("h"), newIdentNode("bool"), newEmptyNode() ), nnkOfBranch.newTree( newIdentNode("true"), newIdentNode("false"), nnkIdentDefs.newTree( newIdentNode("g"), newIdentNode("int"), newEmptyNode() ) ) ) ) ) ) ), nnkLetSection.newTree( nnkIdentDefs.newTree( newIdentNode("x"), newEmptyNode(), nnkCall.newTree( newIdentNode("default"), newIdentNode("U") ) ) ), nnkBlockStmt.newTree( newEmptyNode(), nnkStmtList.newTree( nnkLetSection.newTree( nnkIdentDefs.newTree( newIdentNode("v"), newEmptyNode(), nnkDotExpr.newTree( newIdentNode("x"), newIdentNode("h") ) ) ), nnkCaseStmt.newTree( newIdentNode("v"), nnkOfBranch.newTree( newIdentNode("true"), newIdentNode("false"), nnkStmtList.newTree( nnkDiscardStmt.newTree( nnkObjConstr.newTree( newIdentNode("K"), nnkExprColonExpr.newTree( newIdentNode("h"), newIdentNode("v") ), nnkExprColonExpr.newTree( newIdentNode("g"), newLit(0) ) ) ) ) ) ) ) ), nnkCaseStmt.newTree( nnkDotExpr.newTree( newIdentNode("x"), newIdentNode("h") ), nnkOfBranch.newTree( newIdentNode("true"), newIdentNode("false"), nnkStmtList.newTree( nnkDiscardStmt.newTree( nnkObjConstr.newTree( newIdentNode("K"), nnkExprColonExpr.newTree( newIdentNode("h"), nnkDotExpr.newTree( newIdentNode("x"), newIdentNode("h") ) ), nnkExprColonExpr.newTree( newIdentNode("g"), newLit(0) ) ) ) ) ) ) ) ```
1.4.8 :-1: FAIL

Output

``` Error: Command failed: nim c --run -d:nimDebug -d:nimDebugDlOpen -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --verbosity:0 --hints:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim /home/runner/work/Nim/Nim/temp.nim(12, 26) Error: a case selecting discriminator 'h' with value 'x.h' appears in the object construction, but the field(s) 'g' are in conflict with this value. ```

IR

Compiled filesize 0 (0 bytes) ```cpp ```

Stats

  • Started 2024-06-26T14:17:39
  • Finished 2024-06-26T14:17:39
  • Duration

AST

```nim nnkStmtList.newTree( nnkTypeSection.newTree( nnkTypeDef.newTree( newIdentNode("U"), newEmptyNode(), nnkObjectTy.newTree( newEmptyNode(), newEmptyNode(), nnkRecList.newTree( nnkIdentDefs.newTree( newIdentNode("h"), newIdentNode("bool"), newEmptyNode() ) ) ) ) ), nnkTypeSection.newTree( nnkTypeDef.newTree( newIdentNode("K"), newEmptyNode(), nnkObjectTy.newTree( newEmptyNode(), newEmptyNode(), nnkRecList.newTree( nnkRecCase.newTree( nnkIdentDefs.newTree( newIdentNode("h"), newIdentNode("bool"), newEmptyNode() ), nnkOfBranch.newTree( newIdentNode("true"), newIdentNode("false"), nnkIdentDefs.newTree( newIdentNode("g"), newIdentNode("int"), newEmptyNode() ) ) ) ) ) ) ), nnkLetSection.newTree( nnkIdentDefs.newTree( newIdentNode("x"), newEmptyNode(), nnkCall.newTree( newIdentNode("default"), newIdentNode("U") ) ) ), nnkBlockStmt.newTree( newEmptyNode(), nnkStmtList.newTree( nnkLetSection.newTree( nnkIdentDefs.newTree( newIdentNode("v"), newEmptyNode(), nnkDotExpr.newTree( newIdentNode("x"), newIdentNode("h") ) ) ), nnkCaseStmt.newTree( newIdentNode("v"), nnkOfBranch.newTree( newIdentNode("true"), newIdentNode("false"), nnkStmtList.newTree( nnkDiscardStmt.newTree( nnkObjConstr.newTree( newIdentNode("K"), nnkExprColonExpr.newTree( newIdentNode("h"), newIdentNode("v") ), nnkExprColonExpr.newTree( newIdentNode("g"), newLit(0) ) ) ) ) ) ) ) ), nnkCaseStmt.newTree( nnkDotExpr.newTree( newIdentNode("x"), newIdentNode("h") ), nnkOfBranch.newTree( newIdentNode("true"), newIdentNode("false"), nnkStmtList.newTree( nnkDiscardStmt.newTree( nnkObjConstr.newTree( newIdentNode("K"), nnkExprColonExpr.newTree( newIdentNode("h"), nnkDotExpr.newTree( newIdentNode("x"), newIdentNode("h") ) ), nnkExprColonExpr.newTree( newIdentNode("g"), newLit(0) ) ) ) ) ) ) ) ```
1.2.18 :-1: FAIL

Output

``` Error: Command failed: nim c --run -d:nimDebug -d:nimDebugDlOpen -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --verbosity:0 --hints:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim /home/runner/work/Nim/Nim/temp.nim(12, 26) Error: a case selecting discriminator 'h' with value 'x.h' appears in the object construction, but the field(s) 'g' are in conflict with this value. ```

IR

Compiled filesize 0 (0 bytes) ```cpp ```

Stats

  • Started 2024-06-26T14:17:42
  • Finished 2024-06-26T14:17:42
  • Duration

AST

```nim nnkStmtList.newTree( nnkTypeSection.newTree( nnkTypeDef.newTree( newIdentNode("U"), newEmptyNode(), nnkObjectTy.newTree( newEmptyNode(), newEmptyNode(), nnkRecList.newTree( nnkIdentDefs.newTree( newIdentNode("h"), newIdentNode("bool"), newEmptyNode() ) ) ) ) ), nnkTypeSection.newTree( nnkTypeDef.newTree( newIdentNode("K"), newEmptyNode(), nnkObjectTy.newTree( newEmptyNode(), newEmptyNode(), nnkRecList.newTree( nnkRecCase.newTree( nnkIdentDefs.newTree( newIdentNode("h"), newIdentNode("bool"), newEmptyNode() ), nnkOfBranch.newTree( newIdentNode("true"), newIdentNode("false"), nnkIdentDefs.newTree( newIdentNode("g"), newIdentNode("int"), newEmptyNode() ) ) ) ) ) ) ), nnkLetSection.newTree( nnkIdentDefs.newTree( newIdentNode("x"), newEmptyNode(), nnkCall.newTree( newIdentNode("default"), newIdentNode("U") ) ) ), nnkBlockStmt.newTree( newEmptyNode(), nnkStmtList.newTree( nnkLetSection.newTree( nnkIdentDefs.newTree( newIdentNode("v"), newEmptyNode(), nnkDotExpr.newTree( newIdentNode("x"), newIdentNode("h") ) ) ), nnkCaseStmt.newTree( newIdentNode("v"), nnkOfBranch.newTree( newIdentNode("true"), newIdentNode("false"), nnkStmtList.newTree( nnkDiscardStmt.newTree( nnkObjConstr.newTree( newIdentNode("K"), nnkExprColonExpr.newTree( newIdentNode("h"), newIdentNode("v") ), nnkExprColonExpr.newTree( newIdentNode("g"), newLit(0) ) ) ) ) ) ) ) ), nnkCaseStmt.newTree( nnkDotExpr.newTree( newIdentNode("x"), newIdentNode("h") ), nnkOfBranch.newTree( newIdentNode("true"), newIdentNode("false"), nnkStmtList.newTree( nnkDiscardStmt.newTree( nnkObjConstr.newTree( newIdentNode("K"), nnkExprColonExpr.newTree( newIdentNode("h"), nnkDotExpr.newTree( newIdentNode("x"), newIdentNode("h") ) ), nnkExprColonExpr.newTree( newIdentNode("g"), newLit(0) ) ) ) ) ) ) ) ```
1.0.10 :-1: FAIL

Output

``` Error: Command failed: nim c --run -d:nimDebug -d:nimDebugDlOpen -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --verbosity:0 --hints:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim /home/runner/work/Nim/Nim/temp.nim(12, 26) Error: a case selecting discriminator 'h' with value 'x.h' appears in the object construction, but the field(s) 'g' are in conflict with this value. ```

IR

Compiled filesize 0 (0 bytes) ```cpp ```

Stats

  • Started 2024-06-26T14:17:45
  • Finished 2024-06-26T14:17:45
  • Duration

AST

```nim nnkStmtList.newTree( nnkTypeSection.newTree( nnkTypeDef.newTree( newIdentNode("U"), newEmptyNode(), nnkObjectTy.newTree( newEmptyNode(), newEmptyNode(), nnkRecList.newTree( nnkIdentDefs.newTree( newIdentNode("h"), newIdentNode("bool"), newEmptyNode() ) ) ) ) ), nnkTypeSection.newTree( nnkTypeDef.newTree( newIdentNode("K"), newEmptyNode(), nnkObjectTy.newTree( newEmptyNode(), newEmptyNode(), nnkRecList.newTree( nnkRecCase.newTree( nnkIdentDefs.newTree( newIdentNode("h"), newIdentNode("bool"), newEmptyNode() ), nnkOfBranch.newTree( newIdentNode("true"), newIdentNode("false"), nnkIdentDefs.newTree( newIdentNode("g"), newIdentNode("int"), newEmptyNode() ) ) ) ) ) ) ), nnkLetSection.newTree( nnkIdentDefs.newTree( newIdentNode("x"), newEmptyNode(), nnkCall.newTree( newIdentNode("default"), newIdentNode("U") ) ) ), nnkBlockStmt.newTree( newEmptyNode(), nnkStmtList.newTree( nnkLetSection.newTree( nnkIdentDefs.newTree( newIdentNode("v"), newEmptyNode(), nnkDotExpr.newTree( newIdentNode("x"), newIdentNode("h") ) ) ), nnkCaseStmt.newTree( newIdentNode("v"), nnkOfBranch.newTree( newIdentNode("true"), newIdentNode("false"), nnkStmtList.newTree( nnkDiscardStmt.newTree( nnkObjConstr.newTree( newIdentNode("K"), nnkExprColonExpr.newTree( newIdentNode("h"), newIdentNode("v") ), nnkExprColonExpr.newTree( newIdentNode("g"), newLit(0) ) ) ) ) ) ) ) ), nnkCaseStmt.newTree( nnkDotExpr.newTree( newIdentNode("x"), newIdentNode("h") ), nnkOfBranch.newTree( newIdentNode("true"), newIdentNode("false"), nnkStmtList.newTree( nnkDiscardStmt.newTree( nnkObjConstr.newTree( newIdentNode("K"), nnkExprColonExpr.newTree( newIdentNode("h"), nnkDotExpr.newTree( newIdentNode("x"), newIdentNode("h") ) ), nnkExprColonExpr.newTree( newIdentNode("g"), newLit(0) ) ) ) ) ) ) ) ```
Stats
  • GCC 11.4.0
  • Clang 14.0.0
  • NodeJS 20.3
  • Created 2024-06-26T14:10:59Z
  • Comments 1
  • Commands nim c --run -d:nimDebug -d:nimDebugDlOpen -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --verbosity:0 --hints:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim

:robot: Bug found in 22 minutes bisecting 8 commits at 0 commits per second

metagn commented 2 days ago

The analysis of the variable version is special cased in the compiler

Araq commented 2 days ago

Why does it compile in either version ... It shouldn't.