--- /dev/null
+From cb611a80bd5a36d31bfc31212ebbf79aa86c6f08 Mon Sep 17 00:00:00 2001
+From: jikstra <jikstra@disroot.org>
+Date: Tue, 20 Aug 2019 03:00:51 +0200
+Subject: [PATCH] Backport
+ https://github.com/WeAreROLI/JUCE/commit/4e0adb2af8b424c43d22bd431011c9a6c57d36b6
+ to the bundled JUCE framework to make helm compile on gcc 9.1 again
+
+---
+ .../juce_graphics/colour/juce_PixelFormats.h | 25 +---------
+ .../native/juce_RenderingHelpers.h | 48 +------------------
+ 2 files changed, 4 insertions(+), 69 deletions(-)
+
+diff --git a/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h b/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h
+index 9be9ba09c..3535eab80 100644
+--- a/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h
++++ b/JUCE/modules/juce_graphics/colour/juce_PixelFormats.h
+@@ -105,23 +105,9 @@ class JUCE_API PixelARGB
+ \r
+ //==============================================================================\r
+ forcedinline uint8 getAlpha() const noexcept { return components.a; }\r
+- forcedinline uint8 getRed() const noexcept { return components.r; }\r
++ forcedinline uint8 getRed() const noexcept { return components.r; }\r
+ forcedinline uint8 getGreen() const noexcept { return components.g; }\r
+- forcedinline uint8 getBlue() const noexcept { return components.b; }\r
+-\r
+- #if JUCE_GCC\r
+- // NB these are here as a workaround because GCC refuses to bind to packed values.\r
+- forcedinline uint8& getAlpha() noexcept { return comps [indexA]; }\r
+- forcedinline uint8& getRed() noexcept { return comps [indexR]; }\r
+- forcedinline uint8& getGreen() noexcept { return comps [indexG]; }\r
+- forcedinline uint8& getBlue() noexcept { return comps [indexB]; }\r
+- #else\r
+- forcedinline uint8& getAlpha() noexcept { return components.a; }\r
+- forcedinline uint8& getRed() noexcept { return components.r; }\r
+- forcedinline uint8& getGreen() noexcept { return components.g; }\r
+- forcedinline uint8& getBlue() noexcept { return components.b; }\r
+- #endif\r
+-\r
++ forcedinline uint8 getBlue() const noexcept { return components.b; }\r
+ //==============================================================================\r
+ /** Copies another pixel colour over this one.\r
+ \r
+@@ -340,9 +326,6 @@ class JUCE_API PixelARGB
+ {\r
+ uint32 internal;\r
+ Components components;\r
+- #if JUCE_GCC\r
+- uint8 comps[4]; // helper struct needed because gcc does not allow references to packed union members\r
+- #endif\r
+ };\r
+ }\r
+ #ifndef DOXYGEN\r
+@@ -429,10 +412,6 @@ class JUCE_API PixelRGB
+ forcedinline uint8 getGreen() const noexcept { return g; }\r
+ forcedinline uint8 getBlue() const noexcept { return b; }\r
+ \r
+- forcedinline uint8& getRed() noexcept { return r; }\r
+- forcedinline uint8& getGreen() noexcept { return g; }\r
+- forcedinline uint8& getBlue() noexcept { return b; }\r
+-\r
+ //==============================================================================\r
+ /** Copies another pixel colour over this one.\r
+ \r
+diff --git a/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h b/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h
+index 1c4cd31ef..29519cb5a 100644
+--- a/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h
++++ b/JUCE/modules/juce_graphics/native/juce_RenderingHelpers.h
+@@ -581,18 +581,10 @@ namespace EdgeTableFillers
+ : destData (image), sourceColour (colour)\r
+ {\r
+ if (sizeof (PixelType) == 3 && destData.pixelStride == sizeof (PixelType))\r
+- {\r
+ areRGBComponentsEqual = sourceColour.getRed() == sourceColour.getGreen()\r
+ && sourceColour.getGreen() == sourceColour.getBlue();\r
+- filler[0].set (sourceColour);\r
+- filler[1].set (sourceColour);\r
+- filler[2].set (sourceColour);\r
+- filler[3].set (sourceColour);\r
+- }\r
+ else\r
+- {\r
+ areRGBComponentsEqual = false;\r
+- }\r
+ }\r
+ \r
+ forcedinline void setEdgeTableYPos (const int y) noexcept\r
+@@ -643,7 +635,6 @@ namespace EdgeTableFillers
+ const Image::BitmapData& destData;\r
+ PixelType* linePixels;\r
+ PixelARGB sourceColour;\r
+- PixelRGB filler [4];\r
+ bool areRGBComponentsEqual;\r
+ \r
+ forcedinline PixelType* getPixel (const int x) const noexcept\r
+@@ -658,43 +649,8 @@ namespace EdgeTableFillers
+ \r
+ forcedinline void replaceLine (PixelRGB* dest, const PixelARGB colour, int width) const noexcept\r
+ {\r
+- if (destData.pixelStride == sizeof (*dest))\r
+- {\r
+- if (areRGBComponentsEqual) // if all the component values are the same, we can cheat..\r
+- {\r
+- memset (dest, colour.getRed(), (size_t) width * 3);\r
+- }\r
+- else\r
+- {\r
+- if (width >> 5)\r
+- {\r
+- const int* const intFiller = reinterpret_cast<const int*> (filler);\r
+-\r
+- while (width > 8 && (((pointer_sized_int) dest) & 7) != 0)\r
+- {\r
+- dest->set (colour);\r
+- ++dest;\r
+- --width;\r
+- }\r
+-\r
+- while (width > 4)\r
+- {\r
+- int* d = reinterpret_cast<int*> (dest);\r
+- *d++ = intFiller[0];\r
+- *d++ = intFiller[1];\r
+- *d++ = intFiller[2];\r
+- dest = reinterpret_cast<PixelRGB*> (d);\r
+- width -= 4;\r
+- }\r
+- }\r
+-\r
+- while (--width >= 0)\r
+- {\r
+- dest->set (colour);\r
+- ++dest;\r
+- }\r
+- }\r
+- }\r
++ if ((size_t) destData.pixelStride == sizeof (*dest) && areRGBComponentsEqual)\r
++ memset ((void*) dest, colour.getRed(), (size_t) width * 3); // if all the component values are the same, we can cheat..\r
+ else\r
+ {\r
+ JUCE_PERFORM_PIXEL_OP_LOOP (set (colour))\r