-
-
Notifications
You must be signed in to change notification settings - Fork 22
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
202 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
TERMUX_PKG_HOMEPAGE=https://llvm.org/ | ||
TERMUX_PKG_DESCRIPTION="Compiler infrastructure" | ||
TERMUX_PKG_LICENSE="Apache-2.0, NCSA" | ||
TERMUX_PKG_LICENSE_FILE="LICENSE.TXT" | ||
TERMUX_PKG_MAINTAINER="@termux-pacman" | ||
TERMUX_PKG_VERSION=17.0.6 | ||
_SOURCE=https://github.com/llvm/llvm-project/releases/download/llvmorg-$TERMUX_PKG_VERSION | ||
TERMUX_PKG_SRCURL=($_SOURCE/clang-$TERMUX_PKG_VERSION.src.tar.xz | ||
$_SOURCE/clang-tools-extra-$TERMUX_PKG_VERSION.src.tar.xz | ||
$_SOURCE/llvm-$TERMUX_PKG_VERSION.src.tar.xz | ||
$_SOURCE/cmake-$TERMUX_PKG_VERSION.src.tar.xz | ||
$_SOURCE/third-party-$TERMUX_PKG_VERSION.src.tar.xz) | ||
TERMUX_PKG_SHA256=(a78f668a726ae1d3d9a7179996d97b12b90fb76ab9442a43110b972ff7ad9029 | ||
aa774642415d338d7b77a66fcbad6fd1f77f382dabcb67422a6230614eff1ab9 | ||
b638167da139126ca11917b6880207cc6e8f9d1cbb1a48d87d017f697ef78188 | ||
807f069c54dc20cb47b21c1f6acafdd9c649f3ae015609040d6182cab01140f4 | ||
3054d0a9c9375dab1a4539cc2cc45ab340341c5d71475f9599ba7752e222947b) | ||
TERMUX_PKG_DEPENDS="libllvm-glibc, gcc-glibc, compiler-rt-glibc" | ||
TERMUX_PKG_BUILD_DEPENDS="llvm-glibc, python-glibc" | ||
TERMUX_PKG_NO_STATICSPLIT=true | ||
TERMUX_PKG_EXTRA_CONFIGURE_ARGS=" | ||
-DCMAKE_INSTALL_DOCDIR=share/doc | ||
-DCMAKE_SKIP_RPATH=ON | ||
-DCLANG_DEFAULT_PIE_ON_LINUX=ON | ||
-DCLANG_LINK_CLANG_DYLIB=ON | ||
-DENABLE_LINKER_BUILD_ID=ON | ||
-DLLVM_BUILD_DOCS=ON | ||
-DLLVM_BUILD_TESTS=ON | ||
-DLLVM_ENABLE_RTTI=ON | ||
-DLLVM_ENABLE_SPHINX=ON | ||
-DLLVM_EXTERNAL_LIT=$TERMUX_PREFIX/bin/lit | ||
-DLLVM_INCLUDE_DOCS=ON | ||
-DLLVM_LINK_LLVM_DYLIB=ON | ||
-DLLVM_MAIN_SRC_DIR=$TERMUX_PKG_SRCDIR/llvm-$TERMUX_PKG_VERSION.src | ||
-DSPHINX_WARNINGS_AS_ERRORS=OFF | ||
-DLLVM_INCLUDE_TESTS=OFF | ||
" | ||
|
||
termux_step_post_get_source() { | ||
for i in cmake third-party; do | ||
rm -fr $TERMUX_TOPDIR/$TERMUX_PKG_NAME/${i} | ||
mv $TERMUX_PKG_SRCDIR/$i-$TERMUX_PKG_VERSION.src $TERMUX_TOPDIR/$TERMUX_PKG_NAME | ||
mv $TERMUX_TOPDIR/$TERMUX_PKG_NAME/$i-$TERMUX_PKG_VERSION.src $TERMUX_TOPDIR/$TERMUX_PKG_NAME/$i | ||
done | ||
|
||
mv $TERMUX_PKG_SRCDIR/clang-tools-extra-$TERMUX_PKG_VERSION.src $TERMUX_PKG_SRCDIR/tools/extra | ||
} | ||
|
||
termux_step_pre_configure() { | ||
termux_setup_cmake | ||
termux_setup_ninja | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,78 @@ | ||
From 9d1dada57741d204f8a95aa2b0c89a7242e101f1 Mon Sep 17 00:00:00 2001 | ||
From: Nathan Ridge <[email protected]> | ||
Date: Thu, 18 Jan 2024 01:51:43 -0500 | ||
Subject: [PATCH] [clangd] Handle an expanded token range that ends in the | ||
`eof` token in TokenBuffer::spelledForExpanded() (#78092) | ||
|
||
Such ranges can legitimately arise in the case of invalid code, such as | ||
a declaration missing an ending brace. | ||
|
||
Fixes https://github.com/clangd/clangd/issues/1559 | ||
--- | ||
clang/tools/extra/clangd/unittests/DumpASTTests.cpp | 11 +++++++++++ | ||
clang/lib/Tooling/Syntax/Tokens.cpp | 6 ++++++ | ||
clang/unittests/Tooling/Syntax/TokensTest.cpp | 12 ++++++++++++ | ||
3 files changed, 29 insertions(+) | ||
|
||
diff --git a/clang/tools/extra/clangd/unittests/DumpASTTests.cpp b/clang/tools/extra/clangd/unittests/DumpASTTests.cpp | ||
index d1b8f21b82c65a..304682118c871d 100644 | ||
--- clang/tools/extra/clangd/unittests/DumpASTTests.cpp | ||
+++ clang/tools/extra/clangd/unittests/DumpASTTests.cpp | ||
@@ -186,6 +186,17 @@ TEST(DumpASTTests, Arcana) { | ||
EXPECT_THAT(Node.children.front().arcana, testing::StartsWith("QualType ")); | ||
} | ||
|
||
+TEST(DumpASTTests, UnbalancedBraces) { | ||
+ // Test that we don't crash while trying to compute a source range for the | ||
+ // node whose ending brace is missing, and also that the source range is | ||
+ // not empty. | ||
+ Annotations Case("/*error-ok*/ $func[[int main() {]]"); | ||
+ ParsedAST AST = TestTU::withCode(Case.code()).build(); | ||
+ auto Node = dumpAST(DynTypedNode::create(findDecl(AST, "main")), | ||
+ AST.getTokens(), AST.getASTContext()); | ||
+ ASSERT_EQ(Node.range, Case.range("func")); | ||
+} | ||
+ | ||
} // namespace | ||
} // namespace clangd | ||
} // namespace clang | ||
diff --git a/clang/lib/Tooling/Syntax/Tokens.cpp b/clang/lib/Tooling/Syntax/Tokens.cpp | ||
index 2f28b9cf286a63..8d32c45a4a70cf 100644 | ||
--- clang/lib/Tooling/Syntax/Tokens.cpp | ||
+++ clang/lib/Tooling/Syntax/Tokens.cpp | ||
@@ -401,6 +401,12 @@ std::string TokenBuffer::Mapping::str() const { | ||
|
||
std::optional<llvm::ArrayRef<syntax::Token>> | ||
TokenBuffer::spelledForExpanded(llvm::ArrayRef<syntax::Token> Expanded) const { | ||
+ // In cases of invalid code, AST nodes can have source ranges that include | ||
+ // the `eof` token. As there's no spelling for this token, exclude it from | ||
+ // the range. | ||
+ if (!Expanded.empty() && Expanded.back().kind() == tok::eof) { | ||
+ Expanded = Expanded.drop_back(); | ||
+ } | ||
// Mapping an empty range is ambiguous in case of empty mappings at either end | ||
// of the range, bail out in that case. | ||
if (Expanded.empty()) | ||
diff --git a/clang/unittests/Tooling/Syntax/TokensTest.cpp b/clang/unittests/Tooling/Syntax/TokensTest.cpp | ||
index 0c08318a637c0b..42f51697139658 100644 | ||
--- clang/unittests/Tooling/Syntax/TokensTest.cpp | ||
+++ clang/unittests/Tooling/Syntax/TokensTest.cpp | ||
@@ -816,6 +816,18 @@ TEST_F(TokenBufferTest, SpelledByExpanded) { | ||
EXPECT_EQ(Buffer.spelledForExpanded(findExpanded("prev good")), std::nullopt); | ||
} | ||
|
||
+TEST_F(TokenBufferTest, NoCrashForEofToken) { | ||
+ recordTokens(R"cpp( | ||
+ int main() { | ||
+ )cpp"); | ||
+ ASSERT_TRUE(!Buffer.expandedTokens().empty()); | ||
+ ASSERT_EQ(Buffer.expandedTokens().back().kind(), tok::eof); | ||
+ // Expanded range including `eof` is handled gracefully (`eof` is ignored). | ||
+ EXPECT_THAT( | ||
+ Buffer.spelledForExpanded(Buffer.expandedTokens()), | ||
+ ValueIs(SameRange(Buffer.spelledTokens(SourceMgr->getMainFileID())))); | ||
+} | ||
+ | ||
TEST_F(TokenBufferTest, ExpandedTokensForRange) { | ||
recordTokens(R"cpp( | ||
#define SIGN(X) X##_washere |
72 changes: 72 additions & 0 deletions
72
gpkg/clang/enable-fstack-protector-strong-by-default.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
From 5346dc41bee9546db1fc649f39f1c44629495cc5 Mon Sep 17 00:00:00 2001 | ||
From: Evangelos Foutras <[email protected]> | ||
Date: Fri, 18 Aug 2023 13:31:57 +0000 | ||
Subject: [PATCH] Enable -fstack-protector-strong by default | ||
|
||
--- | ||
clang/lib/Driver/ToolChains/Linux.h | 5 +++++ | ||
clang/test/Driver/fsanitize.c | 6 +++--- | ||
clang/test/Driver/stack-protector.c | 4 ++-- | ||
3 files changed, 10 insertions(+), 5 deletions(-) | ||
|
||
diff --git a/clang/lib/Driver/ToolChains/Linux.h b/clang/lib/Driver/ToolChains/Linux.h | ||
index 524391743090..0d4e1944118b 100644 | ||
--- clang/lib/Driver/ToolChains/Linux.h | ||
+++ clang/lib/Driver/ToolChains/Linux.h | ||
@@ -10,6 +10,7 @@ | ||
#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_LINUX_H | ||
|
||
#include "Gnu.h" | ||
+#include "clang/Basic/LangOptions.h" | ||
#include "clang/Driver/ToolChain.h" | ||
|
||
namespace clang { | ||
@@ -48,6 +49,10 @@ public: | ||
IsAArch64OutlineAtomicsDefault(const llvm::opt::ArgList &Args) const override; | ||
bool isPIEDefault(const llvm::opt::ArgList &Args) const override; | ||
bool IsMathErrnoDefault() const override; | ||
+ LangOptions::StackProtectorMode | ||
+ GetDefaultStackProtectorLevel(bool KernelOrKext) const override { | ||
+ return LangOptions::SSPStrong; | ||
+ } | ||
SanitizerMask getSupportedSanitizers() const override; | ||
void addProfileRTLibs(const llvm::opt::ArgList &Args, | ||
llvm::opt::ArgStringList &CmdArgs) const override; | ||
diff --git a/clang/test/Driver/fsanitize.c b/clang/test/Driver/fsanitize.c | ||
index 8ad6dc25b4d1..1619b59a40f0 100644 | ||
--- clang/test/Driver/fsanitize.c | ||
+++ clang/test/Driver/fsanitize.c | ||
@@ -695,12 +695,12 @@ | ||
// RUN: %clang -fno-sanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NOSP | ||
// NOSP-NOT: "-fsanitize=safe-stack" | ||
|
||
-// RUN: %clang --target=x86_64-linux-gnu -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NO-SP | ||
+// RUN: %clang --target=x86_64-linux-gnu -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP | ||
// RUN: %clang --target=x86_64-linux-gnu -fsanitize=address,safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP-ASAN | ||
// RUN: %clang --target=x86_64-linux-gnu -fstack-protector -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP | ||
// RUN: %clang --target=x86_64-linux-gnu -fsanitize=safe-stack -fstack-protector-all -### %s 2>&1 | FileCheck %s -check-prefix=SP | ||
-// RUN: %clang --target=arm-linux-androideabi -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NO-SP | ||
-// RUN: %clang --target=aarch64-linux-android -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NO-SP | ||
+// RUN: %clang --target=arm-linux-androideabi -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP | ||
+// RUN: %clang --target=aarch64-linux-android -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=SP | ||
// RUN: %clang --target=i386-contiki-unknown -fsanitize=safe-stack -### %s 2>&1 | FileCheck %s -check-prefix=NO-SP | ||
// NO-SP-NOT: stack-protector | ||
// NO-SP: "-fsanitize=safe-stack" | ||
diff --git a/clang/test/Driver/stack-protector.c b/clang/test/Driver/stack-protector.c | ||
index 169376919a71..2470b7f7e39e 100644 | ||
--- clang/test/Driver/stack-protector.c | ||
+++ clang/test/Driver/stack-protector.c | ||
@@ -3,11 +3,11 @@ | ||
// NOSSP-NOT: "-stack-protector-buffer-size" | ||
|
||
// RUN: %clang -target i386-unknown-linux -fstack-protector -### %s 2>&1 | FileCheck %s -check-prefix=SSP | ||
-// SSP: "-stack-protector" "1" | ||
+// SSP: "-stack-protector" "2" | ||
// SSP-NOT: "-stack-protector-buffer-size" | ||
|
||
// RUN: %clang -target i386-unknown-linux -fstack-protector --param ssp-buffer-size=16 -### %s 2>&1 | FileCheck %s -check-prefix=SSP-BUF | ||
-// SSP-BUF: "-stack-protector" "1" | ||
+// SSP-BUF: "-stack-protector" "2" | ||
// SSP-BUF: "-stack-protector-buffer-size" "16" | ||
|
||
// RUN: %clang -target i386-pc-openbsd -### %s 2>&1 | FileCheck %s -check-prefix=OPENBSD |