mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +00:00
Merge pull request #5408 from slowhei/master
Fix bug where compiler treats uint enums as ints
This commit is contained in:
@@ -1248,6 +1248,9 @@ gb_internal bool is_type_unsigned(Type *t) {
|
|||||||
if (t->kind == Type_Basic) {
|
if (t->kind == Type_Basic) {
|
||||||
return (t->Basic.flags & BasicFlag_Unsigned) != 0;
|
return (t->Basic.flags & BasicFlag_Unsigned) != 0;
|
||||||
}
|
}
|
||||||
|
if (t->kind == Type_Enum) {
|
||||||
|
return (t->Enum.base_type->Basic.flags & BasicFlag_Unsigned) != 0;
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
gb_internal bool is_type_integer_128bit(Type *t) {
|
gb_internal bool is_type_integer_128bit(Type *t) {
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package test_internal
|
||||||
|
|
||||||
|
import "core:testing"
|
||||||
|
|
||||||
|
@test
|
||||||
|
test_comparisons_5408 :: proc(t: ^testing.T) {
|
||||||
|
// See: https://github.com/odin-lang/Odin/pull/5408
|
||||||
|
test_proc :: proc(lhs: $T, rhs: T) -> bool {
|
||||||
|
return lhs > rhs
|
||||||
|
}
|
||||||
|
|
||||||
|
Test_Enum :: enum u32 {
|
||||||
|
SMALL_VALUE = 0xFF,
|
||||||
|
BIG_VALUE = 0xFF00_0000, // negative if interpreted as i32
|
||||||
|
}
|
||||||
|
|
||||||
|
testing.expect_value(t, test_proc(Test_Enum.SMALL_VALUE, Test_Enum.BIG_VALUE), false)
|
||||||
|
testing.expect_value(t, test_proc(Test_Enum(0xF), Test_Enum.BIG_VALUE), false)
|
||||||
|
testing.expect_value(t, test_proc(Test_Enum(0xF), Test_Enum(0xF000_0000)), false)
|
||||||
|
testing.expect_value(t, test_proc(Test_Enum.SMALL_VALUE, max(Test_Enum)), false)
|
||||||
|
testing.expect_value(t, test_proc(Test_Enum(0xF), max(Test_Enum)), false)
|
||||||
|
}
|
||||||
|
|
||||||
|
test_signedness :: proc(t: ^testing.T) {
|
||||||
|
{
|
||||||
|
a, b := i16(32767), i16(0)
|
||||||
|
testing.expect_value(t, a > b, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
a, b := u16(65535), u16(0)
|
||||||
|
testing.expect_value(t, a > b, true)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user