import clang-14.0.6-1.module+el8.7.0+15816+ec020e8f
This commit is contained in:
parent
a243d6fcee
commit
be957384a2
@ -1,3 +1,3 @@
|
||||
9cdc305550fbd27d52d023e8506c50c41e97b7fa SOURCES/clang-13.0.1.src.tar.xz
|
||||
ee28b71609e57e677205f44076e450fe5f577a22 SOURCES/clang-tools-extra-13.0.1.src.tar.xz
|
||||
88442d295bc0b96df7cf3d526ed9eabd7a214ac2 SOURCES/clang-14.0.6.src.tar.xz
|
||||
dac5046f0eb81e6c47432cf80229599befbf273e SOURCES/clang-tools-extra-14.0.6.src.tar.xz
|
||||
b8d2648a01d36ed0186fd2c5af325fd28797f9a0 SOURCES/tstellar-gpg-key.asc
|
||||
|
4
.gitignore
vendored
4
.gitignore
vendored
@ -1,3 +1,3 @@
|
||||
SOURCES/clang-13.0.1.src.tar.xz
|
||||
SOURCES/clang-tools-extra-13.0.1.src.tar.xz
|
||||
SOURCES/clang-14.0.6.src.tar.xz
|
||||
SOURCES/clang-tools-extra-14.0.6.src.tar.xz
|
||||
SOURCES/tstellar-gpg-key.asc
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,36 +0,0 @@
|
||||
From 62eaebcb6bb872830299efa3f87506f1d23ef366 Mon Sep 17 00:00:00 2001
|
||||
From: serge-sans-paille <sguelton@redhat.com>
|
||||
Date: Mon, 13 Sep 2021 10:25:45 +0200
|
||||
Subject: [PATCH][clang] Fix scan-build-py executable lookup path
|
||||
|
||||
Once installed, scan-build-py doesn't know anything about its auxiliary
|
||||
executable and can't find them.
|
||||
Use relative path wrt. scan-build-py script.
|
||||
|
||||
Differential Revision: https://reviews.llvm.org/D109659
|
||||
|
||||
(cherry picked from commit c84755a046bbdcd0564693e30b2508034b06002b)
|
||||
---
|
||||
clang/tools/scan-build-py/lib/libscanbuild/analyze.py | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/clang/tools/scan-build-py/lib/libscanbuild/analyze.py b/clang/tools/scan-build-py/lib/libscanbuild/analyze.py
|
||||
index 9a249a8..d83ff2a 100644
|
||||
--- a/clang/tools/scan-build-py/lib/libscanbuild/analyze.py
|
||||
+++ b/clang/tools/scan-build-py/lib/libscanbuild/analyze.py
|
||||
@@ -39,8 +39,10 @@ from libscanbuild.shell import decode
|
||||
|
||||
__all__ = ['scan_build', 'analyze_build', 'analyze_compiler_wrapper']
|
||||
|
||||
-COMPILER_WRAPPER_CC = 'analyze-cc'
|
||||
-COMPILER_WRAPPER_CXX = 'analyze-c++'
|
||||
+scanbuild_dir = os.path.dirname(__import__('sys').argv[0])
|
||||
+
|
||||
+COMPILER_WRAPPER_CC = os.path.join(scanbuild_dir, '..', 'libexec', 'analyze-cc')
|
||||
+COMPILER_WRAPPER_CXX = os.path.join(scanbuild_dir, '..', 'libexec', 'analyze-c++')
|
||||
|
||||
CTU_EXTDEF_MAP_FILENAME = 'externalDefMap.txt'
|
||||
CTU_TEMP_DEFMAP_FOLDER = 'tmpExternalDefMaps'
|
||||
--
|
||||
1.8.3.1
|
||||
|
33
SOURCES/0001-Work-around-gcc-miscompile.patch
Normal file
33
SOURCES/0001-Work-around-gcc-miscompile.patch
Normal file
@ -0,0 +1,33 @@
|
||||
From 0f97b7209eed4a428171af6044fe7e0aaf81ee2a Mon Sep 17 00:00:00 2001
|
||||
From: Nikita Popov <npopov@redhat.com>
|
||||
Date: Thu, 3 Feb 2022 10:34:44 +0100
|
||||
Subject: [PATCH] Work around gcc miscompile
|
||||
|
||||
This works around https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104334,
|
||||
which miscompiles clang on s390x and ppc64le. The issue is already
|
||||
fixed on the gcc side, but including this as a temporary workaround
|
||||
to get a working build.
|
||||
---
|
||||
clang/lib/Sema/DeclSpec.cpp | 5 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/clang/lib/Sema/DeclSpec.cpp b/clang/lib/Sema/DeclSpec.cpp
|
||||
index d4dc790c008a..77a1e6c32c6f 100644
|
||||
--- a/clang/lib/Sema/DeclSpec.cpp
|
||||
+++ b/clang/lib/Sema/DeclSpec.cpp
|
||||
@@ -1203,8 +1203,9 @@ void DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) {
|
||||
} else if (TypeSpecType == TST_double) {
|
||||
// vector long double and vector long long double are never allowed.
|
||||
// vector double is OK for Power7 and later, and ZVector.
|
||||
- if (getTypeSpecWidth() == TypeSpecifierWidth::Long ||
|
||||
- getTypeSpecWidth() == TypeSpecifierWidth::LongLong)
|
||||
+ TypeSpecifierWidth TypeSpecWidth = getTypeSpecWidth();
|
||||
+ if (TypeSpecWidth == TypeSpecifierWidth::Long ||
|
||||
+ TypeSpecWidth == TypeSpecifierWidth::LongLong)
|
||||
S.Diag(TSWRange.getBegin(),
|
||||
diag::err_invalid_vector_long_double_decl_spec);
|
||||
else if (!S.Context.getTargetInfo().hasFeature("vsx") &&
|
||||
--
|
||||
2.34.1
|
||||
|
||||
|
@ -1,340 +0,0 @@
|
||||
From e7ab823a5f3f57e843069d43033a16165809723a Mon Sep 17 00:00:00 2001
|
||||
From: serge-sans-paille <sguelton@redhat.com>
|
||||
Date: Thu, 4 Nov 2021 11:11:53 +0100
|
||||
Subject: [PATCH 2/3] Misleading bidirectional detection
|
||||
|
||||
Differential Revision: https://reviews.llvm.org/D112913
|
||||
---
|
||||
clang-tools-extra/clang-tidy/misc/CMakeLists.txt | 1 +
|
||||
.../clang-tidy/misc/MiscTidyModule.cpp | 3 +
|
||||
.../clang-tidy/misc/MisleadingBidirectional.cpp | 131 +++++++++++++++++++++
|
||||
.../clang-tidy/misc/MisleadingBidirectional.h | 38 ++++++
|
||||
clang-tools-extra/docs/ReleaseNotes.rst | 5 +
|
||||
clang-tools-extra/docs/clang-tidy/checks/list.rst | 3 +-
|
||||
.../checks/misc-misleading-bidirectional.rst | 21 ++++
|
||||
.../checkers/misc-misleading-bidirectional.cpp | 31 +++++
|
||||
8 files changed, 232 insertions(+), 1 deletion(-)
|
||||
create mode 100644 clang-tools-extra/clang-tidy/misc/MisleadingBidirectional.cpp
|
||||
create mode 100644 clang-tools-extra/clang-tidy/misc/MisleadingBidirectional.h
|
||||
create mode 100644 clang-tools-extra/docs/clang-tidy/checks/misc-misleading-bidirectional.rst
|
||||
create mode 100644 clang-tools-extra/test/clang-tidy/checkers/misc-misleading-bidirectional.cpp
|
||||
|
||||
diff --git a/clang-tools-extra/clang-tidy/misc/CMakeLists.txt b/clang-tools-extra/clang-tidy/misc/CMakeLists.txt
|
||||
index 7cafe54..e6abac8 100644
|
||||
--- a/clang-tools-extra/clang-tidy/misc/CMakeLists.txt
|
||||
+++ b/clang-tools-extra/clang-tidy/misc/CMakeLists.txt
|
||||
@@ -16,6 +16,7 @@ add_clang_library(clangTidyMiscModule
|
||||
DefinitionsInHeadersCheck.cpp
|
||||
Homoglyph.cpp
|
||||
MiscTidyModule.cpp
|
||||
+ MisleadingBidirectional.cpp
|
||||
MisplacedConstCheck.cpp
|
||||
NewDeleteOverloadsCheck.cpp
|
||||
NoRecursionCheck.cpp
|
||||
diff --git a/clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp b/clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp
|
||||
index 5c7bd0c..bb5fde2 100644
|
||||
--- a/clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp
|
||||
+++ b/clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp
|
||||
@@ -11,6 +11,7 @@
|
||||
#include "../ClangTidyModuleRegistry.h"
|
||||
#include "DefinitionsInHeadersCheck.h"
|
||||
#include "Homoglyph.h"
|
||||
+#include "MisleadingBidirectional.h"
|
||||
#include "MisplacedConstCheck.h"
|
||||
#include "NewDeleteOverloadsCheck.h"
|
||||
#include "NoRecursionCheck.h"
|
||||
@@ -35,6 +36,8 @@ public:
|
||||
CheckFactories.registerCheck<DefinitionsInHeadersCheck>(
|
||||
"misc-definitions-in-headers");
|
||||
CheckFactories.registerCheck<Homoglyph>("misc-homoglyph");
|
||||
+ CheckFactories.registerCheck<MisleadingBidirectionalCheck>(
|
||||
+ "misc-misleading-bidirectional");
|
||||
CheckFactories.registerCheck<MisplacedConstCheck>("misc-misplaced-const");
|
||||
CheckFactories.registerCheck<NewDeleteOverloadsCheck>(
|
||||
"misc-new-delete-overloads");
|
||||
diff --git a/clang-tools-extra/clang-tidy/misc/MisleadingBidirectional.cpp b/clang-tools-extra/clang-tidy/misc/MisleadingBidirectional.cpp
|
||||
new file mode 100644
|
||||
index 0000000..7a2f06b
|
||||
--- /dev/null
|
||||
+++ b/clang-tools-extra/clang-tidy/misc/MisleadingBidirectional.cpp
|
||||
@@ -0,0 +1,139 @@
|
||||
+//===--- MisleadingBidirectional.cpp - clang-tidy -------------------------===//
|
||||
+//
|
||||
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
+// See https://llvm.org/LICENSE.txt for license information.
|
||||
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
+//
|
||||
+//===----------------------------------------------------------------------===//
|
||||
+
|
||||
+#include "MisleadingBidirectional.h"
|
||||
+
|
||||
+#include "clang/Frontend/CompilerInstance.h"
|
||||
+#include "clang/Lex/Preprocessor.h"
|
||||
+#include "llvm/Support/ConvertUTF.h"
|
||||
+
|
||||
+using namespace clang;
|
||||
+using namespace clang::tidy::misc;
|
||||
+
|
||||
+static bool containsMisleadingBidi(StringRef Buffer,
|
||||
+ bool HonorLineBreaks = true) {
|
||||
+ const char *CurPtr = Buffer.begin();
|
||||
+
|
||||
+ enum BidiChar {
|
||||
+ PS = 0x2029,
|
||||
+ RLO = 0x202E,
|
||||
+ RLE = 0x202B,
|
||||
+ LRO = 0x202D,
|
||||
+ LRE = 0x202A,
|
||||
+ PDF = 0x202C,
|
||||
+ RLI = 0x2067,
|
||||
+ LRI = 0x2066,
|
||||
+ FSI = 0x2068,
|
||||
+ PDI = 0x2069
|
||||
+ };
|
||||
+
|
||||
+ SmallVector<BidiChar> BidiContexts;
|
||||
+
|
||||
+ // Scan each character while maintaining a stack of opened bidi context.
|
||||
+ // RLO/RLE/LRO/LRE all are closed by PDF while RLI LRI and FSI are closed by
|
||||
+ // PDI. New lines reset the context count. Extra PDF / PDI are ignored.
|
||||
+ //
|
||||
+ // Warn if we end up with an unclosed context.
|
||||
+ while (CurPtr < Buffer.end()) {
|
||||
+ unsigned char C = *CurPtr;
|
||||
+ if (isASCII(C)) {
|
||||
+ ++CurPtr;
|
||||
+ bool IsParagrapSep =
|
||||
+ (C == 0xA || C == 0xD || (0x1C <= C && C <= 0x1E) || C == 0x85);
|
||||
+ bool IsSegmentSep = (C == 0x9 || C == 0xB || C == 0x1F);
|
||||
+ if (IsParagrapSep || IsSegmentSep)
|
||||
+ BidiContexts.clear();
|
||||
+ continue;
|
||||
+ }
|
||||
+ llvm::UTF32 CodePoint;
|
||||
+ llvm::ConversionResult Result = llvm::convertUTF8Sequence(
|
||||
+ (const llvm::UTF8 **)&CurPtr, (const llvm::UTF8 *)Buffer.end(),
|
||||
+ &CodePoint, llvm::strictConversion);
|
||||
+
|
||||
+ // If conversion fails, utf-8 is designed so that we can just try next char.
|
||||
+ if (Result != llvm::conversionOK) {
|
||||
+ ++CurPtr;
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ // Open a PDF context.
|
||||
+ if (CodePoint == RLO || CodePoint == RLE || CodePoint == LRO ||
|
||||
+ CodePoint == LRE)
|
||||
+ BidiContexts.push_back(PDF);
|
||||
+ // Close PDF Context.
|
||||
+ else if (CodePoint == PDF) {
|
||||
+ if (!BidiContexts.empty() && BidiContexts.back() == PDF)
|
||||
+ BidiContexts.pop_back();
|
||||
+ }
|
||||
+ // Open a PDI Context.
|
||||
+ else if (CodePoint == RLI || CodePoint == LRI || CodePoint == FSI)
|
||||
+ BidiContexts.push_back(PDI);
|
||||
+ // Close a PDI Context.
|
||||
+ else if (CodePoint == PDI) {
|
||||
+ auto R = std::find(BidiContexts.rbegin(), BidiContexts.rend(), PDI);
|
||||
+ if (R != BidiContexts.rend())
|
||||
+ BidiContexts.resize(BidiContexts.rend() - R - 1);
|
||||
+ }
|
||||
+ // Line break or equivalent
|
||||
+ else if (CodePoint == PS)
|
||||
+ BidiContexts.clear();
|
||||
+ }
|
||||
+ return !BidiContexts.empty();
|
||||
+}
|
||||
+
|
||||
+class MisleadingBidirectionalCheck::MisleadingBidirectionalHandler
|
||||
+ : public CommentHandler {
|
||||
+public:
|
||||
+ MisleadingBidirectionalHandler(MisleadingBidirectionalCheck &Check,
|
||||
+ llvm::Optional<std::string> User)
|
||||
+ : Check(Check) {}
|
||||
+
|
||||
+ bool HandleComment(Preprocessor &PP, SourceRange Range) override {
|
||||
+ // FIXME: check that we are in a /* */ comment
|
||||
+ StringRef Text =
|
||||
+ Lexer::getSourceText(CharSourceRange::getCharRange(Range),
|
||||
+ PP.getSourceManager(), PP.getLangOpts());
|
||||
+
|
||||
+ if (containsMisleadingBidi(Text, true))
|
||||
+ Check.diag(
|
||||
+ Range.getBegin(),
|
||||
+ "comment contains misleading bidirectional Unicode characters");
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+private:
|
||||
+ MisleadingBidirectionalCheck &Check;
|
||||
+};
|
||||
+
|
||||
+MisleadingBidirectionalCheck::MisleadingBidirectionalCheck(
|
||||
+ StringRef Name, ClangTidyContext *Context)
|
||||
+ : ClangTidyCheck(Name, Context),
|
||||
+ Handler(std::make_unique<MisleadingBidirectionalHandler>(
|
||||
+ *this, Context->getOptions().User)) {}
|
||||
+
|
||||
+MisleadingBidirectionalCheck::~MisleadingBidirectionalCheck() = default;
|
||||
+
|
||||
+void MisleadingBidirectionalCheck::registerPPCallbacks(
|
||||
+ const SourceManager &SM, Preprocessor *PP, Preprocessor *ModuleExpanderPP) {
|
||||
+ PP->addCommentHandler(Handler.get());
|
||||
+}
|
||||
+
|
||||
+void MisleadingBidirectionalCheck::check(
|
||||
+ const ast_matchers::MatchFinder::MatchResult &Result) {
|
||||
+ if (const auto *SL = Result.Nodes.getNodeAs<StringLiteral>("strlit")) {
|
||||
+ StringRef Literal = SL->getBytes();
|
||||
+ if (containsMisleadingBidi(Literal, false))
|
||||
+ diag(SL->getBeginLoc(), "string literal contains misleading "
|
||||
+ "bidirectional Unicode characters");
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+void MisleadingBidirectionalCheck::registerMatchers(
|
||||
+ ast_matchers::MatchFinder *Finder) {
|
||||
+ Finder->addMatcher(ast_matchers::stringLiteral().bind("strlit"), this);
|
||||
+}
|
||||
diff --git a/clang-tools-extra/clang-tidy/misc/MisleadingBidirectional.h b/clang-tools-extra/clang-tidy/misc/MisleadingBidirectional.h
|
||||
new file mode 100644
|
||||
index 0000000..18e7060
|
||||
--- /dev/null
|
||||
+++ b/clang-tools-extra/clang-tidy/misc/MisleadingBidirectional.h
|
||||
@@ -0,0 +1,38 @@
|
||||
+//===--- MisleadingBidirectionalCheck.h - clang-tidy ------------*- C++ -*-===//
|
||||
+//
|
||||
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
+// See https://llvm.org/LICENSE.txt for license information.
|
||||
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
+//
|
||||
+//===----------------------------------------------------------------------===//
|
||||
+
|
||||
+#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_MISLEADINGBIDIRECTIONALCHECK_H
|
||||
+#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_MISLEADINGBIDIRECTIONALCHECK_H
|
||||
+
|
||||
+#include "../ClangTidyCheck.h"
|
||||
+
|
||||
+namespace clang {
|
||||
+namespace tidy {
|
||||
+namespace misc {
|
||||
+
|
||||
+class MisleadingBidirectionalCheck : public ClangTidyCheck {
|
||||
+public:
|
||||
+ MisleadingBidirectionalCheck(StringRef Name, ClangTidyContext *Context);
|
||||
+ ~MisleadingBidirectionalCheck();
|
||||
+
|
||||
+ void registerPPCallbacks(const SourceManager &SM, Preprocessor *PP,
|
||||
+ Preprocessor *ModuleExpanderPP) override;
|
||||
+
|
||||
+ void registerMatchers(ast_matchers::MatchFinder *Finder) override;
|
||||
+ void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
|
||||
+
|
||||
+private:
|
||||
+ class MisleadingBidirectionalHandler;
|
||||
+ std::unique_ptr<MisleadingBidirectionalHandler> Handler;
|
||||
+};
|
||||
+
|
||||
+} // namespace misc
|
||||
+} // namespace tidy
|
||||
+} // namespace clang
|
||||
+
|
||||
+#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_MISLEADINGBIDIRECTIONALCHECK_H
|
||||
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
|
||||
index 37a717e..1eec7db 100644
|
||||
--- a/clang-tools-extra/docs/ReleaseNotes.rst
|
||||
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
|
||||
@@ -218,6 +218,11 @@ New checks
|
||||
|
||||
Detects confusable unicode identifiers.
|
||||
|
||||
+- New :doc:`misc-misleading-bidirectional <clang-tidy/checks/misc-misleading-bidirectional>` check.
|
||||
+
|
||||
+ Inspect string literal and comments for unterminated bidirectional Unicode
|
||||
+ characters.
|
||||
+
|
||||
New check aliases
|
||||
^^^^^^^^^^^^^^^^^
|
||||
|
||||
diff --git a/clang-tools-extra/docs/clang-tidy/checks/list.rst b/clang-tools-extra/docs/clang-tidy/checks/list.rst
|
||||
index df9a95c..b118639 100644
|
||||
--- a/clang-tools-extra/docs/clang-tidy/checks/list.rst
|
||||
+++ b/clang-tools-extra/docs/clang-tidy/checks/list.rst
|
||||
@@ -207,7 +207,8 @@ Clang-Tidy Checks
|
||||
`llvmlibc-implementation-in-namespace <llvmlibc-implementation-in-namespace.html>`_,
|
||||
`llvmlibc-restrict-system-libc-headers <llvmlibc-restrict-system-libc-headers.html>`_, "Yes"
|
||||
`misc-definitions-in-headers <misc-definitions-in-headers.html>`_, "Yes"
|
||||
- `misc-homoglyph <misc-homoglyph.html>`_, "Yes"
|
||||
+ `misc-homoglyph <misc-homoglyph.html>`_,
|
||||
+ `misc-misleading-bidirectional <misc-misleading-bidirectional.html>`_,
|
||||
`misc-misplaced-const <misc-misplaced-const.html>`_,
|
||||
`misc-new-delete-overloads <misc-new-delete-overloads.html>`_,
|
||||
`misc-no-recursion <misc-no-recursion.html>`_,
|
||||
diff --git a/clang-tools-extra/docs/clang-tidy/checks/misc-misleading-bidirectional.rst b/clang-tools-extra/docs/clang-tidy/checks/misc-misleading-bidirectional.rst
|
||||
new file mode 100644
|
||||
index 0000000..16ffc97
|
||||
--- /dev/null
|
||||
+++ b/clang-tools-extra/docs/clang-tidy/checks/misc-misleading-bidirectional.rst
|
||||
@@ -0,0 +1,21 @@
|
||||
+.. title:: clang-tidy - misc-misleading-bidirectional
|
||||
+
|
||||
+misc-misleading-bidirectional
|
||||
+=============================
|
||||
+
|
||||
+Warn about unterminated bidirectional unicode sequence, detecting potential attack
|
||||
+as described in the `Trojan Source <https://www.trojansource.codes>`_ attack.
|
||||
+
|
||||
+Example:
|
||||
+
|
||||
+.. code-block:: c++
|
||||
+
|
||||
+ #include <iostream>
|
||||
+
|
||||
+ int main() {
|
||||
+ bool isAdmin = false;
|
||||
+ /* } if (isAdmin) begin admins only */
|
||||
+ std::cout << "You are an admin.\n";
|
||||
+ /* end admins only { */
|
||||
+ return 0;
|
||||
+ }
|
||||
diff --git a/clang-tools-extra/test/clang-tidy/checkers/misc-misleading-bidirectional.cpp b/clang-tools-extra/test/clang-tidy/checkers/misc-misleading-bidirectional.cpp
|
||||
new file mode 100644
|
||||
index 0000000..7a1746d
|
||||
--- /dev/null
|
||||
+++ b/clang-tools-extra/test/clang-tidy/checkers/misc-misleading-bidirectional.cpp
|
||||
@@ -0,0 +1,31 @@
|
||||
+// RUN: %check_clang_tidy %s misc-misleading-bidirectional %t
|
||||
+
|
||||
+void func(void) {
|
||||
+ int admin = 0;
|
||||
+ /* }if(admin) begin*/
|
||||
+ // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: comment contains misleading bidirectional Unicode characters [misc-misleading-bidirectional]
|
||||
+ const char msg[] = "if(admin) tes";
|
||||
+ // CHECK-MESSAGES: :[[@LINE-1]]:22: warning: string literal contains misleading bidirectional Unicode characters [misc-misleading-bidirectional]
|
||||
+}
|
||||
+
|
||||
+void all_fine(void) {
|
||||
+ char valid[] = "somevalidsequence";
|
||||
+ /* EOL ends bidi sequence
|
||||
+ * end it's fine to do so.
|
||||
+ * EOL ends isolate too
|
||||
+ */
|
||||
+}
|
||||
+
|
||||
+int invalid_utf_8(void) {
|
||||
+ bool isAdmin = false;
|
||||
+
|
||||
+ // the comment below contains an invalid utf8 character, but should still be
|
||||
+ // processed.
|
||||
+
|
||||
+ // CHECK-MESSAGES: :[[@LINE+1]]:3: warning: comment contains misleading bidirectional Unicode characters [misc-misleading-bidirectional]
|
||||
+ /* } if (isAdmin) begin admins only */
|
||||
+ return 1;
|
||||
+ /* end admins only { */
|
||||
+ // CHECK-MESSAGES: :[[@LINE-1]]:3: warning: comment contains misleading bidirectional Unicode characters [misc-misleading-bidirectional]
|
||||
+ return 0;
|
||||
+}
|
||||
--
|
||||
1.8.3.1
|
||||
|
@ -7,18 +7,18 @@ Subject: [PATCH] [PATCH][clang] Make -funwind-tables the default on all archs
|
||||
clang/lib/Driver/ToolChains/Gnu.cpp | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp
|
||||
index a27841dc5985..7489e6785150 100644
|
||||
diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp
|
||||
b/clang/lib/Driver/ToolChains/Gnu.cpp
|
||||
index d0808d061c82..de9c9743cd38 100644
|
||||
--- a/clang/lib/Driver/ToolChains/Gnu.cpp
|
||||
+++ b/clang/lib/Driver/ToolChains/Gnu.cpp
|
||||
@@ -2709,6 +2709,12 @@ bool Generic_GCC::IsUnwindTablesDefault(const ArgList &Args) const {
|
||||
case llvm::Triple::ppc64:
|
||||
@@ -2701,6 +2701,11 @@ bool Generic_GCC::IsUnwindTablesDefault(const ArgList &Args) const {
|
||||
case llvm::Triple::ppc64le:
|
||||
case llvm::Triple::x86:
|
||||
case llvm::Triple::x86_64:
|
||||
+
|
||||
+ // Enable -funwind-tables on all architectures supported by Fedora:
|
||||
+ // rhbz#1655546
|
||||
+ case llvm::Triple::x86:
|
||||
+ case llvm::Triple::systemz:
|
||||
+ case llvm::Triple::arm:
|
||||
return true;
|
||||
|
@ -1,363 +0,0 @@
|
||||
From dbfbbab65139552549604931dfa2759c9aa392de Mon Sep 17 00:00:00 2001
|
||||
From: serge-sans-paille <sguelton@redhat.com>
|
||||
Date: Fri, 15 Oct 2021 15:18:52 +0200
|
||||
Subject: [PATCH 3/3] Misleading unicode identifier detection pass
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Detect when an identifier contains some Right-To-Left characters.
|
||||
This pass relates to https://trojansource.codes/
|
||||
|
||||
Example of misleading source:
|
||||
|
||||
short int א = (short int)0;
|
||||
short int ג = (short int)12345;
|
||||
|
||||
int main() {
|
||||
int א = ג; // a local variable, set to zero?
|
||||
printf("ג is %d\n", ג);
|
||||
printf("א is %d\n", א);
|
||||
}
|
||||
|
||||
This is a recommit of 299aa4dfa1d8c120648b1404b481d858b76c8173 with missing
|
||||
option registration fixed.
|
||||
|
||||
Differential Revision: https://reviews.llvm.org/D112914
|
||||
---
|
||||
clang-tools-extra/clang-tidy/misc/CMakeLists.txt | 1 +
|
||||
.../clang-tidy/misc/MiscTidyModule.cpp | 3 +
|
||||
.../clang-tidy/misc/MisleadingIdentifier.cpp | 166 +++++++++++++++++++++
|
||||
.../clang-tidy/misc/MisleadingIdentifier.h | 31 ++++
|
||||
clang-tools-extra/docs/ReleaseNotes.rst | 4 +
|
||||
clang-tools-extra/docs/clang-tidy/checks/list.rst | 1 +
|
||||
.../checks/misc-misleading-identifier.rst | 23 +++
|
||||
.../checkers/misc-misleading-identifier.cpp | 15 ++
|
||||
8 files changed, 244 insertions(+)
|
||||
create mode 100644 clang-tools-extra/clang-tidy/misc/MisleadingIdentifier.cpp
|
||||
create mode 100644 clang-tools-extra/clang-tidy/misc/MisleadingIdentifier.h
|
||||
create mode 100644 clang-tools-extra/docs/clang-tidy/checks/misc-misleading-identifier.rst
|
||||
create mode 100644 clang-tools-extra/test/clang-tidy/checkers/misc-misleading-identifier.cpp
|
||||
|
||||
diff --git a/clang-tools-extra/clang-tidy/misc/CMakeLists.txt b/clang-tools-extra/clang-tidy/misc/CMakeLists.txt
|
||||
index e6abac8..22d1659 100644
|
||||
--- a/clang-tools-extra/clang-tidy/misc/CMakeLists.txt
|
||||
+++ b/clang-tools-extra/clang-tidy/misc/CMakeLists.txt
|
||||
@@ -17,6 +17,7 @@ add_clang_library(clangTidyMiscModule
|
||||
Homoglyph.cpp
|
||||
MiscTidyModule.cpp
|
||||
MisleadingBidirectional.cpp
|
||||
+ MisleadingIdentifier.cpp
|
||||
MisplacedConstCheck.cpp
|
||||
NewDeleteOverloadsCheck.cpp
|
||||
NoRecursionCheck.cpp
|
||||
diff --git a/clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp b/clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp
|
||||
index bb5fde2..b484db8 100644
|
||||
--- a/clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp
|
||||
+++ b/clang-tools-extra/clang-tidy/misc/MiscTidyModule.cpp
|
||||
@@ -12,6 +12,7 @@
|
||||
#include "DefinitionsInHeadersCheck.h"
|
||||
#include "Homoglyph.h"
|
||||
#include "MisleadingBidirectional.h"
|
||||
+#include "MisleadingIdentifier.h"
|
||||
#include "MisplacedConstCheck.h"
|
||||
#include "NewDeleteOverloadsCheck.h"
|
||||
#include "NoRecursionCheck.h"
|
||||
@@ -38,6 +39,8 @@ public:
|
||||
CheckFactories.registerCheck<Homoglyph>("misc-homoglyph");
|
||||
CheckFactories.registerCheck<MisleadingBidirectionalCheck>(
|
||||
"misc-misleading-bidirectional");
|
||||
+ CheckFactories.registerCheck<MisleadingIdentifierCheck>(
|
||||
+ "misc-misleading-identifier");
|
||||
CheckFactories.registerCheck<MisplacedConstCheck>("misc-misplaced-const");
|
||||
CheckFactories.registerCheck<NewDeleteOverloadsCheck>(
|
||||
"misc-new-delete-overloads");
|
||||
diff --git a/clang-tools-extra/clang-tidy/misc/MisleadingIdentifier.cpp b/clang-tools-extra/clang-tidy/misc/MisleadingIdentifier.cpp
|
||||
new file mode 100644
|
||||
index 0000000..4ddb8ba
|
||||
--- /dev/null
|
||||
+++ b/clang-tools-extra/clang-tidy/misc/MisleadingIdentifier.cpp
|
||||
@@ -0,0 +1,166 @@
|
||||
+//===--- MisleadingIdentifier.cpp - clang-tidy-----------------------------===//
|
||||
+//
|
||||
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
+// See https://llvm.org/LICENSE.txt for license information.
|
||||
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
+//
|
||||
+//===----------------------------------------------------------------------===//
|
||||
+
|
||||
+#include "MisleadingIdentifier.h"
|
||||
+
|
||||
+#include "clang/Frontend/CompilerInstance.h"
|
||||
+#include "llvm/Support/ConvertUTF.h"
|
||||
+
|
||||
+namespace clang {
|
||||
+namespace tidy {
|
||||
+namespace misc {
|
||||
+
|
||||
+// See https://www.unicode.org/Public/14.0.0/ucd/extracted/DerivedBidiClass.txt
|
||||
+static bool isUnassignedAL(llvm::UTF32 CP) {
|
||||
+ return (0x0600 <= CP && CP <= 0x07BF) || (0x0860 <= CP && CP <= 0x08FF) ||
|
||||
+ (0xFB50 <= CP && CP <= 0xFDCF) || (0xFDF0 <= CP && CP <= 0xFDFF) ||
|
||||
+ (0xFE70 <= CP && CP <= 0xFEFF) ||
|
||||
+ (0x00010D00 <= CP && CP <= 0x00010D3F) ||
|
||||
+ (0x00010F30 <= CP && CP <= 0x00010F6F) ||
|
||||
+ (0x0001EC70 <= CP && CP <= 0x0001ECBF) ||
|
||||
+ (0x0001ED00 <= CP && CP <= 0x0001ED4F) ||
|
||||
+ (0x0001EE00 <= CP && CP <= 0x0001EEFF);
|
||||
+}
|
||||
+
|
||||
+// See https://www.unicode.org/Public/14.0.0/ucd/extracted/DerivedBidiClass.txt
|
||||
+static bool isUnassignedR(llvm::UTF32 CP) {
|
||||
+ return (0x0590 <= CP && CP <= 0x05FF) || (0x07C0 <= CP && CP <= 0x085F) ||
|
||||
+ (0xFB1D <= CP && CP <= 0xFB4F) ||
|
||||
+ (0x00010800 <= CP && CP <= 0x00010CFF) ||
|
||||
+ (0x00010D40 <= CP && CP <= 0x00010F2F) ||
|
||||
+ (0x00010F70 <= CP && CP <= 0x00010FFF) ||
|
||||
+ (0x0001E800 <= CP && CP <= 0x0001EC6F) ||
|
||||
+ (0x0001ECC0 <= CP && CP <= 0x0001ECFF) ||
|
||||
+ (0x0001ED50 <= CP && CP <= 0x0001EDFF) ||
|
||||
+ (0x0001EF00 <= CP && CP <= 0x0001EFFF);
|
||||
+}
|
||||
+
|
||||
+// See https://www.unicode.org/Public/14.0.0/ucd/extracted/DerivedBidiClass.txt
|
||||
+static bool isR(llvm::UTF32 CP) {
|
||||
+ return (CP == 0x0590) || (CP == 0x05BE) || (CP == 0x05C0) || (CP == 0x05C3) ||
|
||||
+ (CP == 0x05C6) || (0x05C8 <= CP && CP <= 0x05CF) ||
|
||||
+ (0x05D0 <= CP && CP <= 0x05EA) || (0x05EB <= CP && CP <= 0x05EE) ||
|
||||
+ (0x05EF <= CP && CP <= 0x05F2) || (0x05F3 <= CP && CP <= 0x05F4) ||
|
||||
+ (0x05F5 <= CP && CP <= 0x05FF) || (0x07C0 <= CP && CP <= 0x07C9) ||
|
||||
+ (0x07CA <= CP && CP <= 0x07EA) || (0x07F4 <= CP && CP <= 0x07F5) ||
|
||||
+ (CP == 0x07FA) || (0x07FB <= CP && CP <= 0x07FC) ||
|
||||
+ (0x07FE <= CP && CP <= 0x07FF) || (0x0800 <= CP && CP <= 0x0815) ||
|
||||
+ (CP == 0x081A) || (CP == 0x0824) || (CP == 0x0828) ||
|
||||
+ (0x082E <= CP && CP <= 0x082F) || (0x0830 <= CP && CP <= 0x083E) ||
|
||||
+ (CP == 0x083F) || (0x0840 <= CP && CP <= 0x0858) ||
|
||||
+ (0x085C <= CP && CP <= 0x085D) || (CP == 0x085E) || (CP == 0x085F) ||
|
||||
+ (CP == 0x200F) || (CP == 0xFB1D) || (0xFB1F <= CP && CP <= 0xFB28) ||
|
||||
+ (0xFB2A <= CP && CP <= 0xFB36) || (CP == 0xFB37) ||
|
||||
+ (0xFB38 <= CP && CP <= 0xFB3C) || (CP == 0xFB3D) || (CP == 0xFB3E) ||
|
||||
+ (CP == 0xFB3F) || (0xFB40 <= CP && CP <= 0xFB41) || (CP == 0xFB42) ||
|
||||
+ (0xFB43 <= CP && CP <= 0xFB44) || (CP == 0xFB45) ||
|
||||
+ (0xFB46 <= CP && CP <= 0xFB4F) || (0x10800 <= CP && CP <= 0x10805) ||
|
||||
+ (0x10806 <= CP && CP <= 0x10807) || (CP == 0x10808) ||
|
||||
+ (CP == 0x10809) || (0x1080A <= CP && CP <= 0x10835) ||
|
||||
+ (CP == 0x10836) || (0x10837 <= CP && CP <= 0x10838) ||
|
||||
+ (0x10839 <= CP && CP <= 0x1083B) || (CP == 0x1083C) ||
|
||||
+ (0x1083D <= CP && CP <= 0x1083E) || (0x1083F <= CP && CP <= 0x10855) ||
|
||||
+ (CP == 0x10856) || (CP == 0x10857) ||
|
||||
+ (0x10858 <= CP && CP <= 0x1085F) || (0x10860 <= CP && CP <= 0x10876) ||
|
||||
+ (0x10877 <= CP && CP <= 0x10878) || (0x10879 <= CP && CP <= 0x1087F) ||
|
||||
+ (0x10880 <= CP && CP <= 0x1089E) || (0x1089F <= CP && CP <= 0x108A6) ||
|
||||
+ (0x108A7 <= CP && CP <= 0x108AF) || (0x108B0 <= CP && CP <= 0x108DF) ||
|
||||
+ (0x108E0 <= CP && CP <= 0x108F2) || (CP == 0x108F3) ||
|
||||
+ (0x108F4 <= CP && CP <= 0x108F5) || (0x108F6 <= CP && CP <= 0x108FA) ||
|
||||
+ (0x108FB <= CP && CP <= 0x108FF) || (0x10900 <= CP && CP <= 0x10915) ||
|
||||
+ (0x10916 <= CP && CP <= 0x1091B) || (0x1091C <= CP && CP <= 0x1091E) ||
|
||||
+ (0x10920 <= CP && CP <= 0x10939) || (0x1093A <= CP && CP <= 0x1093E) ||
|
||||
+ (CP == 0x1093F) || (0x10940 <= CP && CP <= 0x1097F) ||
|
||||
+ (0x10980 <= CP && CP <= 0x109B7) || (0x109B8 <= CP && CP <= 0x109BB) ||
|
||||
+ (0x109BC <= CP && CP <= 0x109BD) || (0x109BE <= CP && CP <= 0x109BF) ||
|
||||
+ (0x109C0 <= CP && CP <= 0x109CF) || (0x109D0 <= CP && CP <= 0x109D1) ||
|
||||
+ (0x109D2 <= CP && CP <= 0x109FF) || (CP == 0x10A00) ||
|
||||
+ (CP == 0x10A04) || (0x10A07 <= CP && CP <= 0x10A0B) ||
|
||||
+ (0x10A10 <= CP && CP <= 0x10A13) || (CP == 0x10A14) ||
|
||||
+ (0x10A15 <= CP && CP <= 0x10A17) || (CP == 0x10A18) ||
|
||||
+ (0x10A19 <= CP && CP <= 0x10A35) || (0x10A36 <= CP && CP <= 0x10A37) ||
|
||||
+ (0x10A3B <= CP && CP <= 0x10A3E) || (0x10A40 <= CP && CP <= 0x10A48) ||
|
||||
+ (0x10A49 <= CP && CP <= 0x10A4F) || (0x10A50 <= CP && CP <= 0x10A58) ||
|
||||
+ (0x10A59 <= CP && CP <= 0x10A5F) || (0x10A60 <= CP && CP <= 0x10A7C) ||
|
||||
+ (0x10A7D <= CP && CP <= 0x10A7E) || (CP == 0x10A7F) ||
|
||||
+ (0x10A80 <= CP && CP <= 0x10A9C) || (0x10A9D <= CP && CP <= 0x10A9F) ||
|
||||
+ (0x10AA0 <= CP && CP <= 0x10ABF) || (0x10AC0 <= CP && CP <= 0x10AC7) ||
|
||||
+ (CP == 0x10AC8) || (0x10AC9 <= CP && CP <= 0x10AE4) ||
|
||||
+ (0x10AE7 <= CP && CP <= 0x10AEA) || (0x10AEB <= CP && CP <= 0x10AEF) ||
|
||||
+ (0x10AF0 <= CP && CP <= 0x10AF6) || (0x10AF7 <= CP && CP <= 0x10AFF) ||
|
||||
+ (0x10B00 <= CP && CP <= 0x10B35) || (0x10B36 <= CP && CP <= 0x10B38) ||
|
||||
+ (0x10B40 <= CP && CP <= 0x10B55) || (0x10B56 <= CP && CP <= 0x10B57) ||
|
||||
+ (0x10B58 <= CP && CP <= 0x10B5F) || (0x10B60 <= CP && CP <= 0x10B72) ||
|
||||
+ (0x10B73 <= CP && CP <= 0x10B77) || (0x10B78 <= CP && CP <= 0x10B7F) ||
|
||||
+ (0x10B80 <= CP && CP <= 0x10B91) || (0x10B92 <= CP && CP <= 0x10B98) ||
|
||||
+ (0x10B99 <= CP && CP <= 0x10B9C) || (0x10B9D <= CP && CP <= 0x10BA8) ||
|
||||
+ (0x10BA9 <= CP && CP <= 0x10BAF) || (0x10BB0 <= CP && CP <= 0x10BFF) ||
|
||||
+ (0x10C00 <= CP && CP <= 0x10C48) || (0x10C49 <= CP && CP <= 0x10C7F) ||
|
||||
+ (0x10C80 <= CP && CP <= 0x10CB2) || (0x10CB3 <= CP && CP <= 0x10CBF) ||
|
||||
+ (0x10CC0 <= CP && CP <= 0x10CF2) || (0x10CF3 <= CP && CP <= 0x10CF9) ||
|
||||
+ (0x10CFA <= CP && CP <= 0x10CFF) || (0x10D40 <= CP && CP <= 0x10E5F) ||
|
||||
+ (CP == 0x10E7F) || (0x10E80 <= CP && CP <= 0x10EA9) ||
|
||||
+ (CP == 0x10EAA) || (CP == 0x10EAD) ||
|
||||
+ (0x10EAE <= CP && CP <= 0x10EAF) || (0x10EB0 <= CP && CP <= 0x10EB1) ||
|
||||
+ (0x10EB2 <= CP && CP <= 0x10EFF) || (0x10F00 <= CP && CP <= 0x10F1C) ||
|
||||
+ (0x10F1D <= CP && CP <= 0x10F26) || (CP == 0x10F27) ||
|
||||
+ (0x10F28 <= CP && CP <= 0x10F2F) || (0x10F70 <= CP && CP <= 0x10F81) ||
|
||||
+ (0x10F86 <= CP && CP <= 0x10F89) || (0x10F8A <= CP && CP <= 0x10FAF) ||
|
||||
+ (0x10FB0 <= CP && CP <= 0x10FC4) || (0x10FC5 <= CP && CP <= 0x10FCB) ||
|
||||
+ (0x10FCC <= CP && CP <= 0x10FDF) || (0x10FE0 <= CP && CP <= 0x10FF6) ||
|
||||
+ (0x10FF7 <= CP && CP <= 0x10FFF) || (0x1E800 <= CP && CP <= 0x1E8C4) ||
|
||||
+ (0x1E8C5 <= CP && CP <= 0x1E8C6) || (0x1E8C7 <= CP && CP <= 0x1E8CF) ||
|
||||
+ (0x1E8D7 <= CP && CP <= 0x1E8FF) || (0x1E900 <= CP && CP <= 0x1E943) ||
|
||||
+ (CP == 0x1E94B) || (0x1E94C <= CP && CP <= 0x1E94F) ||
|
||||
+ (0x1E950 <= CP && CP <= 0x1E959) || (0x1E95A <= CP && CP <= 0x1E95D) ||
|
||||
+ (0x1E95E <= CP && CP <= 0x1E95F) || (0x1E960 <= CP && CP <= 0x1EC6F) ||
|
||||
+ (0x1ECC0 <= CP && CP <= 0x1ECFF) || (0x1ED50 <= CP && CP <= 0x1EDFF);
|
||||
+}
|
||||
+
|
||||
+static bool hasRTLCharacters(StringRef Buffer) {
|
||||
+ const char *CurPtr = Buffer.begin();
|
||||
+ const char *EndPtr = Buffer.end();
|
||||
+ while (CurPtr < EndPtr) {
|
||||
+ llvm::UTF32 CodePoint;
|
||||
+ llvm::ConversionResult Result = llvm::convertUTF8Sequence(
|
||||
+ (const llvm::UTF8 **)&CurPtr, (const llvm::UTF8 *)EndPtr, &CodePoint,
|
||||
+ llvm::strictConversion);
|
||||
+ if (Result != llvm::conversionOK)
|
||||
+ break;
|
||||
+ if (isUnassignedAL(CodePoint) || isUnassignedR(CodePoint) || isR(CodePoint))
|
||||
+ return true;
|
||||
+ }
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
+MisleadingIdentifierCheck::MisleadingIdentifierCheck(StringRef Name,
|
||||
+ ClangTidyContext *Context)
|
||||
+ : ClangTidyCheck(Name, Context) {}
|
||||
+
|
||||
+MisleadingIdentifierCheck::~MisleadingIdentifierCheck() = default;
|
||||
+
|
||||
+void MisleadingIdentifierCheck::check(
|
||||
+ const ast_matchers::MatchFinder::MatchResult &Result) {
|
||||
+ if (const auto *ND = Result.Nodes.getNodeAs<NamedDecl>("nameddecl")) {
|
||||
+ IdentifierInfo *II = ND->getIdentifier();
|
||||
+ if (II) {
|
||||
+ StringRef NDName = II->getName();
|
||||
+ if (hasRTLCharacters(NDName))
|
||||
+ diag(ND->getBeginLoc(), "identifier has right-to-left codepoints");
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+void MisleadingIdentifierCheck::registerMatchers(
|
||||
+ ast_matchers::MatchFinder *Finder) {
|
||||
+ Finder->addMatcher(ast_matchers::namedDecl().bind("nameddecl"), this);
|
||||
+}
|
||||
+
|
||||
+} // namespace misc
|
||||
+} // namespace tidy
|
||||
+} // namespace clang
|
||||
diff --git a/clang-tools-extra/clang-tidy/misc/MisleadingIdentifier.h b/clang-tools-extra/clang-tidy/misc/MisleadingIdentifier.h
|
||||
new file mode 100644
|
||||
index 0000000..9580ae6
|
||||
--- /dev/null
|
||||
+++ b/clang-tools-extra/clang-tidy/misc/MisleadingIdentifier.h
|
||||
@@ -0,0 +1,31 @@
|
||||
+//===--- MisleadingIdentifierCheck.h - clang-tidy ---------------*- C++ -*-===//
|
||||
+//
|
||||
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
+// See https://llvm.org/LICENSE.txt for license information.
|
||||
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
+//
|
||||
+//===----------------------------------------------------------------------===//
|
||||
+
|
||||
+#ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_MISLEADINGIDENTIFIERCHECK_H
|
||||
+#define LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_MISLEADINGIDENTIFIERCHECK_H
|
||||
+
|
||||
+#include "../ClangTidyCheck.h"
|
||||
+
|
||||
+namespace clang {
|
||||
+namespace tidy {
|
||||
+namespace misc {
|
||||
+
|
||||
+class MisleadingIdentifierCheck : public ClangTidyCheck {
|
||||
+public:
|
||||
+ MisleadingIdentifierCheck(StringRef Name, ClangTidyContext *Context);
|
||||
+ ~MisleadingIdentifierCheck();
|
||||
+
|
||||
+ void registerMatchers(ast_matchers::MatchFinder *Finder) override;
|
||||
+ void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
|
||||
+};
|
||||
+
|
||||
+} // namespace misc
|
||||
+} // namespace tidy
|
||||
+} // namespace clang
|
||||
+
|
||||
+#endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_TIDY_MISC_MISLEADINGIDENTIFIERCHECK_H
|
||||
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
|
||||
index 1eec7db..07977d0 100644
|
||||
--- a/clang-tools-extra/docs/ReleaseNotes.rst
|
||||
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
|
||||
@@ -223,6 +223,10 @@ New checks
|
||||
Inspect string literal and comments for unterminated bidirectional Unicode
|
||||
characters.
|
||||
|
||||
+- New :doc:`misc-misleading-identifier <clang-tidy/checks/misc-misleading-identifier>` check.
|
||||
+
|
||||
+ Reports identifier with unicode right-to-left characters.
|
||||
+
|
||||
New check aliases
|
||||
^^^^^^^^^^^^^^^^^
|
||||
|
||||
diff --git a/clang-tools-extra/docs/clang-tidy/checks/list.rst b/clang-tools-extra/docs/clang-tidy/checks/list.rst
|
||||
index b118639..592d69b 100644
|
||||
--- a/clang-tools-extra/docs/clang-tidy/checks/list.rst
|
||||
+++ b/clang-tools-extra/docs/clang-tidy/checks/list.rst
|
||||
@@ -209,6 +209,7 @@ Clang-Tidy Checks
|
||||
`misc-definitions-in-headers <misc-definitions-in-headers.html>`_, "Yes"
|
||||
`misc-homoglyph <misc-homoglyph.html>`_,
|
||||
`misc-misleading-bidirectional <misc-misleading-bidirectional.html>`_,
|
||||
+ `misc-misleading-identifier <misc-mileading-identifier.html>`_,
|
||||
`misc-misplaced-const <misc-misplaced-const.html>`_,
|
||||
`misc-new-delete-overloads <misc-new-delete-overloads.html>`_,
|
||||
`misc-no-recursion <misc-no-recursion.html>`_,
|
||||
diff --git a/clang-tools-extra/docs/clang-tidy/checks/misc-misleading-identifier.rst b/clang-tools-extra/docs/clang-tidy/checks/misc-misleading-identifier.rst
|
||||
new file mode 100644
|
||||
index 0000000..8bd9999
|
||||
--- /dev/null
|
||||
+++ b/clang-tools-extra/docs/clang-tidy/checks/misc-misleading-identifier.rst
|
||||
@@ -0,0 +1,23 @@
|
||||
+.. title:: clang-tidy - misc-misleading-identifier
|
||||
+
|
||||
+misc-misleading-identifier
|
||||
+==========================
|
||||
+
|
||||
+Finds identifiers that contain Unicode characters with right-to-left direction,
|
||||
+which can be confusing as they may change the understanding of a whole statement
|
||||
+line, as described in `Trojan Source <https://trojansource.codes>`_.
|
||||
+
|
||||
+An example of such misleading code follows:
|
||||
+
|
||||
+.. code-block:: c
|
||||
+
|
||||
+ #include <stdio.h>
|
||||
+
|
||||
+ short int א = (short int)0;
|
||||
+ short int ג = (short int)12345;
|
||||
+
|
||||
+ int main() {
|
||||
+ int א = ג; // a local variable, set to zero?
|
||||
+ printf("ג is %d\n", ג);
|
||||
+ printf("א is %d\n", א);
|
||||
+ }
|
||||
diff --git a/clang-tools-extra/test/clang-tidy/checkers/misc-misleading-identifier.cpp b/clang-tools-extra/test/clang-tidy/checkers/misc-misleading-identifier.cpp
|
||||
new file mode 100644
|
||||
index 0000000..cb036f9
|
||||
--- /dev/null
|
||||
+++ b/clang-tools-extra/test/clang-tidy/checkers/misc-misleading-identifier.cpp
|
||||
@@ -0,0 +1,15 @@
|
||||
+// RUN: %check_clang_tidy %s misc-misleading-identifier %t
|
||||
+
|
||||
+#include <stdio.h>
|
||||
+
|
||||
+// CHECK-MESSAGES: :[[#@LINE+1]]:1: warning: identifier has right-to-left codepoints [misc-misleading-identifier]
|
||||
+short int א = (short int)0;
|
||||
+// CHECK-MESSAGES: :[[#@LINE+1]]:1: warning: identifier has right-to-left codepoints [misc-misleading-identifier]
|
||||
+short int ג = (short int)12345;
|
||||
+
|
||||
+int main() {
|
||||
+ // CHECK-MESSAGES: :[[#@LINE+1]]:3: warning: identifier has right-to-left codepoints [misc-misleading-identifier]
|
||||
+ int א = ג; // a local variable, set to zero?
|
||||
+ printf("ג is %d\n", ג);
|
||||
+ printf("א is %d\n", א);
|
||||
+}
|
||||
--
|
||||
1.8.3.1
|
||||
|
98
SOURCES/0010-PATCH-clang-Produce-DWARF4-by-default.patch
Normal file
98
SOURCES/0010-PATCH-clang-Produce-DWARF4-by-default.patch
Normal file
@ -0,0 +1,98 @@
|
||||
From 6509777d4c12a42c7487814d868375a86712bf5b Mon Sep 17 00:00:00 2001
|
||||
From: Konrad Kleine <kkleine@redhat.com>
|
||||
Date: Thu, 24 Mar 2022 09:44:21 +0100
|
||||
Subject: [PATCH][clang]Produce DWARF4 by default
|
||||
|
||||
Have a look at the following commit to see when the move from DWARF 4 to 5 first happened upstream:
|
||||
|
||||
https://github.com/llvm/llvm-project/commit/d3b26dea16108c427b19b5480c9edc76edf8f5b4?diff=unified
|
||||
---
|
||||
clang/include/clang/Driver/ToolChain.h | 2 +-
|
||||
clang/test/CodeGen/dwarf-version.c | 4 ++--
|
||||
clang/test/Driver/cl-options.c | 2 +-
|
||||
clang/test/Driver/ve-toolchain.c | 2 +-
|
||||
clang/test/Driver/ve-toolchain.cpp | 2 +-
|
||||
5 files changed, 6 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/clang/include/clang/Driver/ToolChain.h b/clang/include/clang/Driver/ToolChain.h
|
||||
index adf1753e8d3a..c8adc4d917ce 100644
|
||||
--- a/clang/include/clang/Driver/ToolChain.h
|
||||
+++ b/clang/include/clang/Driver/ToolChain.h
|
||||
@@ -515,7 +515,7 @@ public:
|
||||
|
||||
// Return the DWARF version to emit, in the absence of arguments
|
||||
// to the contrary.
|
||||
- virtual unsigned GetDefaultDwarfVersion() const { return 5; }
|
||||
+ virtual unsigned GetDefaultDwarfVersion() const { return 4; }
|
||||
|
||||
// Some toolchains may have different restrictions on the DWARF version and
|
||||
// may need to adjust it. E.g. NVPTX may need to enforce DWARF2 even when host
|
||||
diff --git a/clang/test/CodeGen/dwarf-version.c b/clang/test/CodeGen/dwarf-version.c
|
||||
index 0a6fa4768026..96f01749d0d8 100644
|
||||
--- a/clang/test/CodeGen/dwarf-version.c
|
||||
+++ b/clang/test/CodeGen/dwarf-version.c
|
||||
@@ -2,8 +2,8 @@
|
||||
// RUN: %clang -target x86_64-linux-gnu -gdwarf-3 -S -emit-llvm -o - %s | FileCheck %s --check-prefix=VER3
|
||||
// RUN: %clang -target x86_64-linux-gnu -gdwarf-4 -S -emit-llvm -o - %s | FileCheck %s --check-prefix=VER4
|
||||
// RUN: %clang -target x86_64-linux-gnu -gdwarf-5 -S -emit-llvm -o - %s | FileCheck %s --check-prefix=VER5
|
||||
-// RUN: %clang -target x86_64-linux-gnu -g -S -emit-llvm -o - %s | FileCheck %s --check-prefix=VER5
|
||||
-// RUN: %clang -target x86_64-linux-gnu -gdwarf -S -emit-llvm -o - %s | FileCheck %s --check-prefix=VER5
|
||||
+// RUN: %clang -target x86_64-linux-gnu -g -S -emit-llvm -o - %s | FileCheck %s --check-prefix=VER4
|
||||
+// RUN: %clang -target x86_64-linux-gnu -gdwarf -S -emit-llvm -o - %s | FileCheck %s --check-prefix=VER4
|
||||
|
||||
// The -isysroot is used as a hack to avoid LIT messing with the SDKROOT
|
||||
// environment variable which indirecty overrides the version in the target
|
||||
diff --git a/clang/test/Driver/cl-options.c b/clang/test/Driver/cl-options.c
|
||||
index f332cd83b26e..911779fffbef 100644
|
||||
--- a/clang/test/Driver/cl-options.c
|
||||
+++ b/clang/test/Driver/cl-options.c
|
||||
@@ -597,7 +597,7 @@
|
||||
// RUN: %clang_cl /Z7 -gdwarf /c -### -- %s 2>&1 | FileCheck -check-prefix=Z7_gdwarf %s
|
||||
// Z7_gdwarf: "-gcodeview"
|
||||
// Z7_gdwarf: "-debug-info-kind=constructor"
|
||||
-// Z7_gdwarf: "-dwarf-version=
|
||||
+// Z7_gdwarf: "-dwarf-version=4
|
||||
|
||||
// RUN: %clang_cl -fmsc-version=1800 -TP -### -- %s 2>&1 | FileCheck -check-prefix=CXX11 %s
|
||||
// CXX11: -std=c++11
|
||||
diff --git a/clang/test/Driver/ve-toolchain.c b/clang/test/Driver/ve-toolchain.c
|
||||
index 753dee19fcbf..dfd12cc0bba4 100644
|
||||
--- a/clang/test/Driver/ve-toolchain.c
|
||||
+++ b/clang/test/Driver/ve-toolchain.c
|
||||
@@ -6,7 +6,7 @@
|
||||
/// Checking dwarf-version
|
||||
|
||||
// RUN: %clang -### -g -target ve %s 2>&1 | FileCheck -check-prefix=DWARF_VER %s
|
||||
-// DWARF_VER: "-dwarf-version=5"
|
||||
+// DWARF_VER: "-dwarf-version=4"
|
||||
|
||||
///-----------------------------------------------------------------------------
|
||||
/// Checking include-path
|
||||
diff --git a/clang/test/Driver/ve-toolchain.cpp b/clang/test/Driver/ve-toolchain.cpp
|
||||
index 4b2b9c5747fe..3a196dd94ca1 100644
|
||||
--- a/clang/test/Driver/ve-toolchain.cpp
|
||||
+++ b/clang/test/Driver/ve-toolchain.cpp
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
// RUN: %clangxx -### -g -target ve-unknown-linux-gnu \
|
||||
// RUN: %s 2>&1 | FileCheck -check-prefix=DWARF_VER %s
|
||||
-// DWARF_VER: "-dwarf-version=5"
|
||||
+// DWARF_VER: "-dwarf-version=4"
|
||||
|
||||
///-----------------------------------------------------------------------------
|
||||
/// Checking include-path
|
||||
diff -ruN clang-14.0.0.src.orig/test/Driver/clang-g-opts.c clang-14.0.0.src/test/Driver/clang-g-opts.c
|
||||
--- a/clang-14.0.0.src.orig/test/Driver/clang-g-opts.c 2022-03-14 10:44:55.000000000 +0100
|
||||
+++ b/clang-14.0.0.src/test/Driver/clang-g-opts.c 2022-04-13 06:36:55.832253890 +0200
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
// CHECK-WITHOUT-G-NOT: -debug-info-kind
|
||||
// CHECK-WITH-G: "-debug-info-kind=constructor"
|
||||
-// CHECK-WITH-G: "-dwarf-version=5"
|
||||
+// CHECK-WITH-G: "-dwarf-version=4"
|
||||
// CHECK-WITH-G-DWARF2: "-dwarf-version=2"
|
||||
|
||||
// CHECK-WITH-G-STANDALONE: "-debug-info-kind=standalone"
|
||||
--
|
||||
2.35.1
|
||||
|
Binary file not shown.
BIN
SOURCES/clang-14.0.6.src.tar.xz.sig
Normal file
BIN
SOURCES/clang-14.0.6.src.tar.xz.sig
Normal file
Binary file not shown.
Binary file not shown.
BIN
SOURCES/clang-tools-extra-14.0.6.src.tar.xz.sig
Normal file
BIN
SOURCES/clang-tools-extra-14.0.6.src.tar.xz.sig
Normal file
Binary file not shown.
128
SOURCES/clangd-tests.patch
Normal file
128
SOURCES/clangd-tests.patch
Normal file
@ -0,0 +1,128 @@
|
||||
diff --git a/clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp b/clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp
|
||||
index 0c9455f..22638ee 100644
|
||||
--- a/clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp
|
||||
+++ b/clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp
|
||||
@@ -451,123 +451,6 @@ TEST_F(TUSchedulerTests, InvalidationUnchanged) {
|
||||
EXPECT_EQ(1, Actions.load()) << "All actions should run";
|
||||
}
|
||||
|
||||
-TEST_F(TUSchedulerTests, ManyUpdates) {
|
||||
- const int FilesCount = 3;
|
||||
- const int UpdatesPerFile = 10;
|
||||
-
|
||||
- std::mutex Mut;
|
||||
- int TotalASTReads = 0;
|
||||
- int TotalPreambleReads = 0;
|
||||
- int TotalUpdates = 0;
|
||||
- llvm::StringMap<int> LatestDiagVersion;
|
||||
-
|
||||
- // Run TUScheduler and collect some stats.
|
||||
- {
|
||||
- auto Opts = optsForTest();
|
||||
- Opts.UpdateDebounce = DebouncePolicy::fixed(std::chrono::milliseconds(50));
|
||||
- TUScheduler S(CDB, Opts, captureDiags());
|
||||
-
|
||||
- std::vector<std::string> Files;
|
||||
- for (int I = 0; I < FilesCount; ++I) {
|
||||
- std::string Name = "foo" + std::to_string(I) + ".cpp";
|
||||
- Files.push_back(testPath(Name));
|
||||
- this->FS.Files[Files.back()] = "";
|
||||
- }
|
||||
-
|
||||
- StringRef Contents1 = R"cpp(int a;)cpp";
|
||||
- StringRef Contents2 = R"cpp(int main() { return 1; })cpp";
|
||||
- StringRef Contents3 = R"cpp(int a; int b; int sum() { return a + b; })cpp";
|
||||
-
|
||||
- StringRef AllContents[] = {Contents1, Contents2, Contents3};
|
||||
- const int AllContentsSize = 3;
|
||||
-
|
||||
- // Scheduler may run tasks asynchronously, but should propagate the
|
||||
- // context. We stash a nonce in the context, and verify it in the task.
|
||||
- static Key<int> NonceKey;
|
||||
- int Nonce = 0;
|
||||
-
|
||||
- for (int FileI = 0; FileI < FilesCount; ++FileI) {
|
||||
- for (int UpdateI = 0; UpdateI < UpdatesPerFile; ++UpdateI) {
|
||||
- auto Contents = AllContents[(FileI + UpdateI) % AllContentsSize];
|
||||
-
|
||||
- auto File = Files[FileI];
|
||||
- auto Inputs = getInputs(File, Contents.str());
|
||||
- {
|
||||
- WithContextValue WithNonce(NonceKey, ++Nonce);
|
||||
- Inputs.Version = std::to_string(UpdateI);
|
||||
- updateWithDiags(
|
||||
- S, File, Inputs, WantDiagnostics::Auto,
|
||||
- [File, Nonce, Version(Inputs.Version), &Mut, &TotalUpdates,
|
||||
- &LatestDiagVersion](std::vector<Diag>) {
|
||||
- EXPECT_THAT(Context::current().get(NonceKey), Pointee(Nonce));
|
||||
- EXPECT_EQ(File, boundPath());
|
||||
-
|
||||
- std::lock_guard<std::mutex> Lock(Mut);
|
||||
- ++TotalUpdates;
|
||||
- EXPECT_EQ(File, *TUScheduler::getFileBeingProcessedInContext());
|
||||
- // Make sure Diags are for a newer version.
|
||||
- auto It = LatestDiagVersion.try_emplace(File, -1);
|
||||
- const int PrevVersion = It.first->second;
|
||||
- int CurVersion;
|
||||
- ASSERT_TRUE(llvm::to_integer(Version, CurVersion, 10));
|
||||
- EXPECT_LT(PrevVersion, CurVersion);
|
||||
- It.first->getValue() = CurVersion;
|
||||
- });
|
||||
- }
|
||||
- {
|
||||
- WithContextValue WithNonce(NonceKey, ++Nonce);
|
||||
- S.runWithAST(
|
||||
- "CheckAST", File,
|
||||
- [File, Inputs, Nonce, &Mut,
|
||||
- &TotalASTReads](Expected<InputsAndAST> AST) {
|
||||
- EXPECT_THAT(Context::current().get(NonceKey), Pointee(Nonce));
|
||||
- EXPECT_EQ(File, boundPath());
|
||||
-
|
||||
- ASSERT_TRUE((bool)AST);
|
||||
- EXPECT_EQ(AST->Inputs.Contents, Inputs.Contents);
|
||||
- EXPECT_EQ(AST->Inputs.Version, Inputs.Version);
|
||||
- EXPECT_EQ(AST->AST.version(), Inputs.Version);
|
||||
-
|
||||
- std::lock_guard<std::mutex> Lock(Mut);
|
||||
- ++TotalASTReads;
|
||||
- EXPECT_EQ(File, *TUScheduler::getFileBeingProcessedInContext());
|
||||
- });
|
||||
- }
|
||||
-
|
||||
- {
|
||||
- WithContextValue WithNonce(NonceKey, ++Nonce);
|
||||
- S.runWithPreamble(
|
||||
- "CheckPreamble", File, TUScheduler::Stale,
|
||||
- [File, Inputs, Nonce, &Mut,
|
||||
- &TotalPreambleReads](Expected<InputsAndPreamble> Preamble) {
|
||||
- EXPECT_THAT(Context::current().get(NonceKey), Pointee(Nonce));
|
||||
- EXPECT_EQ(File, boundPath());
|
||||
-
|
||||
- ASSERT_TRUE((bool)Preamble);
|
||||
- EXPECT_EQ(Preamble->Contents, Inputs.Contents);
|
||||
-
|
||||
- std::lock_guard<std::mutex> Lock(Mut);
|
||||
- ++TotalPreambleReads;
|
||||
- EXPECT_EQ(File, *TUScheduler::getFileBeingProcessedInContext());
|
||||
- });
|
||||
- }
|
||||
- }
|
||||
- }
|
||||
- ASSERT_TRUE(S.blockUntilIdle(timeoutSeconds(10)));
|
||||
- } // TUScheduler destructor waits for all operations to finish.
|
||||
-
|
||||
- std::lock_guard<std::mutex> Lock(Mut);
|
||||
- // Updates might get coalesced in preamble thread and result in dropping
|
||||
- // diagnostics for intermediate snapshots.
|
||||
- EXPECT_GE(TotalUpdates, FilesCount);
|
||||
- EXPECT_LE(TotalUpdates, FilesCount * UpdatesPerFile);
|
||||
- // We should receive diags for last update.
|
||||
- for (const auto &Entry : LatestDiagVersion)
|
||||
- EXPECT_EQ(Entry.second, UpdatesPerFile - 1);
|
||||
- EXPECT_EQ(TotalASTReads, FilesCount * UpdatesPerFile);
|
||||
- EXPECT_EQ(TotalPreambleReads, FilesCount * UpdatesPerFile);
|
||||
-}
|
||||
-
|
||||
TEST_F(TUSchedulerTests, EvictedAST) {
|
||||
std::atomic<int> BuiltASTCounter(0);
|
||||
auto Opts = optsForTest();
|
26
SOURCES/disable-recommonmark.patch
Normal file
26
SOURCES/disable-recommonmark.patch
Normal file
@ -0,0 +1,26 @@
|
||||
diff -ruN clang-14.0.0.src.orig/docs/conf.py clang-14.0.0.src/docs/conf.py
|
||||
--- a/clang-14.0.0.src.orig/docs/conf.py 2022-03-14 10:44:55.000000000 +0100
|
||||
+++ b/clang-14.0.0.src/docs/conf.py 2022-04-11 11:13:44.483641113 +0200
|
||||
@@ -37,20 +37,7 @@
|
||||
'.rst': 'restructuredtext',
|
||||
}
|
||||
|
||||
-try:
|
||||
- import recommonmark
|
||||
-except ImportError:
|
||||
- # manpages do not use any .md sources
|
||||
- if not tags.has('builder-man'):
|
||||
- raise
|
||||
-else:
|
||||
- import sphinx
|
||||
- if sphinx.version_info >= (3, 0):
|
||||
- # This requires 0.5 or later.
|
||||
- extensions.append('recommonmark')
|
||||
- else:
|
||||
- source_parsers = {'.md': 'recommonmark.parser.CommonMarkParser'}
|
||||
- source_suffix['.md'] = 'markdown'
|
||||
+import sphinx
|
||||
|
||||
# The encoding of source files.
|
||||
#source_encoding = 'utf-8-sig'
|
||||
|
61
SOURCES/llvm-hello.patch
Normal file
61
SOURCES/llvm-hello.patch
Normal file
@ -0,0 +1,61 @@
|
||||
diff -ruN a/clang-tools-extra-14.0.0rc2.src.orig/test/clang-tidy/CTTestTidyModule.cpp a/clang-tools-extra-14.0.0rc2.src/test/clang-tidy/CTTestTidyModule.cpp
|
||||
--- a/clang-tools-extra-14.0.0rc2.src.orig/test/clang-tidy/CTTestTidyModule.cpp 2022-03-02 01:46:37.000000000 +0100
|
||||
+++ a/clang-tools-extra-14.0.0rc2.src/test/clang-tidy/CTTestTidyModule.cpp 2022-03-07 08:52:20.009112976 +0100
|
||||
@@ -1,4 +1,4 @@
|
||||
-// REQUIRES: plugins
|
||||
+// REQUIRES: plugins, llvm-hello
|
||||
// RUN: clang-tidy -checks='-*,mytest*' --list-checks -load %llvmshlibdir/CTTestTidyModule%pluginext -load %llvmshlibdir/LLVMHello%pluginext | FileCheck --check-prefix=CHECK-LIST %s
|
||||
// CHECK-LIST: Enabled checks:
|
||||
// CHECK-LIST-NEXT: mytest1
|
||||
diff -ruN a/clang-tools-extra-14.0.0rc2.src.orig/test/CMakeLists.txt a/clang-tools-extra-14.0.0rc2.src/test/CMakeLists.txt
|
||||
--- a/clang-tools-extra-14.0.0rc2.src.orig/test/CMakeLists.txt 2022-03-02 01:46:37.000000000 +0100
|
||||
+++ a/clang-tools-extra-14.0.0rc2.src/test/CMakeLists.txt 2022-03-07 10:58:56.172490672 +0100
|
||||
@@ -15,10 +15,15 @@
|
||||
|
||||
string(REPLACE ${CMAKE_CFG_INTDIR} ${LLVM_BUILD_MODE} CLANG_TOOLS_DIR ${LLVM_RUNTIME_OUTPUT_INTDIR})
|
||||
|
||||
+if (TARGET LLVMHello)
|
||||
+ set (LLVM_HAS_LLVM_HELLO 1)
|
||||
+endif()
|
||||
+
|
||||
llvm_canonicalize_cmake_booleans(
|
||||
CLANG_TIDY_ENABLE_STATIC_ANALYZER
|
||||
CLANG_PLUGIN_SUPPORT
|
||||
LLVM_INSTALL_TOOLCHAIN_ONLY
|
||||
+ LLVM_HAS_LLVM_HELLO
|
||||
)
|
||||
|
||||
configure_lit_site_cfg(
|
||||
@@ -97,7 +102,10 @@
|
||||
endif()
|
||||
|
||||
if(TARGET CTTestTidyModule)
|
||||
- list(APPEND CLANG_TOOLS_TEST_DEPS CTTestTidyModule LLVMHello)
|
||||
+ list(APPEND CLANG_TOOLS_TEST_DEPS CTTestTidyModule)
|
||||
+ if (TARGET LLVMHello)
|
||||
+ list(APPEND CLANG_TOOLS_TEST_DEPS CTTestTidyModule) # Should be LLVMHello?
|
||||
+ endif()
|
||||
target_include_directories(CTTestTidyModule PUBLIC BEFORE "${CLANG_TOOLS_SOURCE_DIR}")
|
||||
if(CLANG_PLUGIN_SUPPORT AND (WIN32 OR CYGWIN))
|
||||
set(LLVM_LINK_COMPONENTS
|
||||
diff -ruN a/clang-tools-extra-14.0.0rc2.src.orig/test/lit.cfg.py a/clang-tools-extra-14.0.0rc2.src/test/lit.cfg.py
|
||||
--- a/clang-tools-extra-14.0.0rc2.src.orig/test/lit.cfg.py 2022-03-02 01:46:37.000000000 +0100
|
||||
+++ a/clang-tools-extra-14.0.0rc2.src/test/lit.cfg.py 2022-03-07 08:52:20.010112983 +0100
|
||||
@@ -155,3 +155,6 @@
|
||||
# Plugins (loadable modules)
|
||||
if config.has_plugins and config.llvm_plugin_ext:
|
||||
config.available_features.add('plugins')
|
||||
+
|
||||
+if config.has_llvm_hello:
|
||||
+ config.available_features.add('llvm-hello')
|
||||
diff -ruN a/clang-tools-extra-14.0.0rc2.src.orig/test/lit.site.cfg.py.in a/clang-tools-extra-14.0.0rc2.src/test/lit.site.cfg.py.in
|
||||
--- a/clang-tools-extra-14.0.0rc2.src.orig/test/lit.site.cfg.py.in 2022-03-02 01:46:37.000000000 +0100
|
||||
+++ a/clang-tools-extra-14.0.0rc2.src/test/lit.site.cfg.py.in 2022-03-07 10:59:17.202663983 +0100
|
||||
@@ -13,6 +13,7 @@
|
||||
config.target_triple = "@TARGET_TRIPLE@"
|
||||
config.clang_tidy_staticanalyzer = @CLANG_TIDY_ENABLE_STATIC_ANALYZER@
|
||||
config.has_plugins = @CLANG_PLUGIN_SUPPORT@ & ~@LLVM_INSTALL_TOOLCHAIN_ONLY@
|
||||
+config.has_llvm_hello = @LLVM_HAS_LLVM_HELLO@
|
||||
|
||||
# Support substitution of the tools and libs dirs with user parameters. This is
|
||||
# used when we can't determine the tool dir at configuration time.
|
20
SOURCES/remove-test.patch
Normal file
20
SOURCES/remove-test.patch
Normal file
@ -0,0 +1,20 @@
|
||||
diff --git a/clang-tools-extra/unittests/clang-tidy/CMakeLists.txt b/clang-tools-extra/unittests/clang-tidy/CMakeLists.txt
|
||||
index 253f78eb36ea..1199da3e4cfd 100644
|
||||
--- a/clang-tools-extra/unittests/clang-tidy/CMakeLists.txt
|
||||
+++ b/clang-tools-extra/unittests/clang-tidy/CMakeLists.txt
|
||||
@@ -30,7 +30,6 @@ add_extra_unittest(ClangTidyTests
|
||||
OptionsProviderTest.cpp
|
||||
OverlappingReplacementsTest.cpp
|
||||
UsingInserterTest.cpp
|
||||
- ReadabilityModuleTest.cpp
|
||||
TransformerClangTidyCheckTest.cpp
|
||||
)
|
||||
|
||||
@@ -54,7 +53,6 @@ target_link_libraries(ClangTidyTests
|
||||
clangTidyGoogleModule
|
||||
clangTidyLLVMModule
|
||||
clangTidyObjCModule
|
||||
- clangTidyReadabilityModule
|
||||
clangTidyUtils
|
||||
LLVMTestingSupport
|
||||
)
|
203
SPECS/clang.spec
203
SPECS/clang.spec
@ -1,43 +1,12 @@
|
||||
%bcond_with compat_build
|
||||
%bcond_without check
|
||||
|
||||
%global maj_ver 13
|
||||
%global maj_ver 14
|
||||
%global min_ver 0
|
||||
%global patch_ver 1
|
||||
%global patch_ver 6
|
||||
#global rc_ver 4
|
||||
%global clang_version %{maj_ver}.%{min_ver}.%{patch_ver}
|
||||
|
||||
%global clang_tools_binaries \
|
||||
%{_bindir}/clang-apply-replacements \
|
||||
%{_bindir}/clang-change-namespace \
|
||||
%{_bindir}/clang-check \
|
||||
%{_bindir}/clang-doc \
|
||||
%{_bindir}/clang-extdef-mapping \
|
||||
%{_bindir}/clang-format \
|
||||
%{_bindir}/clang-include-fixer \
|
||||
%{_bindir}/clang-move \
|
||||
%{_bindir}/clang-offload-bundler \
|
||||
%{_bindir}/clang-offload-wrapper \
|
||||
%{_bindir}/clang-query \
|
||||
%{_bindir}/clang-refactor \
|
||||
%{_bindir}/clang-rename \
|
||||
%{_bindir}/clang-reorder-fields \
|
||||
%{_bindir}/clang-repl \
|
||||
%{_bindir}/clang-scan-deps \
|
||||
%{_bindir}/clang-tidy \
|
||||
%{_bindir}/clangd \
|
||||
%{_bindir}/diagtool \
|
||||
%{_bindir}/hmaptool \
|
||||
%{_bindir}/pp-trace
|
||||
|
||||
%global clang_binaries \
|
||||
%{_bindir}/clang \
|
||||
%{_bindir}/clang++ \
|
||||
%{_bindir}/clang-%{maj_ver} \
|
||||
%{_bindir}/clang++-%{maj_ver} \
|
||||
%{_bindir}/clang-cl \
|
||||
%{_bindir}/clang-cpp \
|
||||
|
||||
%if %{with compat_build}
|
||||
%global pkg_name clang%{maj_ver}
|
||||
# Install clang to same prefix as llvm, so that apps that use llvm-config
|
||||
@ -70,21 +39,9 @@
|
||||
%global abi_revision 2
|
||||
%endif
|
||||
|
||||
%if 0%{?fedora} || 0%{?rhel} > 7
|
||||
%bcond_without python3
|
||||
%else
|
||||
%bcond_with python3
|
||||
%endif
|
||||
|
||||
%if 0%{?rhel}
|
||||
%global gcc_toolset_version 11
|
||||
%global gcc_pkg_prefix gcc-toolset-%{gcc_toolset_version}-
|
||||
%global gcc_install_prefix /opt/rh/gcc-toolset-%{gcc_toolset_version}/root/usr/
|
||||
%endif
|
||||
|
||||
Name: %pkg_name
|
||||
Version: %{maj_ver}.%{min_ver}.%{patch_ver}%{?rc_ver:~rc%{rc_ver}}
|
||||
Release: 2%{?dist}
|
||||
Version: %{clang_version}%{?rc_ver:~rc%{rc_ver}}
|
||||
Release: 1%{?dist}
|
||||
Summary: A C language family front-end for LLVM
|
||||
|
||||
License: NCSA
|
||||
@ -106,19 +63,18 @@ Patch1: 0002-PATCH-clang-Make-funwind-tables-the-default-on-all-a.patch
|
||||
Patch2: 0003-PATCH-clang-Don-t-install-static-libraries.patch
|
||||
Patch3: 0001-Driver-Add-a-gcc-equivalent-triple-to-the-list-of-tr.patch
|
||||
Patch4: 0001-cmake-Allow-shared-libraries-to-customize-the-soname.patch
|
||||
Patch5: 0001-PATCH-clang-Fix-scan-build-py-executable-lookup-path.patch
|
||||
# This patch can be dropped once gcc-12.0.1-0.5.fc36 is in the repo.
|
||||
Patch5: 0001-Work-around-gcc-miscompile.patch
|
||||
Patch7: 0010-PATCH-clang-Produce-DWARF4-by-default.patch
|
||||
Patch8: disable-recommonmark.patch
|
||||
|
||||
|
||||
# Patches for clang-tools-extra
|
||||
%if !0%{?compat_build}
|
||||
%ifarch ix86
|
||||
Patch201 clangd-tests.patch
|
||||
%if %{without compat_build}
|
||||
Patch201: clangd-tests.patch
|
||||
Patch202: llvm-hello.patch
|
||||
Patch203: remove-test.patch
|
||||
%endif
|
||||
%endif
|
||||
|
||||
Patch202: 0001-Confusable-identifiers-detection.patch
|
||||
Patch203: 0002-Misleading-bidirectional-detection.patch
|
||||
Patch204: 0003-Misleading-unicode-identifier-detection-pass.patch
|
||||
|
||||
BuildRequires: gcc
|
||||
BuildRequires: gcc-c++
|
||||
@ -143,16 +99,14 @@ BuildRequires: ncurses-devel
|
||||
# should BuildRequires: emacs if it packages emacs integration files.
|
||||
BuildRequires: emacs
|
||||
|
||||
# These build dependencies are required for the test suite.
|
||||
%if %with python3
|
||||
# The testsuite uses /usr/bin/lit which is part of the python3-lit package.
|
||||
BuildRequires: python3-lit
|
||||
%endif
|
||||
|
||||
BuildRequires: python3-sphinx
|
||||
BuildRequires: pandoc
|
||||
BuildRequires: libatomic
|
||||
|
||||
# We need python3-devel for pathfix.py.
|
||||
# We need python3-devel for %%py3_shebang_fix
|
||||
BuildRequires: python3-devel
|
||||
|
||||
%if ! 0%{?rhel}
|
||||
@ -165,6 +119,9 @@ BuildRequires: /usr/bin/marshalparser
|
||||
# Needed for %%multilib_fix_c_header
|
||||
BuildRequires: multilib-rpm-config
|
||||
|
||||
# For origin certification
|
||||
BuildRequires: gnupg2
|
||||
|
||||
# scan-build uses these perl modules so they need to be installed in order
|
||||
# to run the tests.
|
||||
BuildRequires: perl(Digest::MD5)
|
||||
@ -184,13 +141,12 @@ Requires: %{name}-libs%{?_isa} = %{version}-%{release}
|
||||
# clang requires gcc, clang++ requires libstdc++-devel
|
||||
# - https://bugzilla.redhat.com/show_bug.cgi?id=1021645
|
||||
# - https://bugzilla.redhat.com/show_bug.cgi?id=1158594
|
||||
Requires: %{?gcc_pkg_prefix}libstdc++-devel
|
||||
Requires: %{?gcc_pkg_prefix}gcc-c++
|
||||
Requires: libstdc++-devel
|
||||
Requires: gcc-c++
|
||||
|
||||
Provides: clang(major) = %{maj_ver}
|
||||
|
||||
Conflicts: compiler-rt < %{version}
|
||||
Conflicts: compiler-rt > %{version}
|
||||
Conflicts: compiler-rt < 11.0.0
|
||||
|
||||
%description
|
||||
clang: noun
|
||||
@ -209,12 +165,19 @@ libomp-devel to enable -fopenmp.
|
||||
%package libs
|
||||
Summary: Runtime library for clang
|
||||
Requires: %{name}-resource-filesystem%{?_isa} = %{version}
|
||||
# RHEL specific: Use libstdc++ from gcc12 by default. rhbz#2064507
|
||||
Requires: gcc-toolset-12-gcc-c++
|
||||
Recommends: compiler-rt%{?_isa} = %{version}
|
||||
# libomp-devel is required, so clang can find the omp.h header when compiling
|
||||
# with -fopenmp.
|
||||
Recommends: libomp-devel%{_isa} = %{version}
|
||||
Recommends: libomp%{_isa} = %{version}
|
||||
|
||||
# Use lld as the default linker on ARM due to rhbz#1918924
|
||||
%ifarch %{arm}
|
||||
Requires: lld
|
||||
%endif
|
||||
|
||||
%description libs
|
||||
Runtime library for clang.
|
||||
|
||||
@ -283,36 +246,54 @@ Requires: python3
|
||||
|
||||
|
||||
%prep
|
||||
%{gpgverify} --keyring='%{SOURCE4}' --signature='%{SOURCE3}' --data='%{SOURCE0}'
|
||||
|
||||
%if %{with compat_build}
|
||||
%autosetup -n %{clang_srcdir} -p2
|
||||
%else
|
||||
|
||||
%{gpgverify} --keyring='%{SOURCE4}' --signature='%{SOURCE2}' --data='%{SOURCE1}'
|
||||
%setup -T -q -b 1 -n %{clang_tools_srcdir}
|
||||
%autopatch -m200 -p2
|
||||
|
||||
|
||||
# This test is broken upstream. It is a clang-tidy unittest
|
||||
# that includes a file from clang, breaking standalone builds.
|
||||
# https://github.com/llvm/llvm-project/issues/54116
|
||||
rm unittests/clang-tidy/ReadabilityModuleTest.cpp
|
||||
|
||||
# failing test case
|
||||
rm test/clang-tidy/checkers/altera-struct-pack-align.cpp
|
||||
|
||||
pathfix.py -i %{__python3} -pn \
|
||||
clang-tidy/tool/*.py \
|
||||
%py3_shebang_fix \
|
||||
clang-tidy/tool/run-clang-tidy.py \
|
||||
clang-tidy/tool/clang-tidy-diff.py \
|
||||
clang-include-fixer/find-all-symbols/tool/run-find-all-symbols.py
|
||||
|
||||
|
||||
%setup -q -n %{clang_srcdir}
|
||||
%autopatch -M200 -p2
|
||||
|
||||
# failing test case
|
||||
rm test/CodeGen/profile-filter.c
|
||||
|
||||
pathfix.py -i %{__python3} -pn \
|
||||
tools/clang-format/*.py \
|
||||
%py3_shebang_fix \
|
||||
tools/clang-format/ \
|
||||
tools/clang-format/git-clang-format \
|
||||
utils/hmaptool/hmaptool \
|
||||
tools/scan-view/bin/scan-view \
|
||||
tools/scan-view/share/Reporter.py \
|
||||
tools/scan-view/share/startfile.py \
|
||||
tools/scan-build-py/bin/* \
|
||||
tools/scan-build-py/libexec/*
|
||||
|
||||
# Convert markdown files to rst to cope with the absence of compatible md parser in rhel.
|
||||
# The sed expression takes care of a slight difference between pandoc markdown and sphinx markdown.
|
||||
find -name '*.md' | while read md; do sed -r -e 's/^( )*\* /\n\1\* /' ${md} | pandoc -f markdown -o ${md%.md}.rst ; done
|
||||
|
||||
%endif
|
||||
|
||||
%build
|
||||
|
||||
# We run the builders out of memory on armv7 and i686 when LTO is enabled
|
||||
%ifarch %{arm} i686
|
||||
%define _lto_cflags %{nil}
|
||||
@ -334,28 +315,31 @@ sed -i 's/\@FEDORA_LLVM_LIB_SUFFIX\@//g' test/lit.cfg.py
|
||||
mkdir -p %{_vpath_builddir}
|
||||
cd %{_vpath_builddir}
|
||||
|
||||
%ifarch s390 s390x %{arm} %ix86 ppc64le
|
||||
%ifarch s390 s390x %{arm} %ix86 ppc64le aarch64
|
||||
# Decrease debuginfo verbosity to reduce memory consumption during final library linking
|
||||
%global optflags %(echo %{optflags} | sed 's/-g /-g1 /')
|
||||
%endif
|
||||
|
||||
# -DCMAKE_INSTALL_RPATH=";" is a workaround for llvm manually setting the
|
||||
# rpath of libraries and binaries. llvm will skip the manual setting
|
||||
# if CAMKE_INSTALL_RPATH is set to a value, but cmake interprets this value
|
||||
# as nothing, so it sets the rpath to "" when installing.
|
||||
|
||||
%set_build_flags
|
||||
CXXFLAGS="$CXXFLAGS -Wno-address -Wno-nonnull -Wno-maybe-uninitialized"
|
||||
CFLAGS="$CFLAGS -Wno-address -Wno-nonnull -Wno-maybe-uninitialized"
|
||||
|
||||
# -DLLVM_ENABLE_NEW_PASS_MANAGER=ON can be removed once this patch is committed:
|
||||
# https://reviews.llvm.org/D107628
|
||||
%cmake .. -G Ninja \
|
||||
-DLLVM_PARALLEL_LINK_JOBS=1 \
|
||||
-DLLVM_LINK_LLVM_DYLIB:BOOL=ON \
|
||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||||
-DPYTHON_EXECUTABLE=%{__python3} \
|
||||
-DCMAKE_INSTALL_RPATH:BOOL=";" \
|
||||
%ifarch s390 s390x %{arm} %ix86 ppc64le
|
||||
-DCMAKE_SKIP_RPATH:BOOL=ON \
|
||||
%ifarch s390 s390x %{arm} %ix86 ppc64le aarch64
|
||||
-DCMAKE_C_FLAGS_RELWITHDEBINFO="%{optflags} -DNDEBUG" \
|
||||
-DCMAKE_CXX_FLAGS_RELWITHDEBINFO="%{optflags} -DNDEBUG" \
|
||||
%endif
|
||||
%if %{with compat_build}
|
||||
-DCLANG_BUILD_TOOLS:BOOL=OFF \
|
||||
-DLLVM_CONFIG:FILEPATH=%{_bindir}/llvm-config-%{maj_ver} \
|
||||
-DLLVM_CONFIG:FILEPATH=%{pkg_bindir}/llvm-config-%{maj_ver}-%{__isa_bits} \
|
||||
-DCMAKE_INSTALL_PREFIX=%{install_prefix} \
|
||||
-DCLANG_INCLUDE_TESTS:BOOL=OFF \
|
||||
%else
|
||||
@ -391,9 +375,12 @@ cd %{_vpath_builddir}
|
||||
\
|
||||
-DCLANG_BUILD_EXAMPLES:BOOL=OFF \
|
||||
-DBUILD_SHARED_LIBS=OFF \
|
||||
%{?gcc_install_prefix:-DGCC_INSTALL_PREFIX=%{gcc_install_prefix}} \
|
||||
-DCLANG_REPOSITORY_STRING="%{?fedora:Fedora}%{?rhel:Red Hat} %{version}-%{release}" \
|
||||
-DCLANG_DEFAULT_UNWINDLIB=libgcc
|
||||
%ifarch %{arm}
|
||||
-DCLANG_DEFAULT_LINKER=lld \
|
||||
%endif
|
||||
-DCLANG_DEFAULT_UNWINDLIB=libgcc \
|
||||
-DGCC_INSTALL_PREFIX=/opt/rh/gcc-toolset-12/root/usr
|
||||
|
||||
%cmake_build
|
||||
|
||||
@ -409,6 +396,8 @@ popd
|
||||
rm -Rf %{buildroot}%{install_bindir}
|
||||
rm -Rf %{buildroot}%{install_prefix}/share
|
||||
rm -Rf %{buildroot}%{install_prefix}/libexec
|
||||
# Remove scanview-py helper libs
|
||||
rm -Rf %{buildroot}%{install_prefix}/lib/{libear,libscanbuild}
|
||||
|
||||
%else
|
||||
|
||||
@ -430,6 +419,9 @@ install -p -m644 bindings/python/clang/* %{buildroot}%{python3_sitelib}/clang/
|
||||
mv %{buildroot}%{_prefix}/lib/{libear,libscanbuild} %{buildroot}%{python3_sitelib}
|
||||
%py_byte_compile %{__python3} %{buildroot}%{python3_sitelib}/{libear,libscanbuild}
|
||||
|
||||
# Fix permissions of scan-view scripts
|
||||
chmod a+x %{buildroot}%{_datadir}/scan-view/{Reporter.py,startfile.py}
|
||||
|
||||
# multilib fix
|
||||
%multilib_fix_c_header --file %{_includedir}/clang/Config/config.h
|
||||
|
||||
@ -444,7 +436,7 @@ rm -vf %{buildroot}%{_datadir}/clang/clang-format-bbedit.applescript
|
||||
rm -vf %{buildroot}%{_datadir}/clang/clang-format-sublime.py*
|
||||
|
||||
# TODO: Package html docs
|
||||
rm -Rvf %{buildroot}%{_docdir}/clang/html
|
||||
rm -Rvf %{buildroot}%{_docdir}/Clang/clang/html
|
||||
rm -Rvf %{buildroot}%{_datadir}/clang/clang-doc-default-stylesheet.css
|
||||
rm -Rvf %{buildroot}%{_datadir}/clang/index.js
|
||||
|
||||
@ -488,27 +480,29 @@ ln -s %{_datadir}/clang/clang-format-diff.py %{buildroot}%{_bindir}/clang-format
|
||||
%endif
|
||||
|
||||
%check
|
||||
cd %{_vpath_builddir}
|
||||
|
||||
%if %{without compat_build}
|
||||
%if %{with check}
|
||||
# requires lit.py from LLVM utilities
|
||||
# FIXME: Fix failing ARM tests
|
||||
LD_LIBRARY_PATH=%{buildroot}/%{_libdir} %cmake_build --target check-all || \
|
||||
%endif
|
||||
LD_LIBRARY_PATH=%{buildroot}/%{_libdir} %{__ninja} check-all -C %{_vpath_builddir} || \
|
||||
%ifarch %{arm}
|
||||
:
|
||||
%else
|
||||
false
|
||||
%endif
|
||||
|
||||
%endif
|
||||
%endif
|
||||
|
||||
|
||||
%if %{without compat_build}
|
||||
%files
|
||||
%license LICENSE.TXT
|
||||
%{clang_binaries}
|
||||
%{_bindir}/clang
|
||||
%{_bindir}/clang++
|
||||
%{_bindir}/clang-%{maj_ver}
|
||||
%{_bindir}/clang++-%{maj_ver}
|
||||
%{_bindir}/clang-cl
|
||||
%{_bindir}/clang-cpp
|
||||
%{_mandir}/man1/clang.1.gz
|
||||
%{_mandir}/man1/clang++.1.gz
|
||||
%{_mandir}/man1/clang-%{maj_ver}.1.gz
|
||||
@ -567,8 +561,31 @@ false
|
||||
%{python3_sitelib}/libear
|
||||
%{python3_sitelib}/libscanbuild
|
||||
|
||||
|
||||
%files tools-extra
|
||||
%{clang_tools_binaries}
|
||||
%{_bindir}/clang-apply-replacements
|
||||
%{_bindir}/clang-change-namespace
|
||||
%{_bindir}/clang-check
|
||||
%{_bindir}/clang-doc
|
||||
%{_bindir}/clang-extdef-mapping
|
||||
%{_bindir}/clang-format
|
||||
%{_bindir}/clang-include-fixer
|
||||
%{_bindir}/clang-move
|
||||
%{_bindir}/clang-offload-bundler
|
||||
%{_bindir}/clang-offload-wrapper
|
||||
%{_bindir}/clang-linker-wrapper
|
||||
%{_bindir}/clang-nvlink-wrapper
|
||||
%{_bindir}/clang-query
|
||||
%{_bindir}/clang-refactor
|
||||
%{_bindir}/clang-rename
|
||||
%{_bindir}/clang-reorder-fields
|
||||
%{_bindir}/clang-repl
|
||||
%{_bindir}/clang-scan-deps
|
||||
%{_bindir}/clang-tidy
|
||||
%{_bindir}/clangd
|
||||
%{_bindir}/diagtool
|
||||
%{_bindir}/hmaptool
|
||||
%{_bindir}/pp-trace
|
||||
%{_bindir}/c-index-test
|
||||
%{_bindir}/find-all-symbols
|
||||
%{_bindir}/modularize
|
||||
@ -594,9 +611,15 @@ false
|
||||
|
||||
%endif
|
||||
%changelog
|
||||
* Tue May 24 2022 Tom Stellard <tstellar@redhat.com> - 13.0.1-2
|
||||
- Use libstdc++ from gcc-toolset-11
|
||||
- Resolves: rhbz#2088672
|
||||
* Tue Jun 28 2022 Tom Stellard <tstellar@redhat.com> - 14.0.6-1
|
||||
- 14.0.6 Release
|
||||
|
||||
* Wed Jun 01 2022 Timm Bäder <tbaeder@redhat.com> - 14.0.0-2
|
||||
- Increate gcc-toolset dependency to 12
|
||||
- Set GCC_INSTALL_PREFIX variable
|
||||
|
||||
* Thu Apr 07 2022 Timm Bäder <tbaeder@redhat.com> - 14.0.0-1
|
||||
- Update to 14.0.0
|
||||
|
||||
* Thu Feb 03 2022 Tom Stellard <tstellar@redhat.com> - 13.0.1-1
|
||||
- 13.0.1 Release
|
||||
|
Loading…
Reference in New Issue
Block a user