Merge pull request #6819 from roc-lang/rust-1-77-2-upgrade

Rust 1.77.2 upgrade
This commit is contained in:
Anton-4 2024-07-06 03:23:54 +02:00 committed by GitHub
commit 1bcf30391b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
22 changed files with 74 additions and 77 deletions

View File

@ -30,7 +30,7 @@ jobs:
run: cargo run --locked --release format --check crates/compiler/builtins/roc
- name: ensure there are no unused dependencies
run: cargo +nightly-2023-12-21 udeps --all-targets
run: cargo +nightly-2024-02-03 udeps --all-targets
- name: zig wasm tests
run: cd crates/compiler/builtins/bitcode && ./run-wasm-tests.sh

View File

@ -29,8 +29,8 @@ jobs:
- name: zig version
run: zig version
- name: install rust nightly 1.76.0
run: rustup install nightly-2023-12-21
- name: install rust nightly 1.77.0
run: rustup install nightly-2024-02-03
- name: set up llvm 16
run: |

View File

@ -37,8 +37,8 @@ jobs:
cd crates\compiler\builtins\bitcode\
zig build test
- name: install rust nightly 1.76.0
run: rustup install nightly-2023-12-21
- name: install rust nightly 1.77.0
run: rustup install nightly-2024-02-03
- name: set up llvm 16
run: |

View File

@ -1,6 +1,6 @@
VERSION 0.6
FROM rust:1.76.0-slim-buster # make sure to update rust-toolchain.toml too so that everything uses the same rust version
FROM rust:1.77.2-slim-buster # make sure to update rust-toolchain.toml too so that everything uses the same rust version
WORKDIR /earthbuild
prep-debian:

View File

