0
0
mirror of https://github.com/OpenVPN/openvpn3.git synced 2024-09-20 04:02:15 +02:00

Disable dangling warnings for json helper

This is though to be a bug in the GCC compiler.
Ignore these warnings on GCC 12/13 to avoid breaking
Werror.

Signed-off-by: Arne Schwabe <arne@openvpn.net>
This commit is contained in:
Arne Schwabe 2023-05-10 16:01:44 +02:00
parent b7bc687396
commit 71e94d9e8f

View File

@ -44,6 +44,20 @@ namespace json {
OPENVPN_EXCEPTION(json_parse);
/* Workaround warnings in gcc 12/13, see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109642 */
#if !defined(__clang__) && defined(__GNUC__) && __GNUC__ == 13
#define DISABLE_DANGLING_WARNINGS() \
_Pragma("GCC diagnostic push") \
_Pragma("GCC diagnostic ignored \"-Wdangling-reference\"")
#define REENABLE_DANGLING_WARNINGS() \
_Pragma("GCC diagnostic pop")
#else
#define DISABLE_DANGLING_WARNINGS()
#define REENABLE_DANGLING_WARNINGS()
#endif
template <typename TITLE>
inline Json::Value parse(const std::string &str, const TITLE &title)
{
@ -91,6 +105,7 @@ inline Json::Value parse_from_buffer(const BUFFER &buf, const TITLE &title)
}
#ifdef OPENVPN_JSON_INTERNAL
DISABLE_DANGLING_WARNINGS()
template <typename NAME, typename TITLE>
inline const Json::Value &cast(const Json::ValueType target_type,
const Json::Value &value,
@ -108,6 +123,7 @@ inline const Json::Value &cast(const Json::ValueType target_type,
throw json_parse(Json::Value::type_string(target_type) + " cast " + fmt_name(name, title) + " is of incorrect type (" + value.type_string() + ')');
return value;
}
REENABLE_DANGLING_WARNINGS()
template <typename NAME>
inline const Json::Value &cast(const Json::ValueType target_type,
@ -626,6 +642,7 @@ inline int get_bool_tristate(const Json::Value &root,
return -1;
}
DISABLE_DANGLING_WARNINGS()
template <typename NAME, typename TITLE>
inline const Json::Value &get_dict(const Json::Value &root,
const NAME &name,
@ -643,6 +660,7 @@ inline const Json::Value &get_dict(const Json::Value &root,
throw json_parse("dictionary " + fmt_name(name, title) + " is of incorrect type");
return value;
}
REENABLE_DANGLING_WARNINGS()
template <typename NAME>
inline const Json::Value &get_dict(const Json::Value &root,
@ -670,6 +688,7 @@ inline Json::Value get_dict(Json::Value &&root,
return get_dict(std::move(root), name, optional, nullptr);
}
DISABLE_DANGLING_WARNINGS()
template <typename TITLE>
inline const Json::Value &cast_dict(const Json::Value &value,
const bool optional,
@ -685,6 +704,7 @@ inline const Json::Value &cast_dict(const Json::Value &value,
throw json_parse("dictionary cast " + fmt_name_cast(title) + " is of incorrect type");
return value;
}
REENABLE_DANGLING_WARNINGS()
inline const Json::Value &cast_dict(const Json::Value &value,
const bool optional)
@ -708,6 +728,7 @@ inline Json::Value cast_dict(Json::Value &&value,
return cast_dict(std::move(value), optional, nullptr);
}
DISABLE_DANGLING_WARNINGS()
template <typename NAME, typename TITLE>
inline const Json::Value &get_array(const Json::Value &root,
const NAME &name,
@ -725,6 +746,7 @@ inline const Json::Value &get_array(const Json::Value &root,
throw json_parse("array " + fmt_name(name, title) + " is of incorrect type");
return value;
}
REENABLE_DANGLING_WARNINGS()
template <typename NAME>
inline const Json::Value &get_array(const Json::Value &root,
@ -752,6 +774,7 @@ inline Json::Value get_array(Json::Value &&root,
return get_array(std::move(root), name, optional, nullptr);
}
DISABLE_DANGLING_WARNINGS()
template <typename TITLE>
inline const Json::Value &cast_array(const Json::Value &value,
const bool optional,
@ -767,6 +790,7 @@ inline const Json::Value &cast_array(const Json::Value &value,
throw json_parse("array cast " + fmt_name_cast(title) + " is of incorrect type");
return value;
}
REENABLE_DANGLING_WARNINGS()
inline const Json::Value &cast_array(const Json::Value &value,
const bool optional)