Skip to content

Commit

Permalink
fixes regression #17121; adding doc comment in importc proc makes it …
Browse files Browse the repository at this point in the history
…silently noop at CT (#20766)

* fixes regression #17121; adding doc comment in importc proc makes it silently noop at CT

* Update compiler/vmgen.nim

Co-authored-by: Andreas Rumpf <[email protected]>
  • Loading branch information
ringabout and Araq authored Nov 6, 2022
1 parent fc8bfd7 commit a228e33
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 1 deletion.
11 changes: 10 additions & 1 deletion compiler/vmgen.nim
Original file line number Diff line number Diff line change
Expand Up @@ -1596,11 +1596,20 @@ proc genTypeLit(c: PCtx; t: PType; dest: var TDest) =
n.typ = t
genLit(c, n, dest)

proc isEmptyBody(n: PNode): bool =
case n.kind
of nkStmtList:
for i in 0..<n.len:
if not isEmptyBody(n[i]): return false
result = true
else:
result = n.kind in {nkCommentStmt, nkEmpty}

proc importcCond*(c: PCtx; s: PSym): bool {.inline.} =
## return true to importc `s`, false to execute its body instead (refs #8405)
if sfImportc in s.flags:
if s.kind in routineKinds:
return getBody(c.graph, s).kind == nkEmpty
return isEmptyBody(getBody(c.graph, s))

proc importcSym(c: PCtx; info: TLineInfo; s: PSym) =
when hasFFI:
Expand Down
9 changes: 9 additions & 0 deletions tests/vm/t17121.nim
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
discard """
errormsg: "cannot 'importc' variable at compile time; c_printf"
"""

proc c_printf*(frmt: cstring): cint {.importc: "printf", header: "<stdio.h>", varargs, discardable.} =
## foo bar
runnableExamples: discard
static:
let a = c_printf("abc\n")

0 comments on commit a228e33

Please sign in to comment.