diff --git a/core/decimal.odin b/core/decimal.odin index 480655385..7a88ab490 100644 --- a/core/decimal.odin +++ b/core/decimal.odin @@ -1,4 +1,3 @@ -// #import "fmt.odin"; // Multiple precision decimal numbers // NOTE: This is only for floating point printing and nothing else diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 1ed657ec8..707baaaf7 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -1494,6 +1494,13 @@ void check_unary_expr(Checker *c, Operand *o, Token op, AstNode *node) { o->mode = Addressing_Invalid; return; } + if (op.kind == Token_Sub && is_type_unsigned(type)) { + gbString err_str = expr_to_string(node); + error(op, "A unsigned constant cannot be negated '%s'", err_str); + gb_string_free(err_str); + o->mode = Addressing_Invalid; + return; + } o->value = exact_unary_operator_value(op.kind, o->value, precision);