You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by ro...@apache.org on 2014/10/13 18:15:25 UTC

git commit: THRIFT-2784 Eliminate compiler warnings in generated C++ code

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 <ro...@apache.org>
Authored: Mon Oct 13 18:07:59 2014 +0200
Committer: Roger Meier <ro...@apache.org>
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);