diff --git a/0001-BaseTools-LzmaCompress-eliminate-_maxMode-and-bogus-.patch b/0001-BaseTools-LzmaCompress-eliminate-_maxMode-and-bogus-.patch
new file mode 100644
index 0000000..fdace7c
--- /dev/null
+++ b/0001-BaseTools-LzmaCompress-eliminate-_maxMode-and-bogus-.patch
@@ -0,0 +1,137 @@
+From eb58c41d497a229f4412d9afd212978943d12c0e Mon Sep 17 00:00:00 2001
+From: Laszlo Ersek <lersek@redhat.com>
+Date: Sun, 14 Feb 2016 08:17:16 +0100
+Subject: [PATCH] BaseTools: LzmaCompress: eliminate _maxMode and bogus
+ indentation
+
+The "_maxMode" variable doesn't exist in edk2's variant of LzmaCompress,
+but the way one of the old uses of the variable is commented out (i.e.,
+together with the enclosing "if" statement) triggers the
+"misleading-indentation" warning that is new in gcc-6.0, for the block of
+code that originally depended on the "if" statement. Gcc believes
+(mistakenly) that the programmer believes (mistakenly) that the block
+depends on (repIndex == 0) higher up.
+
+Remove the commented out uses of "_maxMode", and unindent the block in
+question.
+
+This patch is best viewed with "git show -b".
+
+Cc: Cole Robinson <crobinso@redhat.com>
+Cc: Yonghong Zhu <yonghong.zhu@intel.com>
+Cc: Liming Gao <liming.gao@intel.com>
+Reported-by: Cole Robinson <crobinso@redhat.com>
+Contributed-under: TianoCore Contribution Agreement 1.0
+Signed-off-by: Laszlo Ersek <lersek@redhat.com>
+---
+ BaseTools/Source/C/LzmaCompress/Sdk/C/LzmaEnc.c | 81 ++++++++++----------
+ 1 file changed, 40 insertions(+), 41 deletions(-)
+
+diff --git a/BaseTools/Source/C/LzmaCompress/Sdk/C/LzmaEnc.c b/BaseTools/Source/C/LzmaCompress/Sdk/C/LzmaEnc.c
+index 9b2dd16ffa48..1eb9898b5291 100644
+--- a/BaseTools/Source/C/LzmaCompress/Sdk/C/LzmaEnc.c
++++ b/BaseTools/Source/C/LzmaCompress/Sdk/C/LzmaEnc.c
+@@ -1367,52 +1367,51 @@ static UInt32 GetOptimum(CLzmaEnc *p, UInt32 position, UInt32 *backRes)
+       if (repIndex == 0)
+         startLen = lenTest + 1;
+         
+-      /* if (_maxMode) */
++      {
++        UInt32 lenTest2 = lenTest + 1;
++        UInt32 limit = lenTest2 + p->numFastBytes;
++        UInt32 nextRepMatchPrice;
++        if (limit > numAvailFull)
++          limit = numAvailFull;
++        for (; lenTest2 < limit && data[lenTest2] == data2[lenTest2]; lenTest2++);
++        lenTest2 -= lenTest + 1;
++        if (lenTest2 >= 2)
+         {
+-          UInt32 lenTest2 = lenTest + 1;
+-          UInt32 limit = lenTest2 + p->numFastBytes;
+-          UInt32 nextRepMatchPrice;
+-          if (limit > numAvailFull)
+-            limit = numAvailFull;
+-          for (; lenTest2 < limit && data[lenTest2] == data2[lenTest2]; lenTest2++);
+-          lenTest2 -= lenTest + 1;
+-          if (lenTest2 >= 2)
++          UInt32 state2 = kRepNextStates[state];
++          UInt32 posStateNext = (position + lenTest) & p->pbMask;
++          UInt32 curAndLenCharPrice =
++              price + p->repLenEnc.prices[posState][lenTest - 2] +
++              GET_PRICE_0(p->isMatch[state2][posStateNext]) +
++              LitEnc_GetPriceMatched(LIT_PROBS(position + lenTest, data[lenTest - 1]),
++                  data[lenTest], data2[lenTest], p->ProbPrices);
++          state2 = kLiteralNextStates[state2];
++          posStateNext = (position + lenTest + 1) & p->pbMask;
++          nextRepMatchPrice = curAndLenCharPrice +
++              GET_PRICE_1(p->isMatch[state2][posStateNext]) +
++              GET_PRICE_1(p->isRep[state2]);
++
++          /* for (; lenTest2 >= 2; lenTest2--) */
+           {
+-            UInt32 state2 = kRepNextStates[state];
+-            UInt32 posStateNext = (position + lenTest) & p->pbMask;
+-            UInt32 curAndLenCharPrice =
+-                price + p->repLenEnc.prices[posState][lenTest - 2] +
+-                GET_PRICE_0(p->isMatch[state2][posStateNext]) +
+-                LitEnc_GetPriceMatched(LIT_PROBS(position + lenTest, data[lenTest - 1]),
+-                    data[lenTest], data2[lenTest], p->ProbPrices);
+-            state2 = kLiteralNextStates[state2];
+-            posStateNext = (position + lenTest + 1) & p->pbMask;
+-            nextRepMatchPrice = curAndLenCharPrice +
+-                GET_PRICE_1(p->isMatch[state2][posStateNext]) +
+-                GET_PRICE_1(p->isRep[state2]);
+-            
+-            /* for (; lenTest2 >= 2; lenTest2--) */
++            UInt32 curAndLenPrice;
++            COptimal *opt;
++            UInt32 offset = cur + lenTest + 1 + lenTest2;
++            while (lenEnd < offset)
++              p->opt[++lenEnd].price = kInfinityPrice;
++            curAndLenPrice = nextRepMatchPrice + GetRepPrice(p, 0, lenTest2, state2, posStateNext);
++            opt = &p->opt[offset];
++            if (curAndLenPrice < opt->price)
+             {
+-              UInt32 curAndLenPrice;
+-              COptimal *opt;
+-              UInt32 offset = cur + lenTest + 1 + lenTest2;
+-              while (lenEnd < offset)
+-                p->opt[++lenEnd].price = kInfinityPrice;
+-              curAndLenPrice = nextRepMatchPrice + GetRepPrice(p, 0, lenTest2, state2, posStateNext);
+-              opt = &p->opt[offset];
+-              if (curAndLenPrice < opt->price)
+-              {
+-                opt->price = curAndLenPrice;
+-                opt->posPrev = cur + lenTest + 1;
+-                opt->backPrev = 0;
+-                opt->prev1IsChar = True;
+-                opt->prev2 = True;
+-                opt->posPrev2 = cur;
+-                opt->backPrev2 = repIndex;
+-              }
++              opt->price = curAndLenPrice;
++              opt->posPrev = cur + lenTest + 1;
++              opt->backPrev = 0;
++              opt->prev1IsChar = True;
++              opt->prev2 = True;
++              opt->posPrev2 = cur;
++              opt->backPrev2 = repIndex;
+             }
+           }
+         }
++      }
+     }
+     }
+     /* for (UInt32 lenTest = 2; lenTest <= newLen; lenTest++) */
+@@ -1456,7 +1455,7 @@ static UInt32 GetOptimum(CLzmaEnc *p, UInt32 position, UInt32 *backRes)
+           opt->prev1IsChar = False;
+         }
+ 
+-        if (/*_maxMode && */lenTest == matches[offs])
++        if (lenTest == matches[offs])
+         {
+           /* Try Match + Literal + Rep0 */
+           const Byte *data2 = data - (curBack + 1);
+-- 
+1.8.3.1
+
diff --git a/edk2.spec b/edk2.spec
index 3123357..c1bbe98 100644
--- a/edk2.spec
+++ b/edk2.spec
@@ -15,6 +15,7 @@ Summary:        EFI Development Kit II
 # tar -cv edk2-buildtools-r${SVNREV} | xz -6 > edk2-buildtools-r${SVNREV}.tar.xz
 Source0:        edk2-buildtools-r%{SVNREV}.tar.xz
 Patch1:         basetools-arm.patch
+Patch2:         0001-BaseTools-LzmaCompress-eliminate-_maxMode-and-bogus-.patch
 
 License:        BSD
 Group:          Applications/Emulators
@@ -65,6 +66,8 @@ build EFI executables and ROMs using the GNU tools.
 %prep
 %setup -q -n edk2-buildtools-r%{SVNREV}
 %patch1 -p1
+%patch2 -p2
+
 
 %build
 export WORKSPACE=`pwd`
@@ -189,10 +192,13 @@ done
 %doc UserManuals/VolInfo_Utility_Man_Page.rtf
 
 %changelog
+* Mon Feb 15 2016 Cole Robinson <crobinso@redhat.com> 20151127svn18975-3
+- Fix FTBFS gcc warning (bz 1307439)
+
 * Wed Feb 03 2016 Fedora Release Engineering <releng@fedoraproject.org> - 20151127svn18975-2
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
 
-* Tue Nov 27 2015 Paolo Bonzini <pbonzini@redhat.com> - 20151127svn18975-1
+* Fri Nov 27 2015 Paolo Bonzini <pbonzini@redhat.com> - 20151127svn18975-1
 - Rebase to 20151127svn18975-1
 - Linker script renamed to GccBase.lds