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

nim check fails when checking chame #24288

Closed
ire4ever1190 opened this issue Oct 12, 2024 · 0 comments · Fixed by #24289
Closed

nim check fails when checking chame #24288

ire4ever1190 opened this issue Oct 12, 2024 · 0 comments · Fixed by #24289
Assignees

Comments

@ire4ever1190
Copy link
Contributor

Description

Raising here since it seems to be compiler regression.

Ran into this problem when importing the minidom module from chame

import chame/minidom

Nim Version

Nim Compiler Version 2.2.1 [Linux: amd64]
Compiled at 2024-10-11
Copyright (c) 2006-2024 by Andreas Rumpf

git hash: e9a4d09
active boot switches: -d:release

Current Output

/home/jake/Documents/projects/Nim/compiler/nim.nim(169) nim
/home/jake/Documents/projects/Nim/compiler/nim.nim(124) handleCmdLine
/home/jake/Documents/projects/Nim/compiler/main.nim(404) mainCommand
/home/jake/Documents/projects/Nim/compiler/main.nim(96) commandCheck
/home/jake/Documents/projects/Nim/compiler/pipelines.nim(311) compilePipelineProject
/home/jake/Documents/projects/Nim/compiler/pipelines.nim(231) compilePipelineModule
/home/jake/Documents/projects/Nim/compiler/pipelines.nim(177) processPipelineModule
/home/jake/Documents/projects/Nim/compiler/sem.nim(840) semWithPContext
/home/jake/Documents/projects/Nim/compiler/sem.nim(797) semStmtAndGenerateGenerics
/home/jake/Documents/projects/Nim/compiler/semstmts.nim(2899) semStmt
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(1287) semExprNoType
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3531) semExpr
/home/jake/Documents/projects/Nim/lib/system.nim(918) semStmtList
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3564) semExpr
/home/jake/Documents/projects/Nim/compiler/importer.nim(367) evalImport
/home/jake/Documents/projects/Nim/compiler/importer.nim(335) impMod
/home/jake/Documents/projects/Nim/compiler/importer.nim(293) myImportModule
/home/jake/Documents/projects/Nim/compiler/pipelines.nim(270) importPipelineModule
/home/jake/Documents/projects/Nim/compiler/pipelines.nim(231) compilePipelineModule
/home/jake/Documents/projects/Nim/compiler/pipelines.nim(177) processPipelineModule
/home/jake/Documents/projects/Nim/compiler/sem.nim(840) semWithPContext
/home/jake/Documents/projects/Nim/compiler/sem.nim(797) semStmtAndGenerateGenerics
/home/jake/Documents/projects/Nim/compiler/semstmts.nim(2899) semStmt
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(1287) semExprNoType
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3531) semExpr
/home/jake/Documents/projects/Nim/compiler/semstmts.nim(2846) semStmtList
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3549) semExpr
/home/jake/Documents/projects/Nim/compiler/semstmts.nim(2657) semProc
/home/jake/Documents/projects/Nim/compiler/semstmts.nim(2576) semProcAux
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(2125) semProcBody
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3531) semExpr
/home/jake/Documents/projects/Nim/compiler/semstmts.nim(2846) semStmtList
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3538) semExpr
/home/jake/Documents/projects/Nim/compiler/semstmts.nim(110) semWhile
/home/jake/Documents/projects/Nim/compiler/semstmts.nim(2899) semStmt
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(1287) semExprNoType
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3531) semExpr
/home/jake/Documents/projects/Nim/compiler/semstmts.nim(2846) semStmtList
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3533) semExpr
/home/jake/Documents/projects/Nim/compiler/semstmts.nim(838) semVarOrLet
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(83) semExprWithType
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(67) semExprCheck
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3450) semExpr
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(1177) semIndirectOp
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3434) semExpr
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(1268) semDirectOp
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(1072) semOverloadedCallAnalyseEffects
/home/jake/Documents/projects/Nim/compiler/semcall.nim(848) semOverloadedCall
/home/jake/Documents/projects/Nim/compiler/semcall.nim(797) semResolvedCall
/home/jake/Documents/projects/Nim/compiler/seminst.nim(457) generateInstance
/home/jake/Documents/projects/Nim/compiler/seminst.nim(150) instantiateBody
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(2125) semProcBody
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3531) semExpr
/home/jake/Documents/projects/Nim/compiler/semstmts.nim(2846) semStmtList
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3538) semExpr
/home/jake/Documents/projects/Nim/compiler/semstmts.nim(110) semWhile
/home/jake/Documents/projects/Nim/compiler/semstmts.nim(2899) semStmt
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(1287) semExprNoType
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3531) semExpr
/home/jake/Documents/projects/Nim/compiler/semstmts.nim(2846) semStmtList
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3529) semExpr
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(2069) semAsgn
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(83) semExprWithType
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(67) semExprCheck
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3531) semExpr
/home/jake/Documents/projects/Nim/lib/system.nim(918) semStmtList
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3448) semExpr
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(1268) semDirectOp
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(1072) semOverloadedCallAnalyseEffects
/home/jake/Documents/projects/Nim/compiler/semcall.nim(840) semOverloadedCall
/home/jake/Documents/projects/Nim/compiler/semcall.nim(519) resolveOverloads
/home/jake/Documents/projects/Nim/compiler/semcall.nim(107) pickBestCandidate
/home/jake/Documents/projects/Nim/compiler/sigmatch.nim(3025) matches
/home/jake/Documents/projects/Nim/compiler/sigmatch.nim(2954) matchesAux
/home/jake/Documents/projects/Nim/compiler/sigmatch.nim(2745) prepareOperand
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(55) semOperand
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3498) semExpr
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3448) semExpr
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(1268) semDirectOp
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(1072) semOverloadedCallAnalyseEffects
/home/jake/Documents/projects/Nim/compiler/semcall.nim(840) semOverloadedCall
/home/jake/Documents/projects/Nim/compiler/semcall.nim(519) resolveOverloads
/home/jake/Documents/projects/Nim/compiler/semcall.nim(107) pickBestCandidate
/home/jake/Documents/projects/Nim/compiler/sigmatch.nim(3025) matches
/home/jake/Documents/projects/Nim/compiler/sigmatch.nim(2954) matchesAux
/home/jake/Documents/projects/Nim/compiler/sigmatch.nim(2745) prepareOperand
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(55) semOperand
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3450) semExpr
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(1177) semIndirectOp
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3448) semExpr
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(1268) semDirectOp
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(1072) semOverloadedCallAnalyseEffects
/home/jake/Documents/projects/Nim/compiler/semcall.nim(848) semOverloadedCall
/home/jake/Documents/projects/Nim/compiler/semcall.nim(797) semResolvedCall
/home/jake/Documents/projects/Nim/compiler/seminst.nim(457) generateInstance
/home/jake/Documents/projects/Nim/compiler/seminst.nim(150) instantiateBody
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(2125) semProcBody
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3531) semExpr
/home/jake/Documents/projects/Nim/compiler/semstmts.nim(2846) semStmtList
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3538) semExpr
/home/jake/Documents/projects/Nim/compiler/semstmts.nim(110) semWhile
/home/jake/Documents/projects/Nim/compiler/semstmts.nim(2899) semStmt
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(1287) semExprNoType
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3531) semExpr
/home/jake/Documents/projects/Nim/lib/system.nim(918) semStmtList
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3542) semExpr
/home/jake/Documents/projects/Nim/compiler/semstmts.nim(1334) semCase
/home/jake/Documents/projects/Nim/compiler/semstmts.nim(131) semExprBranchScope
/home/jake/Documents/projects/Nim/compiler/semstmts.nim(124) semExprBranch
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3531) semExpr
/home/jake/Documents/projects/Nim/lib/system.nim(918) semStmtList
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3542) semExpr
/home/jake/Documents/projects/Nim/compiler/semstmts.nim(1351) semCase
/home/jake/Documents/projects/Nim/compiler/semstmts.nim(131) semExprBranchScope
/home/jake/Documents/projects/Nim/compiler/semstmts.nim(124) semExprBranch
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3531) semExpr
/home/jake/Documents/projects/Nim/lib/system.nim(918) semStmtList
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3420) semExpr
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(1269) semDirectOp
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(1147) afterCallActions
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(40) semTemplateExpr
/home/jake/Documents/projects/Nim/compiler/sem.nim(450) semAfterMacroCall
/home/jake/Documents/projects/Nim/compiler/semstmts.nim(2899) semStmt
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(1287) semExprNoType
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3531) semExpr
/home/jake/Documents/projects/Nim/lib/system.nim(918) semStmtList
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3450) semExpr
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(1177) semIndirectOp
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(3448) semExpr
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(1268) semDirectOp
/home/jake/Documents/projects/Nim/compiler/semexprs.nim(1072) semOverloadedCallAnalyseEffects
/home/jake/Documents/projects/Nim/compiler/semcall.nim(840) semOverloadedCall
/home/jake/Documents/projects/Nim/compiler/semcall.nim(519) resolveOverloads
/home/jake/Documents/projects/Nim/compiler/semcall.nim(107) pickBestCandidate
/home/jake/Documents/projects/Nim/compiler/sigmatch.nim(3025) matches
/home/jake/Documents/projects/Nim/compiler/sigmatch.nim(2955) matchesAux
/home/jake/Documents/projects/Nim/compiler/sigmatch.nim(2625) paramTypesMatch
/home/jake/Documents/projects/Nim/compiler/sigmatch.nim(2407) paramTypesMatchAux
/home/jake/Documents/projects/Nim/compiler/sem.nim(369) tryConstExpr
/home/jake/Documents/projects/Nim/compiler/vm.nim(2413) evalConstExpr
/home/jake/Documents/projects/Nim/compiler/vm.nim(2408) evalConstExprAux
/home/jake/Documents/projects/Nim/compiler/vm.nim(935) rawExecute
/home/jake/Documents/projects/Nim/lib/system/fatal.nim(53) sysFatal
Error: unhandled exception: index 1 not in 0 .. 0 [IndexDefect]

