diff options
author | ringabout <43030857+ringabout@users.noreply.github.com> | 2024-09-25 19:00:06 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-25 13:00:06 +0200 |
commit | 3b85c1a2e9b913a11fc7cd202b7e0a617d782cf4 (patch) | |
tree | cb7b57e379b97876a36a37fe1d63c6699c00b730 | |
parent | b9de2bb4f3864d264c3aeffdc630227448ad8c14 (diff) | |
download | Nim-3b85c1a2e9b913a11fc7cd202b7e0a617d782cf4.tar.gz |
fixes #24167; {.push deprecated.} for templates (#24170)
fixes #24167
-rw-r--r-- | compiler/ast.nim | 7 | ||||
-rw-r--r-- | tests/pragmas/tpush.nim | 6 |
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.} |