Skip to content
Permalink
Browse files

Auto merge of #57732 - Centril:rollup, r=Centril

Rollup of 21 pull requests

Successful merges:

 - #56594 (Remove confusing comment about ideally using `!` for `c_void`)
 - #57107 (Add a regression test for mutating a non-mut #[thread_local])
 - #57340 (Use correct tracking issue for c_variadic)
 - #57357 (Cleanup PartialEq docs.)
 - #57370 (Support passing cflags/cxxflags/ldflags to LLVM build)
 - #57501 (High priority resolutions for associated variants)
 - #57551 (resolve: Add a test for issue #57539)
 - #57610 (Fix nested `?` matchers)
 - #57634 (Remove an unused function argument)
 - #57635 (use structured macro and path resolve suggestions)
 - #57636 (Fix sources sidebar not showing up)
 - #57646 (Fixes text becoming invisible when element targetted)
 - #57650 (librustc_metadata: Pass a default value when unwrapping a span)
 - #57654 (Add some links in std::fs.)
 - #57658 (Two HIR tweaks)
 - #57659 (Fix release manifest generation)
 - #57683 (Document Unpin in std::prelude documentation)
 - #57685 (Enhance `Pin` impl applicability for `PartialEq` and `PartialOrd`.)
 - #57698 (Fix typo bug in DepGraph::try_mark_green().)
 - #57720 (Fix suggestions given mulitple bad lifetimes)
 - #57725 (Use structured suggestion to surround struct literal with parenthesis)

Failed merges:

r? @ghost
  • Loading branch information...
bors committed Jan 18, 2019
2 parents 527b8d4 + a775836 commit cbcca85ced37c03009cf9af466eddad96740e60c
Showing with 885 additions and 330 deletions.
  1. +5 −0 config.toml.example
  2. +10 −0 src/bootstrap/config.rs
  3. +4 −0 src/bootstrap/configure.py
  4. +14 −1 src/bootstrap/native.rs
  5. +22 −16 src/libcore/cmp.rs
  6. +21 −18 src/libcore/ffi.rs
  7. +45 −3 src/libcore/pin.rs
  8. +1 −1 src/librustc/dep_graph/graph.rs
  9. +1 −57 src/librustc/hir/intravisit.rs
  10. +1 −1 src/librustc/hir/lowering.rs
  11. +2 −13 src/librustc/hir/mod.rs
  12. +1 −1 src/librustc/ich/impls_hir.rs
  13. +7 −0 src/librustc/lint/builtin.rs
  14. +0 −9 src/librustc_borrowck/borrowck/mod.rs
  15. +0 −4 src/librustc_borrowck/borrowck/move_data.rs
  16. +3 −4 src/librustc_borrowck/dataflow.rs
  17. +5 −4 src/librustc_errors/lib.rs
  18. +5 −0 src/librustc_lint/lib.rs
  19. +1 −1 src/librustc_metadata/native_libs.rs
  20. +56 −10 src/librustc_resolve/lib.rs
  21. +96 −66 src/librustc_typeck/astconv.rs
  22. +26 −35 src/librustc_typeck/check/method/mod.rs
  23. +2 −2 src/librustc_typeck/check/mod.rs
  24. +1 −1 src/librustdoc/html/render.rs
  25. +0 −2 src/librustdoc/html/static/source-script.js
  26. +1 −7 src/librustdoc/html/static/themes/dark.css
  27. +1 −7 src/librustdoc/html/static/themes/light.css
  28. +1 −1 src/libstd/ffi/mod.rs
  29. +17 −5 src/libstd/fs.rs
  30. +3 −2 src/libstd/prelude/mod.rs
  31. +10 −4 src/libsyntax/ext/tt/macro_rules.rs
  32. +6 −15 src/libsyntax/parse/parser.rs
  33. +17 −0 src/test/incremental/change_name_of_static_in_fn.rs
  34. +9 −3 src/test/ui/error-codes/E0423.stderr
  35. +6 −0 src/test/ui/feature-gate/feature-gate-static-nobundle-2.rs
  36. +7 −0 src/test/ui/feature-gate/feature-gate-static-nobundle-2.stderr
  37. +8 −0 src/test/ui/imports/issue-57539.rs
  38. +18 −0 src/test/ui/imports/issue-57539.stderr
  39. +29 −8 src/test/ui/issues/issue-5067.rs
  40. +60 −12 src/test/ui/issues/issue-5067.stderr
  41. +80 −0 src/test/ui/issues/issue-57597.rs
  42. +74 −0 src/test/ui/issues/issue-57597.stderr
  43. +9 −0 src/test/ui/lifetime-before-type-params.rs
  44. +47 −0 src/test/ui/lifetime-before-type-params.stderr
  45. +1 −1 src/test/ui/resolve/resolve-hint-macro.stderr
  46. +23 −13 src/test/ui/resolve/suggest-path-instead-of-mod-dot-item.stderr
  47. +2 −2 src/test/ui/suggestions/suggest-move-lifetimes.stderr
  48. +9 −0 src/test/ui/thread-local-mutation.nll.stderr
  49. +18 −0 src/test/ui/thread-local-mutation.rs
  50. +9 −0 src/test/ui/thread-local-mutation.stderr
  51. +1 −1 src/test/ui/try-block/try-block-in-edition2015.stderr
  52. +13 −0 src/test/ui/type-alias-enum-variants-priority-2.rs
  53. +12 −0 src/test/ui/type-alias-enum-variants-priority-2.stderr
  54. +10 −0 src/test/ui/type-alias-enum-variants-priority-3.rs
  55. +8 −0 src/test/ui/type-alias-enum-variants-priority-3.stderr
  56. +20 −0 src/test/ui/type-alias-enum-variants-priority.rs
  57. +26 −0 src/test/ui/type-alias-enum-variants-priority.stderr
  58. +1 −0 src/tools/build-manifest/src/main.rs
