From c54c400291c7acd5690db0ff5881aabcd170cac9 Mon Sep 17 00:00:00 2001 From: Christoffer Lerno Date: Tue, 4 Feb 2025 00:23:59 +0100 Subject: [PATCH] Allow inline enum values to define sizes. --- src/compiler/sema_types.c | 2 +- test/test_suite/arrays/global_array_non_const.c3 | 2 +- test/test_suite/enumerations/inline_enum_size.c3 | 7 +++++++ 3 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 test/test_suite/enumerations/inline_enum_size.c3 diff --git a/src/compiler/sema_types.c b/src/compiler/sema_types.c index 929cf26b6..f0bc0f68c 100644 --- a/src/compiler/sema_types.c +++ b/src/compiler/sema_types.c @@ -39,7 +39,7 @@ bool sema_resolve_array_like_len(SemaContext *context, TypeInfo *type_info, Arra Expr *len_expr = type_info->array.len; // Analyse it. - if (!sema_analyse_expr(context, len_expr)) return type_info_poison(type_info); + if (!sema_analyse_expr_rhs(context, type_isz, len_expr, false, NULL, false)) return type_info_poison(type_info); // A constant expression is assumed. if (!sema_cast_const(len_expr)) diff --git a/test/test_suite/arrays/global_array_non_const.c3 b/test/test_suite/arrays/global_array_non_const.c3 index da0d1cb95..fa1e32b87 100644 --- a/test/test_suite/arrays/global_array_non_const.c3 +++ b/test/test_suite/arrays/global_array_non_const.c3 @@ -3,7 +3,7 @@ const int CONSTANT = 1; int[CONSTANT] a2; int[3] a3 = { [CONSTANT] = 1 }; const bool B = true; -int[B] c2; // #error: Expected an integer +int[B] c2; // #error: cannot implicitly be converted int non_constant = 10; int[non_constant] b; // #error: Expected a constant value as diff --git a/test/test_suite/enumerations/inline_enum_size.c3 b/test/test_suite/enumerations/inline_enum_size.c3 new file mode 100644 index 000000000..bcd540d52 --- /dev/null +++ b/test/test_suite/enumerations/inline_enum_size.c3 @@ -0,0 +1,7 @@ +enum Bar : inline usz +{ + FOO, + BAR, +} + +int[Bar.BAR] x; \ No newline at end of file