-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
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
Constructing case object with discriminator of field of other object fails with the field(s) 'g' are in conflict with this value
#23762
Comments
!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) |
🐧 Linux bisect by @juancarlospaco (collaborator)devel 👎 FAILOutput
IRCompiled filesize0 (0 bytes)
Stats
ASTnnkStmtList.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 👎 FAILOutput
IRCompiled filesize0 (0 bytes)
Stats
ASTnnkStmtList.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 👎 FAILOutput
IRCompiled filesize0 (0 bytes)
Stats
ASTnnkStmtList.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 👎 FAILOutput
IRCompiled filesize0 (0 bytes)
Stats
ASTnnkStmtList.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 👎 FAILOutput
IRCompiled filesize0 (0 bytes)
Stats
ASTnnkStmtList.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 👎 FAILOutput
IRCompiled filesize0 (0 bytes)
Stats
ASTnnkStmtList.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 👎 FAILOutput
IRCompiled filesize0 (0 bytes)
Stats
ASTnnkStmtList.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 👎 FAILOutput
IRCompiled filesize0 (0 bytes)
Stats
ASTnnkStmtList.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
🤖 Bug found in |
The analysis of the variable version is special cased in the compiler |
Why does it compile in either version ... It shouldn't. |
The smart variant object construction has been documented in the manual
ref #11273 |
Description
With the
let v = x.h
helper, it does figure out that theK
case object can be constructed, but not when directly accessing both asx.h
.Nim Version
Current Output
Expected Output
Possible Solution
No response
Additional Information
No response
The text was updated successfully, but these errors were encountered: