fixing the remaining of the pedantic gcc/clang target warnings
This commit is contained in:
		
							parent
							
								
									64873fb5b8
								
							
						
					
					
						commit
						da5b7833a0
					
				
					 8 changed files with 36 additions and 53 deletions
				
			
		| 
						 | 
				
			
			@ -28,6 +28,7 @@ SOFTWARE.
 | 
			
		|||
*/
 | 
			
		||||
 | 
			
		||||
#include "doctest_compatibility.h"
 | 
			
		||||
DOCTEST_GCC_SUPPRESS_WARNING("-Wfloat-equal")
 | 
			
		||||
 | 
			
		||||
#include <nlohmann/json.hpp>
 | 
			
		||||
using nlohmann::json;
 | 
			
		||||
| 
						 | 
				
			
			@ -876,9 +877,7 @@ TEST_CASE("CBOR")
 | 
			
		|||
                    {
 | 
			
		||||
                        json j = json::from_cbor(std::vector<uint8_t>({0xf9, 0x7c, 0x00}));
 | 
			
		||||
                        json::number_float_t d = j;
 | 
			
		||||
                        DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wfloat-equal")
 | 
			
		||||
                        CHECK(d == std::numeric_limits<json::number_float_t>::infinity());
 | 
			
		||||
                        DOCTEST_GCC_SUPPRESS_WARNING_POP
 | 
			
		||||
                        CHECK(j.dump() == "null");
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -897,9 +896,7 @@ TEST_CASE("CBOR")
 | 
			
		|||
                    {
 | 
			
		||||
                        json j = json::from_cbor(std::vector<uint8_t>({0xf9, 0x3c, 0x00}));
 | 
			
		||||
                        json::number_float_t d = j;
 | 
			
		||||
                        DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wfloat-equal")
 | 
			
		||||
                        CHECK(d == 1);
 | 
			
		||||
                        DOCTEST_GCC_SUPPRESS_WARNING_POP
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    SECTION("-2 (1 10000 0000000000)")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,6 +28,7 @@ SOFTWARE.
 | 
			
		|||
*/
 | 
			
		||||
 | 
			
		||||
#include "doctest_compatibility.h"
 | 
			
		||||
DOCTEST_GCC_SUPPRESS_WARNING("-Wfloat-equal")
 | 
			
		||||
 | 
			
		||||
#define private public
 | 
			
		||||
#include <nlohmann/json.hpp>
 | 
			
		||||
| 
						 | 
				
			
			@ -351,9 +352,7 @@ TEST_CASE("constructors")
 | 
			
		|||
            CHECK(jva.size() == va.size());
 | 
			
		||||
            for (size_t i = 0; i < jva.size(); ++i)
 | 
			
		||||
            {
 | 
			
		||||
                DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wfloat-equal")
 | 
			
		||||
                CHECK(va[i] == jva[i]);
 | 
			
		||||
                DOCTEST_GCC_SUPPRESS_WARNING_POP
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,7 +28,6 @@ SOFTWARE.
 | 
			
		|||
*/
 | 
			
		||||
 | 
			
		||||
#include "doctest_compatibility.h"
 | 
			
		||||
DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wsign-promo")
 | 
			
		||||
 | 
			
		||||
#define private public
 | 
			
		||||
#include <nlohmann/json.hpp>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,6 +28,7 @@ SOFTWARE.
 | 
			
		|||
*/
 | 
			
		||||
 | 
			
		||||
#include "doctest_compatibility.h"
 | 
			
		||||
DOCTEST_GCC_SUPPRESS_WARNING("-Wfloat-equal")
 | 
			
		||||
 | 
			
		||||
#include <nlohmann/json.hpp>
 | 
			
		||||
using nlohmann::json;
 | 
			
		||||
| 
						 | 
				
			
			@ -269,9 +270,7 @@ TEST_CASE("README" * doctest::skip())
 | 
			
		|||
            int i = 42;
 | 
			
		||||
            json jn = i;
 | 
			
		||||
            double f = jn;
 | 
			
		||||
            DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wfloat-equal")
 | 
			
		||||
            CHECK(f == 42);
 | 
			
		||||
            DOCTEST_GCC_SUPPRESS_WARNING_POP
 | 
			
		||||
 | 
			
		||||
            // etc.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,6 +28,7 @@ SOFTWARE.
 | 
			
		|||
*/
 | 
			
		||||
 | 
			
		||||
#include "doctest_compatibility.h"
 | 
			
		||||
DOCTEST_GCC_SUPPRESS_WARNING("-Wfloat-equal")
 | 
			
		||||
 | 
			
		||||
#include <nlohmann/json.hpp>
 | 
			
		||||
using nlohmann::json;
 | 
			
		||||
| 
						 | 
				
			
			@ -287,9 +288,7 @@ TEST_CASE("reference access")
 | 
			
		|||
        // check if references are returned correctly
 | 
			
		||||
        test_type& p1 = value.get_ref<test_type&>();
 | 
			
		||||
        CHECK(&p1 == value.get_ptr<test_type*>());
 | 
			
		||||
        DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wfloat-equal")
 | 
			
		||||
        CHECK(p1 == value.get<test_type>());
 | 
			
		||||
        DOCTEST_GCC_SUPPRESS_WARNING_POP
 | 
			
		||||
 | 
			
		||||
        const test_type& p2 = value.get_ref<const test_type&>();
 | 
			
		||||
        CHECK(&p2 == value.get_ptr<const test_type*>());
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,7 +28,7 @@ SOFTWARE.
 | 
			
		|||
*/
 | 
			
		||||
 | 
			
		||||
#include "doctest_compatibility.h"
 | 
			
		||||
DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wsign-promo")
 | 
			
		||||
DOCTEST_GCC_SUPPRESS_WARNING("-Wfloat-equal")
 | 
			
		||||
 | 
			
		||||
// for some reason including this after the json header leads to linker errors with VS 2017...
 | 
			
		||||
#include <locale>
 | 
			
		||||
| 
						 | 
				
			
			@ -315,9 +315,7 @@ TEST_CASE("regression tests")
 | 
			
		|||
        // unsigned integer parsing - expected to overflow and be stored as a float
 | 
			
		||||
        j = custom_json::parse("4294967296"); // 2^32
 | 
			
		||||
        CHECK(static_cast<int>(j.type()) == static_cast<int>(custom_json::value_t::number_float));
 | 
			
		||||
        DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wfloat-equal")
 | 
			
		||||
        CHECK(j.get<float>() == 4294967296.0f);
 | 
			
		||||
        DOCTEST_GCC_SUPPRESS_WARNING_POP
 | 
			
		||||
 | 
			
		||||
        // integer object creation - expected to wrap and still be stored as an integer
 | 
			
		||||
        j = -2147483649LL; // -2^31-1
 | 
			
		||||
| 
						 | 
				
			
			@ -482,9 +480,7 @@ TEST_CASE("regression tests")
 | 
			
		|||
        json j;
 | 
			
		||||
 | 
			
		||||
        j = json::parse("-0.0");
 | 
			
		||||
        DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wfloat-equal")
 | 
			
		||||
        CHECK(j.get<double>() == -0.0);
 | 
			
		||||
        DOCTEST_GCC_SUPPRESS_WARNING_POP
 | 
			
		||||
 | 
			
		||||
        j = json::parse("2.22507385850720113605740979670913197593481954635164564e-308");
 | 
			
		||||
        CHECK(j.get<double>() == 2.2250738585072009e-308);
 | 
			
		||||
| 
						 | 
				
			
			@ -522,9 +518,7 @@ TEST_CASE("regression tests")
 | 
			
		|||
        // long double
 | 
			
		||||
        nlohmann::basic_json<std::map, std::vector, std::string, bool, int64_t, uint64_t, long double>
 | 
			
		||||
        j_long_double = 1.23e45L;
 | 
			
		||||
        DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wfloat-equal")
 | 
			
		||||
        CHECK(j_long_double.get<long double>() == 1.23e45L);
 | 
			
		||||
        DOCTEST_GCC_SUPPRESS_WARNING_POP
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    SECTION("issue #228 - double values are serialized with commas as decimal points")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										42
									
								
								test/thirdparty/doctest/doctest.h
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										42
									
								
								test/thirdparty/doctest/doctest.h
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -161,6 +161,7 @@ DOCTEST_GCC_SUPPRESS_WARNING("-Winline")
 | 
			
		|||
DOCTEST_GCC_SUPPRESS_WARNING("-Wunused-local-typedefs")
 | 
			
		||||
DOCTEST_GCC_SUPPRESS_WARNING("-Wuseless-cast")
 | 
			
		||||
DOCTEST_GCC_SUPPRESS_WARNING("-Wnoexcept")
 | 
			
		||||
DOCTEST_GCC_SUPPRESS_WARNING("-Wsign-promo")
 | 
			
		||||
 | 
			
		||||
DOCTEST_MSVC_SUPPRESS_WARNING_PUSH
 | 
			
		||||
DOCTEST_MSVC_SUPPRESS_WARNING(4616) // invalid compiler warning
 | 
			
		||||
| 
						 | 
				
			
			@ -994,6 +995,10 @@ namespace detail {
 | 
			
		|||
    };
 | 
			
		||||
 | 
			
		||||
    DOCTEST_INTERFACE bool checkIfShouldThrow(assertType::Enum at);
 | 
			
		||||
    
 | 
			
		||||
#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS
 | 
			
		||||
    [[noreturn]]
 | 
			
		||||
#endif // DOCTEST_CONFIG_NO_EXCEPTIONS
 | 
			
		||||
    DOCTEST_INTERFACE void throwException();
 | 
			
		||||
 | 
			
		||||
    struct DOCTEST_INTERFACE Subcase
 | 
			
		||||
| 
						 | 
				
			
			@ -1598,7 +1603,7 @@ namespace detail {
 | 
			
		|||
 | 
			
		||||
        DOCTEST_DELETE_COPIES(ContextScope);
 | 
			
		||||
 | 
			
		||||
        ~ContextScope();
 | 
			
		||||
        ~ContextScope() override;
 | 
			
		||||
 | 
			
		||||
        void stringify(std::ostream* s) const override;
 | 
			
		||||
    };
 | 
			
		||||
| 
						 | 
				
			
			@ -1839,6 +1844,15 @@ int registerReporter(const char* name, int priority) {
 | 
			
		|||
    } catch(...) { _DOCTEST_RB.translateException(); }
 | 
			
		||||
#endif // DOCTEST_CONFIG_NO_TRY_CATCH_IN_ASSERTS
 | 
			
		||||
 | 
			
		||||
#ifdef DOCTEST_CONFIG_VOID_CAST_EXPRESSIONS
 | 
			
		||||
#define DOCTEST_CAST_TO_VOID(x)                                                                    \
 | 
			
		||||
    DOCTEST_GCC_SUPPRESS_WARNING_WITH_PUSH("-Wuseless-cast")                                       \
 | 
			
		||||
    static_cast<void>(x);                                                                          \
 | 
			
		||||
    DOCTEST_GCC_SUPPRESS_WARNING_POP
 | 
			
		||||
#else // DOCTEST_CONFIG_VOID_CAST_EXPRESSIONS
 | 
			
		||||
#define DOCTEST_CAST_TO_VOID(x) x;
 | 
			
		||||
#endif // DOCTEST_CONFIG_VOID_CAST_EXPRESSIONS
 | 
			
		||||
 | 
			
		||||
// registers the test by initializing a dummy var with a function
 | 
			
		||||
#define DOCTEST_REGISTER_FUNCTION(global_prefix, f, decorators)                                    \
 | 
			
		||||
    global_prefix DOCTEST_GLOBAL_NO_WARNINGS(DOCTEST_ANONYMOUS(_DOCTEST_ANON_VAR_)) =              \
 | 
			
		||||
| 
						 | 
				
			
			@ -2108,15 +2122,13 @@ constexpr T to_lvalue = x;
 | 
			
		|||
#define DOCTEST_REQUIRE_FALSE_MESSAGE(cond, msg) do { DOCTEST_INFO(msg); DOCTEST_ASSERT_IMPLEMENT_2(DT_REQUIRE_FALSE, cond); } while((void)0, 0)
 | 
			
		||||
// clang-format on
 | 
			
		||||
 | 
			
		||||
#define DOCTEST_ASSERT_THROWS(expr, assert_type) DOCTEST_ASSERT_THROWS_WITH(expr, assert_type, "")
 | 
			
		||||
 | 
			
		||||
#define DOCTEST_ASSERT_THROWS_AS(expr, assert_type, ...)                                           \
 | 
			
		||||
    do {                                                                                           \
 | 
			
		||||
        if(!doctest::getContextOptions()->no_throw) {                                              \
 | 
			
		||||
            doctest::detail::ResultBuilder _DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \
 | 
			
		||||
                                                       __LINE__, #expr, #__VA_ARGS__);             \
 | 
			
		||||
            try {                                                                                  \
 | 
			
		||||
                expr;                                                                              \
 | 
			
		||||
                DOCTEST_CAST_TO_VOID(expr)                                                         \
 | 
			
		||||
            } catch(const doctest::detail::remove_const<                                           \
 | 
			
		||||
                    doctest::detail::remove_reference<__VA_ARGS__>::type>::type&) {                \
 | 
			
		||||
                _DOCTEST_RB.translateException();                                                  \
 | 
			
		||||
| 
						 | 
				
			
			@ -2132,7 +2144,7 @@ constexpr T to_lvalue = x;
 | 
			
		|||
            doctest::detail::ResultBuilder _DOCTEST_RB(doctest::assertType::assert_type, __FILE__, \
 | 
			
		||||
                                                       __LINE__, #expr, __VA_ARGS__);              \
 | 
			
		||||
            try {                                                                                  \
 | 
			
		||||
                expr;                                                                              \
 | 
			
		||||
                DOCTEST_CAST_TO_VOID(expr)                                                         \
 | 
			
		||||
            } catch(...) { _DOCTEST_RB.translateException(); }                                     \
 | 
			
		||||
            DOCTEST_ASSERT_LOG_AND_REACT(_DOCTEST_RB);                                             \
 | 
			
		||||
        }                                                                                          \
 | 
			
		||||
| 
						 | 
				
			
			@ -2143,15 +2155,15 @@ constexpr T to_lvalue = x;
 | 
			
		|||
        doctest::detail::ResultBuilder _DOCTEST_RB(doctest::assertType::assert_type, __FILE__,     \
 | 
			
		||||
                                                   __LINE__, #expr);                               \
 | 
			
		||||
        try {                                                                                      \
 | 
			
		||||
            expr;                                                                                  \
 | 
			
		||||
            DOCTEST_CAST_TO_VOID(expr)                                                             \
 | 
			
		||||
        } catch(...) { _DOCTEST_RB.translateException(); }                                         \
 | 
			
		||||
        DOCTEST_ASSERT_LOG_AND_REACT(_DOCTEST_RB);                                                 \
 | 
			
		||||
    } while((void)0, 0)
 | 
			
		||||
 | 
			
		||||
// clang-format off
 | 
			
		||||
#define DOCTEST_WARN_THROWS(expr) DOCTEST_ASSERT_THROWS(expr, DT_WARN_THROWS)
 | 
			
		||||
#define DOCTEST_CHECK_THROWS(expr) DOCTEST_ASSERT_THROWS(expr, DT_CHECK_THROWS)
 | 
			
		||||
#define DOCTEST_REQUIRE_THROWS(expr) DOCTEST_ASSERT_THROWS(expr, DT_REQUIRE_THROWS)
 | 
			
		||||
#define DOCTEST_WARN_THROWS(expr) DOCTEST_ASSERT_THROWS_WITH(expr, DT_WARN_THROWS, "")
 | 
			
		||||
#define DOCTEST_CHECK_THROWS(expr) DOCTEST_ASSERT_THROWS_WITH(expr, DT_CHECK_THROWS, "")
 | 
			
		||||
#define DOCTEST_REQUIRE_THROWS(expr) DOCTEST_ASSERT_THROWS_WITH(expr, DT_REQUIRE_THROWS, "")
 | 
			
		||||
 | 
			
		||||
#define DOCTEST_WARN_THROWS_AS(expr, ...) DOCTEST_ASSERT_THROWS_AS(expr, DT_WARN_THROWS_AS, __VA_ARGS__)
 | 
			
		||||
#define DOCTEST_CHECK_THROWS_AS(expr, ...) DOCTEST_ASSERT_THROWS_AS(expr, DT_CHECK_THROWS_AS, __VA_ARGS__)
 | 
			
		||||
| 
						 | 
				
			
			@ -3504,11 +3516,11 @@ namespace detail {
 | 
			
		|||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void throwException() {
 | 
			
		||||
#ifndef DOCTEST_CONFIG_NO_EXCEPTIONS
 | 
			
		||||
        throw TestFailureException();
 | 
			
		||||
    [[noreturn]] void throwException() { throw TestFailureException(); }
 | 
			
		||||
#else // DOCTEST_CONFIG_NO_EXCEPTIONS
 | 
			
		||||
    void throwException() {}
 | 
			
		||||
#endif // DOCTEST_CONFIG_NO_EXCEPTIONS
 | 
			
		||||
    }
 | 
			
		||||
} // namespace detail
 | 
			
		||||
 | 
			
		||||
namespace {
 | 
			
		||||
| 
						 | 
				
			
			@ -4868,12 +4880,16 @@ namespace {
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        void test_case_exception(const TestCaseException& e) override {
 | 
			
		||||
            std::lock_guard<std::mutex> lock(mutex);
 | 
			
		||||
 | 
			
		||||
            xml.scopedElement("Exception")
 | 
			
		||||
                    .writeAttribute("crash", e.is_crash)
 | 
			
		||||
                    .writeText(e.error_string.c_str());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        void subcase_start(const SubcaseSignature& in) override {
 | 
			
		||||
            std::lock_guard<std::mutex> lock(mutex);
 | 
			
		||||
 | 
			
		||||
            xml.startElement("SubCase")
 | 
			
		||||
                    .writeAttribute("name", in.m_name)
 | 
			
		||||
                    .writeAttribute("filename", skipPathFromFilename(in.m_file))
 | 
			
		||||
| 
						 | 
				
			
			@ -5319,11 +5335,13 @@ namespace {
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        void subcase_start(const SubcaseSignature& subc) override {
 | 
			
		||||
            std::lock_guard<std::mutex> lock(mutex);
 | 
			
		||||
            subcasesStack.push_back(subc);
 | 
			
		||||
            hasLoggedCurrentTestStart = false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        void subcase_end() override {
 | 
			
		||||
            std::lock_guard<std::mutex> lock(mutex);
 | 
			
		||||
            subcasesStack.pop_back();
 | 
			
		||||
            hasLoggedCurrentTestStart = false;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										24
									
								
								test/thirdparty/doctest/doctest_compatibility.h
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										24
									
								
								test/thirdparty/doctest/doctest_compatibility.h
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,6 +1,7 @@
 | 
			
		|||
#ifndef DOCTEST_COMPATIBILITY
 | 
			
		||||
#define DOCTEST_COMPATIBILITY
 | 
			
		||||
 | 
			
		||||
#define DOCTEST_CONFIG_VOID_CAST_EXPRESSIONS
 | 
			
		||||
#define DOCTEST_THREAD_LOCAL // enable single-threaded builds on XCode 6/7 - https://github.com/onqtam/doctest/issues/172
 | 
			
		||||
#include "doctest.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -25,29 +26,6 @@
 | 
			
		|||
#define CHECK_THROWS_WITH_STD_STR(expr, str)                                   \
 | 
			
		||||
    CHECK_THROWS_WITH_STD_STR_IMPL(expr, str, DOCTEST_ANONYMOUS(DOCTEST_STD_STRING_))
 | 
			
		||||
 | 
			
		||||
#undef CHECK_THROWS
 | 
			
		||||
#undef CHECK_THROWS_AS
 | 
			
		||||
#undef CHECK_THROWS_WITH
 | 
			
		||||
#undef CHECK_NOTHROW
 | 
			
		||||
 | 
			
		||||
#undef REQUIRE_THROWS
 | 
			
		||||
#undef REQUIRE_THROWS_AS
 | 
			
		||||
#undef REQUIRE_THROWS_WITH
 | 
			
		||||
#undef REQUIRE_NOTHROW
 | 
			
		||||
 | 
			
		||||
// doctest allows multiple statements in these macros (even blocks of code) but json
 | 
			
		||||
// tests rely on passing single function/constructor calls which have a [[nodiscard]]
 | 
			
		||||
// attribute so here we static_cast to void - just like Catch does
 | 
			
		||||
#define CHECK_THROWS(expr) DOCTEST_CHECK_THROWS(static_cast<void>(expr))
 | 
			
		||||
#define CHECK_THROWS_AS(expr, e) DOCTEST_CHECK_THROWS_AS(static_cast<void>(expr), e)
 | 
			
		||||
#define CHECK_THROWS_WITH(expr, e) DOCTEST_CHECK_THROWS_WITH(static_cast<void>(expr), e)
 | 
			
		||||
#define CHECK_NOTHROW(expr) DOCTEST_CHECK_NOTHROW(static_cast<void>(expr))
 | 
			
		||||
 | 
			
		||||
#define REQUIRE_THROWS(expr) DOCTEST_REQUIRE_THROWS(static_cast<void>(expr))
 | 
			
		||||
#define REQUIRE_THROWS_AS(expr, e) DOCTEST_REQUIRE_THROWS_AS(static_cast<void>(expr), e)
 | 
			
		||||
#define REQUIRE_THROWS_WITH(expr, e) DOCTEST_REQUIRE_THROWS_WITH(static_cast<void>(expr), e)
 | 
			
		||||
#define REQUIRE_NOTHROW(expr) DOCTEST_REQUIRE_NOTHROW(static_cast<void>(expr))
 | 
			
		||||
 | 
			
		||||
// included here because for some tests in the json repository private is defined as
 | 
			
		||||
// public and if no STL header is included before that then in the json include when STL
 | 
			
		||||
// stuff is included the MSVC STL complains (errors) that C++ keywords are being redefined
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue