fix issue #I6E9GC: return error when use 4 values in multi-return-values function.
authoryu.dongliang <18588496441@163.com>
Fri, 10 Feb 2023 08:00:25 +0000 (16:00 +0800)
committeryu.dongliang <18588496441@163.com>
Fri, 10 Feb 2023 08:00:37 +0000 (16:00 +0800)
examples/multi_retvals2.c [new file with mode: 0644]
parse/scf_dfa_expr.c

diff --git a/examples/multi_retvals2.c b/examples/multi_retvals2.c
new file mode 100644 (file)
index 0000000..f5a89f2
--- /dev/null
@@ -0,0 +1,18 @@
+int printf(const char* fmt, ...);
+
+int, int, int, int ret3value(int i, int j, int k, int l)
+{
+       return i, k, j, l;
+}
+
+int main()
+{
+       int a, b, c, d;
+
+       a, b, c, d = ret3value(1, 2, 3, 4);
+
+       printf("%d, %d, %d, %d\n", a, b, c, d);
+
+       return 0;
+}
+
index c924860d296d511904b1fe67a458098d594acc40..d10b9c00b1173eb7649d40c645445da765c727e3 100644 (file)
@@ -683,8 +683,6 @@ int _expr_multi_rets(scf_expr_t* e)
 
        assert(call->nb_nodes > 0);
 
-       scf_loge("parent->nb_nodes: %d\n", parent->nb_nodes);
-
        scf_node_t*  ret;
        scf_block_t* b;
 
@@ -712,7 +710,9 @@ int _expr_multi_rets(scf_expr_t* e)
        j = 0;
        k = b->node.nb_nodes - 1;
        while (j < k) {
-               SCF_XCHG(b->node.nodes[j++], b->node.nodes[k--]);
+               SCF_XCHG(b->node.nodes[j], b->node.nodes[k]);
+               j++;
+               k--;
        }
 
        scf_node_add_child((scf_node_t*)b, assign->nodes[0]);