summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/lookups.nim4
-rw-r--r--tests/macros/t18203.nim15
2 files changed, 18 insertions, 1 deletions
diff --git a/compiler/lookups.nim b/compiler/lookups.nim
index f72b58ac6..4f413f472 100644
--- a/compiler/lookups.nim
+++ b/compiler/lookups.nim
@@ -364,7 +364,9 @@ proc openShadowScope*(c: PContext) =
 
 proc closeShadowScope*(c: PContext) =
   ## closes the shadow scope, but doesn't merge any of the symbols
-  c.closeScope
+  ## Does not check for unused symbols or missing forward decls since a macro
+  ## or template consumes this AST
+  rawCloseScope(c)
 
 proc mergeShadowScope*(c: PContext) =
   ## close the existing scope and merge in all defined symbols, this will also
diff --git a/tests/macros/t18203.nim b/tests/macros/t18203.nim
new file mode 100644
index 000000000..aae0a2690
--- /dev/null
+++ b/tests/macros/t18203.nim
@@ -0,0 +1,15 @@
+discard """
+  matrix: "--hint:SuccessX:off --hint:Link:off --hint:Conf:off --hint:CC:off --hint:XDeclaredButNotUsed:on"
+  nimout: '''
+'''
+nimoutFull: true
+action: compile
+"""
+
+# bug #18203
+import std/macros
+
+macro foo(x: typed) = newProc ident"bar"
+proc bar() {.foo.} = raise
+bar()
+