diff --git a/quartz/typecheck.qz b/quartz/typecheck.qz index 4b5eb14b..15e97a87 100644 --- a/quartz/typecheck.qz +++ b/quartz/typecheck.qz @@ -2226,6 +2226,12 @@ fun unify(type1: Type, type2: Type): Type or error { if type2.t_nil != nil && type1.t_optional != nil { return type1; } + if type1.t_nil != nil && type2.t_ptr != nil { + return type2; + } + if type2.t_nil != nil && type1.t_ptr != nil { + return type1; + } if type1.t_any != nil { return type2; } diff --git a/tests/cases/test24.qz b/tests/cases/test24.qz new file mode 100644 index 00000000..c677e475 --- /dev/null +++ b/tests/cases/test24.qz @@ -0,0 +1,5 @@ +fun main(): bool { + let p = make[ptr[i32]](1); + + return p == nil; +} diff --git a/tests/cases/test24.stdout b/tests/cases/test24.stdout new file mode 100644 index 00000000..c508d536 --- /dev/null +++ b/tests/cases/test24.stdout @@ -0,0 +1 @@ +false diff --git a/tests/compile_run.rs b/tests/compile_run.rs index 0ad525b7..61278f29 100644 --- a/tests/compile_run.rs +++ b/tests/compile_run.rs @@ -118,7 +118,15 @@ fn test_run() -> Result<()> { if stdout_path.exists() { let expected = fs::read_to_string(stdout_path)?; - let run = output.run.clone().unwrap(); + let run = output.run.clone().expect( + format!( + "output.run is None.\n{}\n[COMPILE]: {}\n{}", + path.display(), + output.compile.stdout, + output.compile.stderr + ) + .as_str(), + ); assert_eq!( expected,