From 274fe52bbf817ef9d35638effb4de08454acfc6d Mon Sep 17 00:00:00 2001 From: rsgowman Date: Fri, 9 Feb 2018 12:15:21 -0500 Subject: cmake build fixes (#770) * Fix nanopb (in cmake build) Look for binaries in the src dir (since that's where we build now.) This error would be masked if a previous build had completed prior to switching nanopb to build out of src. Also, don't patch the protoc path multiple times. This could be triggered by (eg) 'make && make clean && make'. * Add resource_path.{h,cc} to the cmake build * Fix signed/unsigned int comparison warnings * Ensure FieldValue tag_ is initialized during cp/mv ctor. Otherwise, the assignment operator attempts to deallocate based on the (uninitialized) tag_ variable, posssibly leading to segfaults. * Fix tests that throw exceptions. The (previous) tests checked to ensure that an abort() occurs, but if ABSL_HAVE_EXCEPTIONS is defined on non-macos (which is currently the default) then the assertions will throw a std::logic_error rather than abort()ing. On macos, an exception is thrown too, but the exception doesn't derrive from std::exception, so ASSERT_DEATH_* doesn't catch it (hence why ASSERT_DEATH_* actually works.) To resolve this, I've switched to ASSERT_ANY_THROW. --- Firestore/core/src/firebase/firestore/model/CMakeLists.txt | 2 ++ Firestore/core/src/firebase/firestore/model/base_path.h | 2 +- Firestore/core/src/firebase/firestore/model/field_path.cc | 4 ++-- Firestore/core/src/firebase/firestore/model/field_path.h | 2 +- Firestore/core/src/firebase/firestore/model/field_value.h | 4 ++-- Firestore/core/src/firebase/firestore/model/resource_path.cc | 1 + Firestore/core/src/firebase/firestore/model/resource_path.h | 5 +++-- 7 files changed, 12 insertions(+), 8 deletions(-) (limited to 'Firestore/core/src/firebase/firestore/model') diff --git a/Firestore/core/src/firebase/firestore/model/CMakeLists.txt b/Firestore/core/src/firebase/firestore/model/CMakeLists.txt index 8bdbe18..df602f9 100644 --- a/Firestore/core/src/firebase/firestore/model/CMakeLists.txt +++ b/Firestore/core/src/firebase/firestore/model/CMakeLists.txt @@ -22,6 +22,8 @@ cc_library( field_path.h field_value.cc field_value.h + resource_path.cc + resource_path.h timestamp.cc timestamp.h DEPENDS diff --git a/Firestore/core/src/firebase/firestore/model/base_path.h b/Firestore/core/src/firebase/firestore/model/base_path.h index f5a8ab7..accce27 100644 --- a/Firestore/core/src/firebase/firestore/model/base_path.h +++ b/Firestore/core/src/firebase/firestore/model/base_path.h @@ -166,7 +166,7 @@ class BasePath { } BasePath(std::initializer_list list) : segments_{list} { } - BasePath(SegmentsT&& segments) : segments_{std::move(segments)} { + explicit BasePath(SegmentsT&& segments) : segments_{std::move(segments)} { } private: diff --git a/Firestore/core/src/firebase/firestore/model/field_path.cc b/Firestore/core/src/firebase/firestore/model/field_path.cc index 6c40600..0da2319 100644 --- a/Firestore/core/src/firebase/firestore/model/field_path.cc +++ b/Firestore/core/src/firebase/firestore/model/field_path.cc @@ -51,7 +51,7 @@ bool IsValidIdentifier(const std::string& segment) { (first < 'A' || first > 'Z')) { return false; } - for (int i = 1; i != segment.size(); ++i) { + for (size_t i = 1; i != segment.size(); ++i) { const unsigned char c = segment[i]; if (c != '_' && (c < 'a' || c > 'z') && (c < 'A' || c > 'Z') && (c < '0' || c > '9')) { @@ -93,7 +93,7 @@ FieldPath FieldPath::FromServerFormat(const absl::string_view path) { // Inside backticks, dots are treated literally. bool inside_backticks = false; - int i = 0; + size_t i = 0; while (i < path.size()) { const char c = path[i]; // std::string (and string_view) may contain embedded nulls. For full diff --git a/Firestore/core/src/firebase/firestore/model/field_path.h b/Firestore/core/src/firebase/firestore/model/field_path.h index 00b658a..ba6e2bd 100644 --- a/Firestore/core/src/firebase/firestore/model/field_path.h +++ b/Firestore/core/src/firebase/firestore/model/field_path.h @@ -82,7 +82,7 @@ class FieldPath : public impl::BasePath { } private: - FieldPath(SegmentsT&& segments) : BasePath{std::move(segments)} { + explicit FieldPath(SegmentsT&& segments) : BasePath{std::move(segments)} { } // So that methods of base can construct FieldPath using the private diff --git a/Firestore/core/src/firebase/firestore/model/field_value.h b/Firestore/core/src/firebase/firestore/model/field_value.h index 4cd0b3d..d43b23f 100644 --- a/Firestore/core/src/firebase/firestore/model/field_value.h +++ b/Firestore/core/src/firebase/firestore/model/field_value.h @@ -69,7 +69,7 @@ class FieldValue { // position instead, see the doc comment above. }; - FieldValue() : tag_(Type::Null) { + FieldValue() { } // Do not inline these ctor/dtor below, which contain call to non-trivial @@ -123,7 +123,7 @@ class FieldValue { */ void SwitchTo(const Type type); - Type tag_; + Type tag_ = Type::Null; union { // There is no null type as tag_ alone is enough for Null FieldValue. bool boolean_value_; diff --git a/Firestore/core/src/firebase/firestore/model/resource_path.cc b/Firestore/core/src/firebase/firestore/model/resource_path.cc index 36218e9..a4f921f 100644 --- a/Firestore/core/src/firebase/firestore/model/resource_path.cc +++ b/Firestore/core/src/firebase/firestore/model/resource_path.cc @@ -18,6 +18,7 @@ #include #include +#include #include "Firestore/core/src/firebase/firestore/util/firebase_assert.h" #include "absl/strings/str_join.h" diff --git a/Firestore/core/src/firebase/firestore/model/resource_path.h b/Firestore/core/src/firebase/firestore/model/resource_path.h index 481d32f..b0853c6 100644 --- a/Firestore/core/src/firebase/firestore/model/resource_path.h +++ b/Firestore/core/src/firebase/firestore/model/resource_path.h @@ -19,6 +19,7 @@ #include #include +#include #include "Firestore/core/src/firebase/firestore/model/base_path.h" #include "absl/strings/string_view.h" @@ -69,7 +70,7 @@ class ResourcePath : public impl::BasePath { } private: - ResourcePath(SegmentsT&& segments) : BasePath{std::move(segments)} { + explicit ResourcePath(SegmentsT&& segments) : BasePath{std::move(segments)} { } // So that methods of base can construct ResourcePath using the private @@ -81,4 +82,4 @@ class ResourcePath : public impl::BasePath { } // namespace firestore } // namespace firebase -#endif +#endif // FIRESTORE_CORE_SRC_FIREBASE_FIRESTORE_MODEL_RESOURCE_PATH_H_ -- cgit v1.2.3