Skip to content

Commit

Permalink
Auto merge of #46029 - GuillaumeGomez:rollup, r=GuillaumeGomez
Browse files Browse the repository at this point in the history
Rollup of 6 pull requests

- Successful merges: #45951, #45973, #45984, #45993, #46005, #46010
- Failed merges:
  • Loading branch information
bors committed Nov 16, 2017
2 parents 481b42b + d57fed8 commit 58d8761
Show file tree
Hide file tree
Showing 15 changed files with 144 additions and 190 deletions.
4 changes: 2 additions & 2 deletions src/liballoc/borrow.rs
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ impl<'a, B: ?Sized> Cow<'a, B>
///
/// assert_eq!(
/// cow.into_owned(),
/// Cow::Owned(String::from(s))
/// String::from(s)
/// );
/// ```
///
Expand All @@ -246,7 +246,7 @@ impl<'a, B: ?Sized> Cow<'a, B>
///
/// assert_eq!(
/// cow.into_owned(),
/// Cow::Owned(String::from(s))
/// String::from(s)
/// );
/// ```
#[stable(feature = "rust1", since = "1.0.0")]
Expand Down
16 changes: 8 additions & 8 deletions src/librustc/hir/check_attr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -47,27 +47,27 @@ struct CheckAttrVisitor<'a> {

