diff -ruN temp/JUCE-3.1.1/modules/juce_audio_devices/juce_audio_devices.cpp ./JUCE-3.1.1/modules/juce_audio_devices/juce_audio_devices.cpp
--- temp/JUCE-3.1.1/modules/juce_audio_devices/juce_audio_devices.cpp	2014-12-16 18:21:34.000000000 +0100
+++ ./JUCE-3.1.1/modules/juce_audio_devices/juce_audio_devices.cpp	2023-04-26 08:14:41.666152289 +0200
@@ -57,7 +57,7 @@
 //==============================================================================
 #elif JUCE_WINDOWS
  #if JUCE_WASAPI
-  #include <MMReg.h>
+  #include <mmreg.h>
  #endif
 
  #if JUCE_ASIO
diff -ruN temp/JUCE-3.1.1/modules/juce_core/native/juce_win32_ComSmartPtr.h ./JUCE-3.1.1/modules/juce_core/native/juce_win32_ComSmartPtr.h
--- temp/JUCE-3.1.1/modules/juce_core/native/juce_win32_ComSmartPtr.h	2014-12-16 18:21:34.000000000 +0100
+++ ./JUCE-3.1.1/modules/juce_core/native/juce_win32_ComSmartPtr.h	2023-04-26 10:03:37.984191907 +0200
@@ -29,8 +29,11 @@
 #ifndef JUCE_WIN32_COMSMARTPTR_H_INCLUDED
 #define JUCE_WIN32_COMSMARTPTR_H_INCLUDED
 
-#if ! (defined (_MSC_VER) || defined (__uuidof))
+#if ! (defined (_MSC_VER) || defined (__uuidof)) || JUCE_MINGW
 template<typename Type> struct UUIDGetter { static CLSID get() { jassertfalse; return CLSID(); } };
+#if defined (__uuidof)
+#undef __uuidof
+#endif
 #define __uuidof(x)  UUIDGetter<x>::get()
 #endif
 
diff -ruN temp/JUCE-3.1.1/modules/juce_graphics/colour/juce_PixelFormats.h ./JUCE-3.1.1/modules/juce_graphics/colour/juce_PixelFormats.h
--- temp/JUCE-3.1.1/modules/juce_graphics/colour/juce_PixelFormats.h	2014-12-16 18:21:34.000000000 +0100
+++ ./JUCE-3.1.1/modules/juce_graphics/colour/juce_PixelFormats.h	2023-04-21 14:46:27.766169460 +0200
@@ -86,19 +86,6 @@
     forcedinline uint8 getGreen() const noexcept    { return components.g; }
     forcedinline uint8 getBlue() const noexcept     { return components.b; }
 
-   #if JUCE_GCC && ! JUCE_CLANG
-    // 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
-
     /** Blends another pixel onto this one.
 
         This takes into account the opacity of the pixel being overlaid, and blends
