From 5cd60fba40da86469142248cbec19bfba42009da Mon Sep 17 00:00:00 2001 From: Simon Pickartz Date: Thu, 26 Jan 2017 09:18:45 +0100 Subject: [PATCH 1/3] reduce compiler warnings for clang builds --- CMakeLists.txt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c3909dd..34c09f0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -72,9 +72,16 @@ if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") if ("${CMAKE_BUILD_TYPE}" STREQUAL "debug") ADD_DEFINITIONS(-g3 -O0 -Weverything) - ADD_DEFINITIONS(-Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-padded) + ADD_DEFINITIONS(-Wno-c++98-compat -Wno-shadow -Wno-c++98-compat-pedantic -Wno-padded) + ADD_DEFINITIONS(-Wno-exit-time-destructors -Wno-global-constructors) endif() + # Options required to reduce the noise of spdlog + ADD_DEFINITIONS(-Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-sign-conversion -Wno-padded -Wno-switch-enum) + ADD_DEFINITIONS(-Wno-old-style-cast -Wno-undef -Wno-documentation-unknown-command) + ADD_DEFINITIONS(-Wno-weak-vtables -Wno-global-constructors -Wno-exit-time-destructors -Wno-newline-eof) + ADD_DEFINITIONS(-Wno-missing-variable-declarations -Wno-double-promotion -Wno-extra-semi) + elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") # Using GCC if ("${CMAKE_BUILD_TYPE}" STREQUAL "release") From 97eb8aab736fe7746a3c9da0ca19c536e780c4fa Mon Sep 17 00:00:00 2001 From: Simon Pickartz Date: Thu, 26 Jan 2017 09:22:33 +0100 Subject: [PATCH 2/3] make local helper functions static --- src/mqtt_communicator.cpp | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/mqtt_communicator.cpp b/src/mqtt_communicator.cpp index 1595fc4..ad8aa42 100644 --- a/src/mqtt_communicator.cpp +++ b/src/mqtt_communicator.cpp @@ -22,11 +22,23 @@ FASTLIB_LOG_SET_LEVEL_GLOBAL(comm_log, trace); namespace fast { /// Helper function to make error codes human readable. -std::string mosq_err_string(const std::string &str, int code) +static std::string mosq_err_string(const std::string &str, int code) { return str + mosqpp::strerror(code); } +/// Helper function to convert a given topic into a regular expression +static std::regex topic_to_regex(const std::string &topic) +{ + // Replace "+" by "[^/]*" + auto regex_topic = std::regex_replace(topic, std::regex(R"((\+))"), R"([^/]*)"); + // Replace "#" by "[^/]*(?:/[^/]*)*$" + regex_topic = std::regex_replace(regex_topic, std::regex(R"((#))"), R"([^/]*(?:/[^/]*)*$)"); + return std::regex(regex_topic); +} + + + class MQTT_subscription { public: @@ -249,15 +261,6 @@ void MQTT_communicator::on_disconnect(int rc) } -std::regex topic_to_regex(const std::string &topic) -{ - // Replace "+" by "[^/]*" - auto regex_topic = std::regex_replace(topic, std::regex(R"((\+))"), R"([^/]*)"); - // Replace "#" by "[^/]*(?:/[^/]*)*$" - regex_topic = std::regex_replace(regex_topic, std::regex(R"((#))"), R"([^/]*(?:/[^/]*)*$)"); - return std::regex(regex_topic); -} - void MQTT_communicator::on_message(const mosquitto_message *msg) { FASTLIB_LOG(comm_log, trace) << "Callback: on_message with topic: " << msg->topic; From 3c503d693f2a3339c8e91be783eb007af4f973f9 Mon Sep 17 00:00:00 2001 From: Simon Pickartz Date: Thu, 26 Jan 2017 09:45:16 +0100 Subject: [PATCH 3/3] remove several compiler warnings in library code --- .../fast-lib/message/migfra/time_measurement.hpp | 2 ++ include/fast-lib/serializable.hpp | 1 + src/message/migfra/pci_id.cpp | 4 ++-- src/message/migfra/task.cpp | 16 ++++++++-------- src/message/migfra/time_measurement.cpp | 2 +- src/mqtt_communicator.cpp | 5 ++--- 6 files changed, 16 insertions(+), 14 deletions(-) diff --git a/include/fast-lib/message/migfra/time_measurement.hpp b/include/fast-lib/message/migfra/time_measurement.hpp index d90d881..3cec25b 100644 --- a/include/fast-lib/message/migfra/time_measurement.hpp +++ b/include/fast-lib/message/migfra/time_measurement.hpp @@ -51,6 +51,8 @@ class Time_measurement : { public: explicit Time_measurement(bool enable_time_measurement = false, std::string format = "", Timer::timepoint_type base_point = Timer::clock::now()); + Time_measurement(const Time_measurement &rhs) = default; + Time_measurement & operator=(const Time_measurement &rhs) = default; ~Time_measurement(); void tick(const std::string &timer_name); diff --git a/include/fast-lib/serializable.hpp b/include/fast-lib/serializable.hpp index 1622958..79f5ae9 100644 --- a/include/fast-lib/serializable.hpp +++ b/include/fast-lib/serializable.hpp @@ -24,6 +24,7 @@ namespace fast public: Serializable() = default; Serializable(const Serializable&) = default; + Serializable & operator=(const Serializable &rhs) = default; virtual ~Serializable() = default; virtual YAML::Node emit() const = 0; diff --git a/src/message/migfra/pci_id.cpp b/src/message/migfra/pci_id.cpp index 059ffff..a246614 100644 --- a/src/message/migfra/pci_id.cpp +++ b/src/message/migfra/pci_id.cpp @@ -63,8 +63,8 @@ YAML::Node PCI_id::emit() const void PCI_id::load(const YAML::Node &node) { - vendor = std::stoul(node["vendor"].as(), nullptr, 0); - device = std::stoul(node["device"].as(), nullptr, 0); + vendor = static_cast(std::stoul(node["vendor"].as(), nullptr, 0)); + device = static_cast(std::stoul(node["device"].as(), nullptr, 0)); } std::ostream & operator<<(std::ostream &os, const PCI_id &rhs) diff --git a/src/message/migfra/task.cpp b/src/message/migfra/task.cpp index 7d66bd9..7d8584e 100644 --- a/src/message/migfra/task.cpp +++ b/src/message/migfra/task.cpp @@ -122,49 +122,49 @@ YAML::Node Task_container::emit() const Task_container::no_task_exception::no_task_exception(const std::string &str) : std::runtime_error(str) {} -std::vector> load_start_task(const YAML::Node &node) +static std::vector> load_start_task(const YAML::Node &node) { std::vector> tasks; fast::load(tasks, node["vm-configurations"]); return std::vector>(tasks.begin(), tasks.end()); } -std::vector> load_stop_task(const YAML::Node &node) +static std::vector> load_stop_task(const YAML::Node &node) { std::vector> tasks; fast::load(tasks, node["list"]); return std::vector>(tasks.begin(), tasks.end()); } -std::vector> load_migrate_task(const YAML::Node &node) +static std::vector> load_migrate_task(const YAML::Node &node) { std::shared_ptr migrate_task; fast::load(migrate_task, node); return std::vector>(1, migrate_task); } -std::vector> load_repin_task(const YAML::Node &node) +static std::vector> load_repin_task(const YAML::Node &node) { std::shared_ptr repin_task; fast::load(repin_task, node); return std::vector>(1, repin_task); } -std::vector> load_suspend_task(const YAML::Node &node) +static std::vector> load_suspend_task(const YAML::Node &node) { std::vector> tasks; fast::load(tasks, node["list"]); return std::vector>(tasks.begin(), tasks.end()); } -std::vector> load_resume_task(const YAML::Node &node) +static std::vector> load_resume_task(const YAML::Node &node) { std::vector> tasks; fast::load(tasks, node["list"]); return std::vector>(tasks.begin(), tasks.end()); } -std::vector> load_quit_task(const YAML::Node &node) +static std::vector> load_quit_task(const YAML::Node &node) { std::shared_ptr quit_task; fast::load(quit_task, node); @@ -176,7 +176,7 @@ void Task_container::load(const YAML::Node &node) std::string type; try { fast::load(type, node["task"]); - } catch (const std::exception &e) { + } catch (const std::exception /*&e*/) { throw Task_container::no_task_exception("Cannot find key \"task\" to load Task from YAML."); } if (type == "start vm") { diff --git a/src/message/migfra/time_measurement.cpp b/src/message/migfra/time_measurement.cpp index f957aa8..b97e292 100644 --- a/src/message/migfra/time_measurement.cpp +++ b/src/message/migfra/time_measurement.cpp @@ -114,7 +114,7 @@ void Time_measurement::tock(const std::string &timer_name) if (enabled) { try { timers.at(timer_name).stop(); - } catch (const std::out_of_range &e) { + } catch (const std::out_of_range /*&e*/) { throw std::runtime_error("Timer with name \"" + timer_name + "\" not found. Search for a tock without preceding tick."); } } diff --git a/src/mqtt_communicator.cpp b/src/mqtt_communicator.cpp index ad8aa42..b62b790 100644 --- a/src/mqtt_communicator.cpp +++ b/src/mqtt_communicator.cpp @@ -297,7 +297,7 @@ void MQTT_communicator::send_message(const std::string &message, const std::stri // Use default topic if empty string is passed. auto &real_topic = topic == "" ? default_publish_topic : topic; // Publish message to topic. - int ret = publish(nullptr, real_topic.c_str(), message.size(), message.c_str(), qos, false); + int ret = publish(nullptr, real_topic.c_str(), static_cast(message.size()), message.c_str(), qos, false); if (ret != MOSQ_ERR_SUCCESS) throw std::runtime_error(mosq_err_string("Error sending message: ", ret)); FASTLIB_LOG(comm_log, trace) << "Message sent to topic " << real_topic << "."; @@ -328,10 +328,9 @@ std::string MQTT_communicator::get_message(const std::string &topic, const std:: auto &subscription = subscriptions.at(topic); lock.unlock(); return subscription->get_message(duration, actual_topic); - } catch (const std::out_of_range &e) { + } catch (const std::out_of_range /*&e*/) { throw std::out_of_range("Topic not found in subscriptions."); } - FASTLIB_LOG(comm_log, trace) << "Message got."; }