aboutsummaryrefslogtreecommitdiffstats
path: root/main
diff options
context:
space:
mode:
authorNatanael Copa <ncopa@alpinelinux.org>2019-12-18 16:54:12 +0000
committerNatanael Copa <ncopa@alpinelinux.org>2019-12-24 13:51:51 +0000
commit4c68eb496f2a7016bf7ac8ee3b226fa72831fa73 (patch)
treeb3b103ea1411610fbaa27dce4d3a0428665d3217 /main
parent86666cd8b78667093f0977c7c50681b532e091f6 (diff)
downloadaports-4c68eb496f2a7016bf7ac8ee3b226fa72831fa73.tar.bz2
aports-4c68eb496f2a7016bf7ac8ee3b226fa72831fa73.tar.xz
main/llvm8: prevent crashing on wide integer types
This should fix crystal on aarch64. From upstream commit: https://reviews.llvm.org/rL368437 ref: https://bugs.llvm.org/show_bug.cgi?id=42932 ref: https://github.com/crystal-lang/crystal/issues/8080
Diffstat (limited to 'main')
-rw-r--r--main/llvm8/APKBUILD6
-rw-r--r--main/llvm8/GlobalOpt-prevent-crashing-on-wide-integer-types.patch47
2 files changed, 51 insertions, 2 deletions
diff --git a/main/llvm8/APKBUILD b/main/llvm8/APKBUILD
index ba184e9992..26d5ca2456 100644
--- a/main/llvm8/APKBUILD
+++ b/main/llvm8/APKBUILD
@@ -8,7 +8,7 @@ _pkgname=llvm
pkgver=8.0.1
_majorver=${pkgver%${pkgver##[0-9]}}
pkgname=$_pkgname$_majorver
-pkgrel=2
+pkgrel=3
pkgdesc="Low Level Virtual Machine compiler system, version $_majorver"
arch="all"
url="https://llvm.org/"
@@ -23,6 +23,7 @@ source="https://github.com/llvm/llvm-project/releases/download/llvmorg-$pkgver/l
fix-memory-mf_exec-on-aarch64.patch
fix-LLVMConfig-cmake-install-prefix.patch
python3-test.patch
+ GlobalOpt-prevent-crashing-on-wide-integer-types.patch
"
builddir="$srcdir/$_pkgname-$pkgver.src"
@@ -250,4 +251,5 @@ sha512sums="82e120be5cabdfd5111aebbea68a663fe229c8861d73802d6ab09a3bf48f60de333e
695502bd3b5454c2f5630c59a8cf5f8aeb0deac16a76a8a4df34849e1e35c12ed4234572a320fe4c7e96f974f572f429eb816c5aa3dcfb17057f550eac596495 0001-Disable-dynamic-lib-tests-for-musl-s-dlclose-is-noop.patch
c9ef3cd95c4bd1d6ac69bbcd471b01755126d00f59d27d4a2a2ef5623943be73f8407e2fd731294d1a9d81a66e459f45f3f1d5dc5f9646f4f2fb2d8d891b5279 fix-memory-mf_exec-on-aarch64.patch
7d4825d16107e56a14b7b05be847f03d75e2e05952bea0742a1233b5b0441c9934d8058e612abb6471272884372d9bfd3348355fbd3c19cba82a554003cc3eec fix-LLVMConfig-cmake-install-prefix.patch
-53cc0d13dd871e9b775bb4e7567de4f9a97d91b8246cd7ce74607fd88d6e3e2ab9455f5b4195bc7f9dbdedbc77d659d43e98ec0b7cd78cd395aaea6919510287 python3-test.patch"
+53cc0d13dd871e9b775bb4e7567de4f9a97d91b8246cd7ce74607fd88d6e3e2ab9455f5b4195bc7f9dbdedbc77d659d43e98ec0b7cd78cd395aaea6919510287 python3-test.patch
+306efb5b690a2b040c293018398e57c1d213efcbd8543621a4a9abe42a8facbb1127cc4174c4d3d72d202a1379bc9bf6cc5a27a8a724ad013953c13af8a253ca GlobalOpt-prevent-crashing-on-wide-integer-types.patch"
diff --git a/main/llvm8/GlobalOpt-prevent-crashing-on-wide-integer-types.patch b/main/llvm8/GlobalOpt-prevent-crashing-on-wide-integer-types.patch
new file mode 100644
index 0000000000..3b450e23d1
--- /dev/null
+++ b/main/llvm8/GlobalOpt-prevent-crashing-on-wide-integer-types.patch
@@ -0,0 +1,47 @@
+diff --git a/lib/Transforms/IPO/GlobalOpt.cpp b/lib/Transforms/IPO/GlobalOpt.cpp
+index 3005aaf..fa3f3a7 100644
+--- a/lib/Transforms/IPO/GlobalOpt.cpp
++++ b/lib/Transforms/IPO/GlobalOpt.cpp
+@@ -1639,10 +1639,12 @@ static bool TryToShrinkGlobalToBoolean(GlobalVariable *GV, Constant *OtherVal) {
+ // instead of a select to synthesize the desired value.
+ bool IsOneZero = false;
+ bool EmitOneOrZero = true;
+- if (ConstantInt *CI = dyn_cast<ConstantInt>(OtherVal)){
++ auto *CI = dyn_cast<ConstantInt>(OtherVal);
++ if (CI && CI->getValue().getActiveBits() <= 64) {
+ IsOneZero = InitVal->isNullValue() && CI->isOne();
+
+- if (ConstantInt *CIInit = dyn_cast<ConstantInt>(GV->getInitializer())){
++ auto *CIInit = dyn_cast<ConstantInt>(GV->getInitializer());
++ if (CIInit && CIInit->getValue().getActiveBits() <= 64) {
+ uint64_t ValInit = CIInit->getZExtValue();
+ uint64_t ValOther = CI->getZExtValue();
+ uint64_t ValMinus = ValOther - ValInit;
+diff --git a/test/Transforms/GlobalOpt/large-int-crash.ll b/test/Transforms/GlobalOpt/large-int-crash.ll
+index e69de29..7584554 100644
+--- a/test/Transforms/GlobalOpt/large-int-crash.ll
++++ b/test/Transforms/GlobalOpt/large-int-crash.ll
+@@ -0,0 +1,23 @@
++; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
++; RUN: opt < %s -globalopt -S | FileCheck %s
++
++@X = internal global i128 0
++
++define void @foo() {
++; CHECK-LABEL: @foo(
++; CHECK-NEXT: [[T0_B:%.*]] = load i1, i1* @X
++; CHECK-NEXT: [[T0:%.*]] = select i1 [[T0_B]], i128 18446744073709551616, i128 0
++; CHECK-NEXT: ret void
++;
++ %t0 = load i128, i128* @X, align 8
++ ret void
++}
++
++define void @store() {
++; CHECK-LABEL: @store(
++; CHECK-NEXT: store i1 true, i1* @X
++; CHECK-NEXT: ret void
++;
++ store i128 18446744073709551616, i128* @X, align 8
++ ret void
++}