File tree Expand file tree Collapse file tree 4 files changed +30
-2
lines changed
Expand file tree Collapse file tree 4 files changed +30
-2
lines changed Original file line number Diff line number Diff line change @@ -5913,7 +5913,13 @@ pub fn (mut c Checker) update_unresolved_fixed_sizes() {
59135913 ret_sym := c.table.sym (stmt.return_type)
59145914 if ret_sym.info is ast.ArrayFixed && c.array_fixed_has_unresolved_size (ret_sym.info) {
59155915 mut size_expr := ret_sym.info.size_expr
5916+ old_typ := c.cast_fixed_array_ret (stmt.return_type, c.table.final_sym (stmt.return_type))
59165917 stmt.return_type = c.eval_array_fixed_sizes (mut size_expr, 0 , ret_sym.info.elem_type)
5918+ new_sym := c.table.sym (stmt.return_type)
5919+ mut typ_sym := c.table.type_symbols[old_typ.idx ()]
5920+ typ_sym.name = new_sym.name
5921+ typ_sym.cname = new_sym.cname
5922+ typ_sym.info = new_sym.info
59175923 }
59185924 } else if mut stmt is ast.TypeDecl { // alias
59195925 mut alias_decl := stmt
Original file line number Diff line number Diff line change @@ -278,6 +278,11 @@ fn (mut c Checker) return_stmt(mut node ast.Return) {
278278 if c.inside_lambda && exp_type.has_flag (.generic) {
279279 continue
280280 }
281+ if exp_final_sym.info is ast.ArrayFixed
282+ && c.array_fixed_has_unresolved_size (exp_final_sym.info) {
283+ continue
284+ }
285+
281286 c.error ('cannot use `${got_type_name} ` as ${c.error_type_name(exp_type)} in return argument' ,
282287 exprv.pos ())
283288 }
Original file line number Diff line number Diff line change @@ -7034,8 +7034,8 @@ fn (mut g Gen) write_types(symbols []&ast.TypeSymbol) {
70347034 ast.ArrayFixed {
70357035 elem_sym := g.table.sym (sym.info.elem_type)
70367036 if ! elem_sym.is_builtin () && ! sym.info.elem_type.has_flag (.generic)
7037- && ( ! g.pref.skip_unused || (! sym.info.is_fn_ret
7038- && sym.idx in g.table.used_features.used_syms)) {
7037+ && ! sym.info.is_fn_ret && (! g.pref.skip_unused
7038+ || ( ! sym.info.is_fn_ret && sym.idx in g.table.used_features.used_syms)) {
70397039 // .array_fixed {
70407040 styp := sym.cname
70417041 // array_fixed_char_300 => char x[300]
Original file line number Diff line number Diff line change 1+ enum Abc {
2+ a = 1
3+ b = 2
4+ c = 3
5+ }
6+
7+ const abc_len = int (Abc.c)
8+
9+ fn build_arr () [abc_len]Abc {
10+ return [abc_len]Abc{}
11+ }
12+
13+ fn test_main () {
14+ a := build_arr ()
15+ println (a)
16+ assert a.len == 3
17+ }
You can’t perform that action at this time.
0 commit comments