diff options
| author | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2017-01-19 11:56:03 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-01-19 11:56:03 +0100 |
| commit | 7985ae0bb1653f59063d565f23159fdeb37cfadb (patch) | |
| tree | 5da17952774206d36fa5f125c791a3050ab9ab0b | |
| parent | 223e084141f4a6310800c716fa481864d4f47d66 (diff) | |
| parent | 30ba990fce18dc3dde9e6d05d4bbbb2a56b34aba (diff) | |
| download | rust-7985ae0bb1653f59063d565f23159fdeb37cfadb.tar.gz rust-7985ae0bb1653f59063d565f23159fdeb37cfadb.zip | |
Rollup merge of #39039 - michaelwoerister:ignore-gdb-version, r=nrc
debuginfo: Ignore optimized enum tests for GDB versions that can't handle them. Fixes https://github.com/rust-lang/rust/issues/38948. r? @nrc cc @Manishearth
| -rw-r--r-- | src/test/debuginfo/borrowed-enum.rs | 1 | ||||
| -rw-r--r-- | src/test/debuginfo/generic-struct-style-enum.rs | 1 | ||||
| -rw-r--r-- | src/test/debuginfo/generic-tuple-style-enum.rs | 1 | ||||
| -rw-r--r-- | src/test/debuginfo/packed-struct.rs | 1 | ||||
| -rw-r--r-- | src/test/debuginfo/recursive-struct.rs | 1 | ||||
| -rw-r--r-- | src/test/debuginfo/struct-in-enum.rs | 1 | ||||
| -rw-r--r-- | src/test/debuginfo/struct-style-enum.rs | 1 | ||||
| -rw-r--r-- | src/test/debuginfo/tuple-style-enum.rs | 1 | ||||
| -rw-r--r-- | src/test/debuginfo/union-smoke.rs | 1 | ||||
| -rw-r--r-- | src/test/debuginfo/unique-enum.rs | 1 | ||||
| -rw-r--r-- | src/tools/compiletest/src/header.rs | 50 | ||||
| -rw-r--r-- | src/tools/compiletest/src/main.rs | 3 |
12 files changed, 54 insertions, 9 deletions
diff --git a/src/test/debuginfo/borrowed-enum.rs b/src/test/debuginfo/borrowed-enum.rs index f34fc3b20d2..c457fed7ecd 100644 --- a/src/test/debuginfo/borrowed-enum.rs +++ b/src/test/debuginfo/borrowed-enum.rs @@ -10,6 +10,7 @@ // ignore-tidy-linelength // min-lldb-version: 310 +// ignore-gdb-version: 7.11.90 - 7.12 // compile-flags:-g diff --git a/src/test/debuginfo/generic-struct-style-enum.rs b/src/test/debuginfo/generic-struct-style-enum.rs index a328eec6893..df56ccccca3 100644 --- a/src/test/debuginfo/generic-struct-style-enum.rs +++ b/src/test/debuginfo/generic-struct-style-enum.rs @@ -10,6 +10,7 @@ // ignore-tidy-linelength // min-lldb-version: 310 +// ignore-gdb-version: 7.11.90 - 7.12 // compile-flags:-g diff --git a/src/test/debuginfo/generic-tuple-style-enum.rs b/src/test/debuginfo/generic-tuple-style-enum.rs index 9ada5fdeff7..e538700f0f8 100644 --- a/src/test/debuginfo/generic-tuple-style-enum.rs +++ b/src/test/debuginfo/generic-tuple-style-enum.rs @@ -10,6 +10,7 @@ // ignore-tidy-linelength // min-lldb-version: 310 +// ignore-gdb-version: 7.11.90 - 7.12 // compile-flags:-g diff --git a/src/test/debuginfo/packed-struct.rs b/src/test/debuginfo/packed-struct.rs index b84161c36a5..c476e9fe079 100644 --- a/src/test/debuginfo/packed-struct.rs +++ b/src/test/debuginfo/packed-struct.rs @@ -10,6 +10,7 @@ // ignore-tidy-linelength // min-lldb-version: 310 +// ignore-gdb-version: 7.11.90 - 7.12 // compile-flags:-g diff --git a/src/test/debuginfo/recursive-struct.rs b/src/test/debuginfo/recursive-struct.rs index 80147b14174..f33dfac07d2 100644 --- a/src/test/debuginfo/recursive-struct.rs +++ b/src/test/debuginfo/recursive-struct.rs @@ -10,6 +10,7 @@ // ignore-tidy-linelength // ignore-lldb +// ignore-gdb-version: 7.11.90 - 7.12 // compile-flags:-g diff --git a/src/test/debuginfo/struct-in-enum.rs b/src/test/debuginfo/struct-in-enum.rs index ffd36ae14ad..d9763aedd7c 100644 --- a/src/test/debuginfo/struct-in-enum.rs +++ b/src/test/debuginfo/struct-in-enum.rs @@ -10,6 +10,7 @@ // ignore-tidy-linelength // min-lldb-version: 310 +// ignore-gdb-version: 7.11.90 - 7.12 // compile-flags:-g diff --git a/src/test/debuginfo/struct-style-enum.rs b/src/test/debuginfo/struct-style-enum.rs index b6196daaa46..6212caa6953 100644 --- a/src/test/debuginfo/struct-style-enum.rs +++ b/src/test/debuginfo/struct-style-enum.rs @@ -10,6 +10,7 @@ // ignore-tidy-linelength // min-lldb-version: 310 +// ignore-gdb-version: 7.11.90 - 7.12 // compile-flags:-g diff --git a/src/test/debuginfo/tuple-style-enum.rs b/src/test/debuginfo/tuple-style-enum.rs index 988f223b3bc..f85cd6a50f5 100644 --- a/src/test/debuginfo/tuple-style-enum.rs +++ b/src/test/debuginfo/tuple-style-enum.rs @@ -10,6 +10,7 @@ // ignore-tidy-linelength // min-lldb-version: 310 +// ignore-gdb-version: 7.11.90 - 7.12 // compile-flags:-g diff --git a/src/test/debuginfo/union-smoke.rs b/src/test/debuginfo/union-smoke.rs index 5d3fbd62023..844e9405ba5 100644 --- a/src/test/debuginfo/union-smoke.rs +++ b/src/test/debuginfo/union-smoke.rs @@ -9,6 +9,7 @@ // except according to those terms. // min-lldb-version: 310 +// ignore-gdb-version: 7.11.90 - 7.12 // compile-flags:-g diff --git a/src/test/debuginfo/unique-enum.rs b/src/test/debuginfo/unique-enum.rs index cf8d90e30f1..e8eb4315007 100644 --- a/src/test/debuginfo/unique-enum.rs +++ b/src/test/debuginfo/unique-enum.rs @@ -10,6 +10,7 @@ // ignore-tidy-linelength // min-lldb-version: 310 +// ignore-gdb-version: 7.11.90 - 7.12 // compile-flags:-g diff --git a/src/tools/compiletest/src/header.rs b/src/tools/compiletest/src/header.rs index e57c9949b1c..ac1ac1c2f6c 100644 --- a/src/tools/compiletest/src/header.rs +++ b/src/tools/compiletest/src/header.rs @@ -73,19 +73,29 @@ impl EarlyProps { return false; } - if parse_name_directive(line, "ignore-gdb") { + if !line.contains("ignore-gdb-version") && + parse_name_directive(line, "ignore-gdb") { return true; } if let Some(actual_version) = config.gdb_version { if line.contains("min-gdb-version") { - let min_version = line.trim() - .split(' ') - .last() - .expect("Malformed GDB version directive"); + let (start_ver, end_ver) = extract_gdb_version_range(line); + + if start_ver != end_ver { + panic!("Expected single GDB version") + } // Ignore if actual version is smaller the minimum required // version - actual_version < extract_gdb_version(min_version).unwrap() + actual_version < start_ver + } else if line.contains("ignore-gdb-version") { + let (min_version, max_version) = extract_gdb_version_range(line); + + if max_version < min_version { + panic!("Malformed GDB version range: max < min") + } + + actual_version >= min_version && actual_version <= max_version } else { false } @@ -94,6 +104,34 @@ impl EarlyProps { } } + // Takes a directive of the form "ignore-gdb-version <version1> [- <version2>]", + // returns the numeric representation of <version1> and <version2> as + // tuple: (<version1> as u32, <version2> as u32) + // If the <version2> part is omitted, the second component of the tuple + // is the same as <version1>. + fn extract_gdb_version_range(line: &str) -> (u32, u32) { + const ERROR_MESSAGE: &'static str = "Malformed GDB version directive"; + + let range_components = line.split(' ') + .flat_map(|word| word.split('-')) + .filter(|word| word.len() > 0) + .skip_while(|word| extract_gdb_version(word).is_none()) + .collect::<Vec<&str>>(); + + match range_components.len() { + 1 => { + let v = extract_gdb_version(range_components[0]).unwrap(); + (v, v) + } + 2 => { + let v_min = extract_gdb_version(range_components[0]).unwrap(); + let v_max = extract_gdb_version(range_components[1]).expect(ERROR_MESSAGE); + (v_min, v_max) + } + _ => panic!(ERROR_MESSAGE), + } + } + fn ignore_lldb(config: &Config, line: &str) -> bool { if config.mode != common::DebugInfoLldb { return false; diff --git a/src/tools/compiletest/src/main.rs b/src/tools/compiletest/src/main.rs index f6c8393ac21..8c9982d1d4e 100644 --- a/src/tools/compiletest/src/main.rs +++ b/src/tools/compiletest/src/main.rs @@ -587,7 +587,6 @@ fn extract_gdb_version(full_version_line: &str) -> Option<u32> { return Some(((major * 1000) + minor) * 1000 + patch); } - println!("Could not extract GDB version from line '{}'", full_version_line); None } @@ -624,8 +623,6 @@ fn extract_lldb_version(full_version_line: Option<String>) -> Option<String> { }).collect::<String>(); if !vers.is_empty() { return Some(vers) } } - println!("Could not extract LLDB version from line '{}'", - full_version_line); } } None |
