Skip to content

Commit

Permalink
Auto merge of #94024 - matthiaskrgr:rollup-0hwxm0w, r=matthiaskrgr
Browse files Browse the repository at this point in the history
Rollup of 5 pull requests

Successful merges:

 - #93899 (Describe VecDeque with more consistent names)
 - #93949 (Add basic platform support to library/{panic_}unwind for m68k)
 - #93999 (suggest using raw strings when invalid escapes appear in literals)
 - #94001 (llvm: migrate to new parameter-bearing uwtable attr)
 - #94014 (Move transmute_undefined_repr back to nursery)

Failed merges:

 - #94020 (Support pretty printing of invalid constants)

r? `@ghost`
`@rustbot` modify labels: rollup
  • Loading branch information
bors committed Feb 15, 2022
2 parents 5569757 + cc836ee commit 6bf3008
Show file tree
Hide file tree
Showing 16 changed files with 180 additions and 118 deletions.
4 changes: 2 additions & 2 deletions compiler/rustc_codegen_llvm/src/allocator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ pub(crate) unsafe fn codegen(
llvm::LLVMRustSetVisibility(llfn, llvm::Visibility::Hidden);
}
if tcx.sess.must_emit_unwind_tables() {
attributes::emit_uwtable(llfn, true);
attributes::emit_uwtable(llfn);
}

let callee = kind.fn_name(method.name);
Expand Down Expand Up @@ -111,7 +111,7 @@ pub(crate) unsafe fn codegen(
llvm::LLVMRustSetVisibility(llfn, llvm::Visibility::Hidden);
}
if tcx.sess.must_emit_unwind_tables() {
attributes::emit_uwtable(llfn, true);
attributes::emit_uwtable(llfn);
}

let kind = if has_alloc_error_handler { AllocatorKind::Global } else { AllocatorKind::Default };
Expand Down
9 changes: 6 additions & 3 deletions compiler/rustc_codegen_llvm/src/attributes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,11 @@ pub fn sanitize<'ll>(cx: &CodegenCx<'ll, '_>, no_sanitize: SanitizerSet, llfn: &

/// Tell LLVM to emit or not emit the information necessary to unwind the stack for the function.
#[inline]
pub fn emit_uwtable(val: &Value, emit: bool) {
Attribute::UWTable.toggle_llfn(Function, val, emit);
pub fn emit_uwtable(val: &Value) {
// NOTE: We should determine if we even need async unwind tables, as they
// take have more overhead and if we can use sync unwind tables we
// probably should.
llvm::EmitUWTableAttr(val, true);
}

/// Tell LLVM if this function should be 'naked', i.e., skip the epilogue and prologue.
Expand Down Expand Up @@ -275,7 +278,7 @@ pub fn from_fn_attrs<'ll, 'tcx>(
// You can also find more info on why Windows always requires uwtables here:
// https://bugzilla.mozilla.org/show_bug.cgi?id=1302078
if cx.sess().must_emit_unwind_tables() {
attributes::emit_uwtable(llfn, true);
attributes::emit_uwtable(llfn);
}

if cx.sess().opts.debugging_opts.profile_sample_use.is_some() {
Expand Down
1 change: 1 addition & 0 deletions compiler/rustc_codegen_llvm/src/llvm/ffi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1182,6 +1182,7 @@ extern "C" {
pub fn LLVMRustAddByValAttr(Fn: &Value, index: c_uint, ty: &Type);
pub fn LLVMRustAddStructRetAttr(Fn: &Value, index: c_uint, ty: &Type);
pub fn LLVMRustAddFunctionAttribute(Fn: &Value, index: c_uint, attr: Attribute);
pub fn LLVMRustEmitUWTableAttr(Fn: &Value, async_: bool);
pub fn LLVMRustAddFunctionAttrStringValue(
Fn: &Value,
index: c_uint,
Expand Down
4 changes: 4 additions & 0 deletions compiler/rustc_codegen_llvm/src/llvm/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@ impl LLVMRustResult {
}
}

pub fn EmitUWTableAttr(llfn: &Value, async_: bool) {
unsafe { LLVMRustEmitUWTableAttr(llfn, async_) }
}

pub fn AddFunctionAttrStringValue(llfn: &Value, idx: AttributePlace, attr: &CStr, value: &CStr) {
unsafe {
LLVMRustAddFunctionAttrStringValue(llfn, idx.as_uint(), attr.as_ptr(), value.as_ptr())
Expand Down
11 changes: 11 additions & 0 deletions compiler/rustc_llvm/llvm-wrapper/RustWrapper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -334,6 +334,17 @@ extern "C" void LLVMRustAddStructRetAttr(LLVMValueRef Fn, unsigned Index,
AddAttribute(F, Index, Attr);
}

extern "C" void LLVMRustEmitUWTableAttr(LLVMValueRef Fn, bool Async) {
Function *F = unwrap<Function>(Fn);
#if LLVM_VERSION_LT(15, 0)
Attribute Attr = Attribute::get(F->getContext(), Attribute::UWTable);
#else
Attribute Attr = Attribute::getWithUWTableKind(
F->getContext(), Async ? UWTableKind::Async : UWTableKind::Sync);
#endif
AddAttribute(F, AttributeList::AttrIndex::FunctionIndex, Attr);
}

extern "C" void LLVMRustAddFunctionAttrStringValue(LLVMValueRef Fn,
unsigned Index,
const char *Name,
Expand Down
9 changes: 9 additions & 0 deletions compiler/rustc_parse/src/lexer/unescape_error_reporting.rs
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,15 @@ pub(crate) fn emit_unescape_error(
version control settings",
);
} else {
if !mode.is_bytes() {
diag.span_suggestion(
span_with_quotes,
"if you meant to write a literal backslash (perhaps escaping in a regular expression), consider a raw string literal",
format!("r\"{}\"", lit),
Applicability::MaybeIncorrect,
);
}

diag.help(
"for more information, visit \
<https://static.rust-lang.org/doc/master/reference.html#literals>",
Expand Down
Loading

0 comments on commit 6bf3008

Please sign in to comment.