summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Hodge <tpg@ucc.asn.au>2017-07-09 15:16:26 +0800
committerJohn Hodge <tpg@ucc.asn.au>2017-07-09 15:16:26 +0800
commit86bee3bd0fea88b3396c47f6f302f11ce84b5166 (patch)
tree704d583cc6b21ad7ad95aa412ceba8b2f526bde3
parent8c38465b21dfc0553417dc2f13071ed865a3d740 (diff)
downloadmrust-86bee3bd0fea88b3396c47f6f302f11ce84b5166.tar.gz
Codegen C - Fix use of removed (empty) variants
-rw-r--r--src/trans/codegen_c.cpp39
1 files changed, 25 insertions, 14 deletions
diff --git a/src/trans/codegen_c.cpp b/src/trans/codegen_c.cpp
index 401b9e8d..c89cb38d 100644
--- a/src/trans/codegen_c.cpp
+++ b/src/trans/codegen_c.cpp
@@ -1065,14 +1065,20 @@ namespace {
}
else
{
- m_of << "\tstruct e_" << Trans_Mangle(p) << " rv = { .TAG = " << var_idx << ", .DATA = {.var_" << var_idx << " = {";
- for(unsigned int i = 0; i < e.size(); i ++)
- {
- if(i != 0)
- m_of << ",";
- m_of << "\n\t\t_" << i;
- }
- m_of << "\n\t\t}}};\n";
+ m_of << "\tstruct e_" << Trans_Mangle(p) << " rv = { .TAG = " << var_idx;
+
+ if( ! e.empty() )
+ {
+ m_of << ", .DATA = { .var_" << var_idx << " = {";
+ for(unsigned int i = 0; i < e.size(); i ++)
+ {
+ if(i != 0)
+ m_of << ",";
+ m_of << "\n\t\t_" << i;
+ }
+ m_of << "\n\t\t}";
+ }
+ m_of << " }};\n";
}
m_of << "\treturn rv;\n";
m_of << "}\n";
@@ -1294,13 +1300,18 @@ namespace {
}
else
{
- m_of << "{" << e.idx << ", { .var_" << e.idx << " = {";
- for(unsigned int i = 0; i < e.vals.size(); i ++) {
- if(i != 0) m_of << ",";
- m_of << " ";
- emit_literal(get_inner_type(e.idx, i), e.vals[i], params);
+ m_of << "{" << e.idx << ", { ";
+ if( !e.vals.empty() )
+ {
+ m_of << ".var_" << e.idx << " = {";
+ for(unsigned int i = 0; i < e.vals.size(); i ++) {
+ if(i != 0) m_of << ",";
+ m_of << " ";
+ emit_literal(get_inner_type(e.idx, i), e.vals[i], params);
+ }
+ m_of << "} ";
}
- m_of << " }}}";
+ m_of << "}}";
}
),
(Integer,