@@ -90,6 +90,11 @@
# with clang-cl, so this is special in that it only compiles LLVM with clang-cl
#clang-cl = '/path/to/clang-cl.exe'

# Pass extra compiler and linker flags to the LLVM CMake build.
#cflags = "-fextra-flag"
#cxxflags = "-fextra-flag"
#ldflags = "-Wl,extra-flag"

# Use libc++ when building LLVM instead of libstdc++. This is the default on
# platforms already use libc++ as the default C++ library, but this option
# allows you to use libc++ even on platforms when it's not. You need to ensure
@@ -82,6 +82,9 @@ pub struct Config {
pub lldb_enabled: bool,
pub llvm_tools_enabled: bool,

pub llvm_cflags: Option<String>,
pub llvm_cxxflags: Option<String>,
pub llvm_ldflags: Option<String>,
pub llvm_use_libcxx: bool,

// rust codegen options
@@ -254,6 +257,9 @@ struct Llvm {
link_shared: Option<bool>,
version_suffix: Option<String>,
clang_cl: Option<String>,
cflags: Option<String>,
cxxflags: Option<String>,
ldflags: Option<String>,
use_libcxx: Option<bool>,
}

@@ -516,6 +522,10 @@ impl Config {
config.llvm_link_jobs = llvm.link_jobs;
config.llvm_version_suffix = llvm.version_suffix.clone();
config.llvm_clang_cl = llvm.clang_cl.clone();

config.llvm_cflags = llvm.cflags.clone();
config.llvm_cxxflags = llvm.cxxflags.clone();
config.llvm_ldflags = llvm.ldflags.clone();
set(&mut config.llvm_use_libcxx, llvm.use_libcxx);
}

@@ -64,6 +64,10 @@ def v(*args):
o("missing-tools", "dist.missing-tools", "allow failures when building tools")
o("use-libcxx", "llvm.use_libcxx", "build LLVM with libc++")

o("cflags", "llvm.cflags", "build LLVM with these extra compiler flags")
o("cxxflags", "llvm.cxxflags", "build LLVM with these extra compiler flags")
o("ldflags", "llvm.ldflags", "build LLVM with these extra linker flags")

# Optimization and debugging options. These may be overridden by the release
# channel, etc.
o("optimize", "rust.optimize", "build optimized rust code")
@@ -358,14 +358,21 @@ fn configure_cmake(builder: &Builder,
}

cfg.build_arg("-j").build_arg(builder.jobs().to_string());
cfg.define("CMAKE_C_FLAGS", builder.cflags(target, GitRepo::Llvm).join(" "));
let mut cflags = builder.cflags(target, GitRepo::Llvm).join(" ");
if let Some(ref s) = builder.config.llvm_cxxflags {
cflags.push_str(&format!(" {}", s));
}
cfg.define("CMAKE_C_FLAGS", cflags);
let mut cxxflags = builder.cflags(target, GitRepo::Llvm).join(" ");
if builder.config.llvm_static_stdcpp &&
!target.contains("windows") &&
!target.contains("netbsd")
{
cxxflags.push_str(" -static-libstdc++");
}
if let Some(ref s) = builder.config.llvm_cxxflags {
cxxflags.push_str(&format!(" {}", s));
}
cfg.define("CMAKE_CXX_FLAGS", cxxflags);
if let Some(ar) = builder.ar(target) {
if ar.is_absolute() {
@@ -383,6 +390,12 @@ fn configure_cmake(builder: &Builder,
}
}

if let Some(ref s) = builder.config.llvm_ldflags {
cfg.define("CMAKE_SHARED_LINKER_FLAGS", s);
cfg.define("CMAKE_MODULE_LINKER_FLAGS", s);
cfg.define("CMAKE_EXE_LINKER_FLAGS", s);
}

if env::var_os("SCCACHE_ERROR_LOG").is_some() {
cfg.env("RUST_LOG", "sccache=warn");
}
@@ -91,6 +91,8 @@ use self::Ordering::*;
/// For example, let's tweak our previous code a bit:
///
/// ```
/// // The derive implements <BookFormat> == <BookFormat> comparisons
/// #[derive(PartialEq)]
/// enum BookFormat {
/// Paperback,
/// Hardback,
@@ -102,31 +104,34 @@ use self::Ordering::*;
/// format: BookFormat,
/// }
///
/// // Implement <Book> == <BookFormat> comparisons
/// impl PartialEq<BookFormat> for Book {
/// fn eq(&self, other: &BookFormat) -> bool {
/// match (&self.format, other) {
/// (BookFormat::Paperback, BookFormat::Paperback) => true,
/// (BookFormat::Hardback, BookFormat::Hardback) => true,
/// (BookFormat::Ebook, BookFormat::Ebook) => true,
/// (_, _) => false,
/// }
/// self.format == *other
/// }
/// }
///
/// // Implement <BookFormat> == <Book> comparisons
/// impl PartialEq<Book> for BookFormat {
/// fn eq(&self, other: &Book) -> bool {
/// *self == other.format
/// }
/// }
///
/// let b1 = Book { isbn: 3, format: BookFormat::Paperback };
///
/// assert!(b1 == BookFormat::Paperback);
/// assert!(b1 != BookFormat::Ebook);
/// assert!(BookFormat::Ebook != b1);
/// ```
///
/// By changing `impl PartialEq for Book` to `impl PartialEq<BookFormat> for Book`,
/// we've changed what type we can use on the right side of the `==` operator.
/// This lets us use it in the `assert!` statements at the bottom.
/// we allow `BookFormat`s to be compared with `Book`s.
///
/// You can also combine these implementations to let the `==` operator work with
/// two different types:
///
/// ```
/// #[derive(PartialEq)]
/// enum BookFormat {
/// Paperback,
/// Hardback,
@@ -140,12 +145,13 @@ use self::Ordering::*;
///
/// impl PartialEq<BookFormat> for Book {
/// fn eq(&self, other: &BookFormat) -> bool {
/// match (&self.format, other) {
/// (&BookFormat::Paperback, &BookFormat::Paperback) => true,
/// (&BookFormat::Hardback, &BookFormat::Hardback) => true,
/// (&BookFormat::Ebook, &BookFormat::Ebook) => true,
/// (_, _) => false,
/// }
/// self.format == *other
/// }
/// }
///
/// impl PartialEq<Book> for BookFormat {
/// fn eq(&self, other: &Book) -> bool {
/// *self == other.format
/// }
/// }
///
@@ -159,7 +165,7 @@ use self::Ordering::*;
/// let b2 = Book { isbn: 3, format: BookFormat::Ebook };
///
/// assert!(b1 == BookFormat::Paperback);
/// assert!(b1 != BookFormat::Ebook);
/// assert!(BookFormat::Ebook != b1);
/// assert!(b1 == b2);
/// ```
///
@@ -12,24 +12,27 @@ use ::fmt;
/// and `*mut c_void` is equivalent to C's `void*`. That said, this is
/// *not* the same as C's `void` return type, which is Rust's `()` type.
///
/// Ideally, this type would be equivalent to [`!`], but currently it may
/// be more ideal to use `c_void` for FFI purposes.
/// To model pointers to opaque types in FFI, until `extern type` is
/// stabilized, it is recommended to use a newtype wrapper around an empty
/// byte array. See the [Nomicon] for details.
///
/// [`!`]: ../../std/primitive.never.html
/// [pointer]: ../../std/primitive.pointer.html
/// [Nomicon]: https://doc.rust-lang.org/nomicon/ffi.html#representing-opaque-structs
// N.B., for LLVM to recognize the void pointer type and by extension
// functions like malloc(), we need to have it represented as i8* in
// LLVM bitcode. The enum used here ensures this and prevents misuse
// of the "raw" type by only having private variants.. We need two
// of the "raw" type by only having private variants. We need two
// variants, because the compiler complains about the repr attribute
// otherwise.
// otherwise and we need at least one variant as otherwise the enum
// would be uninhabited and at least dereferencing such pointers would
// be UB.
#[repr(u8)]
#[stable(feature = "raw_os", since = "1.1.0")]
pub enum c_void {
#[unstable(feature = "c_void_variant", reason = "should not have to exist",
#[unstable(feature = "c_void_variant", reason = "temporary implementation detail",
issue = "0")]
#[doc(hidden)] __variant1,
#[unstable(feature = "c_void_variant", reason = "should not have to exist",
#[unstable(feature = "c_void_variant", reason = "temporary implementation detail",
issue = "0")]
#[doc(hidden)] __variant2,
}
@@ -49,7 +52,7 @@ impl fmt::Debug for c_void {
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
issue = "27745")]
issue = "44930")]
extern {
type VaListImpl;
}
@@ -74,7 +77,7 @@ impl fmt::Debug for VaListImpl {
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
issue = "27745")]
issue = "44930")]
struct VaListImpl {
stack: *mut (),
gr_top: *mut (),
@@ -90,7 +93,7 @@ struct VaListImpl {
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
issue = "27745")]
issue = "44930")]
struct VaListImpl {
gpr: u8,
fpr: u8,
@@ -106,7 +109,7 @@ struct VaListImpl {
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
issue = "27745")]
issue = "44930")]
struct VaListImpl {
gp_offset: i32,
fp_offset: i32,
@@ -120,7 +123,7 @@ struct VaListImpl {
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
issue = "27745")]
issue = "44930")]
#[repr(transparent)]
pub struct VaList<'a>(&'a mut VaListImpl);

