aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen van Rijn <Kelimion@users.noreply.github.com>2023-07-02 23:06:35 +0200
committerGitHub <noreply@github.com>2023-07-02 23:06:35 +0200
commit8d9adfd5488271c6e64647875341e244bdc8cb86 (patch)
treedd4671de224fbf5a9dbd9e94a2a21b8bd63f3958
parenta1eae6304f92b9be1b6c084dbdbd97d62caf02c5 (diff)
parenta3e2d90f4cc591b7c2a3957aba4dc4a56451d372 (diff)
Merge pull request #2623 from laytan/fix-2615-cant-iterate-untyped-string
Fix #2615: can't iterate untyped string
-rw-r--r--src/check_stmt.cpp2
-rw-r--r--tests/issues/run.bat1
-rwxr-xr-xtests/issues/run.sh1
-rw-r--r--tests/issues/test_issue_2615.odin19
4 files changed, 22 insertions, 1 deletions
diff --git a/src/check_stmt.cpp b/src/check_stmt.cpp
index 964ff1842..a15977b7d 100644
--- a/src/check_stmt.cpp
+++ b/src/check_stmt.cpp
@@ -1528,7 +1528,7 @@ gb_internal void check_range_stmt(CheckerContext *ctx, Ast *node, u32 mod_flags)
Type *t = base_type(type_deref(operand.type));
switch (t->kind) {
case Type_Basic:
- if (t->Basic.kind == Basic_string) {
+ if (t->Basic.kind == Basic_string || t->Basic.kind == Basic_UntypedString) {
is_possibly_addressable = false;
array_add(&vals, t_rune);
array_add(&vals, t_int);
diff --git a/tests/issues/run.bat b/tests/issues/run.bat
index bf49bc85b..105d474e3 100644
--- a/tests/issues/run.bat
+++ b/tests/issues/run.bat
@@ -13,6 +13,7 @@ set COMMON=-collection:tests=..\..
..\..\..\odin test ..\test_issue_2087.odin %COMMON% -file || exit /b
..\..\..\odin build ..\test_issue_2113.odin %COMMON% -file -debug || exit /b
..\..\..\odin test ..\test_issue_2466.odin %COMMON% -file || exit /b
+..\..\..\odin test ..\test_issue_2615.odin %COMMON% -file || exit /b
@echo off
diff --git a/tests/issues/run.sh b/tests/issues/run.sh
index b0c43572f..c4c53e7e1 100755
--- a/tests/issues/run.sh
+++ b/tests/issues/run.sh
@@ -16,6 +16,7 @@ $ODIN test ../test_issue_2056.odin $COMMON -file
$ODIN test ../test_issue_2087.odin $COMMON -file
$ODIN build ../test_issue_2113.odin $COMMON -file -debug
$ODIN test ../test_issue_2466.odin $COMMON -file
+$ODIN test ../test_issue_2615.odin $COMMON -file
if [[ $($ODIN build ../test_issue_2395.odin $COMMON -file 2>&1 >/dev/null | grep -c "$NO_NIL_ERR") -eq 2 ]] ; then
echo "SUCCESSFUL 1/1"
else
diff --git a/tests/issues/test_issue_2615.odin b/tests/issues/test_issue_2615.odin
new file mode 100644
index 000000000..229e5c35b
--- /dev/null
+++ b/tests/issues/test_issue_2615.odin
@@ -0,0 +1,19 @@
+// Tests issue https://github.com/odin-lang/Odin/issues/2615
+// Cannot iterate over string literals
+package test_issues
+
+import "core:testing"
+
+@(test)
+test_cannot_iterate_over_string_literal :: proc(t: ^testing.T) {
+ for c, i in "fo世" {
+ switch i {
+ case 0:
+ testing.expect_value(t, c, 'f')
+ case 1:
+ testing.expect_value(t, c, 'o')
+ case 2:
+ testing.expect_value(t, c, '世')
+ }
+ }
+}