Repository: thrift Updated Branches: refs/heads/master ec300e33d -> d8dd7ea99
THRIFT-2784 Eliminate compiler warnings in generated C++ code Patch: John Campbell Project: http://git-wip-us.apache.org/repos/asf/thrift/repo Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/d8dd7ea9 Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/d8dd7ea9 Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/d8dd7ea9 Branch: refs/heads/master Commit: d8dd7ea99fdbf0bbe687f3edca2577c735ec2986 Parents: ec300e3 Author: Roger Meier <[email protected]> Authored: Mon Oct 13 18:07:59 2014 +0200 Committer: Roger Meier <[email protected]> Committed: Mon Oct 13 18:07:59 2014 +0200 ---------------------------------------------------------------------- compiler/cpp/src/generate/t_cpp_generator.cc | 45 +++++++++++++++++------ 1 file changed, 33 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/thrift/blob/d8dd7ea9/compiler/cpp/src/generate/t_cpp_generator.cc ---------------------------------------------------------------------- diff --git a/compiler/cpp/src/generate/t_cpp_generator.cc b/compiler/cpp/src/generate/t_cpp_generator.cc old mode 100755 new mode 100644 index ec5fd1c..42fe9e2 --- a/compiler/cpp/src/generate/t_cpp_generator.cc +++ b/compiler/cpp/src/generate/t_cpp_generator.cc @@ -120,7 +120,7 @@ class t_cpp_generator : public t_oop_generator { bool write=true, bool swap=false); void generate_struct_definition (std::ofstream& out, std::ofstream& force_cpp_out, t_struct* tstruct, bool setters=true); - void generate_copy_constructor (std::ofstream& out, t_struct* tstruct); + void generate_copy_constructor (std::ofstream& out, t_struct* tstruct, bool is_exception); void generate_assignment_operator (std::ofstream& out, t_struct* tstruct); void generate_struct_fingerprint (std::ofstream& out, t_struct* tstruct, bool is_definition); void generate_struct_reader (std::ofstream& out, t_struct* tstruct, bool pointers=false); @@ -159,7 +159,7 @@ class t_cpp_generator : public t_oop_generator { t_struct* tstruct, std::string prefix="", bool pointer=false); - + void generate_deserialize_container (std::ofstream& out, t_type* ttype, std::string prefix=""); @@ -822,22 +822,31 @@ void t_cpp_generator::generate_cpp_struct(t_struct* tstruct, bool is_exception) generate_struct_reader(out, tstruct); generate_struct_writer(out, tstruct); generate_struct_swap(f_types_impl_, tstruct); - generate_copy_constructor(f_types_impl_, tstruct); + generate_copy_constructor(f_types_impl_, tstruct, is_exception); generate_assignment_operator(f_types_impl_, tstruct); generate_struct_ostream_operator(f_types_impl_, tstruct); } void t_cpp_generator::generate_copy_constructor( ofstream& out, - t_struct* tstruct) { + t_struct* tstruct, + bool is_exception) { std::string tmp_name = tmp("other"); indent(out) << tstruct->get_name() << "::" << tstruct->get_name() << "(const " << tstruct->get_name() << - "& " << tmp_name << ") {" << endl; + "& " << tmp_name << ") "; + if (is_exception) + out << ": TException() "; + out << "{" << endl; indent_up(); const vector<t_field*>& members = tstruct->get_members(); + + // eliminate compiler unused warning + if (members.empty()) + indent(out) << "(void) " << tmp_name << ";" << endl; + vector<t_field*>::const_iterator f_iter; bool has_nonrequired_fields = false; for (f_iter = members.begin(); f_iter != members.end(); ++f_iter) { @@ -859,12 +868,17 @@ void t_cpp_generator::generate_assignment_operator( t_struct* tstruct) { std::string tmp_name = tmp("other"); - indent(out) << tstruct->get_name() << "& " << tstruct->get_name() << "::" + indent(out) << tstruct->get_name() << "& " << tstruct->get_name() << "::" "operator=(const " << tstruct->get_name() << "& " << tmp_name << ") {" << endl; indent_up(); const vector<t_field*>& members = tstruct->get_members(); + + // eliminate compiler unused warning + if (members.empty()) + indent(out) << "(void) " << tmp_name << ";" << endl; + vector<t_field*>::const_iterator f_iter; bool has_nonrequired_fields = false; for (f_iter = members.begin(); f_iter != members.end(); ++f_iter) { @@ -965,7 +979,7 @@ void t_cpp_generator::generate_struct_declaration(ofstream& out, if (!pointers) { // Copy constructor - indent(out) << + indent(out) << tstruct->get_name() << "(const " << tstruct->get_name() << "&);" << endl; // Assignment Operator @@ -974,7 +988,7 @@ void t_cpp_generator::generate_struct_declaration(ofstream& out, // Default constructor indent(out) << tstruct->get_name() << "()"; - + bool init_ctor = false; @@ -997,7 +1011,7 @@ void t_cpp_generator::generate_struct_declaration(ofstream& out, } else { out << ", " << (*m_iter)->get_name() << "(" << dval << ")"; } - } + } } out << " {" << endl; indent_up(); @@ -1810,11 +1824,18 @@ void t_cpp_generator::generate_struct_ostream_operator(std::ofstream& out, indent_up(); out << - indent() << "using apache::thrift::to_string;" << endl << + indent() << "using apache::thrift::to_string;" << endl; + + // eliminate compiler unused warning + const vector<t_field*>& fields = tstruct->get_members(); + if (fields.empty()) + out << indent() << "(void) obj;" << endl; + + out << indent() << "out << \"" << tstruct->get_name() << "(\";" << endl; struct_ostream_operator_generator::generate_fields(out, - tstruct->get_members(), + fields, indent()); out << @@ -4350,7 +4371,7 @@ void t_cpp_generator::generate_serialize_field(ofstream& out, if (type->is_struct() || type->is_xception()) { generate_serialize_struct(out, (t_struct*)type, - name, + name, is_reference(tfield)); } else if (type->is_container()) { generate_serialize_container(out, type, name);
