Update to 14.0.0
Resolves: rhbz#2061041 Resolves: rhbz#2061058
This commit is contained in:
parent
ebb36a52cc
commit
079bd3253f
1
.fmf/version
Normal file
1
.fmf/version
Normal file
@ -0,0 +1 @@
|
||||
1
|
5
.gitignore
vendored
5
.gitignore
vendored
@ -181,3 +181,8 @@
|
||||
/clang-tools-extra-13.0.1.src.tar.xz.sig
|
||||
/clang-13.0.1.src.tar.xz
|
||||
/clang-13.0.1.src.tar.xz.sig
|
||||
/clang-14.0.0.src.tar.xz
|
||||
/clang-tools-extra-14.0.0.src.tar.xz
|
||||
/clang-tools-extra-14.0.0.src.tar.xz.sig
|
||||
/clang-14.0.0.src.tar.xz.sig
|
||||
/llvm-13.0.1.src.tar.xz
|
||||
|
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
0001-Work-around-gcc-miscompile.patch
Normal file
33
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
0010-PATCH-clang-Produce-DWARF4-by-default.patch
Normal file
98
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
|
||||
|
152
clang.spec
152
clang.spec
@ -1,43 +1,12 @@
|
||||
%bcond_with compat_build
|
||||
%bcond_without bundle_compat_lib
|
||||
%bcond_without check
|
||||
|
||||
%global maj_ver 13
|
||||
%global maj_ver 14
|
||||
%global min_ver 0
|
||||
%global patch_ver 1
|
||||
#global rc_ver 4
|
||||
%global patch_ver 0
|
||||
%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
|
||||
@ -56,22 +25,12 @@
|
||||
%global pkg_libdir %{_libdir}
|
||||
%endif
|
||||
|
||||
%if 0%{?fedora} || 0%{?rhel} > 7
|
||||
%bcond_without python3
|
||||
%else
|
||||
%bcond_with python3
|
||||
%endif
|
||||
|
||||
%bcond_with bundle_compat_lib
|
||||
|
||||
%if %{with bundle_compat_lib}
|
||||
%global compat_maj_ver 12
|
||||
%global compat_maj_ver 13
|
||||
%global compat_ver %{compat_maj_ver}.0.1
|
||||
%endif
|
||||
|
||||
|
||||
%global build_install_prefix %{buildroot}%{install_prefix}
|
||||
|
||||
%ifarch ppc64le aarch64
|
||||
# Too many threads on ppc64 systems causes OOM errors.
|
||||
%global _smp_mflags -j8
|
||||
@ -112,12 +71,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
|
||||
# https://github.com/llvm/llvm-project/commit/fed96f31bb5b68f77dd617ee8e698dd8171ee71b
|
||||
Patch6: m-branch-protection.patch
|
||||
Patch7: 0010-PATCH-clang-Produce-DWARF4-by-default.patch
|
||||
Patch8: disable-recommonmark.patch
|
||||
|
||||
# Patches for clang-tools
|
||||
Patch201: 0001-Confusable-identifiers-detection.patch
|
||||
Patch202: 0002-Misleading-bidirectional-detection.patch
|
||||
Patch203: 0003-Misleading-unicode-identifier-detection-pass.patch
|
||||
# Patches for clang-tools-extra
|
||||
# See https://reviews.llvm.org/D120301
|
||||
Patch201: llvm-hello.patch
|
||||
# See https://github.com/llvm/llvm-project/issues/54116
|
||||
Patch202: remove-test.patch
|
||||
|
||||
BuildRequires: gcc
|
||||
BuildRequires: gcc-c++
|
||||
@ -148,7 +113,7 @@ BuildRequires: python3-lit
|
||||
BuildRequires: python3-sphinx
|
||||
BuildRequires: libatomic
|
||||
|
||||
# We need python3-devel for pathfix.py.
|
||||
# We need python3-devel for %%py3_shebang_fix
|
||||
BuildRequires: python3-devel
|
||||
|
||||
# For reproducible pyc file generation
|
||||
@ -188,8 +153,7 @@ 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
|
||||
@ -208,12 +172,18 @@ libomp-devel to enable -fopenmp.
|
||||
%package libs
|
||||
Summary: Runtime library for clang
|
||||
Requires: %{name}-resource-filesystem%{?_isa} = %{version}
|
||||
#Requires: gcc-toolset-11-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.
|
||||
|
||||
@ -297,11 +267,17 @@ Requires: python3
|
||||
%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/ \
|
||||
clang-include-fixer/find-all-symbols/tool/run-find-all-symbols.py
|
||||
|
||||
%setup -q -n %{clang_srcdir}
|
||||
@ -310,8 +286,8 @@ pathfix.py -i %{__python3} -pn \
|
||||
# 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 \
|
||||
@ -322,7 +298,6 @@ pathfix.py -i %{__python3} -pn \
|
||||
%endif
|
||||
|
||||
%build
|
||||
|
||||
# We run the builders out of memory on armv7 and i686 when LTO is enabled
|
||||
%ifarch %{arm} i686
|
||||
%define _lto_cflags %{nil}
|
||||
@ -346,6 +321,10 @@ sed -i 's/\@FEDORA_LLVM_LIB_SUFFIX\@//g' test/lit.cfg.py
|
||||
%global optflags %(echo %{optflags} | sed 's/-g /-g1 /')
|
||||
%endif
|
||||
|
||||
%set_build_flags
|
||||
CXXFLAGS="$CXXFLAGS -Wno-address -Wno-nonnull -Wno-maybe-uninitialized"
|
||||
CFLAGS="$CFLAGS -Wno-address -Wno-nonnull -Wno-maybe-uninitialized"
|
||||
|
||||
%if %{with bundle_compat_lib}
|
||||
|
||||
mv ../clang-%{compat_ver}.src ../clang
|
||||
@ -361,7 +340,7 @@ mv ../clang-%{compat_ver}.src ../clang
|
||||
-DBUILD_SHARED_LIBS=OFF \
|
||||
-DLLVM_ENABLE_EH=ON \
|
||||
-DLLVM_ENABLE_RTTI=ON \
|
||||
-DCMAKE_INSTALL_RPATH:BOOL=";"
|
||||
-DCMAKE_SKIP_RPATH:BOOL=ON
|
||||
|
||||
%ninja_build -C ../clang-compat-libs libclang.so
|
||||
%ninja_build -C ../clang-compat-libs libclang-cpp.so
|
||||
@ -369,10 +348,6 @@ mv ../clang-%{compat_ver}.src ../clang
|
||||
|
||||
%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.
|
||||
# -DLLVM_ENABLE_NEW_PASS_MANAGER=ON can be removed once this patch is committed:
|
||||
# https://reviews.llvm.org/D107628
|
||||
%cmake -G Ninja \
|
||||
@ -380,14 +355,14 @@ mv ../clang-%{compat_ver}.src ../clang
|
||||
-DLLVM_LINK_LLVM_DYLIB:BOOL=ON \
|
||||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||||
-DPYTHON_EXECUTABLE=%{__python3} \
|
||||
-DCMAKE_INSTALL_RPATH:BOOL=";" \
|
||||
-DCMAKE_SKIP_RPATH:BOOL=ON \
|
||||
%ifarch s390 s390x %{arm} %ix86 ppc64le
|
||||
-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
|
||||
@ -424,11 +399,13 @@ mv ../clang-%{compat_ver}.src ../clang
|
||||
-DCLANG_BUILD_EXAMPLES:BOOL=OFF \
|
||||
-DBUILD_SHARED_LIBS=OFF \
|
||||
-DCLANG_REPOSITORY_STRING="%{?fedora:Fedora}%{?rhel:Red Hat} %{version}-%{release}" \
|
||||
%ifarch %{arm}
|
||||
-DCLANG_DEFAULT_LINKER=lld \
|
||||
%endif
|
||||
-DCLANG_DEFAULT_UNWINDLIB=libgcc
|
||||
|
||||
%cmake_build
|
||||
|
||||
|
||||
%install
|
||||
|
||||
%cmake_install
|
||||
@ -444,6 +421,8 @@ install -m 0755 ../clang-compat-libs/lib/libclang-cpp.so.%{compat_maj_ver}* %{bu
|
||||
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
|
||||
|
||||
@ -482,7 +461,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
|
||||
|
||||
@ -533,21 +512,25 @@ sed -i -e "s/'ASAN_SYMBOLIZER_PATH', 'MSAN_SYMBOLIZER_PATH'/'ASAN_SYMBOLIZER_PAT
|
||||
%if %{with check}
|
||||
# requires lit.py from LLVM utilities
|
||||
# FIXME: Fix failing ARM tests
|
||||
SOURCE_DATE_EPOCH=1629181597 LD_LIBRARY_PATH=%{buildroot}/%{_libdir} %cmake_build --target check-all || \
|
||||
%endif
|
||||
SOURCE_DATA_EPOCH=1629181597 LD_LIBRARY_PATH=%{buildroot}/%{_libdir} %{__ninja} check-all -C %{__cmake_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
|
||||
@ -612,7 +595,29 @@ false
|
||||
|
||||
|
||||
%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
|
||||
@ -638,6 +643,9 @@ false
|
||||
|
||||
%endif
|
||||
%changelog
|
||||
* Fri Apr 22 2022 Timm Bäder <tbaeder@redhat.com> - 14.0.0-1
|
||||
- 14.0.0 Release
|
||||
|
||||
* Thu Feb 03 2022 Tom Stellard <tstellar@redhat.com> - 13.0.1-1
|
||||
- 13.0.1 Release
|
||||
|
||||
|
26
disable-recommonmark.patch
Normal file
26
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
llvm-hello.patch
Normal file
61
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.
|
44
m-branch-protection.patch
Normal file
44
m-branch-protection.patch
Normal file
@ -0,0 +1,44 @@
|
||||
commit fed96f31bb5b68f77dd617ee8e698dd8171ee71b
|
||||
Author: Tom Stellard <tstellar@redhat.com>
|
||||
Date: Tue Mar 22 23:17:39 2022 -0700
|
||||
|
||||
Re-commit: Driver: Don't warn on -mbranch-protection when linking
|
||||
|
||||
This is a re-commit of 98fd3b359866f474ab1c097c22fb5c3be356b996. The
|
||||
newly added test was failing on the bots, and I've fixed the test now so
|
||||
that it doesn't actually invoke the linker.
|
||||
|
||||
diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td
|
||||
index d37d3a31fe07..6ed87f9a464d 100644
|
||||
--- a/clang/include/clang/Driver/Options.td
|
||||
+++ b/clang/include/clang/Driver/Options.td
|
||||
@@ -3444,6 +3444,7 @@ def msign_return_address_EQ : Joined<["-"], "msign-return-address=">,
|
||||
Flags<[CC1Option]>, Group<m_Group>, Values<"none,all,non-leaf">,
|
||||
HelpText<"Select return address signing scope">;
|
||||
def mbranch_protection_EQ : Joined<["-"], "mbranch-protection=">,
|
||||
+ Group<m_Group>,
|
||||
HelpText<"Enforce targets of indirect branches and function returns">;
|
||||
|
||||
def mharden_sls_EQ : Joined<["-"], "mharden-sls=">,
|
||||
diff --git a/clang/test/Driver/aarch64-security-options.c b/clang/test/Driver/aarch64-security-options.c
|
||||
index 6ea4b8ae5838..4bd73e06d255 100644
|
||||
--- a/clang/test/Driver/aarch64-security-options.c
|
||||
+++ b/clang/test/Driver/aarch64-security-options.c
|
||||
@@ -27,6 +27,9 @@
|
||||
// RUN: %clang -target aarch64--none-eabi -c %s -### -mbranch-protection=bar 2>&1 | \
|
||||
// RUN: FileCheck %s --check-prefix=BAD-BP-PROTECTION --check-prefix=WARN
|
||||
|
||||
+// RUN: %clang -target aarch64--none-eabi -### -o /dev/null -mbranch-protection=standard /dev/null 2>&1 | \
|
||||
+// RUN: FileCheck --allow-empty %s --check-prefix=LINKER-DRIVER
|
||||
+
|
||||
// WARN-NOT: warning: ignoring '-mbranch-protection=' option because the 'aarch64' architecture does not support it [-Wbranch-protection]
|
||||
|
||||
// RA-OFF: "-msign-return-address=none"
|
||||
@@ -46,3 +49,7 @@
|
||||
|
||||
// BAD-B-KEY-COMBINATION: invalid branch protection option 'b-key' in '-mbranch-protection={{.*}}'
|
||||
// BAD-LEAF-COMBINATION: invalid branch protection option 'leaf' in '-mbranch-protection={{.*}}'
|
||||
+
|
||||
+// Check that the linker driver doesn't warn about -mbranch-protection=standard
|
||||
+// as an unused option.
|
||||
+// LINKER-DRIVER-NOT: warning:
|
20
remove-test.patch
Normal file
20
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
|
||||
)
|
8
sources
8
sources
@ -1,4 +1,6 @@
|
||||
SHA512 (clang-tools-extra-13.0.1.src.tar.xz) = a7875a2556a0e51a2620b89d060087a6d2dc3c09c11aec18f6953abbce1ece4eafe1caeafa8f0dfe92f0b721d505abbbedb42236c2db9c5f17f0df078ed81d1d
|
||||
SHA512 (clang-tools-extra-13.0.1.src.tar.xz.sig) = 242bbe606e1a79d443258f07c7c7b01e4fa186c66175be8383fe092c8babd14a3b6e462b5f0955051dd02129071d7e0bb9d0c36896a4e1773346f9c4178aafe2
|
||||
SHA512 (clang-14.0.0.src.tar.xz) = 26e701c0c24eefee1f0c1651cba7d16dca9a463e4d41c8bbc33d7b93a68c3dac0aeef6846d836eddc07afafa8116b81c95737223296f336897f2b75e1b3895f1
|
||||
SHA512 (clang-tools-extra-14.0.0.src.tar.xz) = fdf06a46a4c3d689076b41fcc0c42eedbe95924b1611a8f8fe693e4ac1013274cdea97482b48659172f133ed51607a9e979d9d717df4082b50b0c176be2515e5
|
||||
SHA512 (clang-tools-extra-14.0.0.src.tar.xz.sig) = 7a6fe5037d462eab4966946dc6ae4d5c53751da3f3a0ea3396a10add2b0e41d4cd26752c9dc82c6f69cefdcab63818e4e1f87ff601ef8c5bdacb81489a30b787
|
||||
SHA512 (clang-14.0.0.src.tar.xz.sig) = 579f20b2a7ffee8fa077002272d7029c9f82e9904b52a720c46ac882679b08f6b68f92918593abce916fd4d55aceb1aa4fe26142b7f742e286d0aaa0b2809efd
|
||||
SHA512 (llvm-13.0.1.src.tar.xz) = 05fbe8708ac3d0dfef3a9135ee88185a95ed492095429a97d33b8aadb0187e59ad42d1a7184f02b5c84fdd31f3d7227c65bd292ed0aa039b29522e59cf90a965
|
||||
SHA512 (clang-13.0.1.src.tar.xz) = 10abb601ce33ec0ec1e966221d958dd6206cfd5b178f8af0850408ed6adf2a9e193afb87a6449d65bb636e70a4debc3818035ab7bfcddf35a54a603851779d57
|
||||
SHA512 (clang-13.0.1.src.tar.xz.sig) = c3b82b828b328e242515ffe613557a62eea182a352d70c92fab1fa7ebc7ee06d08f25f84d57461e48f0594fc420b1abad1be61048ae90f016d93c3186cfdc783
|
||||
|
33
tests/build-gating-libomp.fmf
Normal file
33
tests/build-gating-libomp.fmf
Normal file
@ -0,0 +1,33 @@
|
||||
summary: libomp clang tests for build/PR gating
|
||||
adjust:
|
||||
- because: "Plan to be ran when either executed locally, or executed by CI system to gate a build or PR."
|
||||
when: >-
|
||||
trigger is defined
|
||||
and trigger != commit
|
||||
and trigger != build
|
||||
enabled: false
|
||||
|
||||
- because: "When testing SCL-ized LLVM, the collection must be enabled first"
|
||||
environment+:
|
||||
WITH_SCL: "scl enable llvm-toolset-13.0"
|
||||
when: "collection == llvm-toolset-13.0"
|
||||
|
||||
- because: "libomp not supported in s390x"
|
||||
when: arch == s390x
|
||||
enabled: false
|
||||
|
||||
discover:
|
||||
how: fmf
|
||||
test: libomp
|
||||
execute:
|
||||
how: tmt
|
||||
prepare:
|
||||
# We want to make sure libomp is not already present on the system to ensure
|
||||
# that clang pulls in the correct libomp dependencies when it is installed.
|
||||
- name: Drop libomp
|
||||
how: shell
|
||||
script: |
|
||||
yum erase -y libomp libomp-devel clang clang-libs
|
||||
provision:
|
||||
hardware:
|
||||
memory: ">= 4 GiB"
|
32
tests/build-gating-pocl.fmf
Normal file
32
tests/build-gating-pocl.fmf
Normal file
@ -0,0 +1,32 @@
|
||||
summary: PoCL clang tests for build/PR gating
|
||||
adjust:
|
||||
- because: "Plan to be ran when either executed locally, or executed by CI system to gate a build or PR."
|
||||
when: >-
|
||||
trigger is defined
|
||||
and trigger != commit
|
||||
and trigger != build
|
||||
enabled: false
|
||||
|
||||
- because: "PoCL is shipped with Fedora, not RHEL/CentOS"
|
||||
when: >-
|
||||
distro == rhel
|
||||
or distro == centos
|
||||
enabled: false
|
||||
|
||||
discover:
|
||||
how: fmf
|
||||
test: pocl
|
||||
execute:
|
||||
how: tmt
|
||||
prepare:
|
||||
# Programs linked against pocl should be able to run without clang installed,
|
||||
# so when we run the test we want to make sure clang is not installed to
|
||||
# verify we haven't introduced an implicit dependency on clang.
|
||||
- name: Drop clang
|
||||
how: shell
|
||||
script: |
|
||||
dnf erase -y clang
|
||||
|
||||
provision:
|
||||
hardware:
|
||||
memory: ">= 4 GiB"
|
61
tests/build-gating.fmf
Normal file
61
tests/build-gating.fmf
Normal file
@ -0,0 +1,61 @@
|
||||
#
|
||||
# Build/PR gating tests for *LLVM 13*
|
||||
#
|
||||
# Compatible with various LLVM 13 distributions:
|
||||
#
|
||||
# * Fedora (ursine packages)
|
||||
# * Centos 9 stream (ursine packages)
|
||||
# * RHEL-9 (ursine packages)
|
||||
# * RHEL-8 (Red Hat module)
|
||||
# * RHEL-7 (software collection)
|
||||
#
|
||||
|
||||
summary: Clang tests for build/PR gating
|
||||
adjust:
|
||||
- because: "Plan to be ran when either executed locally, or executed by CI system to gate a build or PR."
|
||||
when: >-
|
||||
trigger is defined
|
||||
and trigger != commit
|
||||
and trigger != build
|
||||
enabled: false
|
||||
|
||||
- because: "When testing SCL-ized LLVM, the collection must be enabled first"
|
||||
environment+:
|
||||
WITH_SCL: "scl enable llvm-toolset-13.0"
|
||||
when: "collection == llvm-toolset-13.0"
|
||||
|
||||
# Unfortunately, TMT does not support more declarative approach, we need to run commands on our own.
|
||||
- because: "On RHEL, CRB must be enabled to provide rarer packages"
|
||||
prepare+:
|
||||
- name: Enable CRB
|
||||
how: shell
|
||||
script: dnf config-manager --set-enabled rhel-CRB
|
||||
when: >-
|
||||
distro == centos
|
||||
or distro == rhel-9
|
||||
or distro == rhel-8
|
||||
|
||||
# Unfortunatelly, TMT does not support more declarative approach, we need to run commands on our own.
|
||||
- because: "On RHEL-7, EPEL must be enabled to provided rarer packages"
|
||||
prepare+:
|
||||
- name: Enable EPEL
|
||||
how: shell
|
||||
script: |
|
||||
rpm -q epel-release || yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
|
||||
yum-config-manager --enable epel
|
||||
when: distro == rhel-7
|
||||
|
||||
discover:
|
||||
- name: clang-tests
|
||||
how: fmf
|
||||
filter: "tag:-not-in-default"
|
||||
- name: upstream-llvm-integration-testsuite
|
||||
how: fmf
|
||||
url: https://src.fedoraproject.org/rpms/llvm.git
|
||||
ref: rawhide
|
||||
test: integration-test-suite
|
||||
execute:
|
||||
how: tmt
|
||||
provision:
|
||||
hardware:
|
||||
memory: ">= 4 GiB"
|
12
tests/clang-format-diff/main.fmf
Normal file
12
tests/clang-format-diff/main.fmf
Normal file
@ -0,0 +1,12 @@
|
||||
summary: clang-format-diff
|
||||
test: "$WITH_SCL ./test.sh"
|
||||
adjust:
|
||||
# Common requirements when LLVM is not SCL-ized
|
||||
- require:
|
||||
- clang-tools-extra
|
||||
when: "collection is not defined"
|
||||
|
||||
# Requirements for SCL-ized LLVM
|
||||
- require:
|
||||
- llvm-toolset-13.0-clang-tools-extra
|
||||
when: "collection == llvm-toolset-13.0"
|
@ -1,6 +1,4 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -ex
|
||||
#!/bin/sh -eux
|
||||
|
||||
# Check that clang-format-diff is in PATH.
|
||||
# rhbz#1939018
|
16
tests/fedora-flags/main.fmf
Normal file
16
tests/fedora-flags/main.fmf
Normal file
@ -0,0 +1,16 @@
|
||||
summary: fedora-flags
|
||||
test: "$WITH_SCL ./test.sh"
|
||||
require:
|
||||
- annobin
|
||||
- redhat-rpm-config
|
||||
adjust:
|
||||
- because: s390x does not have epel repo which is required to provide rpm macros
|
||||
enabled: false
|
||||
when: >-
|
||||
distro == rhel-7
|
||||
and arch == s390x
|
||||
|
||||
- because: "To enable rpm macros not available by default (e.g. build_cflags), epel-rpm-macros is needed"
|
||||
require+:
|
||||
- epel-rpm-macros
|
||||
when: distro == rhel-7
|
@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
#!/bin/sh -eux
|
||||
|
||||
set -ex pipefail
|
||||
set pipefail
|
||||
|
||||
cflags=`rpm -D '%toolchain clang' -E %{build_cflags}`
|
||||
cxxflags=`rpm -D '%toolchain clang' -E %{build_cxxflags}`
|
@ -1,38 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
usage() {
|
||||
echo "usage `basename $0` [OPTIONS]"
|
||||
echo " --threads NUM The number of threads to use for running tests."
|
||||
}
|
||||
|
||||
thread_args=""
|
||||
repo_url=https://github.com/opencollab/llvm-toolchain-integration-test-suite
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
case $1 in
|
||||
--threads)
|
||||
shift
|
||||
threads="$1"
|
||||
;;
|
||||
* )
|
||||
echo "unknown option: $1"
|
||||
echo ""
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if [ -n "$threads" ]; then
|
||||
thread_args="-j$threads"
|
||||
fi
|
||||
|
||||
set -xe
|
||||
|
||||
cd $(mktemp -d -p /var/tmp)
|
||||
git clone $repo_url
|
||||
cd llvm-toolchain-integration-test-suite
|
||||
mkdir _build && cd _build
|
||||
cmake .. -GNinja
|
||||
ninja $thread_args check
|
30
tests/libomp/main.fmf
Normal file
30
tests/libomp/main.fmf
Normal file
@ -0,0 +1,30 @@
|
||||
# TODO: get fitting summary - what's the purpose of this test? Comment from the STI version says:
|
||||
#
|
||||
# We want to make sure libomp is not already present on the system to ensure
|
||||
# that clang pulls in the correct libomp dependencies when it is installed.
|
||||
summary: libomp tests
|
||||
# This test requires a special preparation, see `/tests/tests-libomp` plan. As such,
|
||||
# it shouldn't be part of the `/tests/default` plan.
|
||||
tag:
|
||||
- not-in-default
|
||||
test: "$WITH_SCL ./test.sh"
|
||||
adjust:
|
||||
- because: "libomp is not supported in s390x"
|
||||
when: arch == s390x
|
||||
enabled: false
|
||||
|
||||
# Common requirements when LLVM is not SCL-ized
|
||||
- require:
|
||||
- clang
|
||||
- clang-libs
|
||||
- libomp
|
||||
- libomp-devel
|
||||
when: "collection is not defined"
|
||||
|
||||
# Requirements for SCL-ized LLVM
|
||||
- require:
|
||||
- llvm-toolset-13.0-clang
|
||||
- llvm-toolset-13.0-clang-libs
|
||||
- llvm-toolset-13.0-libomp
|
||||
- llvm-toolset-13.0-libomp-devel
|
||||
when: "collection == llvm-toolset-13.0"
|
17
tests/llvm-test-suite/main.fmf
Normal file
17
tests/llvm-test-suite/main.fmf
Normal file
@ -0,0 +1,17 @@
|
||||
# TODO: once llvm-test-suite is converted to TMT, we can just link the test from plan.
|
||||
summary: Run tests from llvm-test-suite package
|
||||
|
||||
adjust:
|
||||
- because: "llvm-test-suite is available for Fedora, not RHEL/CentOS"
|
||||
when: >-
|
||||
distro == rhel
|
||||
or distro == centos
|
||||
enabled: false
|
||||
|
||||
test: "$WITH_SCL ./test.sh"
|
||||
|
||||
require:
|
||||
- git
|
||||
- clang
|
||||
- llvm-test-suite
|
||||
duration: 1h
|
7
tests/llvm-test-suite/test.sh
Executable file
7
tests/llvm-test-suite/test.sh
Executable file
@ -0,0 +1,7 @@
|
||||
#!/bin/sh -eux
|
||||
|
||||
# TODO: tmt does not support a remote git repo as a requirement, one has to clone it "manually".
|
||||
|
||||
git clone --depth 1 https://src.fedoraproject.org/rpms/llvm-test-suite.git llvm-test-suite
|
||||
cd llvm-test-suite/tests/test-suite
|
||||
./runtest.sh
|
@ -1,29 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Tests for using a full LLVM toolchain: clang + compiler-rt + libcxx + lld
|
||||
|
||||
set -ex pipefail
|
||||
|
||||
# Test compile a C program.
|
||||
cat << EOF | \
|
||||
clang -fuse-ld=lld -rtlib=compiler-rt -x c - && \
|
||||
./a.out | grep 'Hello World'
|
||||
|
||||
#include<stdio.h>
|
||||
int main(int argc, char **argv) {
|
||||
printf("Hello World\n");
|
||||
return 0;
|
||||
}
|
||||
EOF
|
||||
|
||||
# Test compile a C++ program.
|
||||
cat << EOF | \
|
||||
clang++ -x c++ -fuse-ld=lld -rtlib=compiler-rt -stdlib=libc++ - && \
|
||||
./a.out | grep 'Hello World'
|
||||
|
||||
#include <iostream>
|
||||
int main(int argc, char **argv) {
|
||||
std::cout << "Hello World\n";
|
||||
return 0;
|
||||
}
|
||||
EOF
|
24
tests/pocl/main.fmf
Normal file
24
tests/pocl/main.fmf
Normal file
@ -0,0 +1,24 @@
|
||||
# TODO REVIEW: get fitting summary - what's the purpose of this test? Comment from the STI version says:
|
||||
#
|
||||
# This is separate from tests.yml because we want to run the tests without
|
||||
# clang installed.
|
||||
summary: pocl
|
||||
|
||||
adjust:
|
||||
- because: "PoCL is shipped with Fedora, not RHEL/CentOS"
|
||||
when: >-
|
||||
distro == rhel
|
||||
or distro == centos
|
||||
enabled: false
|
||||
|
||||
# This test requires a special preparation, see `/tests/tests-pocl` plan. As such,
|
||||
# it shouldn't be part of the `/tests/default` plan.
|
||||
tag:
|
||||
- not-in-default
|
||||
# rhbz#1582884
|
||||
test: "$WITH_SCL ./test.sh"
|
||||
require:
|
||||
- git
|
||||
- ocl-icd-devel
|
||||
- pocl
|
||||
- gcc
|
7
tests/pocl/test.sh
Executable file
7
tests/pocl/test.sh
Executable file
@ -0,0 +1,7 @@
|
||||
#!/bin/sh -eux
|
||||
|
||||
# TODO: tmt does not support a remote git repo as a requirement, one has to clone it "manually".
|
||||
|
||||
git clone --depth 1 https://src.fedoraproject.org/rpms/pocl.git pocl
|
||||
cd pocl/tests/simple-opencl-no-clang
|
||||
./runtest.sh
|
15
tests/rhbz_1647130/main.fmf
Normal file
15
tests/rhbz_1647130/main.fmf
Normal file
@ -0,0 +1,15 @@
|
||||
summary: RHBZ1647130
|
||||
test: "$WITH_SCL ./test.sh"
|
||||
require: []
|
||||
adjust:
|
||||
# Common requirements when LLVM is not SCL-ized
|
||||
- require+:
|
||||
- clang
|
||||
- clang-analyzer
|
||||
when: "collection is not defined"
|
||||
|
||||
# Requirements for SCL-ized LLVM
|
||||
- require+:
|
||||
- llvm-toolset-13.0-clang
|
||||
- llvm-toolset-13.0-clang-analyzer
|
||||
when: "collection == llvm-toolset-13.0"
|
@ -1,6 +1,4 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
set -x
|
||||
#!/bin/sh -eux
|
||||
|
||||
tmp_cpp=`mktemp -t XXXXX.cpp`
|
||||
tmp_dir=`mktemp -d`
|
13
tests/rhbz_1657544/main.fmf
Normal file
13
tests/rhbz_1657544/main.fmf
Normal file
@ -0,0 +1,13 @@
|
||||
summary: RHBZ1657544
|
||||
test: "$WITH_SCL ./test.sh"
|
||||
require: []
|
||||
adjust:
|
||||
# Common requirements when LLVM is not SCL-ized
|
||||
- require+:
|
||||
- clang
|
||||
when: "collection is not defined"
|
||||
|
||||
# Requirements for SCL-ized LLVM
|
||||
- require+:
|
||||
- llvm-toolset-13.0-clang
|
||||
when: "collection == llvm-toolset-13.0"
|
@ -1,6 +1,4 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
set -x
|
||||
#!/bin/sh -eux
|
||||
|
||||
clang++ from_chars.cpp
|
||||
./a.out 100 | grep 100
|
14
tests/rhbz_482491/main.fmf
Normal file
14
tests/rhbz_482491/main.fmf
Normal file
@ -0,0 +1,14 @@
|
||||
summary: rhbz-482491
|
||||
test: "$WITH_SCL ./test.sh"
|
||||
require:
|
||||
- libgcc
|
||||
adjust:
|
||||
# Common requirements when LLVM is not SCL-ized
|
||||
- require+:
|
||||
- clang
|
||||
when: "collection is not defined"
|
||||
|
||||
# Requirements for SCL-ized LLVM
|
||||
- require+:
|
||||
- llvm-toolset-13.0-clang
|
||||
when: "collection == llvm-toolset-13.0"
|
3
tests/rhbz_482491/test.sh
Executable file
3
tests/rhbz_482491/test.sh
Executable file
@ -0,0 +1,3 @@
|
||||
#!/bin/sh -eux
|
||||
|
||||
find /usr -name 'libgcc_s.so*' && echo "int main(){}" | clang -v -x c -
|
@ -1,21 +0,0 @@
|
||||
- hosts: localhost
|
||||
pre_tasks:
|
||||
# We want to make sure libomp is not already present on the system to ensure
|
||||
# that clang pulls in the correct libomp dependencies when it is installed.
|
||||
- name: Uninstall libomp
|
||||
package:
|
||||
name: "{{ item }}"
|
||||
state: absent
|
||||
with_items:
|
||||
- libomp
|
||||
- libomp-devel
|
||||
- clang
|
||||
- clang-libs
|
||||
roles:
|
||||
- role: standard-test-basic
|
||||
tags:
|
||||
- classic
|
||||
required_packages:
|
||||
- clang
|
||||
tests:
|
||||
- libomp
|
@ -1,63 +0,0 @@
|
||||
- hosts: localhost
|
||||
roles:
|
||||
- role: standard-test-basic
|
||||
tags:
|
||||
- classic
|
||||
required_packages:
|
||||
- clang
|
||||
- llvm-test-suite
|
||||
- ninja-build
|
||||
- gcc-x86_64-linux-gnu
|
||||
# FIXME: It would be nice if we could only install dependencies for a
|
||||
# single test rather than installing dependencies for all tests. This
|
||||
# will help us catch bugs with implicit package dependencies e.g.
|
||||
# package A depends on package B but does not have an explicit Requires.
|
||||
# These are required for the llvm-toolchain test:
|
||||
- clang
|
||||
- lld
|
||||
- compiler-rt
|
||||
- libcxx-devel
|
||||
- libcxx-static
|
||||
- glibc-devel
|
||||
- glibc-static
|
||||
- gcc
|
||||
# Required for fedora-flags:
|
||||
- annobin
|
||||
- redhat-rpm-config
|
||||
# Required for clang-format-diff
|
||||
- clang-tools-extra
|
||||
# the requirements below are for the integration suite
|
||||
- cmake
|
||||
- llvm-devel
|
||||
- clang
|
||||
- clang-analyzer
|
||||
- clang-tools-extra
|
||||
- compiler-rt
|
||||
- ninja-build
|
||||
- libcxx-devel
|
||||
- libomp-devel
|
||||
- python-lit
|
||||
- lld
|
||||
- lldb
|
||||
- git
|
||||
- make
|
||||
- libstdc++-static
|
||||
- clang-devel
|
||||
|
||||
repositories:
|
||||
- repo: "https://src.fedoraproject.org/rpms/llvm-test-suite.git"
|
||||
dest: "llvm-test-suite"
|
||||
tests:
|
||||
- rhbz#482491:
|
||||
dir: ./
|
||||
run: find /usr -name 'libgcc_s.so*' && echo "int main(){}" | clang -v -x c -
|
||||
- llvm-test-suite/tests/test-suite
|
||||
# ABI test suite is too greedy on the FS
|
||||
#- llvm-test-suite/abi-test-suite
|
||||
- rhbz_1657544
|
||||
- rhbz_1647130
|
||||
- llvm-toolchain
|
||||
- fedora-flags
|
||||
- toolchains
|
||||
- clang-format-diff
|
||||
- integration-test-suite
|
@ -1,28 +0,0 @@
|
||||
# This is separate from tests.yml because we want to run the tests without
|
||||
# clang installed.
|
||||
# FIXME: Is there some way we can put this yaml definition in the tests/pocl
|
||||
# repo? Right now we need to copy and paste this everywhere the test is run.
|
||||
- hosts: localhost
|
||||
pre_tasks:
|
||||
# Programs linked against pocl should be able to run without clang installed,
|
||||
# so when we run the test we want to make sure clang is not installed to
|
||||
# verify we haven't introduced an implicit dependency on clang.
|
||||
- name: Uninstall clang
|
||||
package:
|
||||
name: clang
|
||||
state: absent
|
||||
tags: classic
|
||||
roles:
|
||||
- role: standard-test-basic
|
||||
tags:
|
||||
- classic
|
||||
repositories:
|
||||
- repo: "https://src.fedoraproject.org/rpms/pocl.git"
|
||||
dest: "pocl"
|
||||
required_packages:
|
||||
- ocl-icd-devel
|
||||
- pocl
|
||||
- gcc
|
||||
tests:
|
||||
# rhbz#1582884
|
||||
- pocl/tests/simple-opencl-no-clang
|
48
tests/toolchains/main.fmf
Normal file
48
tests/toolchains/main.fmf
Normal file
@ -0,0 +1,48 @@
|
||||
# TODO REVIEW: better summary
|
||||
summary: ""
|
||||
test: "$WITH_SCL ./test.sh"
|
||||
require:
|
||||
- glibc-static
|
||||
- yum-utils
|
||||
# This require EPEL/CRB to be enabled on RHEL
|
||||
- libstdc++-static
|
||||
adjust:
|
||||
# Common requirements when LLVM is not SCL-ized
|
||||
- require+:
|
||||
- clang
|
||||
- compiler-rt
|
||||
- lld
|
||||
when: "collection is not defined"
|
||||
- require-:
|
||||
- lld
|
||||
when: collection is not defined and arch == s390x
|
||||
|
||||
# Requirements for SCL-ized LLVM
|
||||
- require+:
|
||||
- llvm-toolset-13.0-clang
|
||||
- llvm-toolset-13.0-compiler-rt
|
||||
- llvm-toolset-13.0-lld
|
||||
when: "collection == llvm-toolset-13.0"
|
||||
- require-:
|
||||
- llvm-toolset-13.0-lld
|
||||
when: collection == llvm-toolset-13.0 and arch == s390x
|
||||
|
||||
- environment+:
|
||||
CXXLIBS: "libc++"
|
||||
require+:
|
||||
- libcxx-devel
|
||||
- libcxx-static
|
||||
when: "distro == fedora"
|
||||
because: testing against libcxx package in Fedora
|
||||
|
||||
- environment+:
|
||||
CXXLIBS: "libstdc++"
|
||||
require+:
|
||||
- libstdc++
|
||||
when: >-
|
||||
distro == rhel
|
||||
or distro == centos
|
||||
because: testing against libstdc++ package in RHEL as libcxx is not shipped with RHEL
|
||||
|
||||
# TODO REVIEW: are these all requirements? test.sh seems to run quite a lot of stuff, looks like we
|
||||
# need more packages from LLVM family.
|
@ -1,7 +1,13 @@
|
||||
#!/bin/sh
|
||||
#!/bin/sh -eux
|
||||
|
||||
set pipefail
|
||||
|
||||
if [ -z "${CXXLIBS:-}" ]; then
|
||||
echo "CXXLIBS variable is a required input but it's not specified!"
|
||||
echo "Test metadata should have picked a proper value, depending on distro."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
status=0
|
||||
|
||||
test_toolchain() {
|
||||
@ -25,6 +31,9 @@ test_toolchain() {
|
||||
libc++)
|
||||
args="$args -stdlib=$1"
|
||||
;;
|
||||
libstdc++)
|
||||
args="$args -stdlib=$1"
|
||||
;;
|
||||
lld)
|
||||
args="$args -fuse-ld=$1"
|
||||
;;
|
||||
@ -48,13 +57,14 @@ test_toolchain() {
|
||||
}
|
||||
|
||||
clang --version
|
||||
dnf info installed clang | grep ^Source
|
||||
# Repoquery is needed instead yum info for compatibility with RHEL-7
|
||||
repoquery -i --installed $(rpm -qf $(which clang)) | grep ^Source
|
||||
echo ""
|
||||
|
||||
for compiler in clang clang++; do
|
||||
for rtlib in "" compiler-rt; do
|
||||
for linker in "" lld; do
|
||||
for cxxlib in "" libc++; do
|
||||
for cxxlib in "" $CXXLIBS; do
|
||||
if [ "$compiler" = "clang" -a -n "$cxxlib" ]; then
|
||||
continue
|
||||
fi
|
||||
@ -70,6 +80,16 @@ for compiler in clang clang++; do
|
||||
args="$args -pthread"
|
||||
fi
|
||||
|
||||
# lld is not supported in s390x
|
||||
if [[ "$(uname -m)" = "s390x" && "$linker" = "lld" ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
# compiler-rt does not provide builtins for s390x
|
||||
if [[ "$(uname -m)" = "s390x" && "$rtlib" = "compiler-rt" ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
test_toolchain $compiler $rtlib $linker $cxxlib $args
|
||||
done
|
||||
done
|
Loading…
Reference in New Issue
Block a user