From 24e868e6429cd8a20e5ca639352fb785e2102907 Mon Sep 17 00:00:00 2001 From: eabdullin Date: Mon, 30 Sep 2024 15:13:30 +0000 Subject: [PATCH] import CS clang-18.1.8-3.el9 --- .clang.metadata | 8 +- .gitignore | 8 +- ...-equivalent-triple-to-the-list-of-tr.patch | 59 --- SOURCES/0001-Produce-DWARF4-by-default.patch | 43 +- SOURCES/0009-disable-myst-parser.patch | 26 + SOURCES/0009-disable-recommonmark.patch | 26 - SOURCES/cfg.patch | 298 ----------- SOURCES/tsa.patch | 124 ----- SPECS/clang.spec | 462 ++++++++++-------- 9 files changed, 320 insertions(+), 734 deletions(-) delete mode 100644 SOURCES/0001-Driver-Add-a-gcc-equivalent-triple-to-the-list-of-tr.patch create mode 100644 SOURCES/0009-disable-myst-parser.patch delete mode 100644 SOURCES/0009-disable-recommonmark.patch delete mode 100644 SOURCES/cfg.patch delete mode 100644 SOURCES/tsa.patch diff --git a/.clang.metadata b/.clang.metadata index eb62fca..b1769b1 100644 --- a/.clang.metadata +++ b/.clang.metadata @@ -1,4 +1,4 @@ -2822ff10a016df1fffdeb296f753e9c5fce764ee SOURCES/clang-17.0.6.src.tar.xz -576ef9aeccf3febe1828c68b3e11ffa921f3fc92 SOURCES/clang-17.0.6.src.tar.xz.sig -1ec17cc98c397d6b4d30f57f14646fa085c9ccce SOURCES/clang-tools-extra-17.0.6.src.tar.xz -cba7dea96b093d9989ceb949a21b4180b9d9985e SOURCES/clang-tools-extra-17.0.6.src.tar.xz.sig +581e929ba0d9fafc555081ab18d8c3fdf4478ac2 SOURCES/clang-18.1.8.src.tar.xz +b943c2de0e134d652018e819e855eff0213a20ac SOURCES/clang-18.1.8.src.tar.xz.sig +32923b812700526b76451384e4662ca45360d564 SOURCES/clang-tools-extra-18.1.8.src.tar.xz +1dc8e1c7e5b2ffc76a1010b50eb3fb47642b4e74 SOURCES/clang-tools-extra-18.1.8.src.tar.xz.sig diff --git a/.gitignore b/.gitignore index a7c012d..8322577 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -SOURCES/clang-17.0.6.src.tar.xz -SOURCES/clang-17.0.6.src.tar.xz.sig -SOURCES/clang-tools-extra-17.0.6.src.tar.xz -SOURCES/clang-tools-extra-17.0.6.src.tar.xz.sig +SOURCES/clang-18.1.8.src.tar.xz +SOURCES/clang-18.1.8.src.tar.xz.sig +SOURCES/clang-tools-extra-18.1.8.src.tar.xz +SOURCES/clang-tools-extra-18.1.8.src.tar.xz.sig diff --git a/SOURCES/0001-Driver-Add-a-gcc-equivalent-triple-to-the-list-of-tr.patch b/SOURCES/0001-Driver-Add-a-gcc-equivalent-triple-to-the-list-of-tr.patch deleted file mode 100644 index 6c94b4d..0000000 --- a/SOURCES/0001-Driver-Add-a-gcc-equivalent-triple-to-the-list-of-tr.patch +++ /dev/null @@ -1,59 +0,0 @@ -From d68a5a7817dc0d43853d8b84c9185dc24338664f Mon Sep 17 00:00:00 2001 -From: Tom Stellard -Date: Wed, 6 Oct 2021 05:32:44 +0000 -Subject: [PATCH] Driver: Add a gcc equivalent triple to the list of triples to - search - -There are some gcc triples, like x86_64-redhat-linux, that provide the -same behavior as a clang triple with a similar name (e.g. -x86_64-redhat-linux-gnu). When searching for a gcc install, also search -for a gcc equivalent triple if one exists. - -Differential Revision: https://reviews.llvm.org/D111207 ---- - clang/lib/Driver/ToolChains/Gnu.cpp | 22 ++++++++++++++++++++++ - 1 file changed, 22 insertions(+) - -diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp -index fe5bda5c6605..fd4a7f72be14 100644 ---- a/clang/lib/Driver/ToolChains/Gnu.cpp -+++ b/clang/lib/Driver/ToolChains/Gnu.cpp -@@ -1884,6 +1884,18 @@ static llvm::StringRef getGCCToolchainDir(const ArgList &Args, - return GCC_INSTALL_PREFIX; - } - -+/// This function takes a 'clang' triple and converts it to an equivalent gcc -+/// triple. -+static const char *ConvertToGccTriple(StringRef CandidateTriple) { -+ return llvm::StringSwitch(CandidateTriple) -+ .Case("aarch64-redhat-linux-gnu", "aarch64-redhat-linux") -+ .Case("i686-redhat-linux-gnu", "i686-redhat-linux") -+ .Case("ppc64le-redhat-linux-gnu", "ppc64le-redhat-linux") -+ .Case("s390x-redhat-linux-gnu", "s390x-redhat-linux") -+ .Case("x86_64-redhat-linux-gnu", "x86_64-redhat-linux") -+ .Default(NULL); -+} -+ - /// Initialize a GCCInstallationDetector from the driver. - /// - /// This performs all of the autodetection and sets up the various paths. -@@ -1904,6 +1916,16 @@ void Generic_GCC::GCCInstallationDetector::init( - // The compatible GCC triples for this particular architecture. - SmallVector CandidateTripleAliases; - SmallVector CandidateBiarchTripleAliases; -+ -+ // In some cases gcc uses a slightly different triple than clang for the -+ // same target. Convert the clang triple to the gcc equivalent and use that -+ // to search for the gcc install. -+ const char *ConvertedTriple = ConvertToGccTriple(TargetTriple.str()); -+ if (ConvertedTriple) { -+ CandidateTripleAliases.push_back(ConvertedTriple); -+ CandidateBiarchTripleAliases.push_back(ConvertedTriple); -+ } -+ - CollectLibDirsAndTriples(TargetTriple, BiarchVariantTriple, CandidateLibDirs, - CandidateTripleAliases, CandidateBiarchLibDirs, - CandidateBiarchTripleAliases); --- -2.26.2 - diff --git a/SOURCES/0001-Produce-DWARF4-by-default.patch b/SOURCES/0001-Produce-DWARF4-by-default.patch index 9b5b46b..a4b31e4 100644 --- a/SOURCES/0001-Produce-DWARF4-by-default.patch +++ b/SOURCES/0001-Produce-DWARF4-by-default.patch @@ -1,23 +1,20 @@ -From adbe188f3b1e3a0dd5ec80d9409601ba7f5b0423 Mon Sep 17 00:00:00 2001 +From 8ce0e2a14ba0743c06b543c0503203a56c905e8c Mon Sep 17 00:00:00 2001 From: Konrad Kleine -Date: Thu, 24 Mar 2022 09:44:21 +0100 -Subject: [PATCH] Produce DWARF4 by default +Date: Tue, 4 Jun 2024 14:11:23 +0200 +Subject: 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/lib/Driver/ToolChain.cpp | 4 +--- - clang/test/CodeGen/dwarf-version.c | 4 ++-- + clang/test/CodeGen/dwarf-version.c | 8 ++++---- clang/test/Driver/as-options.s | 4 ++-- clang/test/Driver/cl-options.c | 2 +- clang/test/Driver/clang-g-opts.c | 2 +- clang/test/Driver/ve-toolchain.c | 2 +- clang/test/Driver/ve-toolchain.cpp | 2 +- - 7 files changed, 9 insertions(+), 11 deletions(-) + 7 files changed, 11 insertions(+), 13 deletions(-) diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp -index 8dafc3d481c2..92bf26dc8ec6 100644 +index 388030592b48..6542895cf857 100644 --- a/clang/lib/Driver/ToolChain.cpp +++ b/clang/lib/Driver/ToolChain.cpp @@ -428,9 +428,7 @@ ToolChain::getDefaultUnwindTableLevel(const ArgList &Args) const { @@ -32,17 +29,21 @@ index 8dafc3d481c2..92bf26dc8ec6 100644 Tool *ToolChain::getClang() const { diff --git a/clang/test/CodeGen/dwarf-version.c b/clang/test/CodeGen/dwarf-version.c -index d307eb3f101f..e7e93bf6688c 100644 +index e63316ace69c..3d68b06c58ff 100644 --- a/clang/test/CodeGen/dwarf-version.c +++ b/clang/test/CodeGen/dwarf-version.c -@@ -2,8 +2,8 @@ +@@ -2,10 +2,10 @@ // 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=i386-pc-solaris -g -S -emit-llvm -o - %s | FileCheck %s --check-prefix=VER5 +-// RUN: %clang --target=i386-pc-solaris -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 ++// RUN: %clang --target=i386-pc-solaris -g -S -emit-llvm -o - %s | FileCheck %s --check-prefix=VER4 ++// RUN: %clang --target=i386-pc-solaris -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 @@ -69,12 +70,12 @@ index 73d002c7ef7e..71d55f7fd537 100644 // RUN: %clang --target=aarch64-linux-gnu -fno-integrated-as -gdwarf-5 %s -### 2>&1 | \ // RUN: FileCheck --check-prefix=GDWARF5 %s diff --git a/clang/test/Driver/cl-options.c b/clang/test/Driver/cl-options.c -index 6d929b19e7e2..373905c2e0fc 100644 +index 5b6dfe308a76..4da65272a1b0 100644 --- a/clang/test/Driver/cl-options.c +++ b/clang/test/Driver/cl-options.c -@@ -569,7 +569,7 @@ - // RUN: %clang_cl /Z7 -gdwarf /c -### -- %s 2>&1 | FileCheck -check-prefix=Z7_gdwarf %s - // Z7_gdwarf: "-gcodeview" +@@ -571,7 +571,7 @@ + // RUN: %clang_cl -gdwarf /Z7 /c -### -- %s 2>&1 | FileCheck -check-prefix=Z7_gdwarf %s + // Z7_gdwarf-NOT: "-gcodeview" // Z7_gdwarf: "-debug-info-kind=constructor" -// Z7_gdwarf: "-dwarf-version= +// Z7_gdwarf: "-dwarf-version=4 @@ -82,20 +83,20 @@ index 6d929b19e7e2..373905c2e0fc 100644 // RUN: %clang_cl /ZH:MD5 /c -### -- %s 2>&1 | FileCheck -check-prefix=ZH_MD5 %s // ZH_MD5: "-gsrc-hash=md5" diff --git a/clang/test/Driver/clang-g-opts.c b/clang/test/Driver/clang-g-opts.c -index 5ee0fe64fe48..985158746137 100644 +index b73602a155b0..b0cf64674253 100644 --- a/clang/test/Driver/clang-g-opts.c +++ b/clang/test/Driver/clang-g-opts.c -@@ -32,7 +32,7 @@ +@@ -36,7 +36,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-DWARF4: "-dwarf-version=4" // CHECK-WITH-G-DWARF2: "-dwarf-version=2" - // CHECK-WITH-G-STANDALONE: "-debug-info-kind=standalone" diff --git a/clang/test/Driver/ve-toolchain.c b/clang/test/Driver/ve-toolchain.c -index 32e25769b6da..b8a2852daba8 100644 +index 078341eb1202..6ccbef6a0c36 100644 --- a/clang/test/Driver/ve-toolchain.c +++ b/clang/test/Driver/ve-toolchain.c @@ -6,7 +6,7 @@ @@ -108,7 +109,7 @@ index 32e25769b6da..b8a2852daba8 100644 ///----------------------------------------------------------------------------- /// Checking include-path diff --git a/clang/test/Driver/ve-toolchain.cpp b/clang/test/Driver/ve-toolchain.cpp -index 5a33d5eceb61..cedf895b36dc 100644 +index cd48dd792f85..f77781d4c6fa 100644 --- a/clang/test/Driver/ve-toolchain.cpp +++ b/clang/test/Driver/ve-toolchain.cpp @@ -7,7 +7,7 @@ @@ -121,5 +122,5 @@ index 5a33d5eceb61..cedf895b36dc 100644 ///----------------------------------------------------------------------------- /// Checking include-path -- -2.41.0 +2.45.1 diff --git a/SOURCES/0009-disable-myst-parser.patch b/SOURCES/0009-disable-myst-parser.patch new file mode 100644 index 0000000..12a5154 --- /dev/null +++ b/SOURCES/0009-disable-myst-parser.patch @@ -0,0 +1,26 @@ +From 988dd3f3363d8ab4ee53f61e0eb5afc6646c9d4f Mon Sep 17 00:00:00 2001 +From: Nikita Popov +Date: Tue, 26 Sep 2023 13:06:29 +0200 +Subject: [PATCH] disable myst parser + +--- + clang/docs/conf.py | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/clang/docs/conf.py b/clang/docs/conf.py +index ca310026f53e..dfb74273b5b2 100644 +--- a/clang/docs/conf.py ++++ b/clang/docs/conf.py +@@ -35,9 +35,6 @@ templates_path = ["_templates"] + + import sphinx + +-if sphinx.version_info >= (3, 0): +- extensions.append("myst_parser") +- + # The encoding of source files. + # source_encoding = 'utf-8-sig' + +-- +2.41.0 + diff --git a/SOURCES/0009-disable-recommonmark.patch b/SOURCES/0009-disable-recommonmark.patch deleted file mode 100644 index f6db5da..0000000 --- a/SOURCES/0009-disable-recommonmark.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff -Naur a/clang/docs/conf.py b/clang/docs/conf.py ---- a/clang/docs/conf.py 2020-09-15 09:12:24.318287611 +0000 -+++ b/clang/docs/conf.py 2020-09-15 15:01:00.025893199 +0000 -@@ -37,21 +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' diff --git a/SOURCES/cfg.patch b/SOURCES/cfg.patch deleted file mode 100644 index 779558a..0000000 --- a/SOURCES/cfg.patch +++ /dev/null @@ -1,298 +0,0 @@ -commit ad4a5130277776d8f15f40ac5a6dede6ad3aabfb -Author: Timm Bäder -Date: Tue Aug 8 14:11:33 2023 +0200 - - [clang][CFG] Cleanup functions - - Add declarations declared with attribute(cleanup(...)) to the CFG, - similar to destructors. - - Differential Revision: https://reviews.llvm.org/D157385 - -diff --git a/clang/include/clang/Analysis/CFG.h b/clang/include/clang/Analysis/CFG.h -index cf4fa2da2a35..67383bb316d3 100644 ---- a/clang/include/clang/Analysis/CFG.h -+++ b/clang/include/clang/Analysis/CFG.h -@@ -14,10 +14,11 @@ - #ifndef LLVM_CLANG_ANALYSIS_CFG_H - #define LLVM_CLANG_ANALYSIS_CFG_H - --#include "clang/Analysis/Support/BumpVector.h" --#include "clang/Analysis/ConstructionContext.h" -+#include "clang/AST/Attr.h" - #include "clang/AST/ExprCXX.h" - #include "clang/AST/ExprObjC.h" -+#include "clang/Analysis/ConstructionContext.h" -+#include "clang/Analysis/Support/BumpVector.h" - #include "clang/Basic/LLVM.h" - #include "llvm/ADT/DenseMap.h" - #include "llvm/ADT/GraphTraits.h" -@@ -74,7 +75,8 @@ public: - MemberDtor, - TemporaryDtor, - DTOR_BEGIN = AutomaticObjectDtor, -- DTOR_END = TemporaryDtor -+ DTOR_END = TemporaryDtor, -+ CleanupFunction, - }; - - protected: -@@ -383,6 +385,32 @@ private: - } - }; - -+class CFGCleanupFunction final : public CFGElement { -+public: -+ CFGCleanupFunction() = default; -+ CFGCleanupFunction(const VarDecl *VD) -+ : CFGElement(Kind::CleanupFunction, VD) { -+ assert(VD->hasAttr()); -+ } -+ -+ const VarDecl *getVarDecl() const { -+ return static_cast(Data1.getPointer()); -+ } -+ -+ /// Returns the function to be called when cleaning up the var decl. -+ const FunctionDecl *getFunctionDecl() const { -+ const CleanupAttr *A = getVarDecl()->getAttr(); -+ return A->getFunctionDecl(); -+ } -+ -+private: -+ friend class CFGElement; -+ -+ static bool isKind(const CFGElement E) { -+ return E.getKind() == Kind::CleanupFunction; -+ } -+}; -+ - /// Represents C++ object destructor implicitly generated for automatic object - /// or temporary bound to const reference at the point of leaving its local - /// scope. -@@ -1142,6 +1170,10 @@ public: - Elements.push_back(CFGAutomaticObjDtor(VD, S), C); - } - -+ void appendCleanupFunction(const VarDecl *VD, BumpVectorContext &C) { -+ Elements.push_back(CFGCleanupFunction(VD), C); -+ } -+ - void appendLifetimeEnds(VarDecl *VD, Stmt *S, BumpVectorContext &C) { - Elements.push_back(CFGLifetimeEnds(VD, S), C); - } -diff --git a/clang/lib/Analysis/CFG.cpp b/clang/lib/Analysis/CFG.cpp -index b82f9010a83f..03ab4c6fdf29 100644 ---- a/clang/lib/Analysis/CFG.cpp -+++ b/clang/lib/Analysis/CFG.cpp -@@ -881,6 +881,10 @@ private: - B->appendAutomaticObjDtor(VD, S, cfg->getBumpVectorContext()); - } - -+ void appendCleanupFunction(CFGBlock *B, VarDecl *VD) { -+ B->appendCleanupFunction(VD, cfg->getBumpVectorContext()); -+ } -+ - void appendLifetimeEnds(CFGBlock *B, VarDecl *VD, Stmt *S) { - B->appendLifetimeEnds(VD, S, cfg->getBumpVectorContext()); - } -@@ -1346,7 +1350,8 @@ private: - return {}; - } - -- bool hasTrivialDestructor(VarDecl *VD); -+ bool hasTrivialDestructor(const VarDecl *VD) const; -+ bool needsAutomaticDestruction(const VarDecl *VD) const; - }; - - } // namespace -@@ -1861,14 +1866,14 @@ void CFGBuilder::addAutomaticObjDestruction(LocalScope::const_iterator B, - if (B == E) - return; - -- SmallVector DeclsNonTrivial; -- DeclsNonTrivial.reserve(B.distance(E)); -+ SmallVector DeclsNeedDestruction; -+ DeclsNeedDestruction.reserve(B.distance(E)); - - for (VarDecl* D : llvm::make_range(B, E)) -- if (!hasTrivialDestructor(D)) -- DeclsNonTrivial.push_back(D); -+ if (needsAutomaticDestruction(D)) -+ DeclsNeedDestruction.push_back(D); - -- for (VarDecl *VD : llvm::reverse(DeclsNonTrivial)) { -+ for (VarDecl *VD : llvm::reverse(DeclsNeedDestruction)) { - if (BuildOpts.AddImplicitDtors) { - // If this destructor is marked as a no-return destructor, we need to - // create a new block for the destructor which does not have as a -@@ -1879,7 +1884,8 @@ void CFGBuilder::addAutomaticObjDestruction(LocalScope::const_iterator B, - Ty = getReferenceInitTemporaryType(VD->getInit()); - Ty = Context->getBaseElementType(Ty); - -- if (Ty->getAsCXXRecordDecl()->isAnyDestructorNoReturn()) -+ const CXXRecordDecl *CRD = Ty->getAsCXXRecordDecl(); -+ if (CRD && CRD->isAnyDestructorNoReturn()) - Block = createNoReturnBlock(); - } - -@@ -1890,8 +1896,10 @@ void CFGBuilder::addAutomaticObjDestruction(LocalScope::const_iterator B, - // objects, we end lifetime with scope end. - if (BuildOpts.AddLifetime) - appendLifetimeEnds(Block, VD, S); -- if (BuildOpts.AddImplicitDtors) -+ if (BuildOpts.AddImplicitDtors && !hasTrivialDestructor(VD)) - appendAutomaticObjDtor(Block, VD, S); -+ if (VD->hasAttr()) -+ appendCleanupFunction(Block, VD); - } - } - -@@ -1922,7 +1930,7 @@ void CFGBuilder::addScopeExitHandling(LocalScope::const_iterator B, - // is destroyed, for automatic variables, this happens when the end of the - // scope is added. - for (VarDecl* D : llvm::make_range(B, E)) -- if (hasTrivialDestructor(D)) -+ if (!needsAutomaticDestruction(D)) - DeclsTrivial.push_back(D); - - if (DeclsTrivial.empty()) -@@ -2095,7 +2103,11 @@ LocalScope* CFGBuilder::addLocalScopeForDeclStmt(DeclStmt *DS, - return Scope; - } - --bool CFGBuilder::hasTrivialDestructor(VarDecl *VD) { -+bool CFGBuilder::needsAutomaticDestruction(const VarDecl *VD) const { -+ return !hasTrivialDestructor(VD) || VD->hasAttr(); -+} -+ -+bool CFGBuilder::hasTrivialDestructor(const VarDecl *VD) const { - // Check for const references bound to temporary. Set type to pointee. - QualType QT = VD->getType(); - if (QT->isReferenceType()) { -@@ -2149,7 +2161,7 @@ LocalScope* CFGBuilder::addLocalScopeForVarDecl(VarDecl *VD, - return Scope; - - if (!BuildOpts.AddLifetime && !BuildOpts.AddScopes && -- hasTrivialDestructor(VD)) { -+ !needsAutomaticDestruction(VD)) { - assert(BuildOpts.AddImplicitDtors); - return Scope; - } -@@ -5287,6 +5299,7 @@ CFGImplicitDtor::getDestructorDecl(ASTContext &astContext) const { - case CFGElement::CXXRecordTypedCall: - case CFGElement::ScopeBegin: - case CFGElement::ScopeEnd: -+ case CFGElement::CleanupFunction: - llvm_unreachable("getDestructorDecl should only be used with " - "ImplicitDtors"); - case CFGElement::AutomaticObjectDtor: { -@@ -5830,6 +5843,11 @@ static void print_elem(raw_ostream &OS, StmtPrinterHelper &Helper, - break; - } - -+ case CFGElement::Kind::CleanupFunction: -+ OS << "CleanupFunction (" -+ << E.castAs().getFunctionDecl()->getName() << ")\n"; -+ break; -+ - case CFGElement::Kind::LifetimeEnds: - Helper.handleDecl(E.castAs().getVarDecl(), OS); - OS << " (Lifetime ends)\n"; -diff --git a/clang/lib/Analysis/PathDiagnostic.cpp b/clang/lib/Analysis/PathDiagnostic.cpp -index 348afc42319e..0cb03943c547 100644 ---- a/clang/lib/Analysis/PathDiagnostic.cpp -+++ b/clang/lib/Analysis/PathDiagnostic.cpp -@@ -567,6 +567,7 @@ getLocationForCaller(const StackFrameContext *SFC, - } - case CFGElement::ScopeBegin: - case CFGElement::ScopeEnd: -+ case CFGElement::CleanupFunction: - llvm_unreachable("not yet implemented!"); - case CFGElement::LifetimeEnds: - case CFGElement::LoopExit: -diff --git a/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp b/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp -index 0e2ac78f7089..d7c5bd1d4042 100644 ---- a/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp -+++ b/clang/lib/StaticAnalyzer/Core/ExprEngine.cpp -@@ -993,6 +993,7 @@ void ExprEngine::processCFGElement(const CFGElement E, ExplodedNode *Pred, - ProcessLoopExit(E.castAs().getLoopStmt(), Pred); - return; - case CFGElement::LifetimeEnds: -+ case CFGElement::CleanupFunction: - case CFGElement::ScopeBegin: - case CFGElement::ScopeEnd: - return; -diff --git a/clang/test/Analysis/scopes-cfg-output.cpp b/clang/test/Analysis/scopes-cfg-output.cpp -index 6877d124e67a..4eb8967e3735 100644 ---- a/clang/test/Analysis/scopes-cfg-output.cpp -+++ b/clang/test/Analysis/scopes-cfg-output.cpp -@@ -1419,3 +1419,68 @@ label: - } - } - } -+ -+// CHECK: [B1] -+// CHECK-NEXT: 1: CFGScopeBegin(i) -+// CHECK-NEXT: 2: int i __attribute__((cleanup(cleanup_int))); -+// CHECK-NEXT: 3: CleanupFunction (cleanup_int) -+// CHECK-NEXT: 4: CFGScopeEnd(i) -+void cleanup_int(int *i); -+void test_cleanup_functions() { -+ int i __attribute__((cleanup(cleanup_int))); -+} -+ -+// CHECK: [B1] -+// CHECK-NEXT: 1: 10 -+// CHECK-NEXT: 2: i -+// CHECK-NEXT: 3: [B1.2] = [B1.1] -+// CHECK-NEXT: 4: return; -+// CHECK-NEXT: 5: CleanupFunction (cleanup_int) -+// CHECK-NEXT: 6: CFGScopeEnd(i) -+// CHECK-NEXT: Preds (1): B3 -+// CHECK-NEXT: Succs (1): B0 -+// CHECK: [B2] -+// CHECK-NEXT: 1: return; -+// CHECK-NEXT: 2: CleanupFunction (cleanup_int) -+// CHECK-NEXT: 3: CFGScopeEnd(i) -+// CHECK-NEXT: Preds (1): B3 -+// CHECK-NEXT: Succs (1): B0 -+// CHECK: [B3] -+// CHECK-NEXT: 1: CFGScopeBegin(i) -+// CHECK-NEXT: 2: int i __attribute__((cleanup(cleanup_int))); -+// CHECK-NEXT: 3: m -+// CHECK-NEXT: 4: [B3.3] (ImplicitCastExpr, LValueToRValue, int) -+// CHECK-NEXT: 5: 1 -+// CHECK-NEXT: 6: [B3.4] == [B3.5] -+// CHECK-NEXT: T: if [B3.6] -+// CHECK-NEXT: Preds (1): B4 -+// CHECK-NEXT: Succs (2): B2 B1 -+void test_cleanup_functions2(int m) { -+ int i __attribute__((cleanup(cleanup_int))); -+ -+ if (m == 1) { -+ return; -+ } -+ -+ i = 10; -+ return; -+} -+ -+// CHECK: [B1] -+// CHECK-NEXT: 1: CFGScopeBegin(f) -+// CHECK-NEXT: 2: (CXXConstructExpr, [B1.3], F) -+// CHECK-NEXT: 3: F f __attribute__((cleanup(cleanup_F))); -+// CHECK-NEXT: 4: CleanupFunction (cleanup_F) -+// CHECK-NEXT: 5: [B1.3].~F() (Implicit destructor) -+// CHECK-NEXT: 6: CFGScopeEnd(f) -+// CHECK-NEXT: Preds (1): B2 -+// CHECK-NEXT: Succs (1): B0 -+class F { -+public: -+ ~F(); -+}; -+void cleanup_F(F *f); -+ -+void test() { -+ F f __attribute((cleanup(cleanup_F))); -+} diff --git a/SOURCES/tsa.patch b/SOURCES/tsa.patch deleted file mode 100644 index 2cf698e..0000000 --- a/SOURCES/tsa.patch +++ /dev/null @@ -1,124 +0,0 @@ -commit cf8e189a99f988398a48148b9ea7901948665ab0 -Author: Timm Bäder -Date: Wed Sep 6 12:19:20 2023 +0200 - - [clang][TSA] Thread safety cleanup functions - - Consider cleanup functions in thread safety analysis. - - Differential Revision: https://reviews.llvm.org/D152504 - -diff --git a/clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h b/clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h -index 9d28325c1ea6..13e37ac2b56b 100644 ---- a/clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h -+++ b/clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h -@@ -361,7 +361,7 @@ public: - unsigned NumArgs = 0; - - // Function arguments -- const Expr *const *FunArgs = nullptr; -+ llvm::PointerUnion FunArgs = nullptr; - - // is Self referred to with -> or .? - bool SelfArrow = false; -diff --git a/clang/lib/Analysis/ThreadSafety.cpp b/clang/lib/Analysis/ThreadSafety.cpp -index 3107d035254d..3e6ceb7d54c4 100644 ---- a/clang/lib/Analysis/ThreadSafety.cpp -+++ b/clang/lib/Analysis/ThreadSafety.cpp -@@ -1773,7 +1773,8 @@ void BuildLockset::checkPtAccess(const Expr *Exp, AccessKind AK, - /// - /// \param Exp The call expression. - /// \param D The callee declaration. --/// \param Self If \p Exp = nullptr, the implicit this argument. -+/// \param Self If \p Exp = nullptr, the implicit this argument or the argument -+/// of an implicitly called cleanup function. - /// \param Loc If \p Exp = nullptr, the location. - void BuildLockset::handleCall(const Expr *Exp, const NamedDecl *D, - til::LiteralPtr *Self, SourceLocation Loc) { -@@ -2417,6 +2418,15 @@ void ThreadSafetyAnalyzer::runAnalysis(AnalysisDeclContext &AC) { - AD.getTriggerStmt()->getEndLoc()); - break; - } -+ -+ case CFGElement::CleanupFunction: { -+ const CFGCleanupFunction &CF = BI.castAs(); -+ LocksetBuilder.handleCall(/*Exp=*/nullptr, CF.getFunctionDecl(), -+ SxBuilder.createVariable(CF.getVarDecl()), -+ CF.getVarDecl()->getLocation()); -+ break; -+ } -+ - case CFGElement::TemporaryDtor: { - auto TD = BI.castAs(); - -diff --git a/clang/lib/Analysis/ThreadSafetyCommon.cpp b/clang/lib/Analysis/ThreadSafetyCommon.cpp -index b8286cef396c..63cc66852a9e 100644 ---- a/clang/lib/Analysis/ThreadSafetyCommon.cpp -+++ b/clang/lib/Analysis/ThreadSafetyCommon.cpp -@@ -110,7 +110,8 @@ static StringRef ClassifyDiagnostic(QualType VDT) { - /// \param D The declaration to which the attribute is attached. - /// \param DeclExp An expression involving the Decl to which the attribute - /// is attached. E.g. the call to a function. --/// \param Self S-expression to substitute for a \ref CXXThisExpr. -+/// \param Self S-expression to substitute for a \ref CXXThisExpr in a call, -+/// or argument to a cleanup function. - CapabilityExpr SExprBuilder::translateAttrExpr(const Expr *AttrExp, - const NamedDecl *D, - const Expr *DeclExp, -@@ -144,7 +145,11 @@ CapabilityExpr SExprBuilder::translateAttrExpr(const Expr *AttrExp, - - if (Self) { - assert(!Ctx.SelfArg && "Ambiguous self argument"); -- Ctx.SelfArg = Self; -+ assert(isa(D) && "Self argument requires function"); -+ if (isa(D)) -+ Ctx.SelfArg = Self; -+ else -+ Ctx.FunArgs = Self; - - // If the attribute has no arguments, then assume the argument is "this". - if (!AttrExp) -@@ -312,8 +317,14 @@ til::SExpr *SExprBuilder::translateDeclRefExpr(const DeclRefExpr *DRE, - ? (cast(D)->getCanonicalDecl() == Canonical) - : (cast(D)->getCanonicalDecl() == Canonical)) { - // Substitute call arguments for references to function parameters -- assert(I < Ctx->NumArgs); -- return translate(Ctx->FunArgs[I], Ctx->Prev); -+ if (const Expr *const *FunArgs = -+ Ctx->FunArgs.dyn_cast()) { -+ assert(I < Ctx->NumArgs); -+ return translate(FunArgs[I], Ctx->Prev); -+ } -+ -+ assert(I == 0); -+ return Ctx->FunArgs.get(); - } - } - // Map the param back to the param of the original function declaration -diff --git a/clang/test/Sema/warn-thread-safety-analysis.c b/clang/test/Sema/warn-thread-safety-analysis.c -index 355616b73d96..642ea88ec3c9 100644 ---- a/clang/test/Sema/warn-thread-safety-analysis.c -+++ b/clang/test/Sema/warn-thread-safety-analysis.c -@@ -72,6 +72,8 @@ int get_value(int *p) SHARED_LOCKS_REQUIRED(foo_.mu_){ - return *p; - } - -+void unlock_scope(struct Mutex *const *mu) __attribute__((release_capability(**mu))); -+ - int main(void) { - - Foo_fun1(1); // expected-warning{{calling function 'Foo_fun1' requires holding mutex 'mu2'}} \ -@@ -127,6 +129,13 @@ int main(void) { - // expected-note@-1{{mutex released here}} - mutex_shared_unlock(&mu1); // expected-warning {{releasing mutex 'mu1' that was not held}} - -+ /// Cleanup functions -+ { -+ struct Mutex* const __attribute__((cleanup(unlock_scope))) scope = &mu1; -+ mutex_exclusive_lock(scope); // Note that we have to lock through scope, because no alias analysis! -+ // Cleanup happens automatically -> no warning. -+ } -+ - return 0; - } - diff --git a/SPECS/clang.spec b/SPECS/clang.spec index ec13f09..26c0a69 100644 --- a/SPECS/clang.spec +++ b/SPECS/clang.spec @@ -8,15 +8,25 @@ # See https://docs.fedoraproject.org/en-US/packaging-guidelines/#_compiler_macros %global toolchain clang +# Opt out of https://fedoraproject.org/wiki/Changes/fno-omit-frame-pointer +# https://bugzilla.redhat.com/show_bug.cgi?id=2158587 +%undefine _include_frame_pointers %global gts_version 13 %bcond_with compat_build %bcond_with bundle_compat_lib %bcond_without check -%global maj_ver 17 -%global min_ver 0 -%global patch_ver 6 +%ifnarch s390x %ix86 +%global build_ldflags %{build_ldflags} -Wl,--build-id=sha1 +%bcond_without linker_lld +%else +%bcond_with linker_lld +%endif + +%global maj_ver 18 +%global min_ver 1 +%global patch_ver 8 #global rc_ver 4 %if %{with snapshot_build} @@ -37,32 +47,45 @@ %global install_includedir %{install_prefix}/include %global install_libdir %{install_prefix}/lib %global install_datadir %{install_prefix}/share +%global install_libexecdir %{install_prefix}/libexec +%global install_docdir %{install_datadir}/doc %global pkg_includedir %{install_includedir} %else %global pkg_name clang -%global install_prefix /usr +%global install_prefix %{_prefix} +%global install_bindir %{_bindir} %global install_datadir %{_datadir} %global install_libdir %{_libdir} +%global install_includedir %{_includedir} +%global install_libexecdir %{_libexecdir} +%global install_docdir %{_docdir} %endif %if %{with bundle_compat_lib} -%global compat_maj_ver 16 +%global compat_maj_ver 17 %global compat_ver %{compat_maj_ver}.0.6 %endif -%ifarch ppc64le aarch64 -# Too many threads on ppc64 and aarch64 systems causes OOM errors. +%ifarch ppc64le +# Too many threads on ppc64 systems causes OOM errors. %global _smp_mflags -j8 %endif +%if 0%{?fedora} +# Try to limit memory use on i686. +%ifarch %ix86 +%constrain_build -m 3072 +%endif +%endif + %global clang_srcdir clang-%{clang_version}%{?rc_ver:rc%{rc_ver}}.src %global clang_tools_srcdir clang-tools-extra-%{clang_version}%{?rc_ver:rc%{rc_ver}}.src Name: %pkg_name Version: %{clang_version}%{?rc_ver:~rc%{rc_ver}}%{?llvm_snapshot_version_suffix:~%{llvm_snapshot_version_suffix}} -Release: 5%{?dist} +Release: 3%{?dist} Summary: A C language family front-end for LLVM License: Apache-2.0 WITH LLVM-exception OR NCSA @@ -75,10 +98,8 @@ Source1: %{llvm_snapshot_source_prefix}clang-tools-extra-%{llvm_snapshot_yyyy %else Source0: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{clang_version}%{?rc_ver:-rc%{rc_ver}}/%{clang_srcdir}.tar.xz Source3: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{clang_version}%{?rc_ver:-rc%{rc_ver}}/%{clang_srcdir}.tar.xz.sig -%if %{without compat_build} Source1: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{clang_version}%{?rc_ver:-rc%{rc_ver}}/%{clang_tools_srcdir}.tar.xz Source2: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{clang_version}%{?rc_ver:-rc%{rc_ver}}/%{clang_tools_srcdir}.tar.xz.sig -%endif Source4: release-keys.asc %if %{with bundle_compat_lib} Source5: https://github.com/llvm/llvm-project/releases/download/llvmorg-%{compat_ver}/clang-%{compat_ver}.src.tar.xz @@ -96,34 +117,28 @@ Source105: macros.%{name} # Patches for clang Patch1: 0001-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 -# Drop the following patch after debugedit adds support to DWARF-5: -# https://sourceware.org/bugzilla/show_bug.cgi?id=28728 -Patch4: 0001-Produce-DWARF4-by-default.patch # Workaround a bug in ORC on ppc64le. # More info is available here: https://reviews.llvm.org/D159115#4641826 Patch5: 0001-Workaround-a-bug-in-ORC-on-ppc64le.patch -# Patches for https://issues.redhat.com/browse/RHEL-1650 -# Remove in clang 18. -Patch6: cfg.patch -Patch7: tsa.patch - # RHEL specific patches -Patch101: 0009-disable-recommonmark.patch +# Avoid unwanted dependency on python-myst-parser +Patch101: 0009-disable-myst-parser.patch Patch102: 0001-Driver-Give-devtoolset-path-precedence-over-Installe.patch +Patch103: 0001-Produce-DWARF4-by-default.patch -%if %{without compat_build} # Patches for clang-tools-extra # See https://reviews.llvm.org/D120301 Patch201: 0001-clang-tools-extra-Make-test-dependency-on-LLVMHello-.patch -%endif # Required for 64-bit atomics on i686. BuildRequires: gcc-toolset-%{gts_version}-libatomic-devel # Required to handle LTO debuginfo. BuildRequires: gcc-toolset-%{gts_version}-gdb BuildRequires: clang +%if %{with linker_lld} +BuildRequires: lld +%endif BuildRequires: cmake BuildRequires: ninja-build @@ -131,8 +146,8 @@ BuildRequires: ninja-build %global llvm_pkg_name llvm%{maj_ver} %else %global llvm_pkg_name llvm -BuildRequires: llvm-test = %{version} -BuildRequires: llvm-googletest = %{version} +BuildRequires: %{llvm_pkg_name}-test = %{version} +BuildRequires: %{llvm_pkg_name}-googletest = %{version} %endif BuildRequires: %{llvm_pkg_name}-devel = %{version} @@ -152,16 +167,19 @@ BuildRequires: emacs BuildRequires: python3-lit BuildRequires: python3-sphinx +%if %{undefined rhel} +BuildRequires: python3-myst-parser +%endif BuildRequires: libatomic # We need python3-devel for %%py3_shebang_fix BuildRequires: python3-devel -%if %{without compat_build} # For reproducible pyc file generation # See https://docs.fedoraproject.org/en-US/packaging-guidelines/Python_Appendix/#_byte_compilation_reproducibility %if 0%{?fedora} BuildRequires: /usr/bin/marshalparser +%if %{without compat_build} %global py_reproducible_pyc_path %{buildroot}%{python3_sitelib} %endif %endif @@ -224,35 +242,28 @@ Recommends: libatomic%{?_isa} 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. %package devel Summary: Development header files for clang Requires: %{name}-libs = %{version}-%{release} -%if %{without compat_build} Requires: %{name}%{?_isa} = %{version}-%{release} # The clang CMake files reference tools from clang-tools-extra. Requires: %{name}-tools-extra%{?_isa} = %{version}-%{release} -%endif +Provides: clang-devel(major) = %{maj_ver} %description devel Development header files for clang. %package resource-filesystem Summary: Filesystem package that owns the clang resource directory -Provides: %{name}-resource-filesystem(major) = %{maj_ver} +Provides: clang-resource-filesystem(major) = %{maj_ver} BuildArch: noarch %description resource-filesystem This package owns the clang resouce directory: lib/clang/$version/ -%if %{without compat_build} %package analyzer Summary: A source code analysis framework License: Apache-2.0 WITH LLVM-exception OR NCSA OR MIT @@ -273,14 +284,12 @@ Requires: emacs-filesystem %description tools-extra A set of extra tools built using Clang's tooling API. -%if 0%{?fedora} %package tools-extra-devel Summary: Development header files for clang tools Requires: %{name}-tools-extra = %{version}-%{release} %description tools-extra-devel Development header files for clang tools. -%endif # Put git-clang-format in its own package, because it Requires git # and we don't want to force users to install all those dependenices if they @@ -294,7 +303,7 @@ Requires: python3 %description -n git-clang-format clang-format integration for git. - +%if %{without compat_build} %package -n python3-clang Summary: Python3 bindings for clang Requires: %{name}-devel%{?_isa} = %{version}-%{release} @@ -354,14 +363,11 @@ rm test/CodeGen/profile-filter.c tools/scan-view/share/startfile.py \ tools/scan-build-py/bin/* \ tools/scan-build-py/libexec/* -%endif %build -# Use ThinLTO to limit build time. -%define _lto_cflags -flto=thin -# And disable LTO on AArch64 entirely. -%ifarch aarch64 +# Disable lto on i686 due to memory constraints. +%ifarch %ix86 %define _lto_cflags %{nil} %endif @@ -370,23 +376,17 @@ rm test/CodeGen/profile-filter.c %global _lto_cflags %nil %endif - -%if 0%{?__isa_bits} == 64 -sed -i 's/\@FEDORA_LLVM_LIB_SUFFIX\@/64/g' test/lit.cfg.py -%else -sed -i 's/\@FEDORA_LLVM_LIB_SUFFIX\@//g' test/lit.cfg.py -%endif - -%ifarch %ix86 -# Linking libclang.so goes out of memory even with ThinLTO and a single link job. -%global _lto_cflags %nil -%endif - -%ifarch s390 s390x %{arm} aarch64 %ix86 ppc64le +%ifarch s390 s390x aarch64 %ix86 ppc64le # Decrease debuginfo verbosity to reduce memory consumption during final library linking %global optflags %(echo %{optflags} | sed 's/-g /-g1 /') %endif +%if %{with linker_lld} +# TODO: Use LLVM_USE_LLD cmake option, but this doesn't seem to work with +# standalone builds. +%global build_ldflags %(echo %{build_ldflags} -fuse-ld=lld) +%endif + # Disable dwz on aarch64, because it takes a huge amount of time to decide not to optimize things. %ifarch aarch64 %define _find_debuginfo_dwz_opts %{nil} @@ -424,11 +424,7 @@ mv ../cmake-%{compat_ver}.src ../cmake # We set CLANG_DEFAULT_PIE_ON_LINUX=OFF and PPC_LINUX_DEFAULT_IEEELONGDOUBLE=ON to match the # defaults used by Fedora's GCC. -# See https://bugzilla.redhat.com/show_bug.cgi?id=2134146 -%cmake -G Ninja \ -%ifarch %ix86 - -DHAVE_CXX_ATOMICS64_WITHOUT_LIB=OFF \ -%endif +%cmake -G Ninja \ -DCLANG_DEFAULT_PIE_ON_LINUX=OFF \ %if 0%{?fedora} || 0%{?rhel} > 9 -DPPC_LINUX_DEFAULT_IEEELONGDOUBLE=ON \ @@ -438,30 +434,26 @@ mv ../cmake-%{compat_ver}.src ../cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DPYTHON_EXECUTABLE=%{__python3} \ -DCMAKE_SKIP_RPATH:BOOL=ON \ -%ifarch s390 s390x %{arm} %ix86 ppc64le +%ifarch s390 s390x %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=%{pkg_bindir}/llvm-config-%{maj_ver}-%{__isa_bits} \ -DCMAKE_INSTALL_PREFIX=%{install_prefix} \ - -DCLANG_INCLUDE_TESTS:BOOL=OFF \ - -DLLVM_INCLUDE_TESTS:BOOL=OFF \ -DLLVM_CMAKE_DIR=%{install_libdir}/cmake/llvm \ %else - -DCLANG_INCLUDE_TESTS:BOOL=ON \ - -DLLVM_BUILD_UTILS:BOOL=ON \ - -DLLVM_EXTERNAL_CLANG_TOOLS_EXTRA_SOURCE_DIR=../%{clang_tools_srcdir} \ - -DLLVM_EXTERNAL_LIT=%{_bindir}/lit \ - -DLLVM_LIT_ARGS="-vv" \ - -DLLVM_MAIN_SRC_DIR=%{_datadir}/llvm/src \ %if 0%{?__isa_bits} == 64 -DLLVM_LIBDIR_SUFFIX=64 \ %else -DLLVM_LIBDIR_SUFFIX= \ %endif %endif + -DCLANG_INCLUDE_TESTS:BOOL=ON \ + -DLLVM_BUILD_UTILS:BOOL=ON \ + -DLLVM_EXTERNAL_CLANG_TOOLS_EXTRA_SOURCE_DIR=../%{clang_tools_srcdir} \ + -DLLVM_EXTERNAL_LIT=%{_bindir}/lit \ + -DLLVM_LIT_ARGS="-vv" \ + -DLLVM_MAIN_SRC_DIR=%{_datadir}/llvm/src \ \ %if %{with snapshot_build} -DLLVM_VERSION_SUFFIX="%{llvm_snapshot_version_suffix}" \ @@ -489,6 +481,7 @@ mv ../cmake-%{compat_ver}.src ../cmake -DBUILD_SHARED_LIBS=OFF \ -DCLANG_REPOSITORY_STRING="%{?dist_vendor} %{version}-%{release}" \ -DCLANG_RESOURCE_DIR=../lib/clang/%{maj_ver} \ + -DCLANG_CONFIG_FILE_SYSTEM_DIR=%{_sysconfdir}/%{name}/ \ %ifarch %{arm} -DCLANG_DEFAULT_LINKER=lld \ %endif @@ -506,25 +499,18 @@ export GDB=`which gdb` %cmake_install +# Add a symlink in /usr/bin to clang-format-diff +ln -s %{install_datadir}/clang/clang-format-diff.py %{buildroot}%{install_bindir}/clang-format-diff + %if %{with bundle_compat_lib} install -m 0755 ../clang-compat-libs/lib/libclang.so.%{compat_maj_ver}* %{buildroot}%{_libdir} install -m 0755 ../clang-compat-libs/lib/libclang-cpp.so.%{compat_maj_ver}* %{buildroot}%{_libdir} %endif -%if %{with compat_build} - -# Remove binaries/other files -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 - # File in the macros file for other packages to use. We are not doing this # in the compat package, because the version macros would # conflict with # eachother if both clang and the clang compat package were installed together. +%if %{without compat_build} install -p -m0644 -D %{SOURCE105} %{buildroot}%{_rpmmacrodir}/macros.%{name} sed -i -e "s|@@CLANG_MAJOR_VERSION@@|%{maj_ver}|" \ -e "s|@@CLANG_MINOR_VERSION@@|%{min_ver}|" \ @@ -540,62 +526,89 @@ 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 - # Move emacs integration files to the correct directory mkdir -p %{buildroot}%{_emacs_sitestartdir} for f in clang-format.el clang-rename.el clang-include-fixer.el; do mv %{buildroot}{%{_datadir}/clang,%{_emacs_sitestartdir}}/$f done -# remove editor integrations (bbedit, sublime, emacs, vim) -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/clang/html -rm -Rvf %{buildroot}%{_datadir}/clang/clang-doc-default-stylesheet.css -rm -Rvf %{buildroot}%{_datadir}/clang/index.js - -# TODO: What are the Fedora guidelines for packaging bash autocomplete files? -rm -vf %{buildroot}%{_datadir}/clang/bash-autocomplete.sh - # Create Manpage symlinks ln -s clang.1.gz %{buildroot}%{_mandir}/man1/clang++.1.gz ln -s clang.1.gz %{buildroot}%{_mandir}/man1/clang-%{maj_ver}.1.gz ln -s clang.1.gz %{buildroot}%{_mandir}/man1/clang++-%{maj_ver}.1.gz -# Add clang++-{version} symlink -ln -s clang++ %{buildroot}%{_bindir}/clang++-%{maj_ver} - - # Fix permission chmod u-x %{buildroot}%{_mandir}/man1/scan-build.1* +# Add clang++-{version} symlink +ln -s clang++ %{buildroot}%{_bindir}/clang++-%{maj_ver} + +%else +# Not sure where to put these python modules for the compat build. +rm -Rf %{buildroot}%{install_libdir}/{libear,libscanbuild} + +# Not sure where to put the emacs integration files for the compat build. +rm -Rf %{buildroot}%{install_datadir}/clang/*.el + +# Not sure what to do with man pages for the compat builds +rm -Rf %{buildroot}%{install_prefix}/share/man/ + +# Add version suffix to binaries +mkdir -p %{buildroot}%{_bindir} +for f in %{buildroot}/%{install_bindir}/*; do + filename=`basename $f` + if echo $filename | grep -e '%{maj_ver}'; then + continue + fi + ln -s ../../%{install_bindir}/$filename %{buildroot}/%{_bindir}/$filename-%{maj_ver} +done + +# Add clang++-{version} symlink +ln -s ../../%{install_bindir}/clang++ %{buildroot}%{install_bindir}/clang++-%{maj_ver} + %endif +%if 0%{?fedora} == 38 +# Install config file +mkdir -p %{buildroot}%{_sysconfdir}/%{name}/ +mv %{SOURCE6} %{buildroot}%{_sysconfdir}/%{name}/%{_target_platform}.cfg +%endif + +# Install config file for clang +%if %{maj_ver} >=18 +mkdir -p %{buildroot}%{_sysconfdir}/%{name}/ +echo "--gcc-triple=%{_target_cpu}-redhat-linux" >> %{buildroot}%{_sysconfdir}/%{name}/%{_target_platform}-clang.cfg +echo "--gcc-triple=%{_target_cpu}-redhat-linux" >> %{buildroot}%{_sysconfdir}/%{name}/%{_target_platform}-clang++.cfg +%endif + +# Fix permissions of scan-view scripts +chmod a+x %{buildroot}%{install_datadir}/scan-view/{Reporter.py,startfile.py} + +# multilib fix +%multilib_fix_c_header --file %{install_includedir}/clang/Config/config.h + +# remove editor integrations (bbedit, sublime, emacs, vim) +rm -vf %{buildroot}%{install_datadir}/clang/clang-format-bbedit.applescript +rm -vf %{buildroot}%{install_datadir}/clang/clang-format-sublime.py* + +# TODO: Package html docs +rm -Rvf %{buildroot}%{install_docdir}/Clang/clang/html +rm -Rvf %{buildroot}%{install_datadir}/clang/clang-doc-default-stylesheet.css +rm -Rvf %{buildroot}%{install_datadir}/clang/index.js + +# TODO: What are the Fedora guidelines for packaging bash autocomplete files? +rm -vf %{buildroot}%{install_datadir}/clang/bash-autocomplete.sh + + # Create sub-directories in the clang resource directory that will be # populated by other packages mkdir -p %{buildroot}%{install_prefix}/lib/clang/%{maj_ver}/{bin,include,lib,share}/ - -# Remove clang-tidy headers. We don't ship the libraries for these. -rm -Rvf %{buildroot}%{_includedir}/clang-tidy/ - -%if %{without compat_build} -# Add a symlink in /usr/bin to clang-format-diff -ln -s %{_datadir}/clang/clang-format-diff.py %{buildroot}%{_bindir}/clang-format-diff -%endif +#Add versioned resource directory macro +mkdir -p %{buildroot}%{_rpmmacrodir}/ +echo "%%clang%{maj_ver}_resource_dir %%{_prefix}/lib/clang/%{maj_ver}" >> %{buildroot}%{_rpmmacrodir}/macros.%{name} %check -# see rhbz#1994082 -sed -i -e "s/'ASAN_SYMBOLIZER_PATH', 'MSAN_SYMBOLIZER_PATH'/'ASAN_SYMBOLIZER_PATH', 'MSAN_SYMBOLIZER_PATH', 'SOURCE_DATE_EPOCH'/" test/lit.cfg.py - -%if %{without compat_build} %if %{with check} # Build test dependencies separately, to prevent invocations of host clang from being affected # by LD_LIBRARY_PATH below. @@ -610,12 +623,7 @@ mv "$compat_lib" . %endif # requires lit.py from LLVM utilities -# FIXME: Fix failing ARM tests -SOURCE_DATA_EPOCH=1629181597 LD_LIBRARY_PATH=%{buildroot}/%{_libdir} %{__ninja} check-all -C %{__cmake_builddir} || \ -%ifarch %{arm} -: -%else -false +SOURCE_DATA_EPOCH=1629181597 LD_LIBRARY_PATH=%{buildroot}/%{install_libdir} %{__ninja} check-all -C %{__cmake_builddir} %endif %if %{with bundle_compat_lib} @@ -623,18 +631,17 @@ mv ./libclang-cpp.so.%{compat_maj_ver} "$compat_lib" %endif %endif -%endif -%if %{without compat_build} %files %license LICENSE.TXT -%{_bindir}/clang -%{_bindir}/clang++ -%{_bindir}/clang-%{maj_ver} -%{_bindir}/clang++-%{maj_ver} -%{_bindir}/clang-cl -%{_bindir}/clang-cpp +%{install_bindir}/clang +%{install_bindir}/clang++ +%{install_bindir}/clang-%{maj_ver} +%{install_bindir}/clang++-%{maj_ver} +%{install_bindir}/clang-cl +%{install_bindir}/clang-cpp +%if %{without compat_build} %{_mandir}/man1/clang.1.gz %{_mandir}/man1/clang++.1.gz %{_mandir}/man1/clang-%{maj_ver}.1.gz @@ -648,22 +655,19 @@ mv ./libclang-cpp.so.%{compat_maj_ver} "$compat_lib" %{_libdir}/libclang.so.%{compat_maj_ver}* %{_libdir}/libclang-cpp.so.%{compat_maj_ver}* %endif +%{_sysconfdir}/%{name}/%{_target_platform}-clang.cfg +%{_sysconfdir}/%{name}/%{_target_platform}-clang++.cfg %files devel -%if %{without compat_build} -%{_libdir}/*.so -%{_includedir}/clang/ -%{_includedir}/clang-c/ -%{_libdir}/cmake/* -%{_bindir}/clang-tblgen -%dir %{_datadir}/clang/ -%{_rpmmacrodir}/macros.%{name} -%else %{install_libdir}/*.so -%{pkg_includedir}/clang/ -%{pkg_includedir}/clang-c/ -%{install_libdir}/cmake/ +%{install_includedir}/clang/ +%{install_includedir}/clang-c/ +%{install_libdir}/cmake/* +%{install_bindir}/clang-tblgen +%if %{with compat_build} +%{_bindir}/clang-tblgen-%{maj_ver} %endif +%dir %{install_datadir}/clang/ %files resource-filesystem %dir %{install_prefix}/lib/clang/ @@ -672,86 +676,148 @@ mv ./libclang-cpp.so.%{compat_maj_ver} "$compat_lib" %dir %{install_prefix}/lib/clang/%{maj_ver}/include/ %dir %{install_prefix}/lib/clang/%{maj_ver}/lib/ %dir %{install_prefix}/lib/clang/%{maj_ver}/share/ -%if %{without compat_build} %{_rpmmacrodir}/macros.%{name} %files analyzer -%{_bindir}/scan-view -%{_bindir}/scan-build -%{_bindir}/analyze-build -%{_bindir}/intercept-build -%{_bindir}/scan-build-py -%{_libexecdir}/ccc-analyzer -%{_libexecdir}/c++-analyzer -%{_libexecdir}/analyze-c++ -%{_libexecdir}/analyze-cc -%{_libexecdir}/intercept-c++ -%{_libexecdir}/intercept-cc -%{_datadir}/scan-view/ -%{_datadir}/scan-build/ +%{install_bindir}/scan-view +%{install_bindir}/scan-build +%{install_bindir}/analyze-build +%{install_bindir}/intercept-build +%{install_bindir}/scan-build-py +%if %{with compat_build} +%{_bindir}/scan-view-%{maj_ver} +%{_bindir}/scan-build-%{maj_ver} +%{_bindir}/analyze-build-%{maj_ver} +%{_bindir}/intercept-build-%{maj_ver} +%{_bindir}/scan-build-py-%{maj_ver} +%endif +%{install_libexecdir}/ccc-analyzer +%{install_libexecdir}/c++-analyzer +%{install_libexecdir}/analyze-c++ +%{install_libexecdir}/analyze-cc +%{install_libexecdir}/intercept-c++ +%{install_libexecdir}/intercept-cc +%{install_datadir}/scan-view/ +%{install_datadir}/scan-build/ +%if %{without compat_build} %{_mandir}/man1/scan-build.1.* %{python3_sitelib}/libear %{python3_sitelib}/libscanbuild +%endif %files tools-extra -%{_bindir}/amdgpu-arch -%{_bindir}/clang-apply-replacements -%{_bindir}/clang-change-namespace -%{_bindir}/clang-check -%{_bindir}/clang-doc -%{_bindir}/clang-extdef-mapping -%{_bindir}/clang-format -%{_bindir}/clang-include-cleaner -%{_bindir}/clang-include-fixer -%{_bindir}/clang-move -%{_bindir}/clang-offload-bundler -%{_bindir}/clang-offload-packager -%{_bindir}/clang-linker-wrapper -%{_bindir}/clang-pseudo -%{_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}/nvptx-arch -%{_bindir}/pp-trace -%{_bindir}/c-index-test -%{_bindir}/find-all-symbols -%{_bindir}/modularize -%{_bindir}/clang-format-diff +%{install_bindir}/amdgpu-arch +%{install_bindir}/clang-apply-replacements +%{install_bindir}/clang-change-namespace +%{install_bindir}/clang-check +%{install_bindir}/clang-doc +%{install_bindir}/clang-extdef-mapping +%{install_bindir}/clang-format +%{install_bindir}/clang-include-cleaner +%{install_bindir}/clang-include-fixer +%{install_bindir}/clang-move +%{install_bindir}/clang-offload-bundler +%{install_bindir}/clang-offload-packager +%{install_bindir}/clang-linker-wrapper +%{install_bindir}/clang-pseudo +%{install_bindir}/clang-query +%{install_bindir}/clang-refactor +%{install_bindir}/clang-rename +%{install_bindir}/clang-reorder-fields +%{install_bindir}/clang-repl +%{install_bindir}/clang-scan-deps +%{install_bindir}/clang-tidy +%{install_bindir}/clangd +%{install_bindir}/diagtool +%{install_bindir}/hmaptool +%{install_bindir}/nvptx-arch +%{install_bindir}/pp-trace +%{install_bindir}/c-index-test +%{install_bindir}/find-all-symbols +%{install_bindir}/modularize +%{install_bindir}/clang-format-diff +%{install_bindir}/run-clang-tidy +%if %{with compat_build} +%{_bindir}/amdgpu-arch-%{maj_ver} +%{_bindir}/clang-apply-replacements-%{maj_ver} +%{_bindir}/clang-change-namespace-%{maj_ver} +%{_bindir}/clang-check-%{maj_ver} +%{_bindir}/clang-doc-%{maj_ver} +%{_bindir}/clang-extdef-mapping-%{maj_ver} +%{_bindir}/clang-format-%{maj_ver} +%{_bindir}/clang-include-cleaner-%{maj_ver} +%{_bindir}/clang-include-fixer-%{maj_ver} +%{_bindir}/clang-move-%{maj_ver} +%{_bindir}/clang-offload-bundler-%{maj_ver} +%{_bindir}/clang-offload-packager-%{maj_ver} +%{_bindir}/clang-linker-wrapper-%{maj_ver} +%{_bindir}/clang-pseudo-%{maj_ver} +%{_bindir}/clang-query-%{maj_ver} +%{_bindir}/clang-refactor-%{maj_ver} +%{_bindir}/clang-rename-%{maj_ver} +%{_bindir}/clang-reorder-fields-%{maj_ver} +%{_bindir}/clang-repl-%{maj_ver} +%{_bindir}/clang-scan-deps-%{maj_ver} +%{_bindir}/clang-tidy-%{maj_ver} +%{_bindir}/clangd-%{maj_ver} +%{_bindir}/diagtool-%{maj_ver} +%{_bindir}/hmaptool-%{maj_ver} +%{_bindir}/nvptx-arch-%{maj_ver} +%{_bindir}/pp-trace-%{maj_ver} +%{_bindir}/c-index-test-%{maj_ver} +%{_bindir}/find-all-symbols-%{maj_ver} +%{_bindir}/modularize-%{maj_ver} +%{_bindir}/clang-format-diff-%{maj_ver} +%{_bindir}/run-clang-tidy-%{maj_ver} +%else %{_mandir}/man1/diagtool.1.gz %{_emacs_sitestartdir}/clang-format.el %{_emacs_sitestartdir}/clang-rename.el %{_emacs_sitestartdir}/clang-include-fixer.el -%{_datadir}/clang/clang-format.py* -%{_datadir}/clang/clang-format-diff.py* -%{_datadir}/clang/clang-include-fixer.py* -%{_datadir}/clang/clang-tidy-diff.py* -%{_bindir}/run-clang-tidy -%{_datadir}/clang/run-find-all-symbols.py* -%{_datadir}/clang/clang-rename.py* - -%if 0%{?fedora} -%files tools-extra-devel -%{_includedir}/clang-tidy/ %endif +%{install_datadir}/clang/clang-format.py* +%{install_datadir}/clang/clang-format-diff.py* +%{install_datadir}/clang/clang-include-fixer.py* +%{install_datadir}/clang/clang-tidy-diff.py* +%{install_datadir}/clang/run-find-all-symbols.py* +%{install_datadir}/clang/clang-rename.py* + +%files tools-extra-devel +%{install_includedir}/clang-tidy/ %files -n git-clang-format -%{_bindir}/git-clang-format +%{install_bindir}/git-clang-format +%if %{with compat_build} +%{_bindir}/git-clang-format-%{maj_ver} +%endif +%if %{without compat_build} %files -n python3-clang %{python3_sitelib}/clang/ %endif %changelog +* Thu Aug 08 2024 Konrad Kleine - 18.1.8-3 +- Remove clang 17 compat lib + +* Wed Jul 24 2024 Konrad Kleine - 18.1.8-2 +- Link with ld on 32-bit architectures + +* Tue Jul 16 2024 Konrad Kleine - 18.1.8-1 +- Update to 18.1.8 + +* Thu Jun 06 2024 Konrad Kleine - 18.1.6-3 +- Rebuild + +* Tue Jun 04 2024 Konrad Kleine - 18.1.6-2 +- Default to DWARF4 + +* Tue May 28 2024 Konrad Kleine - 18.1.6-1 +- Update to 18.1.6 + * Tue Jan 09 2024 Timm Bäder - 17.0.6-5 - Remove compat libs