aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorfinn <canadienfinn@gmail.com>2023-06-13 22:07:01 +0200
committerfinn <canadienfinn@gmail.com>2023-06-13 22:07:01 +0200
commitec32967daab5136fc2518f4068e7007e265c4e92 (patch)
tree3dc80b5c6e38ecdcce53e6246d7628a4878276e0 /tests
parentfc4a5e61c27467b30a421bceb7d21ac29ef8468e (diff)
[check-type] fix faulty #no_nil variants error
- when checking the variants of a union type we will skip adding the variants if we have an unspecialized polymorphic, hence our union_type variants will be empty and have a count of 0 - so when checking if we violate the #no_nil error, if we are in the unspecialized polymorphic case and there exists at least one variant in the original variants then we should not raise this error - test checks that we do not raise the error anymore, and that we still detect the #no_nil error in the described circumstances
Diffstat (limited to 'tests')
-rwxr-xr-xtests/issues/run.sh7
-rw-r--r--tests/issues/test_issue_2395.odin29
2 files changed, 36 insertions, 0 deletions
diff --git a/tests/issues/run.sh b/tests/issues/run.sh
index bbcd6fb28..b0c43572f 100755
--- a/tests/issues/run.sh
+++ b/tests/issues/run.sh
@@ -6,6 +6,8 @@ pushd build
ODIN=../../../odin
COMMON="-collection:tests=../.."
+NO_NIL_ERR="Error: "
+
set -x
$ODIN test ../test_issue_829.odin $COMMON -file
@@ -14,6 +16,11 @@ $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
+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
+ echo "SUCCESSFUL 0/1"
+fi
set +x
diff --git a/tests/issues/test_issue_2395.odin b/tests/issues/test_issue_2395.odin
new file mode 100644
index 000000000..48e1ee516
--- /dev/null
+++ b/tests/issues/test_issue_2395.odin
@@ -0,0 +1,29 @@
+// Tests issue #2395 https://github.com/odin-lang/Odin/issues/2395
+
+// Ensures that we no longer raise the faulty error for #no_nil unions when
+// then are 2 variants with the polymorphic type. Also ensure that we raise
+// exactly 2 errors from the invalid unions
+package test_issues
+
+import "core:testing"
+
+ValidUnion :: union($T: typeid) #no_nil {
+ T,
+ f32,
+}
+
+OtherValidUnion :: union($T: typeid, $S: typeid) #no_nil {
+ T,
+ S,
+}
+
+InvalidUnion :: union($T: typeid) #no_nil {
+ T,
+}
+
+OtherInvalidUnion :: union($T: typeid) #no_nil {
+ u8,
+}
+
+main :: proc() {
+}