diff --git a/build/build-clang/clang-11-android.json b/build/build-clang/clang-11-android.json index 71d7172dc111..ff284f1212ec 100644 --- a/build/build-clang/clang-11-android.json +++ b/build/build-clang/clang-11-android.json @@ -50,7 +50,6 @@ "static-llvm-symbolizer.patch", "find_symbolizer_linux_clang_10.patch", "rename_gcov_flush_clang_11.patch", - "stack-clash-fix-probing.patch", "revert-r362047-and-r362065.patch" ] } diff --git a/build/build-clang/clang-11-linux64.json b/build/build-clang/clang-11-linux64.json index ed66999a95e3..4e8f1f009800 100644 --- a/build/build-clang/clang-11-linux64.json +++ b/build/build-clang/clang-11-linux64.json @@ -19,7 +19,6 @@ "unpoison-thread-stacks_clang_10.patch", "downgrade-mangling-error.patch", "llvmorg-12-init-10926-gb79e990f401-LTO-new-pass-manager.patch", - "stack-clash-fix-probing.patch", "loosen-msvc-detection.patch" ] } diff --git a/build/build-clang/clang-format-11.patch b/build/build-clang/clang-format-11.patch deleted file mode 100644 index 8c8fba5659da..000000000000 --- a/build/build-clang/clang-format-11.patch +++ /dev/null @@ -1,154 +0,0 @@ -From b9e789447f14c0330edd22c82746af29e7c3b259 Mon Sep 17 00:00:00 2001 -From: Sylvestre Ledru -Date: Sat, 17 Oct 2020 19:51:05 +0200 -Subject: [PATCH] Revert "[clang-format] Fix AlignConsecutive on PP blocks" - -This reverts commit b2eb439317576ce718193763c12bff9fccdfc166. - -Caused the regression: -https://bugs.llvm.org/show_bug.cgi?id=47589 - -Reviewed By: MyDeveloperDay - -Differential Revision: https://reviews.llvm.org/D89464 ---- - clang/lib/Format/FormatToken.h | 6 ----- - clang/lib/Format/UnwrappedLineParser.cpp | 2 -- - clang/lib/Format/WhitespaceManager.cpp | 10 +++----- - clang/unittests/Format/FormatTest.cpp | 23 ------------------- - clang/unittests/Format/FormatTestComments.cpp | 21 ----------------- - 5 files changed, 3 insertions(+), 59 deletions(-) - -diff --git a/clang/lib/Format/FormatToken.h b/clang/lib/Format/FormatToken.h -index d4287f53fde..b132a3e84da 100644 ---- a/clang/lib/Format/FormatToken.h -+++ b/clang/lib/Format/FormatToken.h -@@ -183,12 +183,6 @@ struct FormatToken { - /// before the token. - bool MustBreakBefore = false; - -- /// Whether to not align across this token -- /// -- /// This happens for example when a preprocessor directive ended directly -- /// before the token, but very rarely otherwise. -- bool MustBreakAlignBefore = false; -- - /// The raw text of the token. - /// - /// Contains the raw token text without leading whitespace and without leading -diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp -index a37386425aa..ea8a41cfba8 100644 ---- a/clang/lib/Format/UnwrappedLineParser.cpp -+++ b/clang/lib/Format/UnwrappedLineParser.cpp -@@ -3037,7 +3037,6 @@ void UnwrappedLineParser::readToken(int LevelDifference) { - } - FormatTok = Tokens->getNextToken(); - FormatTok->MustBreakBefore = true; -- FormatTok->MustBreakAlignBefore = true; - } - - if (!PPStack.empty() && (PPStack.back().Kind == PP_Unreachable) && -@@ -3062,7 +3061,6 @@ void UnwrappedLineParser::pushToken(FormatToken *Tok) { - Line->Tokens.push_back(UnwrappedLineNode(Tok)); - if (MustBreakBeforeNextToken) { - Line->Tokens.back().Tok->MustBreakBefore = true; -- Line->Tokens.back().Tok->MustBreakAlignBefore = true; - MustBreakBeforeNextToken = false; - } - } -diff --git a/clang/lib/Format/WhitespaceManager.cpp b/clang/lib/Format/WhitespaceManager.cpp -index 32e0b685ea0..3a265bd0916 100644 ---- a/clang/lib/Format/WhitespaceManager.cpp -+++ b/clang/lib/Format/WhitespaceManager.cpp -@@ -411,11 +411,9 @@ static unsigned AlignTokens(const FormatStyle &Style, F &&Matches, - if (Changes[i].NewlinesBefore != 0) { - CommasBeforeMatch = 0; - EndOfSequence = i; -- // If there is a blank line, there is a forced-align-break (eg, -- // preprocessor), or if the last line didn't contain any matching token, -- // the sequence ends here. -- if (Changes[i].NewlinesBefore > 1 || -- Changes[i].Tok->MustBreakAlignBefore || !FoundMatchOnLine) -+ // If there is a blank line, or if the last line didn't contain any -+ // matching token, the sequence ends here. -+ if (Changes[i].NewlinesBefore > 1 || !FoundMatchOnLine) - AlignCurrentSequence(); - - FoundMatchOnLine = false; -@@ -726,8 +724,6 @@ void WhitespaceManager::alignTrailingComments() { - if (Changes[i].StartOfBlockComment) - continue; - Newlines += Changes[i].NewlinesBefore; -- if (Changes[i].Tok->MustBreakAlignBefore) -- BreakBeforeNext = true; - if (!Changes[i].IsTrailingComment) - continue; - -diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp -index 17d302f0b65..7e4d1fca509 100644 ---- a/clang/unittests/Format/FormatTest.cpp -+++ b/clang/unittests/Format/FormatTest.cpp -@@ -11968,29 +11968,6 @@ TEST_F(FormatTest, AlignConsecutiveAssignments) { - verifyFormat("int oneTwoThree = 123; // comment\n" - "int oneTwo = 12; // comment", - Alignment); -- -- // Bug 25167 -- verifyFormat("#if A\n" -- "#else\n" -- "int aaaaaaaa = 12;\n" -- "#endif\n" -- "#if B\n" -- "#else\n" -- "int a = 12;\n" -- "#endif\n", -- Alignment); -- verifyFormat("enum foo {\n" -- "#if A\n" -- "#else\n" -- " aaaaaaaa = 12;\n" -- "#endif\n" -- "#if B\n" -- "#else\n" -- " a = 12;\n" -- "#endif\n" -- "};\n", -- Alignment); -- - EXPECT_EQ("int a = 5;\n" - "\n" - "int oneTwoThree = 123;", -diff --git a/clang/unittests/Format/FormatTestComments.cpp b/clang/unittests/Format/FormatTestComments.cpp -index 47509f29744..d5b9f8e0885 100644 ---- a/clang/unittests/Format/FormatTestComments.cpp -+++ b/clang/unittests/Format/FormatTestComments.cpp -@@ -2780,27 +2780,6 @@ TEST_F(FormatTestComments, AlignTrailingComments) { - " // line 2 about b\n" - " long b;", - getLLVMStyleWithColumns(80))); -- -- // Checks an edge case in preprocessor handling. -- // These comments should *not* be aligned -- EXPECT_EQ( -- "#if FOO\n" -- "#else\n" -- "long a; // Line about a\n" -- "#endif\n" -- "#if BAR\n" -- "#else\n" -- "long b_long_name; // Line about b\n" -- "#endif\n", -- format("#if FOO\n" -- "#else\n" -- "long a; // Line about a\n" // Previous (bad) behavior -- "#endif\n" -- "#if BAR\n" -- "#else\n" -- "long b_long_name; // Line about b\n" -- "#endif\n", -- getLLVMStyleWithColumns(80))); - } - - TEST_F(FormatTestComments, AlignsBlockCommentDecorations) { --- -2.28.0 diff --git a/build/build-clang/clang-tidy-linux64.json b/build/build-clang/clang-tidy-linux64.json index d9eda595cb4d..dd5d85db2571 100644 --- a/build/build-clang/clang-tidy-linux64.json +++ b/build/build-clang/clang-tidy-linux64.json @@ -11,7 +11,6 @@ "as": "{MOZ_FETCHES_DIR}/gcc/bin/gcc", "patches": [ "clang-tidy-ci.patch", - "clang-tidy-no-errors.patch", - "clang-format-11.patch" + "clang-tidy-no-errors.patch" ] } diff --git a/build/build-clang/clang-tidy-macosx64.json b/build/build-clang/clang-tidy-macosx64.json index b496bbda6124..1295b9e4a9aa 100644 --- a/build/build-clang/clang-tidy-macosx64.json +++ b/build/build-clang/clang-tidy-macosx64.json @@ -18,7 +18,6 @@ "clang-tidy-ci.patch", "clang-tidy-no-errors.patch", "compiler-rt-cross-compile.patch", - "compiler-rt-no-codesign.patch", - "clang-format-11.patch" + "compiler-rt-no-codesign.patch" ] } diff --git a/build/build-clang/clang-tidy-win64.json b/build/build-clang/clang-tidy-win64.json index 2d0c180ebcc9..3cf7038e98c1 100644 --- a/build/build-clang/clang-tidy-win64.json +++ b/build/build-clang/clang-tidy-win64.json @@ -10,7 +10,6 @@ "ml": "ml64.exe", "patches": [ "clang-tidy-ci.patch", - "clang-tidy-no-errors.patch", - "clang-format-11.patch" + "clang-tidy-no-errors.patch" ] } diff --git a/build/build-clang/stack-clash-fix-probing.patch b/build/build-clang/stack-clash-fix-probing.patch deleted file mode 100644 index c1e5361c6e15..000000000000 --- a/build/build-clang/stack-clash-fix-probing.patch +++ /dev/null @@ -1,753 +0,0 @@ -From a1e0363c7402f7aa58e24e0e6dfa447ebabc1910 Mon Sep 17 00:00:00 2001 -From: serge-sans-paille -Date: Wed, 30 Sep 2020 11:35:00 +0200 -Subject: [PATCH] Fix limit behavior of dynamic alloca - -When the allocation size is 0, we shouldn't probe. Within [1, PAGE_SIZE], we -should probe once etc. - -This fixes https://bugs.llvm.org/show_bug.cgi?id=47657 - -Differential Revision: https://reviews.llvm.org/D88548 - -(cherry picked from commit 9573c9f2a363da71b2c07a3add4e52721e6028a0) - -Also contains the patches: -https://github.com/llvm/llvm-project/commit/aac36687f7978f33751daf2870b5c812124ebfaf -https://github.com/llvm/llvm-project/commit/bbe6cbbed8c7460a7e8477373b9250543362e771 - - -These 3 patches have been merged in the 11 branch -and should be part of the 11.0.1 release -Index: llvm-toolchain-11-11.0.0/llvm/lib/Target/X86/X86FrameLowering.cpp -=================================================================== ---- llvm-toolchain-11-11.0.0.orig/llvm/lib/Target/X86/X86FrameLowering.cpp -+++ llvm-toolchain-11-11.0.0/llvm/lib/Target/X86/X86FrameLowering.cpp -@@ -586,29 +586,55 @@ void X86FrameLowering::emitStackProbeInl - const uint64_t StackProbeSize = TLI.getStackProbeSize(MF); - uint64_t ProbeChunk = StackProbeSize * 8; - -+ uint64_t MaxAlign = -+ TRI->needsStackRealignment(MF) ? calculateMaxStackAlign(MF) : 0; -+ - // Synthesize a loop or unroll it, depending on the number of iterations. -+ // BuildStackAlignAND ensures that only MaxAlign % StackProbeSize bits left -+ // between the unaligned rsp and current rsp - if (Offset > ProbeChunk) { -- emitStackProbeInlineGenericLoop(MF, MBB, MBBI, DL, Offset); -+ emitStackProbeInlineGenericLoop(MF, MBB, MBBI, DL, Offset, -+ MaxAlign % StackProbeSize); - } else { -- emitStackProbeInlineGenericBlock(MF, MBB, MBBI, DL, Offset); -+ emitStackProbeInlineGenericBlock(MF, MBB, MBBI, DL, Offset, -+ MaxAlign % StackProbeSize); - } - } - - void X86FrameLowering::emitStackProbeInlineGenericBlock( - MachineFunction &MF, MachineBasicBlock &MBB, -- MachineBasicBlock::iterator MBBI, const DebugLoc &DL, -- uint64_t Offset) const { -+ MachineBasicBlock::iterator MBBI, const DebugLoc &DL, uint64_t Offset, -+ uint64_t AlignOffset) const { - - const X86Subtarget &STI = MF.getSubtarget(); - const X86TargetLowering &TLI = *STI.getTargetLowering(); - const unsigned Opc = getSUBriOpcode(Uses64BitFramePtr, Offset); - const unsigned MovMIOpc = Is64Bit ? X86::MOV64mi32 : X86::MOV32mi; - const uint64_t StackProbeSize = TLI.getStackProbeSize(MF); -+ - uint64_t CurrentOffset = 0; -- // 0 Thanks to return address being saved on the stack -- uint64_t CurrentProbeOffset = 0; - -- // For the first N - 1 pages, just probe. I tried to take advantage of -+ assert(AlignOffset < StackProbeSize); -+ -+ // If the offset is so small it fits within a page, there's nothing to do. -+ if (StackProbeSize < Offset + AlignOffset) { -+ -+ MachineInstr *MI = BuildMI(MBB, MBBI, DL, TII.get(Opc), StackPtr) -+ .addReg(StackPtr) -+ .addImm(StackProbeSize - AlignOffset) -+ .setMIFlag(MachineInstr::FrameSetup); -+ MI->getOperand(3).setIsDead(); // The EFLAGS implicit def is dead. -+ -+ addRegOffset(BuildMI(MBB, MBBI, DL, TII.get(MovMIOpc)) -+ .setMIFlag(MachineInstr::FrameSetup), -+ StackPtr, false, 0) -+ .addImm(0) -+ .setMIFlag(MachineInstr::FrameSetup); -+ NumFrameExtraProbe++; -+ CurrentOffset = StackProbeSize - AlignOffset; -+ } -+ -+ // For the next N - 1 pages, just probe. I tried to take advantage of - // natural probes but it implies much more logic and there was very few - // interesting natural probes to interleave. - while (CurrentOffset + StackProbeSize < Offset) { -@@ -626,9 +652,9 @@ void X86FrameLowering::emitStackProbeInl - .setMIFlag(MachineInstr::FrameSetup); - NumFrameExtraProbe++; - CurrentOffset += StackProbeSize; -- CurrentProbeOffset += StackProbeSize; - } - -+ // No need to probe the tail, it is smaller than a Page. - uint64_t ChunkSize = Offset - CurrentOffset; - MachineInstr *MI = BuildMI(MBB, MBBI, DL, TII.get(Opc), StackPtr) - .addReg(StackPtr) -@@ -639,8 +665,8 @@ void X86FrameLowering::emitStackProbeInl - - void X86FrameLowering::emitStackProbeInlineGenericLoop( - MachineFunction &MF, MachineBasicBlock &MBB, -- MachineBasicBlock::iterator MBBI, const DebugLoc &DL, -- uint64_t Offset) const { -+ MachineBasicBlock::iterator MBBI, const DebugLoc &DL, uint64_t Offset, -+ uint64_t AlignOffset) const { - assert(Offset && "null offset"); - - const X86Subtarget &STI = MF.getSubtarget(); -@@ -648,6 +674,26 @@ void X86FrameLowering::emitStackProbeInl - const unsigned MovMIOpc = Is64Bit ? X86::MOV64mi32 : X86::MOV32mi; - const uint64_t StackProbeSize = TLI.getStackProbeSize(MF); - -+ if (AlignOffset) { -+ if (AlignOffset < StackProbeSize) { -+ // Perform a first smaller allocation followed by a probe. -+ const unsigned SUBOpc = getSUBriOpcode(Uses64BitFramePtr, AlignOffset); -+ MachineInstr *MI = BuildMI(MBB, MBBI, DL, TII.get(SUBOpc), StackPtr) -+ .addReg(StackPtr) -+ .addImm(AlignOffset) -+ .setMIFlag(MachineInstr::FrameSetup); -+ MI->getOperand(3).setIsDead(); // The EFLAGS implicit def is dead. -+ -+ addRegOffset(BuildMI(MBB, MBBI, DL, TII.get(MovMIOpc)) -+ .setMIFlag(MachineInstr::FrameSetup), -+ StackPtr, false, 0) -+ .addImm(0) -+ .setMIFlag(MachineInstr::FrameSetup); -+ NumFrameExtraProbe++; -+ Offset -= AlignOffset; -+ } -+ } -+ - // Synthesize a loop - NumFrameLoopProbe++; - const BasicBlock *LLVM_BB = MBB.getBasicBlock(); -@@ -666,8 +712,8 @@ void X86FrameLowering::emitStackProbeInl - - // save loop bound - { -- const unsigned Opc = getSUBriOpcode(Uses64BitFramePtr, Offset); -- BuildMI(MBB, MBBI, DL, TII.get(Opc), FinalStackProbed) -+ const unsigned SUBOpc = getSUBriOpcode(Uses64BitFramePtr, Offset); -+ BuildMI(MBB, MBBI, DL, TII.get(SUBOpc), FinalStackProbed) - .addReg(FinalStackProbed) - .addImm(Offset / StackProbeSize * StackProbeSize) - .setMIFlag(MachineInstr::FrameSetup); -@@ -675,8 +721,8 @@ void X86FrameLowering::emitStackProbeInl - - // allocate a page - { -- const unsigned Opc = getSUBriOpcode(Uses64BitFramePtr, StackProbeSize); -- BuildMI(testMBB, DL, TII.get(Opc), StackPtr) -+ const unsigned SUBOpc = getSUBriOpcode(Uses64BitFramePtr, StackProbeSize); -+ BuildMI(testMBB, DL, TII.get(SUBOpc), StackPtr) - .addReg(StackPtr) - .addImm(StackProbeSize) - .setMIFlag(MachineInstr::FrameSetup); -@@ -1052,13 +1098,149 @@ void X86FrameLowering::BuildStackAlignAN - uint64_t MaxAlign) const { - uint64_t Val = -MaxAlign; - unsigned AndOp = getANDriOpcode(Uses64BitFramePtr, Val); -- MachineInstr *MI = BuildMI(MBB, MBBI, DL, TII.get(AndOp), Reg) -- .addReg(Reg) -- .addImm(Val) -- .setMIFlag(MachineInstr::FrameSetup); - -- // The EFLAGS implicit def is dead. -- MI->getOperand(3).setIsDead(); -+ MachineFunction &MF = *MBB.getParent(); -+ const X86Subtarget &STI = MF.getSubtarget(); -+ const X86TargetLowering &TLI = *STI.getTargetLowering(); -+ const uint64_t StackProbeSize = TLI.getStackProbeSize(MF); -+ const bool EmitInlineStackProbe = TLI.hasInlineStackProbe(MF); -+ -+ // We want to make sure that (in worst case) less than StackProbeSize bytes -+ // are not probed after the AND. This assumption is used in -+ // emitStackProbeInlineGeneric. -+ if (Reg == StackPtr && EmitInlineStackProbe && MaxAlign >= StackProbeSize) { -+ { -+ NumFrameLoopProbe++; -+ MachineBasicBlock *entryMBB = -+ MF.CreateMachineBasicBlock(MBB.getBasicBlock()); -+ MachineBasicBlock *headMBB = -+ MF.CreateMachineBasicBlock(MBB.getBasicBlock()); -+ MachineBasicBlock *bodyMBB = -+ MF.CreateMachineBasicBlock(MBB.getBasicBlock()); -+ MachineBasicBlock *footMBB = -+ MF.CreateMachineBasicBlock(MBB.getBasicBlock()); -+ -+ MachineFunction::iterator MBBIter = MBB.getIterator(); -+ MF.insert(MBBIter, entryMBB); -+ MF.insert(MBBIter, headMBB); -+ MF.insert(MBBIter, bodyMBB); -+ MF.insert(MBBIter, footMBB); -+ const unsigned MovMIOpc = Is64Bit ? X86::MOV64mi32 : X86::MOV32mi; -+ Register FinalStackProbed = Uses64BitFramePtr ? X86::R11 : X86::R11D; -+ -+ // Setup entry block -+ { -+ -+ entryMBB->splice(entryMBB->end(), &MBB, MBB.begin(), MBBI); -+ BuildMI(entryMBB, DL, TII.get(TargetOpcode::COPY), FinalStackProbed) -+ .addReg(StackPtr) -+ .setMIFlag(MachineInstr::FrameSetup); -+ MachineInstr *MI = -+ BuildMI(entryMBB, DL, TII.get(AndOp), FinalStackProbed) -+ .addReg(FinalStackProbed) -+ .addImm(Val) -+ .setMIFlag(MachineInstr::FrameSetup); -+ -+ // The EFLAGS implicit def is dead. -+ MI->getOperand(3).setIsDead(); -+ -+ BuildMI(entryMBB, DL, -+ TII.get(Uses64BitFramePtr ? X86::CMP64rr : X86::CMP32rr)) -+ .addReg(FinalStackProbed) -+ .addReg(StackPtr) -+ .setMIFlag(MachineInstr::FrameSetup); -+ BuildMI(entryMBB, DL, TII.get(X86::JCC_1)) -+ .addMBB(&MBB) -+ .addImm(X86::COND_E) -+ .setMIFlag(MachineInstr::FrameSetup); -+ entryMBB->addSuccessor(headMBB); -+ entryMBB->addSuccessor(&MBB); -+ } -+ -+ // Loop entry block -+ -+ { -+ const unsigned SUBOpc = -+ getSUBriOpcode(Uses64BitFramePtr, StackProbeSize); -+ BuildMI(headMBB, DL, TII.get(SUBOpc), StackPtr) -+ .addReg(StackPtr) -+ .addImm(StackProbeSize) -+ .setMIFlag(MachineInstr::FrameSetup); -+ -+ BuildMI(headMBB, DL, -+ TII.get(Uses64BitFramePtr ? X86::CMP64rr : X86::CMP32rr)) -+ .addReg(FinalStackProbed) -+ .addReg(StackPtr) -+ .setMIFlag(MachineInstr::FrameSetup); -+ -+ // jump -+ BuildMI(headMBB, DL, TII.get(X86::JCC_1)) -+ .addMBB(footMBB) -+ .addImm(X86::COND_B) -+ .setMIFlag(MachineInstr::FrameSetup); -+ -+ headMBB->addSuccessor(bodyMBB); -+ headMBB->addSuccessor(footMBB); -+ } -+ -+ // setup loop body -+ { -+ addRegOffset(BuildMI(bodyMBB, DL, TII.get(MovMIOpc)) -+ .setMIFlag(MachineInstr::FrameSetup), -+ StackPtr, false, 0) -+ .addImm(0) -+ .setMIFlag(MachineInstr::FrameSetup); -+ -+ const unsigned SUBOpc = -+ getSUBriOpcode(Uses64BitFramePtr, StackProbeSize); -+ BuildMI(bodyMBB, DL, TII.get(SUBOpc), StackPtr) -+ .addReg(StackPtr) -+ .addImm(StackProbeSize) -+ .setMIFlag(MachineInstr::FrameSetup); -+ -+ // cmp with stack pointer bound -+ BuildMI(bodyMBB, DL, -+ TII.get(Uses64BitFramePtr ? X86::CMP64rr : X86::CMP32rr)) -+ .addReg(FinalStackProbed) -+ .addReg(StackPtr) -+ .setMIFlag(MachineInstr::FrameSetup); -+ -+ // jump -+ BuildMI(bodyMBB, DL, TII.get(X86::JCC_1)) -+ .addMBB(bodyMBB) -+ .addImm(X86::COND_B) -+ .setMIFlag(MachineInstr::FrameSetup); -+ bodyMBB->addSuccessor(bodyMBB); -+ bodyMBB->addSuccessor(footMBB); -+ } -+ -+ // setup loop footer -+ { -+ BuildMI(footMBB, DL, TII.get(TargetOpcode::COPY), StackPtr) -+ .addReg(FinalStackProbed) -+ .setMIFlag(MachineInstr::FrameSetup); -+ addRegOffset(BuildMI(footMBB, DL, TII.get(MovMIOpc)) -+ .setMIFlag(MachineInstr::FrameSetup), -+ StackPtr, false, 0) -+ .addImm(0) -+ .setMIFlag(MachineInstr::FrameSetup); -+ footMBB->addSuccessor(&MBB); -+ } -+ -+ recomputeLiveIns(*headMBB); -+ recomputeLiveIns(*bodyMBB); -+ recomputeLiveIns(*footMBB); -+ recomputeLiveIns(MBB); -+ } -+ } else { -+ MachineInstr *MI = BuildMI(MBB, MBBI, DL, TII.get(AndOp), Reg) -+ .addReg(Reg) -+ .addImm(Val) -+ .setMIFlag(MachineInstr::FrameSetup); -+ -+ // The EFLAGS implicit def is dead. -+ MI->getOperand(3).setIsDead(); -+ } - } - - bool X86FrameLowering::has128ByteRedZone(const MachineFunction& MF) const { -Index: llvm-toolchain-11-11.0.0/llvm/lib/Target/X86/X86FrameLowering.h -=================================================================== ---- llvm-toolchain-11-11.0.0.orig/llvm/lib/Target/X86/X86FrameLowering.h -+++ llvm-toolchain-11-11.0.0/llvm/lib/Target/X86/X86FrameLowering.h -@@ -213,14 +213,14 @@ private: - void emitStackProbeInlineGenericBlock(MachineFunction &MF, - MachineBasicBlock &MBB, - MachineBasicBlock::iterator MBBI, -- const DebugLoc &DL, -- uint64_t Offset) const; -+ const DebugLoc &DL, uint64_t Offset, -+ uint64_t Align) const; - - void emitStackProbeInlineGenericLoop(MachineFunction &MF, - MachineBasicBlock &MBB, - MachineBasicBlock::iterator MBBI, -- const DebugLoc &DL, -- uint64_t Offset) const; -+ const DebugLoc &DL, uint64_t Offset, -+ uint64_t Align) const; - - /// Emit a stub to later inline the target stack probe. - MachineInstr *emitStackProbeInlineStub(MachineFunction &MF, -Index: llvm-toolchain-11-11.0.0/llvm/test/CodeGen/X86/stack-clash-large-large-align.ll -=================================================================== ---- /dev/null -+++ llvm-toolchain-11-11.0.0/llvm/test/CodeGen/X86/stack-clash-large-large-align.ll -@@ -0,0 +1,88 @@ -+; RUN: llc < %s | FileCheck %s -+ -+ -+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" -+target triple = "x86_64-unknown-linux-gnu" -+ -+define i32 @foo_noprotect() local_unnamed_addr { -+; CHECK-LABEL: foo_noprotect: -+; CHECK: # %bb.0: -+; CHECK-NEXT: pushq %rbp -+; CHECK-NEXT: .cfi_def_cfa_offset 16 -+; CHECK-NEXT: .cfi_offset %rbp, -16 -+; CHECK-NEXT: movq %rsp, %rbp -+; CHECK-NEXT: .cfi_def_cfa_register %rbp -+; CHECK-NEXT: andq $-4096, %rsp # imm = 0xF000 -+; CHECK-NEXT: subq $73728, %rsp # imm = 0x12000 -+; CHECK-NEXT: movl $1, 392(%rsp) -+; CHECK-NEXT: movl $1, 28792(%rsp) -+; CHECK-NEXT: movl (%rsp), %eax -+; CHECK-NEXT: movq %rbp, %rsp -+; CHECK-NEXT: popq %rbp -+; CHECK-NEXT: .cfi_def_cfa %rsp, 8 -+; CHECK-NEXT: retq -+ -+ -+ %a = alloca i32, i64 18000, align 4096 -+ %b0 = getelementptr inbounds i32, i32* %a, i64 98 -+ %b1 = getelementptr inbounds i32, i32* %a, i64 7198 -+ store volatile i32 1, i32* %b0 -+ store volatile i32 1, i32* %b1 -+ %c = load volatile i32, i32* %a -+ ret i32 %c -+} -+ -+define i32 @foo_protect() local_unnamed_addr #0 { -+; CHECK-LABEL: foo_protect: -+; CHECK: # %bb.0: -+; CHECK-NEXT: pushq %rbp -+; CHECK-NEXT: .cfi_def_cfa_offset 16 -+; CHECK-NEXT: .cfi_offset %rbp, -16 -+; CHECK-NEXT: movq %rsp, %rbp -+; CHECK-NEXT: .cfi_def_cfa_register %rbp -+; CHECK-NEXT: movq %rsp, %r11 -+; CHECK-NEXT: andq $-4096, %r11 # imm = 0xF000 -+; CHECK-NEXT: cmpq %rsp, %r11 -+; CHECK-NEXT: je .LBB1_4 -+; CHECK-NEXT:# %bb.1: -+; CHECK-NEXT: subq $4096, %rsp # imm = 0x1000 -+; CHECK-NEXT: cmpq %rsp, %r11 -+; CHECK-NEXT: jb .LBB1_3 -+; CHECK-NEXT:.LBB1_2: # =>This Inner Loop Header: Depth=1 -+; CHECK-NEXT: movq $0, (%rsp) -+; CHECK-NEXT: subq $4096, %rsp # imm = 0x1000 -+; CHECK-NEXT: cmpq %rsp, %r11 -+; CHECK-NEXT: jb .LBB1_2 -+; CHECK-NEXT:.LBB1_3: -+; CHECK-NEXT: movq %r11, %rsp -+; CHECK-NEXT: movq $0, (%rsp) -+; CHECK-NEXT:.LBB1_4: -+; CHECK-NEXT: movq %rsp, %r11 -+; CHECK-NEXT: subq $73728, %r11 # imm = 0x12000 -+; CHECK-NEXT:.LBB1_5: # =>This Inner Loop Header: Depth=1 -+; CHECK-NEXT: subq $4096, %rsp # imm = 0x1000 -+; CHECK-NEXT: movq $0, (%rsp) -+; CHECK-NEXT: cmpq %r11, %rsp -+; CHECK-NEXT: jne .LBB1_5 -+; CHECK-NEXT:# %bb.6: -+; CHECK-NEXT: movl $1, 392(%rsp) -+; CHECK-NEXT: movl $1, 28792(%rsp) -+; CHECK-NEXT: movl (%rsp), %eax -+; CHECK-NEXT: movq %rbp, %rsp -+; CHECK-NEXT: popq %rbp -+; CHECK-NEXT: .cfi_def_cfa %rsp, 8 -+; CHECK-NEXT: retq -+ -+ -+ -+ -+ %a = alloca i32, i64 18000, align 4096 -+ %b0 = getelementptr inbounds i32, i32* %a, i64 98 -+ %b1 = getelementptr inbounds i32, i32* %a, i64 7198 -+ store volatile i32 1, i32* %b0 -+ store volatile i32 1, i32* %b1 -+ %c = load volatile i32, i32* %a -+ ret i32 %c -+} -+ -+attributes #0 = {"probe-stack"="inline-asm"} -Index: llvm-toolchain-11-11.0.0/llvm/test/CodeGen/X86/stack-clash-no-free-probe.ll -=================================================================== ---- llvm-toolchain-11-11.0.0.orig/llvm/test/CodeGen/X86/stack-clash-no-free-probe.ll -+++ /dev/null -@@ -1,27 +0,0 @@ --; RUN: llc < %s | FileCheck %s -- --target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" --target triple = "x86_64-unknown-linux-gnu" -- --define i32 @foo(i64 %i) local_unnamed_addr #0 { --; CHECK-LABEL: foo: --; CHECK: # %bb.0: --; CHECK-NEXT: subq $4096, %rsp # imm = 0x1000 --; CHECK-NEXT: movq $0, (%rsp) --; CHECK-NEXT: subq $3784, %rsp # imm = 0xEC8 --; CHECK-NEXT: .cfi_def_cfa_offset 7888 --; CHECK-NEXT: movl $1, -128(%rsp,%rdi,4) --; CHECK-NEXT: movl -128(%rsp), %eax --; CHECK-NEXT: addq $7880, %rsp # imm = 0x1EC8 --; CHECK-NEXT: .cfi_def_cfa_offset 8 --; CHECK-NEXT: retq -- -- %a = alloca i32, i32 2000, align 16 -- %b = getelementptr inbounds i32, i32* %a, i64 %i -- store volatile i32 1, i32* %b -- %c = load volatile i32, i32* %a -- ret i32 %c --} -- --attributes #0 = {"probe-stack"="inline-asm"} -- -Index: llvm-toolchain-11-11.0.0/llvm/test/CodeGen/X86/stack-clash-small-alloc-medium-align.ll -=================================================================== ---- /dev/null -+++ llvm-toolchain-11-11.0.0/llvm/test/CodeGen/X86/stack-clash-small-alloc-medium-align.ll -@@ -0,0 +1,135 @@ -+; RUN: llc < %s | FileCheck %s -+ -+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" -+target triple = "x86_64-unknown-linux-gnu" -+ -+; | case1 | alloca + align < probe_size -+define i32 @foo1(i64 %i) local_unnamed_addr #0 { -+; CHECK-LABEL: foo1: -+; CHECK: # %bb.0: -+; CHECK-NEXT: pushq %rbp -+; CHECK-NEXT: .cfi_def_cfa_offset 16 -+; CHECK-NEXT: .cfi_offset %rbp, -16 -+; CHECK-NEXT: movq %rsp, %rbp -+; CHECK-NEXT: .cfi_def_cfa_register %rbp -+; CHECK-NEXT: andq $-64, %rsp -+; CHECK-NEXT: subq $832, %rsp # imm = 0x340 -+; CHECK-NEXT: movl $1, (%rsp,%rdi,4) -+; CHECK-NEXT: movl (%rsp), %eax -+; CHECK-NEXT: movq %rbp, %rsp -+; CHECK-NEXT: popq %rbp -+; CHECK-NEXT: .cfi_def_cfa %rsp, 8 -+; CHECK-NEXT: retq -+ -+ %a = alloca i32, i32 200, align 64 -+ %b = getelementptr inbounds i32, i32* %a, i64 %i -+ store volatile i32 1, i32* %b -+ %c = load volatile i32, i32* %a -+ ret i32 %c -+} -+ -+; | case2 | alloca > probe_size, align > probe_size -+define i32 @foo2(i64 %i) local_unnamed_addr #0 { -+; CHECK-LABEL: foo2: -+; CHECK: # %bb.0: -+; CHECK-NEXT: pushq %rbp -+; CHECK-NEXT: .cfi_def_cfa_offset 16 -+; CHECK-NEXT: .cfi_offset %rbp, -16 -+; CHECK-NEXT: movq %rsp, %rbp -+; CHECK-NEXT: .cfi_def_cfa_register %rbp -+; CHECK-NEXT: andq $-2048, %rsp # imm = 0xF800 -+; CHECK-NEXT: subq $2048, %rsp # imm = 0x800 -+; CHECK-NEXT: movq $0, (%rsp) -+; CHECK-NEXT: subq $4096, %rsp # imm = 0x1000 -+; CHECK-NEXT: movq $0, (%rsp) -+; CHECK-NEXT: subq $2048, %rsp # imm = 0x800 -+; CHECK-NEXT: movl $1, (%rsp,%rdi,4) -+; CHECK-NEXT: movl (%rsp), %eax -+; CHECK-NEXT: movq %rbp, %rsp -+; CHECK-NEXT: popq %rbp -+; CHECK-NEXT: .cfi_def_cfa %rsp, 8 -+; CHECK-NEXT: retq -+ -+ %a = alloca i32, i32 2000, align 2048 -+ %b = getelementptr inbounds i32, i32* %a, i64 %i -+ store volatile i32 1, i32* %b -+ %c = load volatile i32, i32* %a -+ ret i32 %c -+} -+ -+; | case3 | alloca < probe_size, align < probe_size, alloca + align > probe_size -+define i32 @foo3(i64 %i) local_unnamed_addr #0 { -+; CHECK-LABEL: foo3: -+; CHECK: # %bb.0: -+; CHECK-NEXT: pushq %rbp -+; CHECK-NEXT: .cfi_def_cfa_offset 16 -+; CHECK-NEXT: .cfi_offset %rbp, -16 -+; CHECK-NEXT: movq %rsp, %rbp -+; CHECK-NEXT: .cfi_def_cfa_register %rbp -+; CHECK-NEXT: andq $-1024, %rsp # imm = 0xFC00 -+; CHECK-NEXT: subq $3072, %rsp # imm = 0xC00 -+; CHECK-NEXT: movq $0, (%rsp) -+; CHECK-NEXT: subq $1024, %rsp # imm = 0x400 -+; CHECK-NEXT: movl $1, (%rsp,%rdi,4) -+; CHECK-NEXT: movl (%rsp), %eax -+; CHECK-NEXT: movq %rbp, %rsp -+; CHECK-NEXT: popq %rbp -+; CHECK-NEXT: .cfi_def_cfa %rsp, 8 -+; CHECK-NEXT: retq -+ -+ -+ %a = alloca i32, i32 1000, align 1024 -+ %b = getelementptr inbounds i32, i32* %a, i64 %i -+ store volatile i32 1, i32* %b -+ %c = load volatile i32, i32* %a -+ ret i32 %c -+} -+ -+; | case4 | alloca + probe_size < probe_size, followed by dynamic alloca -+define i32 @foo4(i64 %i) local_unnamed_addr #0 { -+; CHECK-LABEL: foo4: -+; CHECK: # %bb.0: -+; CHECK-NEXT: pushq %rbp -+; CHECK-NEXT: .cfi_def_cfa_offset 16 -+; CHECK-NEXT: .cfi_offset %rbp, -16 -+; CHECK-NEXT: movq %rsp, %rbp -+; CHECK-NEXT: .cfi_def_cfa_register %rbp -+; CHECK-NEXT: pushq %rbx -+; CHECK-NEXT: andq $-64, %rsp -+; CHECK-NEXT: subq $896, %rsp # imm = 0x380 -+; CHECK-NEXT: movq %rsp, %rbx -+; CHECK-NEXT: .cfi_offset %rbx, -24 -+; CHECK-NEXT: movl $1, (%rbx,%rdi,4) -+; CHECK-NEXT: movl (%rbx), %ecx -+; CHECK-NEXT: movq %rsp, %rax -+; CHECK-NEXT: leaq 15(,%rcx,4), %rcx -+; CHECK-NEXT: andq $-16, %rcx -+; CHECK-NEXT: subq %rcx, %rax -+; CHECK-NEXT: cmpq %rsp, %rax -+; CHECK-NEXT: jge .LBB3_3 -+; CHECK-NEXT:.LBB3_2: # =>This Inner Loop Header: Depth=1 -+; CHECK-NEXT: xorq $0, (%rsp) -+; CHECK-NEXT: subq $4096, %rsp # imm = 0x1000 -+; CHECK-NEXT: cmpq %rsp, %rax -+; CHECK-NEXT: jl .LBB3_2 -+; CHECK-NEXT:.LBB3_3: -+; CHECK-NEXT: andq $-64, %rax -+; CHECK-NEXT: movq %rax, %rsp -+; CHECK-NEXT: movl (%rax), %eax -+; CHECK-NEXT: leaq -8(%rbp), %rsp -+; CHECK-NEXT: popq %rbx -+; CHECK-NEXT: popq %rbp -+; CHECK-NEXT: .cfi_def_cfa %rsp, 8 -+; CHECK-NEXT: retq -+ -+ %a = alloca i32, i32 200, align 64 -+ %b = getelementptr inbounds i32, i32* %a, i64 %i -+ store volatile i32 1, i32* %b -+ %c = load volatile i32, i32* %a -+ %d = alloca i32, i32 %c, align 64 -+ %e = load volatile i32, i32* %d -+ ret i32 %e -+} -+ -+attributes #0 = {"probe-stack"="inline-asm"} -+ -Index: llvm-toolchain-11-11.0.0/llvm/test/CodeGen/X86/stack-clash-small-large-align.ll -=================================================================== ---- /dev/null -+++ llvm-toolchain-11-11.0.0/llvm/test/CodeGen/X86/stack-clash-small-large-align.ll -@@ -0,0 +1,83 @@ -+; RUN: llc < %s | FileCheck %s -+ -+ -+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" -+target triple = "x86_64-unknown-linux-gnu" -+ -+define i32 @foo_noprotect() local_unnamed_addr { -+; CHECK-LABEL: foo_noprotect: -+; CHECK: # %bb.0: -+; CHECK-NEXT: pushq %rbp -+; CHECK-NEXT: .cfi_def_cfa_offset 16 -+; CHECK-NEXT: .cfi_offset %rbp, -16 -+; CHECK-NEXT: movq %rsp, %rbp -+; CHECK-NEXT: .cfi_def_cfa_register %rbp -+; CHECK-NEXT: andq $-65536, %rsp -+; CHECK-NEXT: subq $65536, %rsp -+; CHECK-NEXT: movl $1, 392(%rsp) -+; CHECK-NEXT: movl (%rsp), %eax -+; CHECK-NEXT: movq %rbp, %rsp -+; CHECK-NEXT: popq %rbp -+; CHECK-NEXT: .cfi_def_cfa %rsp, 8 -+; CHECK-NEXT: retq -+ -+ -+ -+ %a = alloca i32, i64 100, align 65536 -+ %b = getelementptr inbounds i32, i32* %a, i64 98 -+ store volatile i32 1, i32* %b -+ %c = load volatile i32, i32* %a -+ ret i32 %c -+} -+ -+define i32 @foo_protect() local_unnamed_addr #0 { -+; CHECK-LABEL: foo_protect: -+; CHECK: # %bb.0: -+; CHECK-NEXT: pushq %rbp -+; CHECK-NEXT: .cfi_def_cfa_offset 16 -+; CHECK-NEXT: .cfi_offset %rbp, -16 -+; CHECK-NEXT: movq %rsp, %rbp -+; CHECK-NEXT: .cfi_def_cfa_register %rbp -+; CHECK-NEXT: movq %rsp, %r11 -+; CHECK-NEXT: andq $-65536, %r11 # imm = 0xFFFF0000 -+; CHECK-NEXT: cmpq %rsp, %r11 -+; CHECK-NEXT: je .LBB1_4 -+; CHECK-NEXT:# %bb.1: -+; CHECK-NEXT: subq $4096, %rsp # imm = 0x1000 -+; CHECK-NEXT: cmpq %rsp, %r11 -+; CHECK-NEXT: jb .LBB1_3 -+; CHECK-NEXT:.LBB1_2: # =>This Inner Loop Header: Depth=1 -+; CHECK-NEXT: movq $0, (%rsp) -+; CHECK-NEXT: subq $4096, %rsp # imm = 0x1000 -+; CHECK-NEXT: cmpq %rsp, %r11 -+; CHECK-NEXT: jb .LBB1_2 -+; CHECK-NEXT:.LBB1_3: -+; CHECK-NEXT: movq %r11, %rsp -+; CHECK-NEXT: movq $0, (%rsp) -+; CHECK-NEXT:.LBB1_4: -+; CHECK-NEXT: movq %rsp, %r11 -+; CHECK-NEXT: subq $65536, %r11 # imm = 0x10000 -+; CHECK-NEXT:.LBB1_5: # =>This Inner Loop Header: Depth=1 -+; CHECK-NEXT: subq $4096, %rsp # imm = 0x1000 -+; CHECK-NEXT: movq $0, (%rsp) -+; CHECK-NEXT: cmpq %r11, %rsp -+; CHECK-NEXT: jne .LBB1_5 -+; CHECK-NEXT:# %bb.6: -+; CHECK-NEXT: movl $1, 392(%rsp) -+; CHECK-NEXT: movl (%rsp), %eax -+; CHECK-NEXT: movq %rbp, %rsp -+; CHECK-NEXT: popq %rbp -+; CHECK-NEXT: .cfi_def_cfa %rsp, 8 -+; CHECK-NEXT: retq -+ -+ -+ -+ -+ %a = alloca i32, i64 100, align 65536 -+ %b = getelementptr inbounds i32, i32* %a, i64 98 -+ store volatile i32 1, i32* %b -+ %c = load volatile i32, i32* %a -+ ret i32 %c -+} -+ -+attributes #0 = {"probe-stack"="inline-asm"} -Index: llvm-toolchain-11-11.0.0/llvm/lib/Target/X86/X86ISelLowering.cpp -=================================================================== ---- llvm-toolchain-11-11.0.0.orig/llvm/lib/Target/X86/X86ISelLowering.cpp -+++ llvm-toolchain-11-11.0.0/llvm/lib/Target/X86/X86ISelLowering.cpp -@@ -31876,7 +31876,7 @@ X86TargetLowering::EmitLoweredProbedAllo - - BuildMI(testMBB, DL, TII->get(X86::JCC_1)) - .addMBB(tailMBB) -- .addImm(X86::COND_L); -+ .addImm(X86::COND_GE); - testMBB->addSuccessor(blockMBB); - testMBB->addSuccessor(tailMBB); - -@@ -31892,9 +31892,9 @@ X86TargetLowering::EmitLoweredProbedAllo - // - // The property we want to enforce is to never have more than [page alloc] between two probes. - -- const unsigned MovMIOpc = -- TFI.Uses64BitFramePtr ? X86::MOV64mi32 : X86::MOV32mi; -- addRegOffset(BuildMI(blockMBB, DL, TII->get(MovMIOpc)), physSPReg, false, 0) -+ const unsigned XORMIOpc = -+ TFI.Uses64BitFramePtr ? X86::XOR64mi8 : X86::XOR32mi8; -+ addRegOffset(BuildMI(blockMBB, DL, TII->get(XORMIOpc)), physSPReg, false, 0) - .addImm(0); - - BuildMI(blockMBB, DL, -Index: llvm-toolchain-11-11.0.0/llvm/test/CodeGen/X86/stack-clash-dynamic-alloca.ll -=================================================================== ---- llvm-toolchain-11-11.0.0.orig/llvm/test/CodeGen/X86/stack-clash-dynamic-alloca.ll -+++ llvm-toolchain-11-11.0.0/llvm/test/CodeGen/X86/stack-clash-dynamic-alloca.ll -@@ -24,12 +24,12 @@ attributes #0 = {"probe-stack"="inline- - ; CHECK-X86-64-NEXT: andq $-16, %rcx - ; CHECK-X86-64-NEXT: subq %rcx, %rax - ; CHECK-X86-64-NEXT: cmpq %rsp, %rax --; CHECK-X86-64-NEXT: jl .LBB0_3 -+; CHECK-X86-64-NEXT: jge .LBB0_3 - ; CHECK-X86-64-NEXT: .LBB0_2: # =>This Inner Loop Header: Depth=1 --; CHECK-X86-64-NEXT: movq $0, (%rsp) -+; CHECK-X86-64-NEXT: xorq $0, (%rsp) - ; CHECK-X86-64-NEXT: subq $4096, %rsp # imm = 0x1000 - ; CHECK-X86-64-NEXT: cmpq %rsp, %rax --; CHECK-X86-64-NEXT: jge .LBB0_2 -+; CHECK-X86-64-NEXT: jl .LBB0_2 - ; CHECK-X86-64-NEXT: .LBB0_3: - ; CHECK-X86-64-NEXT: movq %rax, %rsp - ; CHECK-X86-64-NEXT: movl $1, 4792(%rax) -@@ -54,12 +54,12 @@ attributes #0 = {"probe-stack"="inline- - ; CHECK-X86-32-NEXT: andl $-16, %ecx - ; CHECK-X86-32-NEXT: subl %ecx, %eax - ; CHECK-X86-32-NEXT: cmpl %esp, %eax --; CHECK-X86-32-NEXT: jl .LBB0_3 -+; CHECK-X86-32-NEXT: jge .LBB0_3 - ; CHECK-X86-32-NEXT: .LBB0_2: # =>This Inner Loop Header: Depth=1 --; CHECK-X86-32-NEXT: movl $0, (%esp) -+; CHECK-X86-32-NEXT: xorl $0, (%esp) - ; CHECK-X86-32-NEXT: subl $4096, %esp # imm = 0x1000 - ; CHECK-X86-32-NEXT: cmpl %esp, %eax --; CHECK-X86-32-NEXT: jge .LBB0_2 -+; CHECK-X86-32-NEXT: jl .LBB0_2 - ; CHECK-X86-32-NEXT: .LBB0_3: - ; CHECK-X86-32-NEXT: movl %eax, %esp - ; CHECK-X86-32-NEXT: movl $1, 4792(%eax) diff --git a/taskcluster/ci/fetch/toolchains.yml b/taskcluster/ci/fetch/toolchains.yml index 22575fcaf2f6..2c9c0737a256 100644 --- a/taskcluster/ci/fetch/toolchains.yml +++ b/taskcluster/ci/fetch/toolchains.yml @@ -425,11 +425,11 @@ clang-10: revision: d32170dbd5b0d54436537b6b75beaf44324e0c28 clang-11: - description: clang 11.0.0 source code + description: clang 11.0.1 source code fetch: type: git repo: https://github.com/llvm/llvm-project - revision: 176249bd6732a8044d457092ed932768724a6f06 + revision: 43ff75f2c3feef64f9d73328230d34dac8832a91 rust-1.47.0-dev: description: Rust 1.47.0-dev source code diff --git a/tools/clang-tidy/config.yaml b/tools/clang-tidy/config.yaml index 7b63d50ca5a6..e8e31a4e5e09 100644 --- a/tools/clang-tidy/config.yaml +++ b/tools/clang-tidy/config.yaml @@ -19,7 +19,7 @@ platforms: # Minimum clang-tidy version that is required for all the following checkers # to work properly. # This is also used by 'mach clang-format' -package_version: "11.0" +package_version: "11.0.1" clang_checkers: - name: -* publish: !!bool no