authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-11-26 16:03:56-05:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2017-11-26 16:03:56-05:00
log9a8545d5903ff60de16f0ddab2b9a4c4c1a798a7
tree9649d8d478166df7062ad1fdd67442b6a32e25d6
parentaa2ca3f02c11c133964d793847c925e3bd131b27

translate-c: fix translation when no default switch case


2 files changed, 39 insertions(+), 1 deletions(-)

src/translate_c.cpp+1-1
...@@ -2344,7 +2344,7 @@ static AstNode *trans_switch_stmt(Context *c, TransScope *parent_scope, const Sw...@@ -2344,7 +2344,7 @@ static AstNode *trans_switch_stmt(Context *c, TransScope *parent_scope, const Sw
23442344
2345 if (!switch_scope->found_default && !stmt->isAllEnumCasesCovered()) {2345 if (!switch_scope->found_default && !stmt->isAllEnumCasesCovered()) {
2346 AstNode *prong_node = trans_create_node(c, NodeTypeSwitchProng);2346 AstNode *prong_node = trans_create_node(c, NodeTypeSwitchProng);
2347 prong_node->data.switch_prong.expr = trans_create_node(c, NodeTypeBreak);2347 prong_node->data.switch_prong.expr = trans_create_node_goto(c, end_label_name);
2348 switch_scope->switch_node->data.switch_expr.prongs.append(prong_node);2348 switch_scope->switch_node->data.switch_expr.prongs.append(prong_node);
2349 }2349 }
23502350
test/translate_c.zig+38
...@@ -1042,6 +1042,44 @@ pub fn addCases(cases: &tests.TranslateCContext) {...@@ -1042,6 +1042,44 @@ pub fn addCases(cases: &tests.TranslateCContext) {
1042 \\ return x + 13;1042 \\ return x + 13;
1043 \\}1043 \\}
1044 );1044 );
1045
1046 cases.add("switch statement with no default",
1047 \\int foo(int x) {
1048 \\ switch (x) {
1049 \\ case 1:
1050 \\ x += 1;
1051 \\ case 2:
1052 \\ break;
1053 \\ case 3:
1054 \\ case 4:
1055 \\ return x + 1;
1056 \\ }
1057 \\ return x + 13;
1058 \\}
1059 ,
1060 \\fn foo(_arg_x: c_int) -> c_int {
1061 \\ var x = _arg_x;
1062 \\ {
1063 \\ switch (x) {
1064 \\ 1 => goto case_0,
1065 \\ 2 => goto case_1,
1066 \\ 3 => goto case_2,
1067 \\ 4 => goto case_3,
1068 \\ else => goto end,
1069 \\ };
1070 \\ case_0:
1071 \\ x += 1;
1072 \\ case_1:
1073 \\ goto end;
1074 \\ case_2:
1075 \\ case_3:
1076 \\ return x + 1;
1077 \\ goto end;
1078 \\ end:
1079 \\ };
1080 \\ return x + 13;
1081 \\}
1082 );
1045}1083}
10461084
10471085