aboutsummaryrefslogtreecommitdiff
path: root/src/check_expr.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-09-27 11:38:11 +0100
committergingerBill <bill@gingerbill.org>2023-09-27 11:38:11 +0100
commitacc29fbcebf4459b1c98c54d9cc565d363a4196a (patch)
tree91b4692e0a8c9c3958ed44347ded5a2f40ee157d /src/check_expr.cpp
parent94d68c1f225c3699d905388baee15e42ec6e49a0 (diff)
parentfc93ea7aa370d25aab61dab43e885f50978dff50 (diff)
Merge branch 'master' into llvm-17
Diffstat (limited to 'src/check_expr.cpp')
-rw-r--r--src/check_expr.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp
index 700412a86..968b6ec1e 100644
--- a/src/check_expr.cpp
+++ b/src/check_expr.cpp
@@ -2462,8 +2462,9 @@ gb_internal void add_comparison_procedures_for_fields(CheckerContext *c, Type *t
add_package_dependency(c, "runtime", "quaternion256_ne");
break;
case Basic_cstring:
- add_package_dependency(c, "runtime", "cstring_to_string");
- /*fallthrough*/
+ add_package_dependency(c, "runtime", "cstring_eq");
+ add_package_dependency(c, "runtime", "cstring_ne");
+ break;
case Basic_string:
add_package_dependency(c, "runtime", "string_eq");
add_package_dependency(c, "runtime", "string_ne");
@@ -2621,7 +2622,16 @@ gb_internal void check_comparison(CheckerContext *c, Ast *node, Operand *x, Oper
if (!is_type_untyped(x->type)) size = gb_max(size, type_size_of(x->type));
if (!is_type_untyped(y->type)) size = gb_max(size, type_size_of(y->type));
- if (is_type_string(x->type) || is_type_string(y->type)) {
+ if (is_type_cstring(x->type) && is_type_cstring(y->type)) {
+ switch (op) {
+ case Token_CmpEq: add_package_dependency(c, "runtime", "cstring_eq"); break;
+ case Token_NotEq: add_package_dependency(c, "runtime", "cstring_ne"); break;
+ case Token_Lt: add_package_dependency(c, "runtime", "cstring_lt"); break;
+ case Token_Gt: add_package_dependency(c, "runtime", "cstring_gt"); break;
+ case Token_LtEq: add_package_dependency(c, "runtime", "cstring_le"); break;
+ case Token_GtEq: add_package_dependency(c, "runtime", "cstring_gt"); break;
+ }
+ } else if (is_type_string(x->type) || is_type_string(y->type)) {
switch (op) {
case Token_CmpEq: add_package_dependency(c, "runtime", "string_eq"); break;
case Token_NotEq: add_package_dependency(c, "runtime", "string_ne"); break;