From 2211d73300bf39fe4566b1f6bd2efcbb08ea2b6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Sat, 26 Jan 2019 14:37:36 +0100 Subject: Workaround GCC 6 & 7 ICE on armv7hl Fixes #16100. --- modules/gdnative/gdnative/variant.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/modules/gdnative/gdnative/variant.cpp b/modules/gdnative/gdnative/variant.cpp index 491abbde9e..8f0d5a2db4 100644 --- a/modules/gdnative/gdnative/variant.cpp +++ b/modules/gdnative/gdnative/variant.cpp @@ -37,8 +37,22 @@ extern "C" { #endif +// Workaround GCC ICE on armv7hl which was affected GCC 6.0 up to 8.0 (GH-16100). +// It was fixed upstream in 8.1, and a fix was backported to 7.4. +// This can be removed once no supported distro ships with versions older than 7.4. +#if defined(__arm__) && defined(__GNUC__) && !defined(__clang__) && \ + (__GNUC__ == 6 || (__GNUC__ == 7 && __GNUC_MINOR__ < 4) || (__GNUC__ == 8 && __GNUC_MINOR__ < 1)) +#pragma GCC push_options +#pragma GCC optimize("-O0") +#endif + #define memnew_placement_custom(m_placement, m_class, m_constr) _post_initialize(new (m_placement, sizeof(m_class), "") m_constr) +#if defined(__arm__) && defined(__GNUC__) && !defined(__clang__) && \ + (__GNUC__ == 6 || (__GNUC__ == 7 && __GNUC_MINOR__ < 4) || (__GNUC__ == 8 && __GNUC_MINOR__ < 1)) +#pragma GCC pop_options +#endif + // Constructors godot_variant_type GDAPI godot_variant_get_type(const godot_variant *p_self) { -- cgit v1.2.3