summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorringabout <43030857+ringabout@users.noreply.github.com>2024-09-25 19:00:06 +0800
committerGitHub <noreply@github.com>2024-09-25 13:00:06 +0200
commit3b85c1a2e9b913a11fc7cd202b7e0a617d782cf4 (patch)
treecb7b57e379b97876a36a37fe1d63c6699c00b730
parentb9de2bb4f3864d264c3aeffdc630227448ad8c14 (diff)
downloadNim-3b85c1a2e9b913a11fc7cd202b7e0a617d782cf4.tar.gz
fixes #24167; {.push deprecated.} for templates (#24170)
fixes #24167
-rw-r--r--compiler/ast.nim7
-rw-r--r--tests/pragmas/tpush.nim6
2 files changed, 11 insertions, 2 deletions
diff --git a/compiler/ast.nim b/compiler/ast.nim
index 32587e7a2..a342e1ea7 100644
--- a/compiler/ast.nim
+++ b/compiler/ast.nim
@@ -1057,8 +1057,11 @@ proc getDeclPragma*(n: PNode): PNode =
 
 proc extractPragma*(s: PSym): PNode =
   ## gets the pragma node of routine/type/var/let/const symbol `s`
-  if s.kind in routineKinds:
-    result = s.ast[pragmasPos]
+  if s.kind in routineKinds: # bug #24167
+    if s.ast[pragmasPos] != nil and s.ast[pragmasPos].kind != nkEmpty:
+      result = s.ast[pragmasPos]
+    else:
+      result = nil
   elif s.kind in {skType, skVar, skLet, skConst}:
     if s.ast != nil and s.ast.len > 0:
       if s.ast[0].kind == nkPragmaExpr and s.ast[0].len > 1:
diff --git a/tests/pragmas/tpush.nim b/tests/pragmas/tpush.nim
index cb411714e..a505bb32f 100644
--- a/tests/pragmas/tpush.nim
+++ b/tests/pragmas/tpush.nim
@@ -124,3 +124,9 @@ foo31()
 foo41()
 
 {.pop.}
+
+block:
+  {.push deprecated.}
+  template test() = discard
+  test()
+  {.pop.}