forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Auto merge of rust-lang#124564 - jieyouxu:rollup-kuf5wlq, r=jieyouxu
Rollup of 4 pull requests Successful merges: - rust-lang#124280 (Port repr128-dwarf run-make test to rmake) - rust-lang#124299 (Add test for issue 106269) - rust-lang#124553 (Write `git-commit-{sha,info}` for Cargo in source tarballs) - rust-lang#124561 (Add `normalize()` in run-make `Diff` type) r? `@ghost` `@rustbot` modify labels: rollup
- Loading branch information
Showing
12 changed files
with
164 additions
and
26 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
// Regression test for #106269 | ||
//@ assembly-output: emit-asm | ||
//@ compile-flags: --crate-type=lib -O -C llvm-args=-x86-asm-syntax=intel | ||
//@ only-x86_64 | ||
//@ ignore-sgx | ||
|
||
pub struct S { | ||
a: u8, | ||
b: u8, | ||
c: u8, | ||
d: u8, | ||
} | ||
|
||
// CHECK-LABEL: manual_eq: | ||
#[no_mangle] | ||
pub fn manual_eq(s1: &S, s2: &S) -> bool { | ||
// CHECK: mov [[REG:[a-z0-9]+]], dword ptr [{{[a-z0-9]+}}] | ||
// CHECK-NEXT: cmp [[REG]], dword ptr [{{[a-z0-9]+}}] | ||
// CHECK-NEXT: sete al | ||
// CHECK: ret | ||
s1.a == s2.a && s1.b == s2.b && s1.c == s2.c && s1.d == s2.d | ||
} |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
//@ ignore-windows | ||
// This test should be replaced with one in tests/debuginfo once GDB or LLDB support 128-bit enums. | ||
|
||
extern crate run_make_support; | ||
|
||
use gimli::{AttributeValue, Dwarf, EndianRcSlice, Reader, RunTimeEndian}; | ||
use object::{Object, ObjectSection}; | ||
use run_make_support::{gimli, object, rustc, tmp_dir}; | ||
use std::borrow::Cow; | ||
use std::collections::HashMap; | ||
use std::rc::Rc; | ||
|
||
fn main() { | ||
let output = tmp_dir().join("repr128"); | ||
rustc().input("main.rs").arg("-o").arg(&output).arg("-Cdebuginfo=2").run(); | ||
// Mach-O uses packed debug info | ||
let dsym_location = output | ||
.with_extension("dSYM") | ||
.join("Contents") | ||
.join("Resources") | ||
.join("DWARF") | ||
.join("repr128"); | ||
let output = | ||
std::fs::read(if dsym_location.try_exists().unwrap() { dsym_location } else { output }) | ||
.unwrap(); | ||
let obj = object::File::parse(output.as_slice()).unwrap(); | ||
let endian = if obj.is_little_endian() { RunTimeEndian::Little } else { RunTimeEndian::Big }; | ||
let dwarf = gimli::Dwarf::load(|section| -> Result<_, ()> { | ||
let data = obj.section_by_name(section.name()).map(|s| s.uncompressed_data().unwrap()); | ||
Ok(EndianRcSlice::new(Rc::from(data.unwrap_or_default().as_ref()), endian)) | ||
}) | ||
.unwrap(); | ||
let mut iter = dwarf.units(); | ||
let mut still_to_find = HashMap::from([ | ||
("U128A", 0_u128), | ||
("U128B", 1_u128), | ||
("U128C", u64::MAX as u128 + 1), | ||
("U128D", u128::MAX), | ||
("I128A", 0_i128 as u128), | ||
("I128B", (-1_i128) as u128), | ||
("I128C", i128::MIN as u128), | ||
("I128D", i128::MAX as u128), | ||
]); | ||
while let Some(header) = iter.next().unwrap() { | ||
let unit = dwarf.unit(header).unwrap(); | ||
let mut cursor = unit.entries(); | ||
while let Some((_, entry)) = cursor.next_dfs().unwrap() { | ||
if entry.tag() == gimli::constants::DW_TAG_enumerator { | ||
let name = dwarf | ||
.attr_string( | ||
&unit, | ||
entry.attr(gimli::constants::DW_AT_name).unwrap().unwrap().value(), | ||
) | ||
.unwrap(); | ||
let name = name.to_string().unwrap(); | ||
if let Some(expected) = still_to_find.remove(name.as_ref()) { | ||
match entry.attr(gimli::constants::DW_AT_const_value).unwrap().unwrap().value() | ||
{ | ||
AttributeValue::Block(value) => { | ||
assert_eq!( | ||
value.to_slice().unwrap(), | ||
expected.to_le_bytes().as_slice(), | ||
"{name}" | ||
); | ||
} | ||
value => panic!("{name}: unexpected DW_AT_const_value of {value:?}"), | ||
} | ||
} | ||
} | ||
} | ||
} | ||
if !still_to_find.is_empty() { | ||
panic!("Didn't find debug entries for {still_to_find:?}"); | ||
} | ||
} |