mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-28 09:44:08 +00:00
Auto merge of #15105 - dfireBird:fix-15096, r=HKalbasi
Change comparsion for checking if number is negative to include 128 The last byte in Little-Endian representation of negative integers start at 128 (Ox80) till 255 (OxFF). The comparison before the fix didn't check for 128 which made is_negative variable as false. Potentially fixes #15096
This commit is contained in:
commit
6c73f67998
@ -2018,6 +2018,57 @@ fn consts() {
|
|||||||
"#,
|
"#,
|
||||||
6,
|
6,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
check_number(
|
||||||
|
r#"
|
||||||
|
const F1: i32 = 2147483647;
|
||||||
|
const F2: i32 = F1 - 25;
|
||||||
|
const GOAL: i32 = F2;
|
||||||
|
"#,
|
||||||
|
2147483622,
|
||||||
|
);
|
||||||
|
|
||||||
|
check_number(
|
||||||
|
r#"
|
||||||
|
const F1: i32 = -2147483648;
|
||||||
|
const F2: i32 = F1 + 18;
|
||||||
|
const GOAL: i32 = F2;
|
||||||
|
"#,
|
||||||
|
-2147483630,
|
||||||
|
);
|
||||||
|
|
||||||
|
check_number(
|
||||||
|
r#"
|
||||||
|
const F1: i32 = 10;
|
||||||
|
const F2: i32 = F1 - 20;
|
||||||
|
const GOAL: i32 = F2;
|
||||||
|
"#,
|
||||||
|
-10,
|
||||||
|
);
|
||||||
|
|
||||||
|
check_number(
|
||||||
|
r#"
|
||||||
|
const F1: i32 = 25;
|
||||||
|
const F2: i32 = F1 - 25;
|
||||||
|
const GOAL: i32 = F2;
|
||||||
|
"#,
|
||||||
|
0,
|
||||||
|
);
|
||||||
|
|
||||||
|
check_number(
|
||||||
|
r#"
|
||||||
|
const A: i32 = -2147483648;
|
||||||
|
const GOAL: bool = A > 0;
|
||||||
|
"#,
|
||||||
|
0,
|
||||||
|
);
|
||||||
|
|
||||||
|
check_number(
|
||||||
|
r#"
|
||||||
|
const GOAL: i64 = (-2147483648_i32) as i64;
|
||||||
|
"#,
|
||||||
|
-2147483648,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -2122,7 +2122,7 @@ impl Evaluator<'_> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn pad16(x: &[u8], is_signed: bool) -> [u8; 16] {
|
pub fn pad16(x: &[u8], is_signed: bool) -> [u8; 16] {
|
||||||
let is_negative = is_signed && x.last().unwrap_or(&0) > &128;
|
let is_negative = is_signed && x.last().unwrap_or(&0) > &127;
|
||||||
let fill_with = if is_negative { 255 } else { 0 };
|
let fill_with = if is_negative { 255 } else { 0 };
|
||||||
x.iter()
|
x.iter()
|
||||||
.copied()
|
.copied()
|
||||||
|
@ -779,6 +779,39 @@ const foo$0: u32 = {
|
|||||||
```
|
```
|
||||||
"#]],
|
"#]],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
check(
|
||||||
|
r#"const FOO$0: i32 = -2147483648;"#,
|
||||||
|
expect![[r#"
|
||||||
|
*FOO*
|
||||||
|
|
||||||
|
```rust
|
||||||
|
test
|
||||||
|
```
|
||||||
|
|
||||||
|
```rust
|
||||||
|
const FOO: i32 = -2147483648 (0x80000000)
|
||||||
|
```
|
||||||
|
"#]],
|
||||||
|
);
|
||||||
|
|
||||||
|
check(
|
||||||
|
r#"
|
||||||
|
const FOO: i32 = -2147483648;
|
||||||
|
const BAR$0: bool = FOO > 0;
|
||||||
|
"#,
|
||||||
|
expect![[r#"
|
||||||
|
*BAR*
|
||||||
|
|
||||||
|
```rust
|
||||||
|
test
|
||||||
|
```
|
||||||
|
|
||||||
|
```rust
|
||||||
|
const BAR: bool = false
|
||||||
|
```
|
||||||
|
"#]],
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
Loading…
Reference in New Issue
Block a user