From: Ben Craig Date: Tue, 8 Oct 2013 21:02:06 +0000 (-0500) Subject: THRIFT-2045: C++ compiler warning and build cleanup X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=282e440c6de219b7b8f32b01cc7eb599f534f33f;p=common%2Fthrift.git THRIFT-2045: C++ compiler warning and build cleanup Client: cpp compiler, go compiler, python compiler, compiler build Patch: Ben Craig --- diff --git a/compiler/cpp/src/generate/t_cpp_generator.cc b/compiler/cpp/src/generate/t_cpp_generator.cc index 1faa2c33..333fe60c 100644 --- a/compiler/cpp/src/generate/t_cpp_generator.cc +++ b/compiler/cpp/src/generate/t_cpp_generator.cc @@ -3341,7 +3341,11 @@ void t_cpp_generator::generate_process_function(t_service* tservice, } } - out << " catch (const std::exception& e) {" << endl; + if (!tfunction->is_oneway()) { + out << " catch (const std::exception& e) {" << endl; + } else { + out << " catch (const std::exception&) {" << endl; + } indent_up(); out << @@ -3471,7 +3475,7 @@ void t_cpp_generator::generate_process_function(t_service* tservice, // TODO(dreiss): Handle TExceptions? Expose to server? out << - indent() << "catch (const std::exception& exn) {" << endl << + indent() << "catch (const std::exception&) {" << endl << indent() << " if (this->eventHandler_.get() != NULL) {" << endl << indent() << " this->eventHandler_->handlerError(ctx, " << service_func_name << ");" << endl << diff --git a/compiler/cpp/src/generate/t_go_generator.cc b/compiler/cpp/src/generate/t_go_generator.cc index 00af893e..0d7e6c2b 100644 --- a/compiler/cpp/src/generate/t_go_generator.cc +++ b/compiler/cpp/src/generate/t_go_generator.cc @@ -2165,7 +2165,7 @@ void t_go_generator::generate_service_remote(t_service* tservice) S_IRUSR | S_IWUSR | S_IXUSR -#ifndef MINGW +#ifndef _WIN32 | S_IRGRP | S_IXGRP | S_IROTH diff --git a/compiler/cpp/src/generate/t_py_generator.cc b/compiler/cpp/src/generate/t_py_generator.cc index e2151953..b910cf69 100644 --- a/compiler/cpp/src/generate/t_py_generator.cc +++ b/compiler/cpp/src/generate/t_py_generator.cc @@ -1697,7 +1697,7 @@ void t_py_generator::generate_service_remote(t_service* tservice) { S_IRUSR | S_IWUSR | S_IXUSR -#ifndef MINGW +#ifndef _WIN32 | S_IRGRP | S_IXGRP | S_IROTH diff --git a/compiler/cpp/src/main.cc b/compiler/cpp/src/main.cc index b9f75135..4ce22b46 100755 --- a/compiler/cpp/src/main.cc +++ b/compiler/cpp/src/main.cc @@ -39,13 +39,14 @@ #include #include -#ifdef MINGW +#ifdef _WIN32 # include /* for GetFullPathName */ #endif // Careful: must include globals first for extern definitions #include "globals.h" +#include "platform.h" #include "main.h" #include "parse/t_program.h" #include "parse/t_scope.h" @@ -161,11 +162,11 @@ int g_allow_64bit_consts = 0; bool gen_recurse = false; /** - * MinGW doesn't have realpath, so use fallback implementation in that case, + * Win32 doesn't have realpath, so use fallback implementation in that case, * otherwise this just calls through to realpath */ char *saferealpath(const char *path, char *resolved_path) { -#ifdef MINGW +#ifdef _WIN32 char buf[MAX_PATH]; char* basename; DWORD len = GetFullPathName(path, MAX_PATH, buf, &basename); @@ -190,7 +191,7 @@ char *saferealpath(const char *path, char *resolved_path) { } bool check_is_directory(const char *dir_name) { -#ifdef MINGW +#ifdef _WIN32 DWORD attributes = ::GetFileAttributesA(dir_name); if(attributes == INVALID_FILE_ATTRIBUTES) { fprintf(stderr, "Output directory %s is unusable: GetLastError() = %ld\n", dir_name, GetLastError()); @@ -336,7 +337,7 @@ string include_file(string filename) { // Absolute path? Just try that if (filename[0] == '/') { // Realpath! - char rp[PATH_MAX]; + char rp[THRIFT_PATH_MAX]; if (saferealpath(filename.c_str(), rp) == NULL) { pwarning(0, "Cannot open include file %s\n", filename.c_str()); return std::string(); @@ -358,7 +359,7 @@ string include_file(string filename) { string sfilename = *(it) + "/" + filename; // Realpath! - char rp[PATH_MAX]; + char rp[THRIFT_PATH_MAX]; if (saferealpath(sfilename.c_str(), rp) == NULL) { continue; } @@ -757,8 +758,8 @@ void validate_const_rec(std::string name, t_type* type, t_const_value* value) { } } if (!found) { - throw "type error: const " + name + " was declared as type " - + type->get_name() + " which is an enum, but " + throw "type error: const " + name + " was declared as type " + + type->get_name() + " which is an enum, but " + value->get_identifier() + " is not a valid value for that enum"; } } else if (type->is_struct() || type->is_xception()) { @@ -1066,7 +1067,7 @@ int main(int argc, char** argv) { } out_path = arg; -#ifdef MINGW +#ifdef _WIN32 //strip out trailing \ on Windows int last = out_path.length()-1; if (out_path[last] == '\\') @@ -1104,7 +1105,7 @@ int main(int argc, char** argv) { } // Real-pathify it - char rp[PATH_MAX]; + char rp[THRIFT_PATH_MAX]; if (argv[i] == NULL) { fprintf(stderr, "Missing file name\n"); usage(); diff --git a/compiler/cpp/src/parse/t_field.h b/compiler/cpp/src/parse/t_field.h index ac10d573..7bbcc0f3 100644 --- a/compiler/cpp/src/parse/t_field.h +++ b/compiler/cpp/src/parse/t_field.h @@ -155,7 +155,7 @@ class t_field : public t_doc { * not it was specified by the user or automatically chosen. */ struct t_field_id { - int64_t value; + int32_t value; bool auto_assigned; }; diff --git a/compiler/cpp/src/platform.h b/compiler/cpp/src/platform.h index 04f04c70..7eb891d3 100644 --- a/compiler/cpp/src/platform.h +++ b/compiler/cpp/src/platform.h @@ -22,7 +22,11 @@ * is different for the non-POSIX MinGW */ -#ifdef MINGW +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef _WIN32 #include #include #else @@ -30,8 +34,14 @@ #include #endif -#if defined MINGW +#ifdef _WIN32 #define MKDIR(x) mkdir(x) #else #define MKDIR(x) mkdir(x, S_IRWXU | S_IRWXG | S_IRWXO) #endif + +#ifdef PATH_MAX +#define THRIFT_PATH_MAX PATH_MAX +#else +#define THRIFT_PATH_MAX MAX_PATH +#endif diff --git a/compiler/cpp/src/thriftl.ll b/compiler/cpp/src/thriftl.ll index 96d61ecf..db17a636 100644 --- a/compiler/cpp/src/thriftl.ll +++ b/compiler/cpp/src/thriftl.ll @@ -33,14 +33,26 @@ * We should revert the Makefile.am changes once Apple ships a reasonable * GCC. */ +#ifdef __GNUC__ #pragma GCC diagnostic ignored "-Wunused-function" #pragma GCC diagnostic ignored "-Wunused-label" +#endif + +#ifdef _MSC_VER +//warning C4102: 'find_rule' : unreferenced label +#pragma warning(disable:4102) +//avoid isatty redefinition +#define YY_NEVER_INTERACTIVE 1 +#endif #include #include #include #include +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif #include "main.h" #include "globals.h" #include "parse/t_program.h" diff --git a/compiler/cpp/src/thrifty.yy b/compiler/cpp/src/thrifty.yy index f5ab4a61..a8ebf50a 100644 --- a/compiler/cpp/src/thrifty.yy +++ b/compiler/cpp/src/thrifty.yy @@ -34,11 +34,19 @@ #include #endif #include +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif #include "main.h" #include "globals.h" #include "parse/t_program.h" #include "parse/t_scope.h" +#ifdef _MSC_VER +//warning C4065: switch statement contains 'default' but no 'case' labels +#pragma warning(disable:4065) +#endif + /** * This global variable is used for automatic numbering of field indices etc. * when parsing the members of a struct. Field values are automatically @@ -584,7 +592,7 @@ EnumDef: pwarning(1, "64-bit value supplied for enum %s.\n", $2); } validate_simple_identifier( $2); - $$ = new t_enum_value($2, $4); + $$ = new t_enum_value($2, static_cast($4)); if ($1 != NULL) { $$->set_doc($1); } @@ -764,7 +772,7 @@ Struct: delete $7; } } - + XsdAll: tok_xsd_all { @@ -986,17 +994,17 @@ FieldIdentifier: * Leave $1 as-is, and update y_field_val to be one less than $1. * The FieldList parsing will catch any duplicate key values. */ - y_field_val = $1 - 1; - $$.value = $1; + y_field_val = static_cast($1 - 1); + $$.value = static_cast($1); $$.auto_assigned = false; } else { - pwarning(1, "Nonpositive value (%"PRIi64") not allowed as a field key.\n", + pwarning(1, "Nonpositive value (%d) not allowed as a field key.\n", $1); $$.value = y_field_val--; $$.auto_assigned = true; } } else { - $$.value = $1; + $$.value = static_cast($1); $$.auto_assigned = false; } } diff --git a/compiler/cpp/src/windows/config.h b/compiler/cpp/src/windows/config.h index 9d75e801..356f4e5b 100644 --- a/compiler/cpp/src/windows/config.h +++ b/compiler/cpp/src/windows/config.h @@ -37,6 +37,10 @@ #define PRIu64 "I64d" #define PRIi64 "I64d" +// squelch deprecation warnings #pragma warning(disable:4996) +// squelch bool conversion performance warning +#pragma warning(disable:4800) + #endif // _THRIFT_WINDOWS_CONFIG_H_ diff --git a/compiler/cpp/src/windows/version.h.in b/compiler/cpp/src/windows/version.h.in index 94b7c568..33708bad 100644 --- a/compiler/cpp/src/windows/version.h.in +++ b/compiler/cpp/src/windows/version.h.in @@ -28,15 +28,6 @@ #error "This is a Windows header only" #endif -#define PATH_MAX MAX_PATH #define THRIFT_VERSION "@PACKAGE_VERSION@" -#ifndef S_ISDIR -#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) -#endif - -#ifndef S_ISREG -#define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG) -#endif - #endif // _THRIFT_WINDOWS_VERSION_H_