From 2e3dd8dd0b0af28d031f78791b738da514602f7b Mon Sep 17 00:00:00 2001 From: JasperGeer Date: Sun, 4 Sep 2022 15:31:05 -0400 Subject: [PATCH] Err on types passed as operands to ternary if expressions --- src/check_expr.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 54dc081cf..c3528c859 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -7347,6 +7347,13 @@ ExprKind check_ternary_if_expr(CheckerContext *c, Operand *o, Ast *node, Type *t check_expr_or_type(c, &x, te->x, type_hint); node->viral_state_flags |= te->x->viral_state_flags; + if (x.mode == Addressing_Type || x.mode == Addressing_Type) { + gbString type_string = expr_to_string(x.expr); + error(node, "Type %s is invalid operand for ternary if expression", type_string); + gb_string_free(type_string); + return kind; + } + if (te->y != nullptr) { Type *th = type_hint; if (type_hint == nullptr && is_type_typed(x.type)) { @@ -7359,6 +7366,13 @@ ExprKind check_ternary_if_expr(CheckerContext *c, Operand *o, Ast *node, Type *t return kind; } + if (y.mode == Addressing_Type || y.mode == Addressing_Type) { + gbString type_string = expr_to_string(y.expr); + error(node, "Type %s is invalid operand for ternary if expression", type_string); + gb_string_free(type_string); + return kind; + } + if (x.type == nullptr || x.type == t_invalid || y.type == nullptr || y.type == t_invalid) { return kind;