ringabout
a28e450154
fixes #25851 ; ensure --panics:on does not skip nimErr_ check after closure calls ( #25855 )
...
fixes #25851
## Summary: `--panics:on` drops `nimErr_` check after closure calls
(#25851 )
### Bug
With `--exceptions:goto` and `--panics:on`, the compiler skipped the
`nimErr_` check after indirect closure calls whose result flows directly
into another call (e.g., `result.add elem(src)`). A raise inside the
closure was silently swallowed — the loop continued, and the next
`raise` hit the already-set `nimInErrorMode` flag, overflowing its
`bool` storage into `OverflowDefect`.
### Root Cause
**ast.nim** — `canRaise` checked `fn.typ.n[0].len < effectListLen` first
(false after the expansion) and then `exceptionEffects != nil` (also
false, nil), so it returned `false` — meaning "cannot raise." The C
codegen trusted this and omitted the `nimErr_` check.
### Fix
**ast.nim** — `canRaise` now treats `nil` `exceptionEffects` as "unknown
→ can raise" (`exceptionEffects == nil` as an additional true
condition). This is defense-in-depth: even if some other path expands
the list but leaves `exceptionEffects` nil (e.g., a type with `{.tags.}`
but no `{.raises.}`), the error check is still emitted.
### Test
tclosure_err_panic_goto.nim — exercises the double-trigger pattern
(`drawBool` sets the error flag → closure call must propagate it) with
`matrix: "; --panics:on"` covering both exception modes.
(cherry picked from commit 88a18de44f )
2026-06-08 08:46:56 +02:00
..
2025-01-14 07:46:40 +01:00
2024-03-18 20:27:00 +01:00
2023-08-06 14:26:21 +02:00
2023-12-15 10:20:57 +01:00
2026-06-08 08:46:56 +02:00
2025-05-06 16:04:43 +02:00
2026-01-09 09:03:51 +01:00
2024-04-16 12:46:59 +02:00
2024-07-12 15:23:09 +02:00
2023-10-11 17:44:14 +02:00
2023-08-06 14:26:21 +02:00
2024-09-27 11:12:39 +02:00
2025-04-02 09:42:57 +02:00
2026-04-20 09:45:51 +02:00
2022-09-28 15:05:01 +02:00
2022-11-30 21:51:13 +01:00
2025-10-08 08:33:16 +02:00
2026-05-29 08:21:52 +02:00
2024-07-12 15:23:09 +02:00
2024-07-12 15:23:09 +02:00
2026-03-09 10:47:45 +01:00
2025-03-18 08:49:45 +01:00
2026-01-09 08:49:03 +01:00
2026-05-08 14:55:56 +02:00
2025-01-14 07:46:40 +01:00
2026-03-17 10:12:06 +01:00
2024-03-28 11:04:12 +01:00
2026-05-08 15:17:50 +02:00
2023-06-18 16:06:14 +02:00
2026-01-09 09:03:51 +01:00
2026-02-02 07:59:57 +01:00
2017-01-07 22:35:09 +01:00
2022-06-10 20:40:08 +02:00
2023-10-29 14:48:11 +01:00
2026-01-09 09:03:51 +01:00
2025-04-02 09:43:12 +02:00
2023-08-06 14:26:21 +02:00
2026-03-30 15:09:59 +02:00
2025-04-18 12:50:05 +02:00
2023-11-20 21:12:13 +01:00
2025-01-14 07:46:40 +01:00
2025-01-14 07:46:40 +01:00
2024-08-28 20:46:36 +02:00
2025-07-17 13:39:17 +02:00
2023-10-29 14:48:11 +01:00
2023-10-29 14:48:11 +01:00
2023-10-29 14:48:11 +01:00
2026-05-28 09:22:36 +02:00
2025-11-22 13:33:01 +01:00
2023-10-29 14:48:11 +01:00
2026-05-08 15:17:50 +02:00
2020-06-01 19:21:41 +02:00
2026-03-09 10:13:31 +01:00
2025-10-14 11:37:24 +02:00
2023-12-15 08:13:25 +01:00
2025-01-15 10:21:20 +01:00
2026-04-20 09:45:28 +02:00
2025-07-17 13:39:41 +02:00
2026-04-07 08:34:55 +02:00
2026-01-09 09:03:51 +01:00
2023-12-13 10:39:10 +01:00
2026-05-22 08:57:23 +02:00
2026-04-03 12:47:11 +02:00
2025-01-14 07:46:40 +01:00
2026-03-23 09:10:29 +01:00
2026-01-26 09:13:17 +01:00
2025-03-25 09:44:55 +01:00
2025-09-22 08:48:48 +02:00
2025-01-14 07:46:40 +01:00
2021-01-12 09:36:51 +01:00
2026-03-09 10:13:04 +01:00
2024-07-09 09:29:45 +02:00
2024-04-05 08:54:48 +02:00
2026-01-09 09:03:51 +01:00
2025-06-06 08:32:58 +02:00
2025-01-14 07:45:59 +01:00
2026-01-26 09:13:17 +01:00
2025-01-14 07:46:40 +01:00
2026-02-26 17:32:51 +01:00
2024-07-17 18:25:19 +02:00
2023-12-15 08:13:25 +01:00
2025-10-27 08:51:00 +01:00
2024-04-10 14:41:16 +02:00
2023-10-29 14:48:11 +01:00
2023-10-29 14:48:11 +01:00
2025-01-14 07:46:40 +01:00
2023-10-29 14:48:11 +01:00
2024-08-12 15:33:26 +02:00
2023-04-17 20:55:22 +02:00
2025-04-04 10:08:30 +02:00
2026-05-29 08:25:50 +02:00
2023-08-06 14:26:21 +02:00
2025-01-14 07:34:32 +01:00
2025-09-24 08:54:39 +02:00
2025-07-17 13:39:26 +02:00
2022-08-24 09:44:16 +02:00
2025-01-14 07:51:55 +01:00
2023-10-29 14:48:11 +01:00
2025-04-14 10:52:41 +02:00
2025-04-14 10:52:50 +02:00
2023-03-03 07:36:38 +01:00
2025-10-14 11:37:24 +02:00
2018-05-27 19:19:12 +02:00
2025-04-14 10:53:01 +02:00
2023-10-29 14:48:11 +01:00
2024-04-10 14:41:16 +02:00
2024-09-03 09:19:52 +02:00
2023-07-02 22:36:05 +02:00
2026-04-16 19:44:36 +02:00
2023-10-29 14:48:11 +01:00
2025-04-14 10:52:41 +02:00
2023-11-06 18:33:28 +01:00
2023-08-10 14:26:40 +02:00
2020-09-11 01:04:07 +02:00
2023-10-29 14:48:11 +01:00
2025-10-28 13:50:50 +01:00
2026-04-13 12:06:27 +02:00
2026-04-09 18:12:45 +02:00
2026-05-08 15:14:04 +02:00
2025-03-03 14:10:49 +01:00
2026-01-12 08:48:55 +01:00
2025-05-05 08:19:11 +02:00
2025-04-21 19:09:45 +02:00
2025-09-22 08:47:23 +02:00
2026-05-08 15:07:34 +02:00
2025-10-17 09:24:11 +02:00
2025-01-14 07:46:40 +01:00
2026-05-28 09:22:27 +02:00
2026-04-17 12:03:15 +02:00
2022-12-11 16:58:50 +01:00
2025-05-05 08:19:11 +02:00
2026-04-15 09:23:21 +02:00
2026-02-26 17:34:42 +01:00
2026-02-16 09:14:03 +01:00
2026-05-29 08:26:35 +02:00
2023-11-20 21:12:13 +01:00
2025-01-14 07:46:40 +01:00
2024-03-16 08:35:18 +08:00
2025-01-14 07:46:40 +01:00
2025-09-22 08:48:48 +02:00
2025-07-19 08:17:30 +02:00
2024-04-10 14:41:16 +02:00
2023-08-10 14:26:40 +02:00
2026-04-17 12:03:05 +02:00
2025-04-14 10:52:41 +02:00
2025-12-15 20:29:49 +01:00
2026-03-30 15:10:17 +02:00
2026-05-29 08:25:57 +02:00
2023-10-29 14:48:11 +01:00
2024-08-20 11:57:47 +02:00
2026-01-26 09:12:59 +01:00
2023-12-12 16:54:50 +01:00
2026-01-09 08:48:56 +01:00
2026-03-10 09:30:31 +01:00
2026-04-01 08:35:32 +02:00
2023-08-10 14:26:40 +02:00
2024-04-10 14:41:16 +02:00
2025-05-12 14:20:32 +02:00
2023-10-29 14:48:11 +01:00
2025-01-14 12:24:00 +01:00
2023-12-25 07:12:54 +01:00