mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 14:55:26 +00:00
Auto merge of #39180 - GuillaumeGomez:rollup, r=GuillaumeGomez
Rollup of 11 pull requests - Successful merges: #38457, #38922, #38970, #39039, #39091, #39115, #39121, #39149, #39150, #39151, #39165 - Failed merges:
This commit is contained in:
commit
47965f51e6
@ -3371,7 +3371,7 @@ Version 1.0.0-alpha (2015-01-09)
|
||||
platforms.
|
||||
* Rust comes with rust-gdb and rust-lldb scripts that launch their
|
||||
respective debuggers with Rust-appropriate pretty-printing.
|
||||
* The Windows installation of Rust is distributed with the the
|
||||
* The Windows installation of Rust is distributed with the
|
||||
MinGW components currently required to link binaries on that
|
||||
platform.
|
||||
|
||||
|
@ -181,7 +181,7 @@ impl<T> [T] {
|
||||
core_slice::SliceExt::len(self)
|
||||
}
|
||||
|
||||
/// Returns true if the slice has a length of 0.
|
||||
/// Returns `true` if the slice has a length of 0.
|
||||
///
|
||||
/// # Example
|
||||
///
|
||||
@ -342,15 +342,22 @@ impl<T> [T] {
|
||||
core_slice::SliceExt::last_mut(self)
|
||||
}
|
||||
|
||||
/// Returns the element of a slice at the given index, or `None` if the
|
||||
/// index is out of bounds.
|
||||
/// Returns a reference to an element or subslice depending on the type of
|
||||
/// index.
|
||||
///
|
||||
/// - If given a position, returns a reference to the element at that
|
||||
/// position or `None` if out of bounds.
|
||||
/// - If given a range, returns the subslice corresponding to that range,
|
||||
/// or `None` if out of bounds.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// let v = [10, 40, 30];
|
||||
/// assert_eq!(Some(&40), v.get(1));
|
||||
/// assert_eq!(Some(&[10, 40][..]), v.get(0..2));
|
||||
/// assert_eq!(None, v.get(3));
|
||||
/// assert_eq!(None, v.get(0..4));
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[inline]
|
||||
@ -360,7 +367,10 @@ impl<T> [T] {
|
||||
core_slice::SliceExt::get(self, index)
|
||||
}
|
||||
|
||||
/// Returns a mutable reference to the element at the given index.
|
||||
/// Returns a mutable reference to an element or subslice depending on the
|
||||
/// type of index (see [`get()`]) or `None` if the index is out of bounds.
|
||||
///
|
||||
/// [`get()`]: #method.get
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
@ -372,7 +382,6 @@ impl<T> [T] {
|
||||
/// }
|
||||
/// assert_eq!(x, &[0, 42, 2]);
|
||||
/// ```
|
||||
/// or `None` if the index is out of bounds
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[inline]
|
||||
pub fn get_mut<I>(&mut self, index: I) -> Option<&mut I::Output>
|
||||
@ -381,8 +390,8 @@ impl<T> [T] {
|
||||
core_slice::SliceExt::get_mut(self, index)
|
||||
}
|
||||
|
||||
/// Returns a pointer to the element at the given index, without doing
|
||||
/// bounds checking. So use it very carefully!
|
||||
/// Returns a reference to an element or subslice, without doing bounds
|
||||
/// checking. So use it very carefully!
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
@ -401,8 +410,8 @@ impl<T> [T] {
|
||||
core_slice::SliceExt::get_unchecked(self, index)
|
||||
}
|
||||
|
||||
/// Returns an unsafe mutable pointer to the element in index. So use it
|
||||
/// very carefully!
|
||||
/// Returns a mutable reference to an element or subslice, without doing
|
||||
/// bounds checking. So use it very carefully!
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
@ -540,12 +549,8 @@ impl<T> [T] {
|
||||
///
|
||||
/// ```
|
||||
/// let x = &mut [1, 2, 4];
|
||||
/// {
|
||||
/// let iterator = x.iter_mut();
|
||||
///
|
||||
/// for elem in iterator {
|
||||
/// *elem += 2;
|
||||
/// }
|
||||
/// for elem in x.iter_mut() {
|
||||
/// *elem += 2;
|
||||
/// }
|
||||
/// assert_eq!(x, &[3, 4, 6]);
|
||||
/// ```
|
||||
@ -880,7 +885,7 @@ impl<T> [T] {
|
||||
core_slice::SliceExt::rsplitn_mut(self, n, pred)
|
||||
}
|
||||
|
||||
/// Returns true if the slice contains an element with the given value.
|
||||
/// Returns `true` if the slice contains an element with the given value.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
@ -896,7 +901,7 @@ impl<T> [T] {
|
||||
core_slice::SliceExt::contains(self, x)
|
||||
}
|
||||
|
||||
/// Returns true if `needle` is a prefix of the slice.
|
||||
/// Returns `true` if `needle` is a prefix of the slice.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
@ -907,6 +912,15 @@ impl<T> [T] {
|
||||
/// assert!(!v.starts_with(&[50]));
|
||||
/// assert!(!v.starts_with(&[10, 50]));
|
||||
/// ```
|
||||
///
|
||||
/// Always returns `true` if `needle` is an empty slice:
|
||||
///
|
||||
/// ```
|
||||
/// let v = &[10, 40, 30];
|
||||
/// assert!(v.starts_with(&[]));
|
||||
/// let v: &[u8] = &[];
|
||||
/// assert!(v.starts_with(&[]));
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub fn starts_with(&self, needle: &[T]) -> bool
|
||||
where T: PartialEq
|
||||
@ -914,7 +928,7 @@ impl<T> [T] {
|
||||
core_slice::SliceExt::starts_with(self, needle)
|
||||
}
|
||||
|
||||
/// Returns true if `needle` is a suffix of the slice.
|
||||
/// Returns `true` if `needle` is a suffix of the slice.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
@ -925,6 +939,15 @@ impl<T> [T] {
|
||||
/// assert!(!v.ends_with(&[50]));
|
||||
/// assert!(!v.ends_with(&[50, 30]));
|
||||
/// ```
|
||||
///
|
||||
/// Always returns `true` if `needle` is an empty slice:
|
||||
///
|
||||
/// ```
|
||||
/// let v = &[10, 40, 30];
|
||||
/// assert!(v.ends_with(&[]));
|
||||
/// let v: &[u8] = &[];
|
||||
/// assert!(v.ends_with(&[]));
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub fn ends_with(&self, needle: &[T]) -> bool
|
||||
where T: PartialEq
|
||||
|
@ -56,7 +56,7 @@ pub struct DepGraphThreadData {
|
||||
// current buffer, where we accumulate messages
|
||||
messages: VecCell<DepMessage>,
|
||||
|
||||
// whence to receive new buffer when full
|
||||
// where to receive new buffer when full
|
||||
swap_in: Receiver<Vec<DepMessage>>,
|
||||
|
||||
// where to send buffer when full
|
||||
|
@ -1454,6 +1454,40 @@ struct Prince<'kiss, 'SnowWhite: 'kiss> { // You say here that 'kiss must live
|
||||
```
|
||||
"##,
|
||||
|
||||
E0491: r##"
|
||||
A reference has a longer lifetime than the data it references.
|
||||
|
||||
Erroneous code example:
|
||||
|
||||
```compile_fail,E0491
|
||||
// struct containing a reference requires a lifetime parameter,
|
||||
// because the data the reference points to must outlive the struct (see E0106)
|
||||
struct Struct<'a> {
|
||||
ref_i32: &'a i32,
|
||||
}
|
||||
|
||||
// However, a nested struct like this, the signature itself does not tell
|
||||
// whether 'a outlives 'b or the other way around.
|
||||
// So it could be possible that 'b of reference outlives 'a of the data.
|
||||
struct Nested<'a, 'b> {
|
||||
ref_struct: &'b Struct<'a>, // compile error E0491
|
||||
}
|
||||
```
|
||||
|
||||
To fix this issue, you can specify a bound to the lifetime like below:
|
||||
|
||||
```
|
||||
struct Struct<'a> {
|
||||
ref_i32: &'a i32,
|
||||
}
|
||||
|
||||
// 'a: 'b means 'a outlives 'b
|
||||
struct Nested<'a: 'b, 'b> {
|
||||
ref_struct: &'b Struct<'a>,
|
||||
}
|
||||
```
|
||||
"##,
|
||||
|
||||
E0496: r##"
|
||||
A lifetime name is shadowing another lifetime name. Erroneous code example:
|
||||
|
||||
@ -1697,7 +1731,6 @@ register_diagnostics! {
|
||||
E0488, // lifetime of variable does not enclose its declaration
|
||||
E0489, // type/lifetime parameter not in scope here
|
||||
E0490, // a value of type `..` is borrowed for too long
|
||||
E0491, // in type `..`, reference has a longer lifetime than the data it...
|
||||
E0495, // cannot infer an appropriate lifetime due to conflicting requirements
|
||||
E0566 // conflicting representation hints
|
||||
}
|
||||
|
@ -190,7 +190,13 @@ impl<'a, 'gcx, 'tcx> TyS<'tcx> {
|
||||
ty.uninhabited_from(visited, tcx)
|
||||
}
|
||||
}
|
||||
TyRef(_, ref tm) => tm.ty.uninhabited_from(visited, tcx),
|
||||
TyRef(_, ref tm) => {
|
||||
if tcx.sess.features.borrow().never_type {
|
||||
tm.ty.uninhabited_from(visited, tcx)
|
||||
} else {
|
||||
DefIdForest::empty()
|
||||
}
|
||||
}
|
||||
|
||||
_ => DefIdForest::empty(),
|
||||
}
|
||||
|
@ -716,6 +716,16 @@ fn ensure_no_ty_param_bounds(ccx: &CrateCtxt,
|
||||
}
|
||||
}
|
||||
|
||||
for predicate in generics.where_clause.predicates.iter() {
|
||||
match *predicate {
|
||||
hir::WherePredicate::BoundPredicate(..) => {
|
||||
warn = true;
|
||||
}
|
||||
hir::WherePredicate::RegionPredicate(..) => { }
|
||||
hir::WherePredicate::EqPredicate(..) => { }
|
||||
}
|
||||
}
|
||||
|
||||
if warn {
|
||||
// According to accepted RFC #XXX, we should
|
||||
// eventually accept these, but it will not be
|
||||
|
@ -81,7 +81,8 @@ use time::SystemTime;
|
||||
/// # }
|
||||
/// ```
|
||||
///
|
||||
/// [`BufReader`]: ../io/struct.BufReader.html
|
||||
/// [`Read`]: ../io/trait.Read.html
|
||||
/// [`BufReader<R>`]: ../io/struct.BufReader.html
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
pub struct File {
|
||||
inner: fs_imp::File,
|
||||
|
@ -458,23 +458,38 @@ pub mod builtin {
|
||||
|
||||
/// Parse a file as an expression or an item according to the context.
|
||||
///
|
||||
/// The file is located relative to the current file. (similarly to how
|
||||
/// modules are found)
|
||||
/// The file is located relative to the current file (similarly to how
|
||||
/// modules are found).
|
||||
///
|
||||
/// Using this macro is often a bad idea, because if the file is
|
||||
/// parsed as an expression, it is going to be placed in the
|
||||
/// surrounding code unhygenically. This could result in variables
|
||||
/// surrounding code unhygienically. This could result in variables
|
||||
/// or functions being different from what the file expected if
|
||||
/// there are variables or functions that have the same name in
|
||||
/// the current file.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// Assume there are two files in the same directory with the following
|
||||
/// contents:
|
||||
///
|
||||
/// File 'my_str.in':
|
||||
///
|
||||
/// ```ignore
|
||||
/// fn foo() {
|
||||
/// include!("/path/to/a/file")
|
||||
/// "Hello World!"
|
||||
/// ```
|
||||
///
|
||||
/// File 'main.rs':
|
||||
///
|
||||
/// ```ignore
|
||||
/// fn main() {
|
||||
/// let my_str = include!("my_str.in");
|
||||
/// println!("{}", my_str);
|
||||
/// }
|
||||
/// ```
|
||||
///
|
||||
/// Compiling 'main.rs' and running the resulting binary will print "Hello
|
||||
/// World!".
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[macro_export]
|
||||
macro_rules! include { ($file:expr) => ({ /* compiler built-in */ }) }
|
||||
|
@ -689,10 +689,10 @@ pub const BUILTIN_ATTRIBUTES: &'static [(&'static str, AttributeType, AttributeG
|
||||
cfg_fn!(omit_gdb_pretty_printer_section))),
|
||||
("unsafe_destructor_blind_to_params",
|
||||
Normal,
|
||||
Gated(Stability::Unstable,
|
||||
Gated(Stability::Deprecated("https://github.com/rust-lang/rust/issues/34761"),
|
||||
"dropck_parametricity",
|
||||
"unsafe_destructor_blind_to_params has unstable semantics \
|
||||
and may be removed in the future",
|
||||
"unsafe_destructor_blind_to_params has been replaced by \
|
||||
may_dangle and will be removed in the future",
|
||||
cfg_fn!(dropck_parametricity))),
|
||||
("may_dangle",
|
||||
Normal,
|
||||
|
22
src/test/compile-fail/feature-gate-dropck-ugeh-2.rs
Normal file
22
src/test/compile-fail/feature-gate-dropck-ugeh-2.rs
Normal file
@ -0,0 +1,22 @@
|
||||
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
#![deny(deprecated)]
|
||||
#![feature(dropck_parametricity)]
|
||||
|
||||
struct Foo;
|
||||
|
||||
impl Drop for Foo {
|
||||
#[unsafe_destructor_blind_to_params]
|
||||
//~^ ERROR use of deprecated attribute `dropck_parametricity`
|
||||
fn drop(&mut self) {}
|
||||
}
|
||||
|
||||
fn main() {}
|
@ -27,7 +27,7 @@ struct Foo<T> { data: Vec<T> }
|
||||
|
||||
impl<T> Drop for Foo<T> {
|
||||
#[unsafe_destructor_blind_to_params] // This is the UGEH attribute
|
||||
//~^ ERROR unsafe_destructor_blind_to_params has unstable semantics
|
||||
//~^ ERROR unsafe_destructor_blind_to_params has been replaced
|
||||
fn drop(&mut self) { }
|
||||
}
|
||||
|
||||
|
@ -9,5 +9,6 @@
|
||||
// except according to those terms.
|
||||
|
||||
trait Tr {}
|
||||
type Huh<T> where T: Tr = isize; //~ ERROR type parameter `T` is unused
|
||||
type Huh<T> where T: Tr = isize; //~ ERROR type parameter `T` is unused
|
||||
//~| WARNING E0122
|
||||
fn main() {}
|
||||
|
13
src/test/compile-fail/issue-39122.rs
Normal file
13
src/test/compile-fail/issue-39122.rs
Normal file
@ -0,0 +1,13 @@
|
||||
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
type Foo<T: std::ops::Add> = T; //~ WARNING E0122
|
||||
|
||||
type Bar<T> where T: std::ops::Add = T; //~ WARNING E0122
|
@ -89,6 +89,7 @@ mod traits_where {
|
||||
pub type Alias<T> where T: PrivTr = T;
|
||||
//~^ ERROR private trait `traits_where::PrivTr` in public interface
|
||||
//~| WARNING hard error
|
||||
//~| WARNING E0122
|
||||
pub trait Tr2<T> where T: PrivTr {}
|
||||
//~^ ERROR private trait `traits_where::PrivTr` in public interface
|
||||
//~| WARNING hard error
|
||||
|
@ -0,0 +1,19 @@
|
||||
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
enum Void {}
|
||||
|
||||
fn main() {
|
||||
let x: Result<u32, &'static Void> = Ok(23);
|
||||
let _ = match x { //~ ERROR non-exhaustive
|
||||
Ok(n) => n,
|
||||
};
|
||||
}
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
// ignore-tidy-linelength
|
||||
// min-lldb-version: 310
|
||||
// ignore-gdb-version: 7.11.90 - 7.12
|
||||
|
||||
// compile-flags:-g
|
||||
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
// ignore-tidy-linelength
|
||||
// min-lldb-version: 310
|
||||
// ignore-gdb-version: 7.11.90 - 7.12
|
||||
|
||||
// compile-flags:-g
|
||||
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
// ignore-tidy-linelength
|
||||
// min-lldb-version: 310
|
||||
// ignore-gdb-version: 7.11.90 - 7.12
|
||||
|
||||
// compile-flags:-g
|
||||
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
// ignore-tidy-linelength
|
||||
// min-lldb-version: 310
|
||||
// ignore-gdb-version: 7.11.90 - 7.12
|
||||
|
||||
// compile-flags:-g
|
||||
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
// ignore-tidy-linelength
|
||||
// ignore-lldb
|
||||
// ignore-gdb-version: 7.11.90 - 7.12
|
||||
|
||||
// compile-flags:-g
|
||||
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
// ignore-tidy-linelength
|
||||
// min-lldb-version: 310
|
||||
// ignore-gdb-version: 7.11.90 - 7.12
|
||||
|
||||
// compile-flags:-g
|
||||
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
// ignore-tidy-linelength
|
||||
// min-lldb-version: 310
|
||||
// ignore-gdb-version: 7.11.90 - 7.12
|
||||
|
||||
// compile-flags:-g
|
||||
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
// ignore-tidy-linelength
|
||||
// min-lldb-version: 310
|
||||
// ignore-gdb-version: 7.11.90 - 7.12
|
||||
|
||||
// compile-flags:-g
|
||||
|
||||
|
@ -9,6 +9,7 @@
|
||||
// except according to those terms.
|
||||
|
||||
// min-lldb-version: 310
|
||||
// ignore-gdb-version: 7.11.90 - 7.12
|
||||
|
||||
// compile-flags:-g
|
||||
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
// ignore-tidy-linelength
|
||||
// min-lldb-version: 310
|
||||
// ignore-gdb-version: 7.11.90 - 7.12
|
||||
|
||||
// compile-flags:-g
|
||||
|
||||
|
@ -55,6 +55,11 @@ fn main() {
|
||||
Err(e) => match e {},
|
||||
};
|
||||
|
||||
let x: Result<u32, &!> = Ok(123);
|
||||
match x {
|
||||
Ok(y) => y,
|
||||
};
|
||||
|
||||
bar(&[]);
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user