@ -1157,6 +1157,11 @@ unsafe fn roc_run_native_fast(
enum ExecutableFile {
#[cfg(target_os = "linux")]
MemFd(libc::c_int, PathBuf),
// We store the TempDir in the onDisk variant alongside the path to the executable,
// so that the TempDir doesn't get dropped until after we're done with the path.
// If we didn't do that, then the tempdir would potentially get deleted by the
// TempDir's Drop impl before the file had been executed.
#[allow(dead_code)]
#[cfg(not(target_os = "linux"))]
OnDisk(TempDir, PathBuf),
}
@ -1322,6 +1327,7 @@ fn roc_run_executable_file_path(binary_bytes: &[u8]) -> std::io::Result<Executab
let mut file = OpenOptions::new()
.create(true)
.write(true)
.truncate(true)
.mode(0o777) // create the file as executable
.open(&app_path_buf)?;

View File

@ -351,6 +351,7 @@ struct ValgrindOutput {
#[derive(Deserialize, Debug)]
#[serde(rename_all = "lowercase")]
#[allow(dead_code)] // Some fields are unused but this allows for easy deserialization of the xml.
enum ValgrindField {
ProtocolVersion(isize),
ProtocolTool(String),

View File

@ -540,7 +540,7 @@ pub fn rebuild_host(
// on windows, we need the nightly toolchain so we can use `-Z export-executable-symbols`
// using `+nightly` only works when running cargo through rustup
let mut cmd = rustup();
cmd.args(["run", "nightly-2023-12-21", "cargo"]);
cmd.args(["run", "nightly-2024-02-03", "cargo"]);
cmd
} else {

View File

@ -22,7 +22,6 @@ use std::ffi::OsStr;
use std::ops::Deref;
use std::{
path::{Path, PathBuf},
thread::JoinHandle,
time::{Duration, Instant},
};
@ -915,11 +914,6 @@ fn build_loaded_file<'a>(
let problems = report_problems_monomorphized(&mut loaded);
let loaded = loaded;
enum HostRebuildTiming {
BeforeApp(u128),
ConcurrentWithApp(JoinHandle<u128>),
}
let opt_rebuild_timing = if let Some(rebuild_thread) = rebuild_thread {
if linking_strategy == LinkingStrategy::Additive {
let rebuild_duration = rebuild_thread
@ -930,9 +924,9 @@ fn build_loaded_file<'a>(
println!("Finished rebuilding the platform in {rebuild_duration} ms\n");
}
Some(HostRebuildTiming::BeforeApp(rebuild_duration))
None
} else {
Some(HostRebuildTiming::ConcurrentWithApp(rebuild_thread))
Some(rebuild_thread)
}
} else {
None
@ -977,7 +971,7 @@ fn build_loaded_file<'a>(
);
}
if let Some(HostRebuildTiming::ConcurrentWithApp(thread)) = opt_rebuild_timing {
if let Some(thread) = opt_rebuild_timing {
let rebuild_duration = thread.join().expect("Failed to (re)build platform.");
if emit_timings && !is_platform_prebuilt {

View File

@ -150,11 +150,7 @@ impl ExpectsOrDbgs {
#[derive(Debug, Clone)]
enum PendingValueDef<'a> {
/// A standalone annotation with no body
AnnotationOnly(
&'a Loc<ast::Pattern<'a>>,
Loc<Pattern>,
&'a Loc<ast::TypeAnnotation<'a>>,
),
AnnotationOnly(Loc<Pattern>, &'a Loc<ast::TypeAnnotation<'a>>),
/// A body with no type annotation
Body(Loc<Pattern>, &'a Loc<ast::Expr<'a>>),
/// A body with a type annotation
@ -175,7 +171,7 @@ enum PendingValueDef<'a> {
impl PendingValueDef<'_> {
fn loc_pattern(&self) -> &Loc<Pattern> {
match self {
PendingValueDef::AnnotationOnly(_, loc_pattern, _) => loc_pattern,
PendingValueDef::AnnotationOnly(loc_pattern, _) => loc_pattern,
PendingValueDef::Body(loc_pattern, _) => loc_pattern,
PendingValueDef::TypedBody(_, loc_pattern, _, _) => loc_pattern,
PendingValueDef::IngestedFile(loc_pattern, _, _) => loc_pattern,
@ -2208,7 +2204,7 @@ fn canonicalize_pending_value_def<'a>(
let pending_abilities_in_scope = &Default::default();
let output = match pending_def {
AnnotationOnly(_, loc_can_pattern, loc_ann) => {
AnnotationOnly(loc_can_pattern, loc_ann) => {
// Make types for the body expr, even if we won't end up having a body.
let expr_var = var_store.fresh();
let mut vars_by_symbol = SendMap::default();
@ -2950,7 +2946,6 @@ fn to_pending_value_def<'a>(
);
PendingValue::Def(PendingValueDef::AnnotationOnly(
loc_pattern,
loc_can_pattern,
loc_ann,
))

View File

@ -12,7 +12,7 @@ use std::cell::Cell;
thread_local! {
// we use a thread_local here so that tests consistently give the same pattern
static SUFFIXED_ANSWER_COUNTER: Cell<usize> = Cell::new(0);
static SUFFIXED_ANSWER_COUNTER: Cell<usize> = const { Cell::new(0) };
}
/// Provide an intermediate answer expression and pattern when unwrapping a

View File

@ -131,6 +131,8 @@ enum PatternBindingIter<'r, 'a> {
enum PatternBindingWork<'r, 'a> {
Pat(&'r Pattern<'a>),
#[allow(dead_code)]
// Field will be used once todo is immplemented in next in impl<'r, 'a> Iterator for PatternBindingIter
RecordDestruct(&'r DestructType<'a>),
}

View File

@ -960,13 +960,13 @@ fn write_integer<'a>(
}
}
enum ExtContent<'a> {
enum ExtContent {
Empty,
Content(Variable, &'a Content),
Content(Variable),
}
impl<'a> ExtContent<'a> {
fn for_tag(subs: &'a Subs, ext: Variable, pol: Polarity, debug_flags: &DebugPrint) -> Self {
impl ExtContent {
fn for_tag(subs: &Subs, ext: Variable, pol: Polarity, debug_flags: &DebugPrint) -> Self {
let content = subs.get_content_without_compacting(ext);
match content {
Content::Structure(FlatType::EmptyTagUnion) => ExtContent::Empty,
@ -983,7 +983,7 @@ impl<'a> ExtContent<'a> {
Content::FlexVar(_)
| Content::FlexAbleVar(..)
| Content::RigidVar(_)
| Content::RigidAbleVar(..) => ExtContent::Content(ext, content),
| Content::RigidAbleVar(..) => ExtContent::Content(ext),
other => unreachable!("something weird ended up in an ext var: {:?}", other),
}
@ -995,11 +995,11 @@ fn write_ext_content<'a>(
ctx: &mut Context<'a>,
subs: &'a Subs,
buf: &mut String,
ext_content: ExtContent<'a>,
ext_content: ExtContent,
parens: Parens,
pol: Polarity,
) {
if let ExtContent::Content(var, _) = ext_content {
if let ExtContent::Content(var) = ext_content {
// This is an open record or tag union, so print the variable
// right after the '}' or ']'
//
@ -1050,7 +1050,7 @@ fn write_sorted_tags<'a>(
tags: &MutMap<TagName, Vec<Variable>>,
ext_var: Variable,
pol: Polarity,
) -> ExtContent<'a> {
) -> ExtContent {
// Sort the fields so they always end up in the same order.
let mut sorted_fields = Vec::with_capacity(tags.len());

View File

@ -2533,6 +2533,8 @@ enum Rec {
None,
Left(Variable),
Right(Variable),
#[allow(dead_code)]
// dead_code because of https://github.com/roc-lang/roc/pull/6819/files#r1655317562
Both(Variable, Variable),
}

View File

@ -67,7 +67,7 @@ mod glue_cli_run {
let test_name_str = stringify!($test_name);
// TODO after #5924 is fixed; remove this
let skip_on_linux_surgical_linker = ["closures", "option", "nullable_wrapped", "enumeration", "nested_record"];
let skip_on_linux_surgical_linker = ["closures", "option", "nullable_wrapped", "enumeration", "nested_record", "advanced_recursive_union"];
// Validate linux with the default linker.
if !(cfg!(target_os = "linux") && (skip_on_linux_surgical_linker.contains(&test_name_str))) {

View File

@ -559,6 +559,7 @@ pub(crate) fn open_mmap_mut(path: &Path, length: usize) -> MmapMut {
.read(true)
.write(true)
.create(true)
.truncate(false)
.open(path)
.unwrap_or_else(|e| internal_error!("failed to create or open file {path:?}: {e}"));
out_file

View File

@ -1698,7 +1698,11 @@ fn to_bad_ident_pattern_report<'b>(
enum BadIdentNext<'a> {
LowercaseAccess(u32),
UppercaseAccess(u32),
#[allow(dead_code)]
// The field u32 will be used once todo is implemented in to_bad_ident_expr_report
NumberAccess(u32),
#[allow(dead_code)]
// The field str will be used once todo is implemented in to_bad_ident_expr_report
Keyword(&'a str),
DanglingDot,
Other(Option<char>),

View File

@ -154,7 +154,7 @@ fn to_syntax_report<'a>(
#[allow(clippy::enum_variant_names)]
enum Context {
InNode(Node, Position, Box<Context>),
InNode(Node, Position),
InDef(Position),
InDefFinalExpr(Position),
}
@ -185,16 +185,14 @@ fn to_expr_report<'a>(
use roc_parse::parser::EExpr;
let severity = Severity::RuntimeError;
match parse_problem {
EExpr::If(if_, pos) => to_if_report(alloc, lines, filename, context, if_, *pos),
EExpr::When(when, pos) => to_when_report(alloc, lines, filename, context, when, *pos),
EExpr::If(if_, pos) => to_if_report(alloc, lines, filename, if_, *pos),
EExpr::When(when, pos) => to_when_report(alloc, lines, filename, when, *pos),
EExpr::Closure(lambda, pos) => {
to_lambda_report(alloc, lines, filename, context, lambda, *pos)
}
EExpr::List(list, pos) => to_list_report(alloc, lines, filename, context, list, *pos),
EExpr::Str(string, pos) => to_str_report(alloc, lines, filename, context, string, *pos),
EExpr::InParens(expr, pos) => {
to_expr_in_parens_report(alloc, lines, filename, context, expr, *pos)
}
EExpr::List(list, pos) => to_list_report(alloc, lines, filename, list, *pos),
EExpr::Str(string, pos) => to_str_report(alloc, lines, filename, string, *pos),
EExpr::InParens(expr, pos) => to_expr_in_parens_report(alloc, lines, filename, expr, *pos),
EExpr::Type(tipe, pos) => to_type_report(alloc, lines, filename, tipe, *pos),
EExpr::ElmStyleFunction(region, pos) => {
let surroundings = Region::new(start, *pos);
@ -252,7 +250,7 @@ fn to_expr_report<'a>(
.indent(4),
])],
"->" => match context {
Context::InNode(Node::WhenBranch, _pos, _) => {
Context::InNode(Node::WhenBranch, _pos) => {
return to_unexpected_arrow_report(alloc, lines, filename, *pos, start);
}
@ -392,7 +390,7 @@ fn to_expr_report<'a>(
};
let (context_pos, a_thing) = match context {
Context::InNode(node, pos, _) => match node {
Context::InNode(node, pos) => match node {
Node::WhenCondition | Node::WhenBranch | Node::WhenIfGuard => (
pos,
alloc.concat([
@ -603,7 +601,7 @@ fn to_expr_report<'a>(
alloc.region_with_subregion(lines.convert_region(surroundings), region, severity);
let doc = match context {
Context::InNode(Node::Dbg, _, _) => alloc.stack([
Context::InNode(Node::Dbg, _) => alloc.stack([
alloc.reflow(
r"I am partway through parsing a dbg statement, but I got stuck here:",
),
@ -616,7 +614,7 @@ fn to_expr_report<'a>(
]),
]),
]),
Context::InNode(Node::Expect, _, _) => alloc.stack([
Context::InNode(Node::Expect, _) => alloc.stack([
alloc.reflow(
r"I am partway through parsing an expect statement, but I got stuck here:",
),
@ -964,7 +962,6 @@ fn to_str_report<'a>(
alloc: &'a RocDocAllocator<'a>,
lines: &LineInfo,
filename: PathBuf,
context: Context,
parse_problem: &roc_parse::parser::EString<'a>,
start: Position,
) -> Report<'a> {
@ -977,7 +974,7 @@ fn to_str_report<'a>(
alloc,
lines,
filename,
Context::InNode(Node::StringFormat, start, Box::new(context)),
Context::InNode(Node::StringFormat, start),
expr,
pos,
),
@ -1260,7 +1257,6 @@ fn to_expr_in_parens_report<'a>(
alloc: &'a RocDocAllocator<'a>,
lines: &LineInfo,
filename: PathBuf,
context: Context,
parse_problem: &roc_parse::parser::EInParens<'a>,
start: Position,
) -> Report<'a> {
@ -1273,7 +1269,7 @@ fn to_expr_in_parens_report<'a>(
alloc,
lines,
filename,
Context::InNode(Node::InsideParens, start, Box::new(context)),
Context::InNode(Node::InsideParens, start),
expr,
pos,
),
@ -1353,7 +1349,6 @@ fn to_list_report<'a>(
alloc: &'a RocDocAllocator<'a>,
lines: &LineInfo,
filename: PathBuf,
context: Context,
parse_problem: &roc_parse::parser::EList<'a>,
start: Position,
) -> Report<'a> {
@ -1367,7 +1362,7 @@ fn to_list_report<'a>(
alloc,
lines,
filename,
Context::InNode(Node::ListElement, start, Box::new(context)),
Context::InNode(Node::ListElement, start),
expr,
pos,
),
@ -1465,7 +1460,7 @@ fn to_dbg_or_expect_report<'a>(
to_expr_report(alloc, lines, filename, context, e_expr, *condition_start)
}
roc_parse::parser::EExpect::Continuation(e_expr, continuation_start) => {
let context = Context::InNode(node, start, Box::new(context));
let context = Context::InNode(node, start);
to_expr_report(alloc, lines, filename, context, e_expr, *continuation_start)
}
@ -1710,7 +1705,6 @@ fn to_if_report<'a>(
alloc: &'a RocDocAllocator<'a>,
lines: &LineInfo,
filename: PathBuf,
context: Context,
parse_problem: &roc_parse::parser::EIf<'a>,
start: Position,
) -> Report<'a> {
@ -1723,7 +1717,7 @@ fn to_if_report<'a>(
alloc,
lines,
filename,
Context::InNode(Node::IfCondition, start, Box::new(context)),
Context::InNode(Node::IfCondition, start),
expr,
pos,
),
@ -1732,7 +1726,7 @@ fn to_if_report<'a>(
alloc,
lines,
filename,
Context::InNode(Node::IfThenBranch, start, Box::new(context)),
Context::InNode(Node::IfThenBranch, start),
expr,
pos,
),
@ -1741,7 +1735,7 @@ fn to_if_report<'a>(
alloc,
lines,
filename,
Context::InNode(Node::IfElseBranch, start, Box::new(context)),
Context::InNode(Node::IfElseBranch, start),
expr,
pos,
),
@ -1824,7 +1818,6 @@ fn to_when_report<'a>(
alloc: &'a RocDocAllocator<'a>,
lines: &LineInfo,
filename: PathBuf,
context: Context,
parse_problem: &roc_parse::parser::EWhen<'a>,
start: Position,
) -> Report<'a> {
@ -1861,7 +1854,7 @@ fn to_when_report<'a>(
alloc,
lines,
filename,
Context::InNode(Node::WhenIfGuard, start, Box::new(context)),
Context::InNode(Node::WhenIfGuard, start),
nested,
pos,
),
@ -1896,7 +1889,7 @@ fn to_when_report<'a>(
alloc,
lines,
filename,
Context::InNode(Node::WhenBranch, start, Box::new(context)),
Context::InNode(Node::WhenBranch, start),
expr,
pos,
),
@ -1905,7 +1898,7 @@ fn to_when_report<'a>(
alloc,
lines,
filename,
Context::InNode(Node::WhenCondition, start, Box::new(context)),
Context::InNode(Node::WhenCondition, start),
expr,
pos,
),
@ -2340,11 +2333,7 @@ fn to_precord_report<'a>(
alloc,
lines,
filename,
Context::InNode(
Node::RecordConditionalDefault,
start,
Box::new(Context::InDef(pos)),
),
Context::InNode(Node::RecordConditionalDefault, start),
expr,
pos,
),
@ -4491,6 +4480,7 @@ fn to_unfinished_ability_report<'a>(
enum Next<'a> {
Keyword(&'a str),
// Operator(&'a str),
#[allow(dead_code)]
Close(&'a str, char),
Token(&'a str),
Other(Option<char>),

View File

@ -20,9 +20,11 @@ pub enum Action {
#[derive(Debug, Clone, Copy)]
enum BlockType {
Loop(usize), // Loop block, with start address to loop back to
Normal, // Block created by `block` instruction
Locals(usize), // Special "block" for locals. Holds function index for debug
Loop(usize), // Loop block, with start address to loop back to
Normal, // Block created by `block` instruction
#[allow(dead_code)]
Locals(usize), // Special "block" for locals. Holds function index for debug
#[allow(dead_code)]
FunctionBody(usize), // Special block surrounding the function body. Holds function index for debug
}

View File

@ -1,5 +1,5 @@
[toolchain]
channel = "1.76.0"
channel = "1.77.2"
profile = "default"

View File

@ -1,5 +1,5 @@
[toolchain]
channel = "1.76.0"
channel = "1.77.2"
profile = "default"

View File

@ -92,11 +92,11 @@
]
},
"locked": {
"lastModified": 1712369449,
"narHash": "sha256-tbWug3uXPlSm1j0xD80Y3xbP+otT6gLnQo1e/vQat48=",
"lastModified": 1713150335,
"narHash": "sha256-Ic7zCPfiSYc9nFFp+E44WFk3TBJ99J/uPZ4QXX+uPPw=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "41b3b080cc3e4b3a48e933b87fc15a05f1870779",
"rev": "b186d85e747e2b7bee220ec95839fb66c868dc47",
"type": "github"
},
"original": {

View File

@ -5,16 +5,16 @@
# - update `channel = "RUST_VERSION"` in examples/glue/rust-platform/rust-toolchain.toml
# - update FROM rust:RUST_VERSION-slim-buster in Earthfile
# - to update the nightly version:
# - Find the latest nightly release that matches RUST_VERSION here: https://github.com/oxalica/rust-overlay/tree/master/manifests/nightly/2023
# - Find the latest nightly release that matches RUST_VERSION here: https://github.com/oxalica/rust-overlay/tree/master/manifests/nightly/2024
# - update `channel = "nightly-OLD_DATE"` below
# - update nightly-OLD_DATE in .github/workflows/ubuntu_x86_64.yml
# - update nightly-OLD_DATE in .github/workflows/windows_tests.yml
# - update nightly-OLD_DATE in .github/workflows/windows_release_build.yml
# - update nightly-OLD_DATE in crates/compiler/build/src/link.rs
channel = "1.76.0" # check ^^^ when changing this
channel = "1.77.2" # check ^^^ when changing this
#
# channel = "nightly-2023-12-21" # 1.76.0 nightly to be able to use unstable features
# channel = "nightly-2024-02-03" # 1.77.0 nightly to be able to use unstable features
profile = "default"
components = [
# for usages of rust-analyzer or similar tools inside `nix develop`