diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2016-04-06 14:15:20 -0700 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2016-04-06 14:15:20 -0700 |
| commit | 57688dea36e6d1f8d7bad255898d1e222b3a6fbc (patch) | |
| tree | 6aa180ef0197b047899b1b823106dd4cf838e2d0 /src/analyze.cpp | |
| parent | 7bb67b1fd0ca56a04778083f1a01583d839be9b1 (diff) | |
| download | zig-57688dea36e6d1f8d7bad255898d1e222b3a6fbc.tar.gz zig-57688dea36e6d1f8d7bad255898d1e222b3a6fbc.zip | |
add error for gt and lt comparison of invalid types
Diffstat (limited to 'src/analyze.cpp')
| -rw-r--r-- | src/analyze.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/analyze.cpp b/src/analyze.cpp index 91fbddf717..a8986e9992 100644 --- a/src/analyze.cpp +++ b/src/analyze.cpp @@ -2845,8 +2845,20 @@ static TypeTableEntry *analyze_bool_bin_op_expr(CodeGen *g, ImportTableEntry *im TypeTableEntry *resolved_type = resolve_peer_type_compatibility(g, import, context, node, op_nodes, op_types, 2); + bool type_can_gt_lt_cmp = (resolved_type->id == TypeTableEntryIdNumLitFloat || + resolved_type->id == TypeTableEntryIdNumLitInt || + resolved_type->id == TypeTableEntryIdFloat || + resolved_type->id == TypeTableEntryIdInt); + if (resolved_type->id == TypeTableEntryIdInvalid) { return g->builtin_types.entry_invalid; + } else if (bin_op_type != BinOpTypeCmpEq && + bin_op_type != BinOpTypeCmpNotEq && + !type_can_gt_lt_cmp) + { + add_node_error(g, node, + buf_sprintf("operator not allowed for type '%s'", buf_ptr(&resolved_type->name))); + return g->builtin_types.entry_invalid; } ConstExprValue *op1_val = &get_resolved_expr(op1)->const_val; @@ -2856,11 +2868,7 @@ static TypeTableEntry *analyze_bool_bin_op_expr(CodeGen *g, ImportTableEntry *im } bool answer; - if (resolved_type->id == TypeTableEntryIdNumLitFloat || - resolved_type->id == TypeTableEntryIdNumLitInt || - resolved_type->id == TypeTableEntryIdFloat || - resolved_type->id == TypeTableEntryIdInt) - { + if (type_can_gt_lt_cmp) { bool (*bignum_cmp)(BigNum *, BigNum *); if (bin_op_type == BinOpTypeCmpEq) { bignum_cmp = bignum_cmp_eq; |
