summaryrefslogtreecommitdiffstats
path: root/source/d/rust/rust.llvm10.7a14f9ed4fa60f4d8fc042fc678c80c14a850dc0.patch
diff options
context:
space:
mode:
Diffstat (limited to 'source/d/rust/rust.llvm10.7a14f9ed4fa60f4d8fc042fc678c80c14a850dc0.patch')
-rw-r--r--source/d/rust/rust.llvm10.7a14f9ed4fa60f4d8fc042fc678c80c14a850dc0.patch100
1 files changed, 100 insertions, 0 deletions
diff --git a/source/d/rust/rust.llvm10.7a14f9ed4fa60f4d8fc042fc678c80c14a850dc0.patch b/source/d/rust/rust.llvm10.7a14f9ed4fa60f4d8fc042fc678c80c14a850dc0.patch
new file mode 100644
index 000000000..5394aff2d
--- /dev/null
+++ b/source/d/rust/rust.llvm10.7a14f9ed4fa60f4d8fc042fc678c80c14a850dc0.patch
@@ -0,0 +1,100 @@
+From 7a14f9ed4fa60f4d8fc042fc678c80c14a850dc0 Mon Sep 17 00:00:00 2001
+From: Nikita Popov <nikita.ppv@gmail.com>
+Date: Sat, 18 Jan 2020 23:00:30 +0100
+Subject: [PATCH] Fix LLVM version handling in compiletest
+
+Convert version string to integer before comparing. Otherwise
+we get into trouble with double digit versions ;)
+---
+ src/tools/compiletest/src/header.rs | 27 ++++++++++++++++++-----
+ src/tools/compiletest/src/header/tests.rs | 5 ++---
+ 2 files changed, 23 insertions(+), 9 deletions(-)
+
+diff --git a/src/tools/compiletest/src/header.rs b/src/tools/compiletest/src/header.rs
+index 2a24a8c3c9485..cb648db8830ef 100644
+--- a/src/tools/compiletest/src/header.rs
++++ b/src/tools/compiletest/src/header.rs
+@@ -191,6 +191,7 @@ impl EarlyProps {
+ return true;
+ }
+ if let Some(ref actual_version) = config.llvm_version {
++ let actual_version = version_to_int(actual_version);
+ if line.starts_with("min-llvm-version") {
+ let min_version = line
+ .trim_end()
+@@ -199,7 +200,7 @@ impl EarlyProps {
+ .expect("Malformed llvm version directive");
+ // Ignore if actual version is smaller the minimum required
+ // version
+- &actual_version[..] < min_version
++ actual_version < version_to_int(min_version)
+ } else if line.starts_with("min-system-llvm-version") {
+ let min_version = line
+ .trim_end()
+@@ -208,7 +209,7 @@ impl EarlyProps {
+ .expect("Malformed llvm version directive");
+ // Ignore if using system LLVM and actual version
+ // is smaller the minimum required version
+- config.system_llvm && &actual_version[..] < min_version
++ config.system_llvm && actual_version < version_to_int(min_version)
+ } else if line.starts_with("ignore-llvm-version") {
+ // Syntax is: "ignore-llvm-version <version1> [- <version2>]"
+ let range_components = line
+@@ -219,15 +220,15 @@ impl EarlyProps {
+ .take(3) // 3 or more = invalid, so take at most 3.
+ .collect::<Vec<&str>>();
+ match range_components.len() {
+- 1 => &actual_version[..] == range_components[0],
++ 1 => actual_version == version_to_int(range_components[0]),
+ 2 => {
+- let v_min = range_components[0];
+- let v_max = range_components[1];
++ let v_min = version_to_int(range_components[0]);
++ let v_max = version_to_int(range_components[1]);
+ if v_max < v_min {
+ panic!("Malformed LLVM version range: max < min")
+ }
+ // Ignore if version lies inside of range.
+- &actual_version[..] >= v_min && &actual_version[..] <= v_max
++ actual_version >= v_min && actual_version <= v_max
+ }
+ _ => panic!("Malformed LLVM version directive"),
+ }
+@@ -238,6 +239,20 @@ impl EarlyProps {
+ false
+ }
+ }
++
++ fn version_to_int(version: &str) -> u32 {
++ let version_without_suffix = version.split('-').next().unwrap();
++ let components: Vec<u32> = version_without_suffix
++ .split('.')
++ .map(|s| s.parse().expect("Malformed version component"))
++ .collect();
++ match components.len() {
++ 1 => components[0] * 10000,
++ 2 => components[0] * 10000 + components[1] * 100,
++ 3 => components[0] * 10000 + components[1] * 100 + components[2],
++ _ => panic!("Malformed version"),
++ }
++ }
+ }
+ }
+
+diff --git a/src/tools/compiletest/src/header/tests.rs b/src/tools/compiletest/src/header/tests.rs
+index 6c478f7e29da4..31d991e0c2f87 100644
+--- a/src/tools/compiletest/src/header/tests.rs
++++ b/src/tools/compiletest/src/header/tests.rs
+@@ -122,9 +122,8 @@ fn llvm_version() {
+ config.llvm_version = Some("9.3.1-rust-1.43.0-dev".to_owned());
+ assert!(!parse_rs(&config, "// min-llvm-version 9.2").ignore);
+
+- // FIXME.
+- // config.llvm_version = Some("10.0.0-rust".to_owned());
+- // assert!(!parse_rs(&config, "// min-llvm-version 9.0").ignore);
++ config.llvm_version = Some("10.0.0-rust".to_owned());
++ assert!(!parse_rs(&config, "// min-llvm-version 9.0").ignore);
+ }
+
+ #[test]
+