From 00ad25fd574c1724bbc974308aa5e88306969009 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@gmail.com>
Date: Thu, 1 Aug 2019 22:29:06 +0200
Subject: [PATCH] Fix build with gcc9
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Ported from [1]

[1] https://github.com/WeAreROLI/JUCE/commit/4e0adb2af8b424c43d22bd431011c9a6c57d36b6

Signed-off-by: Andreas Müller <schnitzeltony@gmail.com>
---
 .../juce_graphics/colour/juce_PixelFormats.h  | 33 +++-----------
 .../native/juce_RenderingHelpers.h            | 44 +------------------
 2 files changed, 8 insertions(+), 69 deletions(-)

diff --git a/libs/juce/source/modules/juce_graphics/colour/juce_PixelFormats.h b/libs/juce/source/modules/juce_graphics/colour/juce_PixelFormats.h
index cb0867cf..dea97a6b 100644
--- a/libs/juce/source/modules/juce_graphics/colour/juce_PixelFormats.h
+++ b/libs/juce/source/modules/juce_graphics/colour/juce_PixelFormats.h
@@ -105,22 +105,9 @@ class JUCE_API  PixelARGB
 
     //==============================================================================
     forcedinline uint8 getAlpha() const noexcept      { return components.a; }
-    forcedinline uint8 getRed() const noexcept        { return components.r; }
+    forcedinline uint8 getRed()   const noexcept      { return components.r; }
     forcedinline uint8 getGreen() const noexcept      { return components.g; }
-    forcedinline uint8 getBlue() const noexcept       { return components.b; }
-
-   #if JUCE_GCC
-    // NB these are here as a workaround because GCC refuses to bind to packed values.
-    forcedinline uint8& getAlpha() noexcept           { return comps [indexA]; }
-    forcedinline uint8& getRed() noexcept             { return comps [indexR]; }
-    forcedinline uint8& getGreen() noexcept           { return comps [indexG]; }
-    forcedinline uint8& getBlue() noexcept            { return comps [indexB]; }
-   #else
-    forcedinline uint8& getAlpha() noexcept           { return components.a; }
-    forcedinline uint8& getRed() noexcept             { return components.r; }
-    forcedinline uint8& getGreen() noexcept           { return components.g; }
-    forcedinline uint8& getBlue() noexcept            { return components.b; }
-   #endif
+    forcedinline uint8 getBlue()  const noexcept      { return components.b; }
 
     //==============================================================================
     /** Copies another pixel colour over this one.
@@ -340,9 +327,6 @@ class JUCE_API  PixelARGB
     {
         uint32 internal;
         Components components;
-       #if JUCE_GCC
-        uint8 comps[4];  // helper struct needed because gcc does not allow references to packed union members
-       #endif
     };
 }
 #ifndef DOXYGEN
@@ -425,13 +409,9 @@ class JUCE_API  PixelRGB
 
     //==============================================================================
     forcedinline uint8 getAlpha() const noexcept    { return 0xff; }
-    forcedinline uint8 getRed() const noexcept      { return r; }
+    forcedinline uint8 getRed()   const noexcept      { return r; }
     forcedinline uint8 getGreen() const noexcept    { return g; }
-    forcedinline uint8 getBlue() const noexcept     { return b; }
-
-    forcedinline uint8& getRed() noexcept           { return r; }
-    forcedinline uint8& getGreen() noexcept         { return g; }
-    forcedinline uint8& getBlue() noexcept          { return b; }
+    forcedinline uint8 getBlue()  const noexcept     { return b; }
 
     //==============================================================================
     /** Copies another pixel colour over this one.
@@ -646,11 +626,10 @@ class JUCE_API  PixelAlpha
 
     //==============================================================================
     forcedinline uint8 getAlpha() const noexcept    { return a; }
-    forcedinline uint8& getAlpha() noexcept         { return a; }
 
-    forcedinline uint8 getRed() const noexcept      { return 0; }
+    forcedinline uint8 getRed()   const noexcept    { return 0; }
     forcedinline uint8 getGreen() const noexcept    { return 0; }
-    forcedinline uint8 getBlue() const noexcept     { return 0; }
+    forcedinline uint8 getBlue()  const noexcept    { return 0; }
 
     //==============================================================================
     /** Copies another pixel colour over this one.
diff --git a/libs/juce/source/modules/juce_graphics/native/juce_RenderingHelpers.h b/libs/juce/source/modules/juce_graphics/native/juce_RenderingHelpers.h
index e552758b..6dd943fb 100644
--- a/libs/juce/source/modules/juce_graphics/native/juce_RenderingHelpers.h
+++ b/libs/juce/source/modules/juce_graphics/native/juce_RenderingHelpers.h
@@ -585,10 +585,6 @@ namespace EdgeTableFillers
             {
                 areRGBComponentsEqual = sourceColour.getRed() == sourceColour.getGreen()
                                             && sourceColour.getGreen() == sourceColour.getBlue();
-                filler[0].set (sourceColour);
-                filler[1].set (sourceColour);
-                filler[2].set (sourceColour);
-                filler[3].set (sourceColour);
             }
             else
             {
@@ -644,7 +640,6 @@ namespace EdgeTableFillers
         const Image::BitmapData& destData;
         PixelType* linePixels;
         PixelARGB sourceColour;
-        PixelRGB filler [4];
         bool areRGBComponentsEqual;
 
         forcedinline PixelType* getPixel (const int x) const noexcept
@@ -659,43 +654,8 @@ namespace EdgeTableFillers
 
         forcedinline void replaceLine (PixelRGB* dest, const PixelARGB colour, int width) const noexcept
         {
-            if (destData.pixelStride == sizeof (*dest))
-            {
-                if (areRGBComponentsEqual)  // if all the component values are the same, we can cheat..
-                {
-                    memset (dest, colour.getRed(), (size_t) width * 3);
-                }
-                else
-                {
-                    if (width >> 5)
-                    {
-                        const int* const intFiller = reinterpret_cast<const int*> (filler);
-
-                        while (width > 8 && (((pointer_sized_int) dest) & 7) != 0)
-                        {
-                            dest->set (colour);
-                            ++dest;
-                            --width;
-                        }
-
-                        while (width > 4)
-                        {
-                            int* d = reinterpret_cast<int*> (dest);
-                            *d++ = intFiller[0];
-                            *d++ = intFiller[1];
-                            *d++ = intFiller[2];
-                            dest = reinterpret_cast<PixelRGB*> (d);
-                            width -= 4;
-                        }
-                    }
-
-                    while (--width >= 0)
-                    {
-                        dest->set (colour);
-                        ++dest;
-                    }
-                }
-            }
+            if ((size_t) destData.pixelStride == sizeof (*dest) && areRGBComponentsEqual)
+                memset ((void*) dest, colour.getRed(), (size_t) width * 3);   // if all the component values are the same, we can cheat..
             else
             {
                 JUCE_PERFORM_PIXEL_OP_LOOP (set (colour))
