mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 00:03:43 +00:00
Auto merge of #132972 - matthiaskrgr:rollup-456osr7, r=matthiaskrgr
Rollup of 7 pull requests Successful merges: - #132702 (CFI: Append debug location to CFI blocks) - #132851 (Update the doc comment of `ASCII_CASE_MASK`) - #132948 (stabilize const_unicode_case_lookup) - #132950 (Use GNU ld on m68k-unknown-linux-gnu) - #132962 (triagebot: add codegen reviewers) - #132966 (stabilize const_option_ext) - #132970 (Add tracking issue number to unsigned_nonzero_div_ceil feature) r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
242f20dc1e
@ -52,6 +52,10 @@ impl<'a, 'gcc, 'tcx> DebugInfoBuilderMethods for Builder<'a, 'gcc, 'tcx> {
|
||||
fn clear_dbg_loc(&mut self) {
|
||||
self.location = None;
|
||||
}
|
||||
|
||||
fn get_dbg_loc(&self) -> Option<Self::DILocation> {
|
||||
self.location
|
||||
}
|
||||
}
|
||||
|
||||
/// Generate the `debug_context` in an MIR Body.
|
||||
|
@ -1574,6 +1574,7 @@ impl<'a, 'll, 'tcx> Builder<'a, 'll, 'tcx> {
|
||||
cfi::typeid_for_fnabi(self.tcx, fn_abi, options)
|
||||
};
|
||||
let typeid_metadata = self.cx.typeid_metadata(typeid).unwrap();
|
||||
let dbg_loc = self.get_dbg_loc();
|
||||
|
||||
// Test whether the function pointer is associated with the type identifier.
|
||||
let cond = self.type_test(llfn, typeid_metadata);
|
||||
@ -1582,10 +1583,16 @@ impl<'a, 'll, 'tcx> Builder<'a, 'll, 'tcx> {
|
||||
self.cond_br(cond, bb_pass, bb_fail);
|
||||
|
||||
self.switch_to_block(bb_fail);
|
||||
if let Some(dbg_loc) = dbg_loc {
|
||||
self.set_dbg_loc(dbg_loc);
|
||||
}
|
||||
self.abort();
|
||||
self.unreachable();
|
||||
|
||||
self.switch_to_block(bb_pass);
|
||||
if let Some(dbg_loc) = dbg_loc {
|
||||
self.set_dbg_loc(dbg_loc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -206,6 +206,10 @@ impl<'ll> DebugInfoBuilderMethods for Builder<'_, 'll, '_> {
|
||||
}
|
||||
}
|
||||
|
||||
fn get_dbg_loc(&self) -> Option<&'ll DILocation> {
|
||||
unsafe { llvm::LLVMGetCurrentDebugLocation2(self.llbuilder) }
|
||||
}
|
||||
|
||||
fn insert_reference_to_gdb_debug_scripts_section_global(&mut self) {
|
||||
gdb::insert_reference_to_gdb_debug_scripts_section_global(self)
|
||||
}
|
||||
|
@ -1063,6 +1063,7 @@ unsafe extern "C" {
|
||||
|
||||
// Metadata
|
||||
pub fn LLVMSetCurrentDebugLocation2<'a>(Builder: &Builder<'a>, Loc: *const Metadata);
|
||||
pub fn LLVMGetCurrentDebugLocation2<'a>(Builder: &Builder<'a>) -> Option<&'a Metadata>;
|
||||
|
||||
// Terminators
|
||||
pub fn LLVMBuildRetVoid<'a>(B: &Builder<'a>) -> &'a Value;
|
||||
|
@ -81,6 +81,7 @@ pub trait DebugInfoBuilderMethods: BackendTypes {
|
||||
);
|
||||
fn set_dbg_loc(&mut self, dbg_loc: Self::DILocation);
|
||||
fn clear_dbg_loc(&mut self);
|
||||
fn get_dbg_loc(&self) -> Option<Self::DILocation>;
|
||||
fn insert_reference_to_gdb_debug_scripts_section_global(&mut self);
|
||||
fn set_var_name(&mut self, value: Self::Value, name: &str);
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
use crate::abi::Endian;
|
||||
use crate::spec::{Target, TargetOptions, base};
|
||||
use crate::spec::{LinkSelfContainedDefault, Target, TargetOptions, base};
|
||||
|
||||
pub(crate) fn target() -> Target {
|
||||
let mut base = base::linux_gnu::opts();
|
||||
@ -17,6 +17,13 @@ pub(crate) fn target() -> Target {
|
||||
pointer_width: 32,
|
||||
data_layout: "E-m:e-p:32:16:32-i8:8:8-i16:16:16-i32:16:32-n8:16:32-a:0:16-S16".into(),
|
||||
arch: "m68k".into(),
|
||||
options: TargetOptions { endian: Endian::Big, mcount: "_mcount".into(), ..base },
|
||||
options: TargetOptions {
|
||||
endian: Endian::Big,
|
||||
mcount: "_mcount".into(),
|
||||
|
||||
// LLD currently does not have support for M68k
|
||||
link_self_contained: LinkSelfContainedDefault::False,
|
||||
..base
|
||||
},
|
||||
}
|
||||
}
|
||||
|
@ -775,13 +775,12 @@ impl char {
|
||||
/// In a const context:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(const_unicode_case_lookup)]
|
||||
/// const CAPITAL_DELTA_IS_LOWERCASE: bool = 'Δ'.is_lowercase();
|
||||
/// assert!(!CAPITAL_DELTA_IS_LOWERCASE);
|
||||
/// ```
|
||||
#[must_use]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_unstable(feature = "const_unicode_case_lookup", issue = "101400")]
|
||||
#[rustc_const_stable(feature = "const_unicode_case_lookup", since = "1.84.0")]
|
||||
#[inline]
|
||||
pub const fn is_lowercase(self) -> bool {
|
||||
match self {
|
||||
@ -817,13 +816,12 @@ impl char {
|
||||
/// In a const context:
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(const_unicode_case_lookup)]
|
||||
/// const CAPITAL_DELTA_IS_UPPERCASE: bool = 'Δ'.is_uppercase();
|
||||
/// assert!(CAPITAL_DELTA_IS_UPPERCASE);
|
||||
/// ```
|
||||
#[must_use]
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_unstable(feature = "const_unicode_case_lookup", issue = "101400")]
|
||||
#[rustc_const_stable(feature = "const_unicode_case_lookup", since = "1.84.0")]
|
||||
#[inline]
|
||||
pub const fn is_uppercase(self) -> bool {
|
||||
match self {
|
||||
|
@ -120,7 +120,6 @@
|
||||
#![feature(const_float_methods)]
|
||||
#![feature(const_heap)]
|
||||
#![feature(const_nonnull_new)]
|
||||
#![feature(const_option_ext)]
|
||||
#![feature(const_pin_2)]
|
||||
#![feature(const_ptr_is_null)]
|
||||
#![feature(const_ptr_sub_ptr)]
|
||||
@ -134,7 +133,6 @@
|
||||
#![feature(const_type_name)]
|
||||
#![feature(const_typed_swap)]
|
||||
#![feature(const_ub_checks)]
|
||||
#![feature(const_unicode_case_lookup)]
|
||||
#![feature(core_intrinsics)]
|
||||
#![feature(coverage_attribute)]
|
||||
#![feature(do_not_recommend)]
|
||||
|
@ -528,7 +528,7 @@ impl isize {
|
||||
midpoint_impl! { isize, signed }
|
||||
}
|
||||
|
||||
/// If the 6th bit is set ascii is lower case.
|
||||
/// If the bit selected by this mask is set, ascii is lower case.
|
||||
const ASCII_CASE_MASK: u8 = 0b0010_0000;
|
||||
|
||||
impl u8 {
|
||||
|
@ -1233,7 +1233,7 @@ macro_rules! nonzero_integer_signedness_dependent_impls {
|
||||
#[doc = concat!("let three = NonZero::new(3", stringify!($Int), ").unwrap();")]
|
||||
/// assert_eq!(three.div_ceil(two), two);
|
||||
/// ```
|
||||
#[unstable(feature = "unsigned_nonzero_div_ceil", issue = "none")]
|
||||
#[unstable(feature = "unsigned_nonzero_div_ceil", issue = "132968")]
|
||||
#[must_use = "this returns the result of the operation, \
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
|
@ -738,7 +738,7 @@ impl<T> Option<T> {
|
||||
#[inline]
|
||||
#[must_use]
|
||||
#[stable(feature = "pin", since = "1.33.0")]
|
||||
#[rustc_const_unstable(feature = "const_option_ext", issue = "91930")]
|
||||
#[rustc_const_stable(feature = "const_option_ext", since = "CURRENT_RUSTC_VERSION")]
|
||||
pub const fn as_pin_ref(self: Pin<&Self>) -> Option<Pin<&T>> {
|
||||
// FIXME(const-hack): use `map` once that is possible
|
||||
match Pin::get_ref(self).as_ref() {
|
||||
@ -755,7 +755,7 @@ impl<T> Option<T> {
|
||||
#[inline]
|
||||
#[must_use]
|
||||
#[stable(feature = "pin", since = "1.33.0")]
|
||||
#[rustc_const_unstable(feature = "const_option_ext", issue = "91930")]
|
||||
#[rustc_const_stable(feature = "const_option_ext", since = "CURRENT_RUSTC_VERSION")]
|
||||
pub const fn as_pin_mut(self: Pin<&mut Self>) -> Option<Pin<&mut T>> {
|
||||
// SAFETY: `get_unchecked_mut` is never used to move the `Option` inside `self`.
|
||||
// `x` is guaranteed to be pinned because it comes from `self` which is pinned.
|
||||
@ -802,7 +802,7 @@ impl<T> Option<T> {
|
||||
#[inline]
|
||||
#[must_use]
|
||||
#[stable(feature = "option_as_slice", since = "1.75.0")]
|
||||
#[rustc_const_unstable(feature = "const_option_ext", issue = "91930")]
|
||||
#[rustc_const_stable(feature = "const_option_ext", since = "CURRENT_RUSTC_VERSION")]
|
||||
pub const fn as_slice(&self) -> &[T] {
|
||||
// SAFETY: When the `Option` is `Some`, we're using the actual pointer
|
||||
// to the payload, with a length of 1, so this is equivalent to
|
||||
@ -857,7 +857,7 @@ impl<T> Option<T> {
|
||||
#[inline]
|
||||
#[must_use]
|
||||
#[stable(feature = "option_as_slice", since = "1.75.0")]
|
||||
#[rustc_const_unstable(feature = "const_option_ext", issue = "91930")]
|
||||
#[rustc_const_stable(feature = "const_option_ext", since = "CURRENT_RUSTC_VERSION")]
|
||||
pub const fn as_mut_slice(&mut self) -> &mut [T] {
|
||||
// SAFETY: When the `Option` is `Some`, we're using the actual pointer
|
||||
// to the payload, with a length of 1, so this is equivalent to
|
||||
|
@ -1,6 +1,7 @@
|
||||
///! This file is generated by `./x run src/tools/unicode-table-generator`; do not edit manually!
|
||||
|
||||
#[inline(always)]
|
||||
#[cfg_attr(bootstrap, rustc_const_stable(feature = "const_unicode_case_lookup", since = "1.84.0"))]
|
||||
const fn bitset_search<
|
||||
const N: usize,
|
||||
const CHUNK_SIZE: usize,
|
||||
@ -423,6 +424,7 @@ pub mod lowercase {
|
||||
(5, 187), (6, 78), (7, 132),
|
||||
];
|
||||
|
||||
#[cfg_attr(bootstrap, rustc_const_stable(feature = "const_unicode_case_lookup", since = "1.84.0"))]
|
||||
pub const fn lookup(c: char) -> bool {
|
||||
super::bitset_search(
|
||||
c as u32,
|
||||
@ -547,6 +549,7 @@ pub mod uppercase {
|
||||
(2, 146), (2, 20), (3, 146), (3, 140), (3, 134), (4, 178), (4, 171),
|
||||
];
|
||||
|
||||
#[cfg_attr(bootstrap, rustc_const_stable(feature = "const_unicode_case_lookup", since = "1.84.0"))]
|
||||
pub const fn lookup(c: char) -> bool {
|
||||
super::bitset_search(
|
||||
c as u32,
|
||||
|
@ -21,7 +21,6 @@
|
||||
#![feature(const_eval_select)]
|
||||
#![feature(const_heap)]
|
||||
#![feature(const_nonnull_new)]
|
||||
#![feature(const_option_ext)]
|
||||
#![feature(const_pin_2)]
|
||||
#![feature(const_trait_impl)]
|
||||
#![feature(core_intrinsics)]
|
||||
|
@ -1,4 +1,5 @@
|
||||
#[inline(always)]
|
||||
#[cfg_attr(bootstrap, rustc_const_stable(feature = "const_unicode_case_lookup", since = "1.84.0"))]
|
||||
const fn bitset_search<
|
||||
const N: usize,
|
||||
const CHUNK_SIZE: usize,
|
||||
|
@ -97,6 +97,10 @@ impl RawEmitter {
|
||||
|
||||
self.blank_line();
|
||||
|
||||
writeln!(
|
||||
&mut self.file,
|
||||
r#"#[cfg_attr(bootstrap, rustc_const_stable(feature = "const_unicode_case_lookup", since = "1.84.0"))]"#
|
||||
).unwrap();
|
||||
writeln!(&mut self.file, "pub const fn lookup(c: char) -> bool {{").unwrap();
|
||||
if first_code_point > 0x7f {
|
||||
writeln!(&mut self.file, " (c as u32) >= {first_code_point:#04x} &&").unwrap();
|
||||
|
19
tests/codegen/sanitizer/cfi/dbg-location-on-cfi-blocks.rs
Normal file
19
tests/codegen/sanitizer/cfi/dbg-location-on-cfi-blocks.rs
Normal file
@ -0,0 +1,19 @@
|
||||
// Verifies that the parent block's debug information are assigned to the inserted cfi block.
|
||||
//
|
||||
//@ needs-sanitizer-cfi
|
||||
//@ compile-flags: -Clto -Cno-prepopulate-passes -Copt-level=0 -Zsanitizer=cfi -Ctarget-feature=-crt-static -Cdebuginfo=1
|
||||
|
||||
#![crate_type = "lib"]
|
||||
|
||||
pub fn foo(f: fn(i32) -> i32, arg: i32) -> i32 {
|
||||
// CHECK-LABEL: define{{.*}}foo{{.*}}!dbg !{{[0-9]+}} !type !{{[0-9]+}} !type !{{[0-9]+}} !type !{{[0-9]+}} !type !{{[0-9]+}}
|
||||
// CHECK: start:
|
||||
// CHECK: [[TT:%.+]] = call i1 @llvm.type.test(ptr {{%f|%0}}, metadata !"{{[[:print:]]+}}"), !dbg !{{[0-9]+}}
|
||||
// CHECK-NEXT: br i1 [[TT]], label %type_test.pass, label %type_test.fail, !dbg !{{[0-9]+}}
|
||||
// CHECK: type_test.pass: ; preds = %start
|
||||
// CHECK-NEXT: {{%.+}} = call i32 %f(i32{{.*}} %arg), !dbg !{{[0-9]+}}
|
||||
// CHECK: type_test.fail: ; preds = %start
|
||||
// CHECK-NEXT: call void @llvm.trap(), !dbg !{{[0-9]+}}
|
||||
// CHECK-NEXT: unreachable, !dbg !{{[0-9]+}}
|
||||
f(arg)
|
||||
}
|
@ -1032,6 +1032,11 @@ docs = [
|
||||
"@ehuss",
|
||||
"@GuillaumeGomez",
|
||||
]
|
||||
|
||||
codegen = [
|
||||
"@saethlin",
|
||||
"@workingjubilee",
|
||||
]
|
||||
query-system = [
|
||||
"@cjgillot",
|
||||
]
|
||||
@ -1127,6 +1132,7 @@ project-exploit-mitigations = [
|
||||
"/Cargo.lock" = ["@Mark-Simulacrum"]
|
||||
"/Cargo.toml" = ["@Mark-Simulacrum"]
|
||||
"/compiler" = ["compiler"]
|
||||
"/compiler/rustc_abi" = ["compiler", "codegen"]
|
||||
"/compiler/rustc_arena" = ["compiler", "arena"]
|
||||
"/compiler/rustc_ast" = ["compiler", "parser"]
|
||||
"/compiler/rustc_ast_lowering" = ["compiler", "ast_lowering"]
|
||||
@ -1137,7 +1143,7 @@ project-exploit-mitigations = [
|
||||
"/compiler/rustc_lexer" = ["compiler", "lexer"]
|
||||
"/compiler/rustc_llvm" = ["@cuviper"]
|
||||
"/compiler/rustc_codegen_llvm/src/debuginfo" = ["compiler", "debuginfo"]
|
||||
"/compiler/rustc_codegen_ssa" = ["compiler", "@saethlin"]
|
||||
"/compiler/rustc_codegen_ssa" = ["compiler", "codegen"]
|
||||
"/compiler/rustc_middle/src/mir" = ["compiler", "mir"]
|
||||
"/compiler/rustc_middle/src/traits" = ["compiler", "types"]
|
||||
"/compiler/rustc_middle/src/ty" = ["compiler", "types"]
|
||||
|
Loading…
Reference in New Issue
Block a user