diff options
| author | gingerBill <gingerBill@users.noreply.github.com> | 2025-01-17 13:23:15 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-01-17 13:23:15 +0000 |
| commit | b9bf5b14960486de6e9dbcb408cd5028a4725fff (patch) | |
| tree | 53cb7c61dcc0c2e6dd931956e069fa9a63d8036f /src/checker.cpp | |
| parent | fcd3cf7fa815a605e89dac40dd01a9a70e257110 (diff) | |
| parent | 87b590c99bb30066f47683f2481b44b8d8226a37 (diff) | |
Merge pull request #4703 from flysand7/4685-range-stack-overflow
Do not warn about stack overflow in range loops 'by reference'
Diffstat (limited to 'src/checker.cpp')
| -rw-r--r-- | src/checker.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/checker.cpp b/src/checker.cpp index 5d3263789..85077a5c5 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -749,9 +749,15 @@ gb_internal void check_scope_usage_internal(Checker *c, Scope *scope, u64 vet_fl // TODO(bill): When is a good size warn? // Is >256 KiB good enough? if (sz > 1ll<<18) { - gbString type_str = type_to_string(e->type); - warning(e->token, "Declaration of '%.*s' may cause a stack overflow due to its type '%s' having a size of %lld bytes", LIT(e->token.string), type_str, cast(long long)sz); - gb_string_free(type_str); + bool is_ref = false; + if((e->flags & EntityFlag_ForValue) != 0) { + is_ref = type_deref(e->Variable.for_loop_parent_type) != NULL; + } + if(!is_ref) { + gbString type_str = type_to_string(e->type); + warning(e->token, "Declaration of '%.*s' may cause a stack overflow due to its type '%s' having a size of %lld bytes", LIT(e->token.string), type_str, cast(long long)sz); + gb_string_free(type_str); + } } } } |