@@ -140,7 +143,7 @@ mod sealed_trait {
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
issue = "27745")]
issue = "44930")]
pub trait VaArgSafe {}
}

@@ -150,7 +153,7 @@ macro_rules! impl_va_arg_safe {
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
issue = "27745")]
issue = "44930")]
impl sealed_trait::VaArgSafe for $t {}
)+
}
@@ -163,20 +166,20 @@ impl_va_arg_safe!{f64}
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
issue = "27745")]
issue = "44930")]
impl<T> sealed_trait::VaArgSafe for *mut T {}
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
issue = "27745")]
issue = "44930")]
impl<T> sealed_trait::VaArgSafe for *const T {}

impl<'a> VaList<'a> {
/// Advance to the next arg.
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
issue = "27745")]
issue = "44930")]
pub unsafe fn arg<T: sealed_trait::VaArgSafe>(&mut self) -> T {
va_arg(self)
}
@@ -185,7 +188,7 @@ impl<'a> VaList<'a> {
#[unstable(feature = "c_variadic",
reason = "the `c_variadic` feature has not been properly tested on \
all supported platforms",
issue = "27745")]
issue = "44930")]
pub unsafe fn copy<F, R>(&self, f: F) -> R
where F: for<'copy> FnOnce(VaList<'copy>) -> R {
#[cfg(any(all(not(target_arch = "aarch64"), not(target_arch = "powerpc"),
@@ -99,6 +99,7 @@

use fmt;
use marker::{Sized, Unpin};
use cmp::{self, PartialEq, PartialOrd};
use ops::{Deref, DerefMut, Receiver, CoerceUnsized, DispatchFromDyn};

/// A pinned pointer.
@@ -112,16 +113,57 @@ use ops::{Deref, DerefMut, Receiver, CoerceUnsized, DispatchFromDyn};
/// [`Unpin`]: ../../std/marker/trait.Unpin.html
/// [`pin` module]: ../../std/pin/index.html
//
// Note: the derives below are allowed because they all only use `&P`, so they
// cannot move the value behind `pointer`.
// Note: the derives below, and the explicit `PartialEq` and `PartialOrd`
// implementations, are allowed because they all only use `&P`, so they cannot move
// the value behind `pointer`.
#[stable(feature = "pin", since = "1.33.0")]
#[fundamental]
#[repr(transparent)]
#[derive(Copy, Clone, Hash, Eq, PartialEq, Ord, PartialOrd)]
#[derive(Copy, Clone, Hash, Eq, Ord)]
pub struct Pin<P> {
pointer: P,
}

#[stable(feature = "pin_partialeq_partialord_impl_applicability", since = "1.34.0")]
impl<P, Q> PartialEq<Pin<Q>> for Pin<P>
where
P: PartialEq<Q>,
{
fn eq(&self, other: &Pin<Q>) -> bool {
self.pointer == other.pointer
}

fn ne(&self, other: &Pin<Q>) -> bool {
self.pointer != other.pointer
}
}

#[stable(feature = "pin_partialeq_partialord_impl_applicability", since = "1.34.0")]
impl<P, Q> PartialOrd<Pin<Q>> for Pin<P>
where
P: PartialOrd<Q>,
{
fn partial_cmp(&self, other: &Pin<Q>) -> Option<cmp::Ordering> {
self.pointer.partial_cmp(&other.pointer)
}

fn lt(&self, other: &Pin<Q>) -> bool {
self.pointer < other.pointer
}

fn le(&self, other: &Pin<Q>) -> bool {
self.pointer <= other.pointer
}

fn gt(&self, other: &Pin<Q>) -> bool {
self.pointer > other.pointer
}

fn ge(&self, other: &Pin<Q>) -> bool {
self.pointer >= other.pointer
}
}

impl<P: Deref> Pin<P>
where
P::Target: Unpin,
@@ -638,7 +638,7 @@ impl DepGraph {
DepKind::Hir |
DepKind::HirBody |
DepKind::CrateMetadata => {
if dep_node.extract_def_id(tcx).is_none() {
if dep_dep_node.extract_def_id(tcx).is_none() {
// If the node does not exist anymore, we
// just fail to mark green.
return None
Oops, something went wrong.

0 comments on commit cbcca85

Please sign in to comment.
You can’t perform that action at this time.