diff options
author | John Hodge <tpg@ucc.asn.au> | 2017-07-09 15:16:26 +0800 |
---|---|---|
committer | John Hodge <tpg@ucc.asn.au> | 2017-07-09 15:16:26 +0800 |
commit | 86bee3bd0fea88b3396c47f6f302f11ce84b5166 (patch) | |
tree | 704d583cc6b21ad7ad95aa412ceba8b2f526bde3 | |
parent | 8c38465b21dfc0553417dc2f13071ed865a3d740 (diff) | |
download | mrust-86bee3bd0fea88b3396c47f6f302f11ce84b5166.tar.gz |
Codegen C - Fix use of removed (empty) variants
-rw-r--r-- | src/trans/codegen_c.cpp | 39 |
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, |