Expected Output

No Error

Known Workarounds

No response

Additional Information

Bisected and tracked it down to #23625.
Turning on vmTrace the error seems to be here, I wasn't able to minify to a small test case

/home/jake/.nimble/pkgs2/chame-1.0.1-d9f4d89f88b0ba3f4fbcf2326cd5262cbd1d6917/chame/htmltokenizer.nim(392, 27) [opcEof]   template emit(s: static string) =
/home/jake/.nimble/pkgs2/chame-1.0.1-d9f4d89f88b0ba3f4fbcf2326cd5262cbd1d6917/chame/htmltokenizer.nim(402, 21) [opcNew]     emit Token[Atom](t: CHARACTER_NULL)
/home/jake/.nimble/pkgs2/chame-1.0.1-d9f4d89f88b0ba3f4fbcf2326cd5262cbd1d6917/chame/htmltokenizer.nim(402, 25) [opcLdImmInt]     emit Token[Atom](t: CHARACTER_NULL)
/home/jake/.nimble/pkgs2/chame-1.0.1-d9f4d89f88b0ba3f4fbcf2326cd5262cbd1d6917/chame/htmltokenizer.nim(402, 25) [opcWrObj]     emit Token[Atom](t: CHARACTER_NULL)
/home/jake/.nimble/pkgs2/chame-1.0.1-d9f4d89f88b0ba3f4fbcf2326cd5262cbd1d6917/chame/htmltokenizer.nim(402, 21) [opcEof]     emit Token[Atom](t: CHARACTER_NULL)
/home/jake/.nimble/pkgs2/chame-1.0.1-d9f4d89f88b0ba3f4fbcf2326cd5262cbd1d6917/chame/htmltokenizer.nim(399, 5) [opcLdDeref]     tokenizer.emit(ch)
@metagn metagn mentioned this issue Oct 12, 2024
11 tasks
metagn added a commit to metagn/Nim that referenced this issue Oct 12, 2024
@Araq Araq closed this as completed in def1fea Oct 12, 2024
narimiran pushed a commit that referenced this issue Jan 14, 2025
fixes #24288, refs #23625

Since #23625 "cannot evaluate" errors during VM code generation are
"soft" errors with `nim check`, i.e. the code generation isn't halted
(except for the current proc which `return`s which can cause wrong
codegen) and the expression is still attempted to be evaluated. Now,
these errors signal to the VM that the current generated VM code cannot
be evaluated, and so instead of evaluating, an error node is returned.
This keeps the benefit of the "soft" errors without potentially crashing
the compiler on improperly generated VM code. Although maybe the
compiler might not be able to handle the generated error node in some
cases.

This fixes the chame example in #24288 but this is not tested in CI.
Presumably it or the compiler was doing something like `compiles()` on
code that can't run in the VM.

I would accept nicer ways of tracking non-evaluability than
`c.cannotEval = true` but I tried to keep it as harmless as possible.

(cherry picked from commit def1fea)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants