summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2022-09-26 16:05:31 +0200
committerRémi Verschelde <rverschelde@gmail.com>2022-09-26 16:05:40 +0200
commitf8b0b17634362730d1cc8eddf5b41e73d75e4f82 (patch)
treefbff7c05e89e1bd59a75a01492732f5ddbd0d7a7
parentb9a64c77366361a0d45dcdd2b330911efd1eb3f4 (diff)
MethodBind: Silence GCC `-Wmaybe-uninitialized` caused by UBSAN
A priori this doesn't appear to be an actual bug, but a known consequence of using UBSAN. We silence this one to still have the possibility to get more warnings raised by UBSAN, in case they are useful. Works around and closes #66343.
-rw-r--r--core/object/method_bind.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/core/object/method_bind.h b/core/object/method_bind.h
index d60550c899..0d3e40f709 100644
--- a/core/object/method_bind.h
+++ b/core/object/method_bind.h
@@ -241,9 +241,17 @@ class MethodBindVarArgTR : public MethodBindVarArgBase<MethodBindVarArgTR<T, R>,
friend class MethodBindVarArgBase<MethodBindVarArgTR<T, R>, T, R, true>;
public:
+#if defined(SANITIZERS_ENABLED) && defined(__GNUC__) && !defined(__clang__)
+ // Workaround GH-66343 raised only with UBSAN, seems to be a false positive.
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
+#endif
virtual Variant call(Object *p_object, const Variant **p_args, int p_arg_count, Callable::CallError &r_error) override {
return (static_cast<T *>(p_object)->*MethodBindVarArgBase<MethodBindVarArgTR<T, R>, T, R, true>::method)(p_args, p_arg_count, r_error);
}
+#if defined(SANITIZERS_ENABLED) && defined(__GNUC__) && !defined(__clang__)
+#pragma GCC diagnostic pop
+#endif
MethodBindVarArgTR(
R (T::*p_method)(const Variant **, int, Callable::CallError &),