Commit 2ca503ec05

Tau <jonathan.haehne@hotmail.com>
2022-10-10 18:17:52
translate-c: Fix #12263
1 parent 02fff6f
Changed files (2)
src
translate_c
test
src/translate_c/ast.zig
@@ -910,7 +910,7 @@ fn renderNode(c: *Context, node: Node) Allocator.Error!NodeIndex {
         },
         .call => {
             const payload = node.castTag(.call).?.data;
-            const lhs = try renderNode(c, payload.lhs);
+            const lhs = try renderNodeGrouped(c, payload.lhs);
             return renderCall(c, lhs, payload.args);
         },
         .null_literal => return c.addNode(.{
test/run_translated_c.zig
@@ -891,42 +891,39 @@ pub fn addCases(cases: *tests.RunTranslatedCContext) void {
         \\}
     , "");
 
-    if (@import("builtin").zig_backend == .stage1) {
-        // https://github.com/ziglang/zig/issues/12263
-        cases.add("Obscure ways of calling functions; issue #4124",
-            \\#include <stdlib.h>
-            \\static int add(int a, int b) {
-            \\    return a + b;
-            \\}
-            \\typedef int (*adder)(int, int);
-            \\typedef void (*funcptr)(void);
-            \\int main() {
-            \\    if ((add)(1, 2) != 3) abort();
-            \\    if ((&add)(1, 2) != 3) abort();
-            \\    if (add(3, 1) != 4) abort();
-            \\    if ((*add)(2, 3) != 5) abort();
-            \\    if ((**add)(7, -1) != 6) abort();
-            \\    if ((***add)(-2, 9) != 7) abort();
-            \\
-            \\    int (*ptr)(int a, int b);
-            \\    ptr = add;
-            \\
-            \\    if (ptr(1, 2) != 3) abort();
-            \\    if ((*ptr)(3, 1) != 4) abort();
-            \\    if ((**ptr)(2, 3) != 5) abort();
-            \\    if ((***ptr)(7, -1) != 6) abort();
-            \\    if ((****ptr)(-2, 9) != 7) abort();
-            \\
-            \\    funcptr addr1 = (funcptr)(add);
-            \\    funcptr addr2 = (funcptr)(&add);
-            \\
-            \\    if (addr1 != addr2) abort();
-            \\    if (((int(*)(int, int))addr1)(1, 2) != 3) abort();
-            \\    if (((adder)addr2)(1, 2) != 3) abort();
-            \\    return 0;
-            \\}
-        , "");
-    }
+    cases.add("Obscure ways of calling functions; issue #4124",
+        \\#include <stdlib.h>
+        \\static int add(int a, int b) {
+        \\    return a + b;
+        \\}
+        \\typedef int (*adder)(int, int);
+        \\typedef void (*funcptr)(void);
+        \\int main() {
+        \\    if ((add)(1, 2) != 3) abort();
+        \\    if ((&add)(1, 2) != 3) abort();
+        \\    if (add(3, 1) != 4) abort();
+        \\    if ((*add)(2, 3) != 5) abort();
+        \\    if ((**add)(7, -1) != 6) abort();
+        \\    if ((***add)(-2, 9) != 7) abort();
+        \\
+        \\    int (*ptr)(int a, int b);
+        \\    ptr = add;
+        \\
+        \\    if (ptr(1, 2) != 3) abort();
+        \\    if ((*ptr)(3, 1) != 4) abort();
+        \\    if ((**ptr)(2, 3) != 5) abort();
+        \\    if ((***ptr)(7, -1) != 6) abort();
+        \\    if ((****ptr)(-2, 9) != 7) abort();
+        \\
+        \\    funcptr addr1 = (funcptr)(add);
+        \\    funcptr addr2 = (funcptr)(&add);
+        \\
+        \\    if (addr1 != addr2) abort();
+        \\    if (((int(*)(int, int))addr1)(1, 2) != 3) abort();
+        \\    if (((adder)addr2)(1, 2) != 3) abort();
+        \\    return 0;
+        \\}
+    , "");
 
     cases.add("Return boolean expression as int; issue #6215",
         \\#include <stdlib.h>