diff --git a/src/test/debuginfo/borrowed-enum.rs b/src/test/debuginfo/borrowed-enum.rs index f34fc3b20d2be..c457fed7ecd52 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 a328eec689394..df56ccccca3f5 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 9ada5fdeff788..e538700f0f84c 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 b84161c36a557..c476e9fe0796f 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 80147b14174da..f33dfac07d203 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 ffd36ae14ad7c..d9763aedd7c15 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 b6196daaa4656..6212caa69538d 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 988f223b3bc4f..f85cd6a50f519 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 5d3fbd6202387..844e9405ba55c 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 cf8d90e30f169..e8eb4315007af 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 e57c9949b1c57..ac1ac1c2f6c08 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 [- ]", + // returns the numeric representation of and as + // tuple: ( as u32, as u32) + // If the part is omitted, the second component of the tuple + // is the same as . + 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::>(); + + 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 f6c8393ac2154..8c9982d1d4e39 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 { 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) -> Option { }).collect::(); if !vers.is_empty() { return Some(vers) } } - println!("Could not extract LLDB version from line '{}'", - full_version_line); } } None