impl<'a> CheckAttrVisitor<'a> {
/// Check any attribute.
fn check_attribute(&self, attr: &ast::Attribute, target: Target) {
fn check_attribute(&self, attr: &ast::Attribute, item: &ast::Item, target: Target) {
if let Some(name) = attr.name() {
match &*name.as_str() {
"inline" => self.check_inline(attr, target),
"repr" => self.check_repr(attr, target),
"inline" => self.check_inline(attr, item, target),
"repr" => self.check_repr(attr, item, target),
_ => (),
}
}
}

/// Check if an `#[inline]` is applied to a function.
fn check_inline(&self, attr: &ast::Attribute, target: Target) {
fn check_inline(&self, attr: &ast::Attribute, item: &ast::Item, target: Target) {
if target != Target::Fn {
struct_span_err!(self.sess, attr.span, E0518, "attribute should be applied to function")
.span_label(attr.span, "requires a function")
.span_label(item.span, "not a function")
.emit();
}
}

/// Check if an `#[repr]` attr is valid.
fn check_repr(&self, attr: &ast::Attribute, target: Target) {
fn check_repr(&self, attr: &ast::Attribute, item: &ast::Item, target: Target) {
let words = match attr.meta_item_list() {
Some(words) => words,
None => {
Expand Down Expand Up @@ -139,7 +139,7 @@ impl<'a> CheckAttrVisitor<'a> {
_ => continue,
};
struct_span_err!(self.sess, attr.span, E0517, "{}", message)
.span_label(attr.span, format!("requires {}", label))
.span_label(item.span, format!("not {}", label))
.emit();
}
if conflicting_reprs > 1 {
Expand All @@ -153,7 +153,7 @@ impl<'a> Visitor<'a> for CheckAttrVisitor<'a> {
fn visit_item(&mut self, item: &'a ast::Item) {
let target = Target::from_item(item);
for attr in &item.attrs {
self.check_attribute(attr, target);
self.check_attribute(attr, item, target);
}
visit::walk_item(self, item);
}
Expand Down
11 changes: 9 additions & 2 deletions src/librustc/session/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1471,8 +1471,15 @@ pub fn build_session_options_and_crate_config(matches: &getopts::Matches)
Some("human") => ErrorOutputType::HumanReadable(color),
Some("json") => ErrorOutputType::Json(false),
Some("pretty-json") => ErrorOutputType::Json(true),
Some("short") => ErrorOutputType::Short(color),

Some("short") => {
if nightly_options::is_unstable_enabled(matches) {
ErrorOutputType::Short(color)
} else {
early_error(ErrorOutputType::default(),
&format!("the `-Z unstable-options` flag must also be passed to \
enable the short error message option"));
}
}
None => ErrorOutputType::HumanReadable(color),

Some(arg) => {
Expand Down
16 changes: 10 additions & 6 deletions src/librustc_typeck/check/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ use std::mem::replace;
use std::ops::{self, Deref};
use syntax::abi::Abi;
use syntax::ast;
use syntax::attr;
use syntax::codemap::{self, original_sp, Spanned};
use syntax::feature_gate::{GateIssue, emit_feature_err};
use syntax::ptr::P;
Expand Down Expand Up @@ -1561,12 +1562,15 @@ pub fn check_enum<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
let def = tcx.adt_def(def_id);
def.destructor(tcx); // force the destructor to be evaluated

if vs.is_empty() && tcx.has_attr(def_id, "repr") {
struct_span_err!(
tcx.sess, sp, E0084,
"unsupported representation for zero-variant enum")
.span_label(sp, "unsupported enum representation")
.emit();
if vs.is_empty() {
let attributes = tcx.get_attrs(def_id);
if let Some(attr) = attr::find_by_name(&attributes, "repr") {
struct_span_err!(
tcx.sess, attr.span, E0084,
"unsupported representation for zero-variant enum")
.span_label(sp, "zero-variant enum")
.emit();
}
}

let repr_type_ty = def.repr.discr_type().to_ty(tcx);
Expand Down
2 changes: 1 addition & 1 deletion src/librustdoc/html/render.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1683,7 +1683,7 @@ impl<'a> Item<'a> {
format!("{}-{}", self.item.source.loline, self.item.source.hiline)
};
Some(format!("{root}src/{krate}/{path}#{lines}",
root = root,
root = Escape(&root),
krate = krate,
path = path,
lines = lines))
Expand Down
27 changes: 24 additions & 3 deletions src/libsyntax/ext/expand.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ use std_inject;
use symbol::Symbol;
use symbol::keywords;
use syntax_pos::{Span, DUMMY_SP};
use syntax_pos::hygiene::ExpnFormat;
use tokenstream::{TokenStream, TokenTree};
use util::small_vector::SmallVector;
use visit::Visitor;
Expand Down Expand Up @@ -151,6 +152,26 @@ impl ExpansionKind {
}
}

fn macro_bang_format(path: &ast::Path) -> ExpnFormat {
// We don't want to format a path using pretty-printing,
// `format!("{}", path)`, because that tries to insert
// line-breaks and is slow.
let mut path_str = String::with_capacity(64);
for (i, segment) in path.segments.iter().enumerate() {
if i != 0 {
path_str.push_str("::");
}

if segment.identifier.name != keywords::CrateRoot.name() &&
segment.identifier.name != keywords::DollarCrate.name()
{
path_str.push_str(&segment.identifier.name.as_str())
}
}

MacroBang(Symbol::intern(&path_str))
}

pub struct Invocation {
pub kind: InvocationKind,
expansion_kind: ExpansionKind,
Expand Down Expand Up @@ -517,7 +538,7 @@ impl<'a, 'b> MacroExpander<'a, 'b> {
mark.set_expn_info(ExpnInfo {
call_site: span,
callee: NameAndSpan {
format: MacroBang(Symbol::intern(&format!("{}", path))),
format: macro_bang_format(path),
span: def_site_span,
allow_internal_unstable,
allow_internal_unsafe,
Expand Down Expand Up @@ -564,7 +585,7 @@ impl<'a, 'b> MacroExpander<'a, 'b> {
invoc.expansion_data.mark.set_expn_info(ExpnInfo {
call_site: span,
callee: NameAndSpan {
format: MacroBang(Symbol::intern(&format!("{}", path))),
format: macro_bang_format(path),
span: tt_span,
allow_internal_unstable,
allow_internal_unsafe: false,
Expand Down Expand Up @@ -600,7 +621,7 @@ impl<'a, 'b> MacroExpander<'a, 'b> {
invoc.expansion_data.mark.set_expn_info(ExpnInfo {
call_site: span,
callee: NameAndSpan {
format: MacroBang(Symbol::intern(&format!("{}", path))),
format: macro_bang_format(path),
// FIXME procedural macros do not have proper span info
// yet, when they do, we should use it here.
span: None,
Expand Down
6 changes: 2 additions & 4 deletions src/test/compile-fail/E0084.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,8 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#[repr(i32)]
enum Foo {}
//~^ ERROR E0084
//~| unsupported enum representation
#[repr(i32)] //~ ERROR: E0084
enum Foo {} //~ NOTE: zero-variant enum

fn main() {
}
20 changes: 8 additions & 12 deletions src/test/compile-fail/E0517.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,17 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#[repr(C)] //~ ERROR E0517
//~| requires a struct, enum or union
type Foo = u8;
#[repr(C)] //~ ERROR: E0517
type Foo = u8; //~ NOTE: not a struct, enum or union

#[repr(packed)] //~ ERROR E0517
//~| requires a struct
enum Foo2 {Bar, Baz}
#[repr(packed)] //~ ERROR: E0517
enum Foo2 {Bar, Baz} //~ NOTE: not a struct

#[repr(u8)] //~ ERROR E0517
//~| requires an enum
struct Foo3 {bar: bool, baz: bool}
#[repr(u8)] //~ ERROR: E0517
struct Foo3 {bar: bool, baz: bool} //~ NOTE: not an enum

#[repr(C)] //~ ERROR E0517
//~| requires a struct, enum or union
impl Foo3 {
#[repr(C)] //~ ERROR: E0517
impl Foo3 { //~ NOTE: not a struct, enum or union
}

fn main() {
Expand Down
10 changes: 4 additions & 6 deletions src/test/compile-fail/E0518.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,11 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.

#[inline(always)] //~ ERROR E0518
//~| requires a function
struct Foo;
#[inline(always)] //~ ERROR: E0518
struct Foo; //~ NOTE: not a function

#[inline(never)] //~ ERROR E0518
//~| requires a function
impl Foo {
#[inline(never)] //~ ERROR: E0518
impl Foo { //~ NOTE: not a function
}

fn main() {
Expand Down
18 changes: 6 additions & 12 deletions src/test/incremental/hashes/exported_vs_not.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,8 @@ pub fn body_not_exported_to_metadata() -> u32 {
}

#[cfg(not(cfail1))]
#[rustc_clean(label="Hir", cfg="cfail2")]
#[rustc_clean(label="Hir", cfg="cfail3")]
#[rustc_dirty(label="HirBody", cfg="cfail2")]
#[rustc_clean(label="HirBody", cfg="cfail3")]
#[rustc_clean(cfg="cfail2", except="HirBody,MirValidated,MirOptimized")]
#[rustc_clean(cfg="cfail3")]
#[rustc_metadata_clean(cfg="cfail2")]
#[rustc_metadata_clean(cfg="cfail3")]
pub fn body_not_exported_to_metadata() -> u32 {
Expand All @@ -49,10 +47,8 @@ pub fn body_exported_to_metadata_because_of_inline() -> u32 {
}

#[cfg(not(cfail1))]
#[rustc_clean(label="Hir", cfg="cfail2")]
#[rustc_clean(label="Hir", cfg="cfail3")]
#[rustc_dirty(label="HirBody", cfg="cfail2")]
#[rustc_clean(label="HirBody", cfg="cfail3")]
#[rustc_clean(cfg="cfail2", except="HirBody,MirValidated,MirOptimized")]
#[rustc_clean(cfg="cfail3")]
#[rustc_metadata_dirty(cfg="cfail2")]
#[rustc_metadata_clean(cfg="cfail3")]
#[inline]
Expand All @@ -73,10 +69,8 @@ pub fn body_exported_to_metadata_because_of_generic() -> u32 {
}

#[cfg(not(cfail1))]
#[rustc_clean(label="Hir", cfg="cfail2")]
#[rustc_clean(label="Hir", cfg="cfail3")]
#[rustc_dirty(label="HirBody", cfg="cfail2")]
#[rustc_clean(label="HirBody", cfg="cfail3")]
#[rustc_clean(cfg="cfail2", except="HirBody,MirValidated,MirOptimized")]
#[rustc_clean(cfg="cfail3")]
#[rustc_metadata_dirty(cfg="cfail2")]
#[rustc_metadata_clean(cfg="cfail3")]
#[inline]
Expand Down
Loading

0 comments on commit 58d8761

Please sign in to comment.