@@ -6263,7 +6263,17 @@ fn (mut g Gen) return_stmt(node ast.Return) {
62636263 if expr ! is ast.ArrayInit && g.table.final_sym (node.types[i]).kind == .array_fixed {
62646264 line := g.go_before_last_stmt ().trim_space ()
62656265 expr_styp := g.styp (node.types[i])
6266- g.write ('memcpy(&${tmpvar} .arg${arg_idx} , ' )
6266+ g.write ('memcpy(&' )
6267+ if fn_return_is_result || fn_return_is_option {
6268+ g.write ('((${styp} *)' )
6269+ }
6270+ g.write ('${tmpvar} ' )
6271+ if fn_return_is_result || fn_return_is_option {
6272+ g.write ('.data)->' )
6273+ } else {
6274+ g.write ('.' )
6275+ }
6276+ g.write ('arg${arg_idx} , ' )
62676277 if expr is ast.StructInit {
62686278 g.write ('(${expr_styp} )' )
62696279 }
@@ -6292,11 +6302,9 @@ fn (mut g Gen) return_stmt(node ast.Return) {
62926302 if fn_return_is_option {
62936303 g.writeln (' }, (${option_name} *)(&${tmpvar} ), sizeof(${styp} ));' )
62946304 g.write_defer_stmts_when_needed ()
6295- g.write ('return ${tmpvar} ' )
62966305 } else if fn_return_is_result {
62976306 g.writeln (' }, (${result_name} *)(&${tmpvar} ), sizeof(${styp} ));' )
62986307 g.write_defer_stmts_when_needed ()
6299- g.write ('return ${tmpvar} ' )
63006308 }
63016309 // Make sure to add our unpacks
63026310 if multi_unpack != '' {
@@ -6313,6 +6321,8 @@ fn (mut g Gen) return_stmt(node ast.Return) {
63136321 g.write_defer_stmts_when_needed ()
63146322 g.writeln ('return ${tmpvar} ;' )
63156323 has_semicolon = true
6324+ } else if fn_return_is_option || fn_return_is_result {
6325+ g.write ('return ${tmpvar} ' )
63166326 }
63176327 } else if exprs_len > = 1 {
63186328 if node.types.len == 0 {
0 commit comments