fixes #21975; Pragma block disabling warning has effect beyond block (#24934)

fixes  #21975

(cherry picked from commit 433b725cbb)
This commit is contained in:
ringabout
2025-05-06 15:46:18 +08:00
committed by narimiran
parent c385fcb6be
commit ea51ca8d25
2 changed files with 28 additions and 0 deletions

View File

@@ -2805,9 +2805,24 @@ proc recursiveSetFlag(n: PNode, flag: TNodeFlag) =
for i in 0..<n.safeLen: recursiveSetFlag(n[i], flag)
incl(n.flags, flag)
proc enterPragmaBlock(c: PContext): POptionEntry =
result = POptionEntry(options: c.config.options,
notes: c.config.notes,
warningAsErrors: c.config.warningAsErrors,
features: c.features)
proc leavePragmaBlock(c: PContext, p: POptionEntry) =
c.config.options = p.options
c.config.notes = p.notes
c.config.warningAsErrors = p.warningAsErrors
c.features = p.features
proc semPragmaBlock(c: PContext, n: PNode; expectedType: PType = nil): PNode =
checkSonsLen(n, 2, c.config)
let pragmaList = n[0]
let oldOptionEntry = enterPragmaBlock(c)
pragma(c, nil, pragmaList, exprPragmas, isStatement = true)
var inUncheckedAssignSection = 0
@@ -2832,6 +2847,8 @@ proc semPragmaBlock(c: PContext, n: PNode; expectedType: PType = nil): PNode =
of wNoRewrite: recursiveSetFlag(result, nfNoRewrite)
else: discard
leavePragmaBlock(c, oldOptionEntry)
proc semStaticStmt(c: PContext, n: PNode): PNode =
#echo "semStaticStmt"
#writeStackTrace()

View File

@@ -0,0 +1,11 @@
discard """
matrix: "--warningaserror:BareExcept"
"""
{.warning[BareExcept]:on.}:
discard
try:
echo "Y"
except: # warning disabled here
discard